Imported Upstream version 4.9.3 upstream/4.9.3
authorTizenOpenSource <tizenopensrc@samsung.com>
Thu, 28 Dec 2023 09:11:23 +0000 (18:11 +0900)
committerTizenOpenSource <tizenopensrc@samsung.com>
Thu, 28 Dec 2023 09:11:23 +0000 (18:11 +0900)
128 files changed:
CHANGES.txt
MANIFEST.in
Makefile
PKG-INFO
README.rst
benchmark/bench_etree.py
benchmark/benchbase.py
buildlibxml.py
doc/api/conf.py
doc/html/FAQ.html
doc/html/api.html
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/_modules/xml/sax/handler.html
doc/html/apidoc/_static/_sphinx_javascript_frameworks_compat.js [new file with mode: 0644]
doc/html/apidoc/_static/basic.css
doc/html/apidoc/_static/css/badge_only.css
doc/html/apidoc/_static/css/theme.css
doc/html/apidoc/_static/doctools.js [new file with mode: 0644]
doc/html/apidoc/_static/documentation_options.js [new file with mode: 0644]
doc/html/apidoc/_static/file.png [new file with mode: 0644]
doc/html/apidoc/_static/jquery.js [new file with mode: 0644]
doc/html/apidoc/_static/js/badge_only.js [new file with mode: 0644]
doc/html/apidoc/_static/js/html5shiv-printshiv.min.js [new file with mode: 0644]
doc/html/apidoc/_static/js/html5shiv.min.js [new file with mode: 0644]
doc/html/apidoc/_static/js/theme.js [new file with mode: 0644]
doc/html/apidoc/_static/language_data.js [new file with mode: 0644]
doc/html/apidoc/_static/minus.png [new file with mode: 0644]
doc/html/apidoc/_static/plus.png [new file with mode: 0644]
doc/html/apidoc/_static/python-xml.png [new file with mode: 0644]
doc/html/apidoc/_static/searchtools.js [new file with mode: 0644]
doc/html/apidoc/_static/sphinx_highlight.js [new file with mode: 0644]
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/objects.inv [new file with mode: 0644]
doc/html/apidoc/py-modindex.html
doc/html/apidoc/search.html
doc/html/apidoc/searchindex.js [new file with mode: 0644]
doc/html/build.html
doc/html/capi.html
doc/html/changes-4.9.1.html [deleted file]
doc/html/changes-4.9.3.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/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/tutorial.html
doc/html/validation.html
doc/html/xpathxslt.html
doc/main.txt
doc/mklatex.py
doc/s5/lxml-ep2008.html
doc/update_performance_results.py
requirements.txt
setup.py
setupinfo.py
src/lxml.egg-info/PKG-INFO
src/lxml.egg-info/SOURCES.txt
src/lxml.egg-info/requires.txt
src/lxml/__init__.py
src/lxml/_elementpath.c
src/lxml/builder.c
src/lxml/cssselect.py
src/lxml/etree.c
src/lxml/etree.h
src/lxml/etree.pyx
src/lxml/etree_api.h
src/lxml/html/clean.c
src/lxml/html/clean.py
src/lxml/html/diff.c
src/lxml/html/tests/test_clean.py
src/lxml/html/tests/test_html5parser.py
src/lxml/includes/etree_defs.h
src/lxml/includes/lxml-version.h
src/lxml/includes/xmlparser.pxd
src/lxml/lxml.etree.h
src/lxml/lxml.etree_api.h
src/lxml/objectify.c
src/lxml/objectify.pyx
src/lxml/parser.pxi
src/lxml/sax.c
src/lxml/tests/test_etree.py
src/lxml/tests/test_objectify.py
src/lxml/xslt.pxi
tools/pypistats.py [new file with mode: 0644]

index 64bba1c2290f139b8693a489be30bb09d22d21ed..24052db9958344787cb06891801cd2bfe0fc91a1 100644 (file)
@@ -2,6 +2,51 @@
 lxml changelog
 ==============
 
+4.9.3 (2023-07-05)
+==================
+
+Bugs fixed
+----------
+
+* ``lxml.objectify`` accepted non-decimal numbers like ``²²²`` as integers.
+
+* A memory leak in ``lxml.html.clean`` was resolved by switching to Cython 0.29.34+.
+
+* GH#348: URL checking in the HTML cleaner was improved.
+  Patch by Tim McCormack.
+
+* GH#371, GH#373: Some regex strings were changed to raw strings to fix Python warnings.
+  Patches by Jakub Wilk and Anthony Sottile.
+
+Other changes
+-------------
+
+* Wheels include zlib 1.2.13, libxml2 2.10.3 and libxslt 1.1.38
+  (zlib 1.2.12, libxml2 2.10.3 and libxslt 1.1.37 on Windows).
+
+* Built with Cython 0.29.36 to adapt to changes in Python 3.12.
+
+
+4.9.2 (2022-12-13)
+==================
+
+Bugs fixed
+----------
+
+* CVE-2022-2309: A Bug in libxml2 2.9.1[0-4] could let namespace declarations
+  from a failed parser run leak into later parser runs.  This bug was worked around
+  in lxml and resolved in libxml2 2.10.0.
+  https://gitlab.gnome.org/GNOME/libxml2/-/issues/378
+
+Other changes
+-------------
+
+* LP#1981760: ``Element.attrib`` now registers as ``collections.abc.MutableMapping``.
+
+* lxml now has a static build setup for macOS on ARM64 machines (not used for building wheels).
+  Patch by Quentin Leffray.
+
+
 4.9.1 (2022-07-01)
 ==================
 
index f05c257354efb4d9af7667d11fc612594453e0de..1592ed3e7a2eb9eec63c478aa296ecfb1165aa23 100644 (file)
@@ -15,5 +15,6 @@ recursive-include src/lxml/html/tests *.data *.txt
 recursive-include samples *.xml
 recursive-include benchmark *.py
 recursive-include doc *.py *.txt *.html *.css *.xml *.mgp pubkey.asc Makefile
+recursive-include doc/html/apidoc *.js *.png *.inv
 recursive-include doc/s5/ui *.gif *.htc *.png *.js
 recursive-include doc/s5/ep2008 *.py *.png *.rng
index 1e0a9119a0dfe66af7ef3d9d912ba00164f3d992..b1b17c209c926b01dbbe91a0755196c8c6c092c3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -13,8 +13,8 @@ CYTHON_WITH_COVERAGE?=$(shell $(PYTHON) -c 'import Cython.Coverage; import sys;
 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.14
-MANYLINUX_LIBXSLT_VERSION=1.1.35
+MANYLINUX_LIBXML2_VERSION=2.10.3
+MANYLINUX_LIBXSLT_VERSION=1.1.38
 MANYLINUX_CFLAGS=-O3 -g1 -pipe -fPIC -flto
 MANYLINUX_LDFLAGS=-flto
 
@@ -26,6 +26,9 @@ MANYLINUX_IMAGES= \
        manylinux2014_aarch64 \
        manylinux_2_24_aarch64 \
        manylinux_2_24_ppc64le \
+       manylinux_2_28_x86_64 \
+       manylinux_2_28_aarch64 \
+       manylinux_2_28_ppc64le \
        manylinux_2_24_s390x \
        musllinux_1_1_x86_64 \
     musllinux_1_1_aarch64
@@ -72,6 +75,7 @@ wheel_%: dist/lxml-$(LXMLVERSION).tar.gz
                -e RANLIB=gcc-ranlib \
                -e CFLAGS="$(MANYLINUX_CFLAGS) $(if $(patsubst %aarch64,,$@),-march=core2,-march=armv8-a -mtune=cortex-a72)" \
                -e LDFLAGS="$(MANYLINUX_LDFLAGS)" \
+               -e STATIC_DEPS="${STATIC_DEPS}" \
                -e LIBXML2_VERSION="$(MANYLINUX_LIBXML2_VERSION)" \
                -e LIBXSLT_VERSION="$(MANYLINUX_LIBXSLT_VERSION)" \
                -e PYTHON_BUILD_VERSION="$(PYTHON_BUILD_VERSION)" \
index 53cced125c189da885a329cdf2241ca01178d24c..33d4731b12fc392112194aec3d5c24f9eb712e65 100644 (file)
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,13 +1,13 @@
 Metadata-Version: 2.1
 Name: lxml
-Version: 4.9.1
+Version: 4.9.3
 Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
 Home-page: https://lxml.de/
 Author: lxml dev team
 Author-email: lxml-dev@lxml.de
 Maintainer: lxml dev team
 Maintainer-email: lxml-dev@lxml.de
-License: BSD
+License: BSD-3-Clause
 Project-URL: Source, https://github.com/lxml/lxml
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
@@ -17,12 +17,13 @@ Classifier: Programming Language :: Cython
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 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 :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: C
 Classifier: Operating System :: OS Independent
 Classifier: Topic :: Text Processing :: Markup :: HTML
@@ -66,15 +67,28 @@ https://github.com/lxml/lxml/tarball/lxml-4.9#egg=lxml-4.9bugfix
 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.9.1 (2022-07-01)
+4.9.3 (2023-07-05)
 ==================
 
 Bugs fixed
 ----------
 
-* A crash was resolved when using ``iterwalk()`` (or ``canonicalize()``)
-  after parsing certain incorrect input.  Note that ``iterwalk()`` can crash
-  on *valid* input parsed with the same parser *after* failing to parse the
-  incorrect input.
+* ``lxml.objectify`` accepted non-decimal numbers like ``²²²`` as integers.
+
+* A memory leak in ``lxml.html.clean`` was resolved by switching to Cython 0.29.34+.
+
+* GH#348: URL checking in the HTML cleaner was improved.
+  Patch by Tim McCormack.
+
+* GH#371, GH#373: Some regex strings were changed to raw strings to fix Python warnings.
+  Patches by Jakub Wilk and Anthony Sottile.
+
+Other changes
+-------------
+
+* Wheels include zlib 1.2.13, libxml2 2.10.3 and libxslt 1.1.38
+  (zlib 1.2.12, libxml2 2.10.3 and libxslt 1.1.37 on Windows).
+
+* Built with Cython 0.29.36 to adapt to changes in Python 3.12.
 
 
index a0434b37922aa18a51992b99ae7931796c5dc14b..6adcfaafbed4682ecc9d4ac6605b7cbd69245658 100644 (file)
@@ -74,11 +74,19 @@ Another supporter of the lxml project is
 Project income report
 ---------------------
 
-* Total project income in 2021: EUR 4890.37  (407.53 € / month)
+lxml has `about 60 million downloads <https://pypistats.org/packages/lxml>`_
+per month on PyPI.
+
+* Total project income in 2022: EUR 2566.38  (213.87 € / month)
+
+  - Tidelift: EUR 2539.38
+  - Paypal: EUR 27.00
+
+* Total project income in 2021: EUR 4640.37  (386.70 € / month)
 
   - Tidelift: EUR 4066.66
   - Paypal: EUR 223.71
-  - other: EUR 600.00
+  - other: EUR 350.00
 
 * Total project income in 2020: EUR 6065,86  (506.49 € / month)
 
index 69ac5208e76abc692183ac1a47ade36f4af8ee22..8c71a2e41600801381a43e399b188f1dd15b7bfa 100644 (file)
@@ -7,7 +7,7 @@ from benchbase import (with_attributes, with_text, onlylib,
                        serialized, children, nochange)
 
 TEXT  = "some ASCII text"
-UTEXT = u"some klingon: \F8D2"
+UTEXT = u"some klingon: \uF8D2"
 
 ############################################################
 # Benchmarks
index a9f9ad857f4ea62b7d0d18e0320b0f93d72595a5..ac3c95f82392b70af1cce3fffabfd85a360f3edd 100644 (file)
@@ -17,7 +17,7 @@ def exec_(code, glob):
 TREE_FACTOR = 1 # increase tree size with '-l / '-L' cmd option
 
 _TEXT  = "some ASCII text" * TREE_FACTOR
-_UTEXT = u"some klingon: \F8D2" * TREE_FACTOR
+_UTEXT = u"some klingon: \uF8D2" * TREE_FACTOR
 _ATTRIBUTES = {
     '{attr}test1' : _TEXT,
     '{attr}test2' : _TEXT,
index e0c558fadcd41d8824c8698882529dce439b563d..d98334e20bac9e0d1f273e1c38718e9380ce4267 100644 (file)
@@ -1,15 +1,17 @@
+import json
 import os, re, sys, subprocess, platform
 import tarfile
-from distutils import log, version
+from distutils import log
 from contextlib import closing, contextmanager
 from ftplib import FTP
 
 try:
-    from urlparse import urljoin, unquote, urlparse
-    from urllib import urlretrieve, urlopen, urlcleanup
-except ImportError:
     from urllib.parse import urljoin, unquote, urlparse
-    from urllib.request import urlretrieve, urlopen, urlcleanup
+    from urllib.request import urlretrieve, urlopen, urlcleanup, Request
+except ImportError:  # Py2
+    from urlparse import urljoin, unquote, urlparse
+    from urllib import urlretrieve, urlcleanup
+    from urllib2 import urlopen, Request
 
 multi_make_options = []
 try:
@@ -23,20 +25,28 @@ except:
     pass
 
 
+# overridable to control script usage
+sys_platform = sys.platform
+
+
 # use pre-built libraries on Windows
 
 def download_and_extract_windows_binaries(destdir):
-    url = "https://github.com/lxml/libxml2-win-binaries/releases"
-    filenames = list(_list_dir_urllib(url))
-
-    release_path = "/download/%s/" % find_max_version(
-        "library release", filenames, re.compile(r"/releases/tag/([0-9.]+[0-9])$"))
-    url += release_path
-    filenames = [
-        filename.rsplit('/', 1)[1]
-        for filename in filenames
-        if release_path in filename
-    ]
+    url = "https://api.github.com/repos/lxml/libxml2-win-binaries/releases?per_page=5"
+    releases, _ = read_url(
+        url,
+        accept="application/vnd.github+json",
+        as_json=True,
+        github_api_token=os.environ.get("GITHUB_API_TOKEN"),
+    )
+
+    max_release = {'tag_name': ''}
+    for release in releases:
+        if max_release['tag_name'] < release.get('tag_name', ''):
+            max_release = release
+
+    url = "https://github.com/lxml/libxml2-win-binaries/releases/download/%s/" % max_release['tag_name']
+    filenames = [asset['name'] for asset in max_release.get('assets', ())]
 
     # Check for native ARM64 build or the environment variable that is set by
     # Visual Studio for cross-compilation (same variable as setuptools uses)
@@ -109,7 +119,7 @@ def unpack_zipfile(zipfn, destdir):
 
 
 def get_prebuilt_libxml2xslt(download_dir, static_include_dirs, static_library_dirs):
-    assert sys.platform.startswith('win')
+    assert sys_platform.startswith('win')
     libs = download_and_extract_windows_binaries(download_dir)
     for libname, path in libs.items():
         i = os.path.join(path, 'include')
@@ -164,13 +174,28 @@ def _list_dir_ftplib(url):
     return parse_text_ftplist("\n".join(data))
 
 
-def _list_dir_urllib(url):
-    with closing(urlopen(url)) as res:
+def read_url(url, decode=True, accept=None, as_json=False, github_api_token=None):
+    headers = {'User-Agent': 'https://github.com/lxml/lxml'}
+    if accept:
+        headers['Accept'] = accept
+    if github_api_token:
+        headers['authorization'] = "Bearer " + github_api_token
+    request = Request(url, headers=headers)
+
+    with closing(urlopen(request)) as res:
         charset = _find_content_encoding(res)
         content_type = res.headers.get('Content-Type')
         data = res.read()
 
-    data = data.decode(charset)
+    if decode:
+        data = data.decode(charset)
+    if as_json:
+        data = json.loads(data)
+    return data, content_type
+
+
+def _list_dir_urllib(url):
+    data, content_type = read_url(url)
     if content_type and content_type.startswith('text/html'):
         files = parse_html_filelist(data)
     else:
@@ -178,26 +203,28 @@ def _list_dir_urllib(url):
     return files
 
 
-def http_find_latest_version_directory(url):
-    with closing(urlopen(url)) as res:
-        charset = _find_content_encoding(res)
-        data = res.read()
+def http_find_latest_version_directory(url, version=None):
+    data, _ = read_url(url)
     # e.g. <a href="1.0/">
     directories = [
         (int(v[0]), int(v[1]))
-        for v in re.findall(r' href=["\']([0-9]+)\.([0-9]+)/?["\']', data.decode(charset))
+        for v in re.findall(r' href=["\']([0-9]+)\.([0-9]+)/?["\']', data)
     ]
     if not directories:
         return url
-    latest_dir = "%s.%s" % max(directories)
+    best_version = max(directories)
+    if version:
+        major, minor, _ = version.split(".", 2)
+        major, minor = int(major), int(minor)
+        if (major, minor) in directories:
+            best_version = (major, minor)
+    latest_dir = "%s.%s" % best_version
     return urljoin(url, latest_dir) + "/"
 
 
 def http_listfiles(url, re_pattern):
-    with closing(urlopen(url)) as res:
-        charset = _find_content_encoding(res)
-        data = res.read()
-    files = re.findall(re_pattern, data.decode(charset))
+    data, _ = read_url(url)
+    files = re.findall(re_pattern, data)
     return files
 
 
@@ -248,7 +275,7 @@ def download_libxml2(dest_dir, version=None):
         from_location = "https://gitlab.gnome.org/GNOME/libxml2/-/archive/dea91c97debeac7c1aaf9c19f79029809e23a353/"
         version = "dea91c97debeac7c1aaf9c19f79029809e23a353"
     else:
-        from_location = http_find_latest_version_directory(LIBXML2_LOCATION)
+        from_location = http_find_latest_version_directory(LIBXML2_LOCATION, version=version)
 
     return download_library(dest_dir, from_location, 'libxml2',
                             version_re, filename, version=version)
@@ -259,7 +286,7 @@ def download_libxslt(dest_dir, version=None):
     #version_re = re.compile(r'LATEST_LIBXSLT_IS_([0-9.]+[0-9](?:-[abrc0-9]+)?)')
     version_re = re.compile(r'libxslt-([0-9.]+[0-9]).tar.xz')
     filename = 'libxslt-%s.tar.xz'
-    from_location = http_find_latest_version_directory(LIBXSLT_LOCATION)
+    from_location = http_find_latest_version_directory(LIBXSLT_LOCATION, version=version)
     return download_library(dest_dir, from_location, 'libxslt',
                             version_re, filename, version=version)
 
@@ -288,7 +315,7 @@ def find_max_version(libname, filenames, version_re=None):
         match = version_re.search(fn)
         if match:
             version_string = match.group(1)
-            versions.append((tuple(map(tryint, version_string.split('.'))),
+            versions.append((tuple(map(tryint, version_string.replace("-", ".-").split('.'))),
                              version_string))
     if not versions:
         raise Exception(
@@ -393,13 +420,13 @@ def cmmi(configure_cmd, build_dir, multicore=None, **call_setup):
 
 def configure_darwin_env(env_setup):
     import platform
-    # configure target architectures on MacOS-X (x86_64 only, by default)
+    # configure target architectures on MacOS-X (x86_64 + Arm64, by default)
     major_version, minor_version = tuple(map(int, platform.mac_ver()[0].split('.')[:2]))
-    if major_version > 7:
+    if major_version >= 11:
         env_default = {
-            'CFLAGS': "-arch x86_64 -O2",
-            'LDFLAGS': "-arch x86_64",
-            'MACOSX_DEPLOYMENT_TARGET': "10.6"
+            'CFLAGS': "-arch x86_64 -arch arm64 -O3",
+            'LDFLAGS': "-arch x86_64 -arch arm64",
+            'MACOSX_DEPLOYMENT_TARGET': "11.0"
         }
         env_default.update(os.environ)
         env_setup['env'] = env_default
@@ -444,7 +471,7 @@ def build_libxml2xslt(download_dir, build_dir,
         return found
 
     call_setup = {}
-    if sys.platform == 'darwin':
+    if sys_platform == 'darwin':
         configure_darwin_env(call_setup)
 
     configure_cmd = ['./configure',
@@ -525,3 +552,27 @@ def build_libxml2xslt(download_dir, build_dir,
         if lib in filename and filename.endswith('.a')]
 
     return xml2_config, xslt_config
+
+
+def main():
+    static_include_dirs = []
+    static_library_dirs = []
+    download_dir = "libs"
+
+    if sys_platform.startswith('win'):
+        return get_prebuilt_libxml2xslt(
+            download_dir, static_include_dirs, static_library_dirs)
+    else:
+        return build_libxml2xslt(
+            download_dir, 'build/tmp',
+            static_include_dirs, static_library_dirs,
+            static_cflags=[],
+            static_binaries=[]
+        )
+
+
+if __name__ == '__main__':
+    if len(sys.argv) > 1:
+        # change global sys_platform setting
+        sys_platform = sys.argv[1]
+    main()
index 7c5f134d2c54446b53b9d13db24add59e1323021..29db736a064bdea808cfd24d0c73ccb1ef95680d 100644 (file)
@@ -51,6 +51,10 @@ autodoc_default_options = {
 
 autodoc_member_order = 'groupwise'
 
+intersphinx_mapping = {
+    "lxml": ("https://lxml.de/apidoc/", None),
+}
+
 # -- Options for todo extension ----------------------------------------------
 
 # If true, `todo` and `todoList` produce output, else they produce nothing.
index ae783c43262e17e95e93f174e3728b1e9654c3c7..d31d8acd1f2dc92838b25991c3f9ece66e386ac1 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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,73 +26,73 @@ 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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <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>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#general-questions" id="id2">General Questions</a><ul>
-<li><a class="reference internal" href="#is-there-a-tutorial" id="id3">Is there a tutorial?</a></li>
-<li><a class="reference internal" href="#where-can-i-find-more-documentation-about-lxml" id="id4">Where can I find more documentation about lxml?</a></li>
-<li><a class="reference internal" href="#what-standards-does-lxml-implement" id="id5">What standards does lxml implement?</a></li>
-<li><a class="reference internal" href="#who-uses-lxml" id="id6">Who uses lxml?</a></li>
-<li><a class="reference internal" href="#what-is-the-difference-between-lxml-etree-and-lxml-objectify" id="id7">What is the difference between lxml.etree and lxml.objectify?</a></li>
-<li><a class="reference internal" href="#how-can-i-make-my-application-run-faster" id="id8">How can I make my application run faster?</a></li>
-<li><a class="reference internal" href="#what-about-that-trailing-text-on-serialised-elements" id="id9">What about that trailing text on serialised Elements?</a></li>
-<li><a class="reference internal" href="#how-can-i-find-out-if-an-element-is-a-comment-or-pi" id="id10">How can I find out if an Element is a comment or PI?</a></li>
-<li><a class="reference internal" href="#how-can-i-map-an-xml-tree-into-a-dict-of-dicts" id="id11">How can I map an XML tree into a dict of dicts?</a></li>
-<li><a class="reference internal" href="#why-does-lxml-sometimes-return-str-values-for-text-in-python-2" id="id12">Why does lxml sometimes return 'str' values for text in Python 2?</a></li>
-<li><a class="reference internal" href="#why-do-i-get-xinclude-or-dtd-lookup-failures-on-some-systems-but-not-on-others" id="id13">Why do I get XInclude or DTD lookup failures on some systems but not on others?</a></li>
-<li><a class="reference internal" href="#how-do-namespaces-work-in-lxml" id="id14">How do namespaces work in lxml?</a></li>
+<li><a class="reference internal" href="#general-questions" id="toc-entry-1">General Questions</a><ul>
+<li><a class="reference internal" href="#is-there-a-tutorial" id="toc-entry-2">Is there a tutorial?</a></li>
+<li><a class="reference internal" href="#where-can-i-find-more-documentation-about-lxml" id="toc-entry-3">Where can I find more documentation about lxml?</a></li>
+<li><a class="reference internal" href="#what-standards-does-lxml-implement" id="toc-entry-4">What standards does lxml implement?</a></li>
+<li><a class="reference internal" href="#who-uses-lxml" id="toc-entry-5">Who uses lxml?</a></li>
+<li><a class="reference internal" href="#what-is-the-difference-between-lxml-etree-and-lxml-objectify" id="toc-entry-6">What is the difference between lxml.etree and lxml.objectify?</a></li>
+<li><a class="reference internal" href="#how-can-i-make-my-application-run-faster" id="toc-entry-7">How can I make my application run faster?</a></li>
+<li><a class="reference internal" href="#what-about-that-trailing-text-on-serialised-elements" id="toc-entry-8">What about that trailing text on serialised Elements?</a></li>
+<li><a class="reference internal" href="#how-can-i-find-out-if-an-element-is-a-comment-or-pi" id="toc-entry-9">How can I find out if an Element is a comment or PI?</a></li>
+<li><a class="reference internal" href="#how-can-i-map-an-xml-tree-into-a-dict-of-dicts" id="toc-entry-10">How can I map an XML tree into a dict of dicts?</a></li>
+<li><a class="reference internal" href="#why-does-lxml-sometimes-return-str-values-for-text-in-python-2" id="toc-entry-11">Why does lxml sometimes return 'str' values for text in Python 2?</a></li>
+<li><a class="reference internal" href="#why-do-i-get-xinclude-or-dtd-lookup-failures-on-some-systems-but-not-on-others" id="toc-entry-12">Why do I get XInclude or DTD lookup failures on some systems but not on others?</a></li>
+<li><a class="reference internal" href="#how-do-namespaces-work-in-lxml" id="toc-entry-13">How do namespaces work in lxml?</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#installation" id="id15">Installation</a><ul>
-<li><a class="reference internal" href="#which-version-of-libxml2-and-libxslt-should-i-use-or-require" id="id16">Which version of libxml2 and libxslt should I use or require?</a></li>
-<li><a class="reference internal" href="#where-are-the-binary-builds" id="id17">Where are the binary builds?</a></li>
-<li><a class="reference internal" href="#why-do-i-get-errors-about-missing-ucs4-symbols-when-installing-lxml" id="id18">Why do I get errors about missing UCS4 symbols when installing lxml?</a></li>
-<li><a class="reference internal" href="#my-c-compiler-crashes-on-installation" id="id19">My C compiler crashes on installation</a></li>
+<li><a class="reference internal" href="#installation" id="toc-entry-14">Installation</a><ul>
+<li><a class="reference internal" href="#which-version-of-libxml2-and-libxslt-should-i-use-or-require" id="toc-entry-15">Which version of libxml2 and libxslt should I use or require?</a></li>
+<li><a class="reference internal" href="#where-are-the-binary-builds" id="toc-entry-16">Where are the binary builds?</a></li>
+<li><a class="reference internal" href="#why-do-i-get-errors-about-missing-ucs4-symbols-when-installing-lxml" id="toc-entry-17">Why do I get errors about missing UCS4 symbols when installing lxml?</a></li>
+<li><a class="reference internal" href="#my-c-compiler-crashes-on-installation" id="toc-entry-18">My C compiler crashes on installation</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#contributing" id="id20">Contributing</a><ul>
-<li><a class="reference internal" href="#why-is-lxml-not-written-in-python" id="id21">Why is lxml not written in Python?</a></li>
-<li><a class="reference internal" href="#how-can-i-contribute" id="id22">How can I contribute?</a></li>
+<li><a class="reference internal" href="#contributing" id="toc-entry-19">Contributing</a><ul>
+<li><a class="reference internal" href="#why-is-lxml-not-written-in-python" id="toc-entry-20">Why is lxml not written in Python?</a></li>
+<li><a class="reference internal" href="#how-can-i-contribute" id="toc-entry-21">How can I contribute?</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#bugs" id="id23">Bugs</a><ul>
-<li><a class="reference internal" href="#my-application-crashes" id="id24">My application crashes!</a></li>
-<li><a class="reference internal" href="#my-application-crashes-on-macos-x" id="id25">My application crashes on MacOS-X!</a></li>
-<li><a class="reference internal" href="#i-think-i-have-found-a-bug-in-lxml-what-should-i-do" id="id26">I think I have found a bug in lxml. What should I do?</a></li>
-<li><a class="reference internal" href="#how-do-i-know-a-bug-is-really-in-lxml-and-not-in-libxml2" id="id27">How do I know a bug is really in lxml and not in libxml2?</a></li>
+<li><a class="reference internal" href="#bugs" id="toc-entry-22">Bugs</a><ul>
+<li><a class="reference internal" href="#my-application-crashes" id="toc-entry-23">My application crashes!</a></li>
+<li><a class="reference internal" href="#my-application-crashes-on-macos-x" id="toc-entry-24">My application crashes on MacOS-X!</a></li>
+<li><a class="reference internal" href="#i-think-i-have-found-a-bug-in-lxml-what-should-i-do" id="toc-entry-25">I think I have found a bug in lxml. What should I do?</a></li>
+<li><a class="reference internal" href="#how-do-i-know-a-bug-is-really-in-lxml-and-not-in-libxml2" id="toc-entry-26">How do I know a bug is really in lxml and not in libxml2?</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#id1" id="id28">Threading</a><ul>
-<li><a class="reference internal" href="#can-i-use-threads-to-concurrently-access-the-lxml-api" id="id29">Can I use threads to concurrently access the lxml API?</a></li>
-<li><a class="reference internal" href="#does-my-program-run-faster-if-i-use-threads" id="id30">Does my program run faster if I use threads?</a></li>
-<li><a class="reference internal" href="#would-my-single-threaded-program-run-faster-if-i-turned-off-threading" id="id31">Would my single-threaded program run faster if I turned off threading?</a></li>
-<li><a class="reference internal" href="#why-can-t-i-reuse-xslt-stylesheets-in-other-threads" id="id32">Why can't I reuse XSLT stylesheets in other threads?</a></li>
-<li><a class="reference internal" href="#my-program-crashes-when-run-with-mod-python-pyro-zope-plone" id="id33">My program crashes when run with mod_python/Pyro/Zope/Plone/...</a></li>
+<li><a class="reference internal" href="#threading-1" id="toc-entry-27">Threading</a><ul>
+<li><a class="reference internal" href="#can-i-use-threads-to-concurrently-access-the-lxml-api" id="toc-entry-28">Can I use threads to concurrently access the lxml API?</a></li>
+<li><a class="reference internal" href="#does-my-program-run-faster-if-i-use-threads" id="toc-entry-29">Does my program run faster if I use threads?</a></li>
+<li><a class="reference internal" href="#would-my-single-threaded-program-run-faster-if-i-turned-off-threading" id="toc-entry-30">Would my single-threaded program run faster if I turned off threading?</a></li>
+<li><a class="reference internal" href="#why-can-t-i-reuse-xslt-stylesheets-in-other-threads" id="toc-entry-31">Why can't I reuse XSLT stylesheets in other threads?</a></li>
+<li><a class="reference internal" href="#my-program-crashes-when-run-with-mod-python-pyro-zope-plone" id="toc-entry-32">My program crashes when run with mod_python/Pyro/Zope/Plone/...</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#parsing-and-serialisation" id="id34">Parsing and Serialisation</a><ul>
-<li><a class="reference internal" href="#why-doesn-t-the-pretty-print-option-reformat-my-xml-output" id="id35">Why doesn't the <tt class="docutils literal">pretty_print</tt> option reformat my XML output?</a></li>
-<li><a class="reference internal" href="#why-can-t-lxml-parse-my-xml-from-unicode-strings" id="id36">Why can't lxml parse my XML from unicode strings?</a></li>
-<li><a class="reference internal" href="#can-lxml-parse-from-file-objects-opened-in-unicode-text-mode" id="id37">Can lxml parse from file objects opened in unicode/text mode?</a></li>
-<li><a class="reference internal" href="#what-is-the-difference-between-str-xslt-doc-and-xslt-doc-write" id="id38">What is the difference between str(xslt(doc)) and xslt(doc).write() ?</a></li>
-<li><a class="reference internal" href="#why-can-t-i-just-delete-parents-or-clear-the-root-node-in-iterparse" id="id39">Why can't I just delete parents or clear the root node in iterparse()?</a></li>
-<li><a class="reference internal" href="#how-do-i-output-null-characters-in-xml-text" id="id40">How do I output null characters in XML text?</a></li>
-<li><a class="reference internal" href="#is-lxml-vulnerable-to-xml-bombs" id="id41">Is lxml vulnerable to XML bombs?</a></li>
-<li><a class="reference internal" href="#how-do-i-use-lxml-safely-as-a-web-service-endpoint" id="id42">How do I use lxml safely as a web-service endpoint?</a></li>
-<li><a class="reference internal" href="#how-can-i-sort-the-attributes" id="id43">How can I sort the attributes?</a></li>
+<li><a class="reference internal" href="#parsing-and-serialisation" id="toc-entry-33">Parsing and Serialisation</a><ul>
+<li><a class="reference internal" href="#why-doesn-t-the-pretty-print-option-reformat-my-xml-output" id="toc-entry-34">Why doesn't the <tt class="docutils literal">pretty_print</tt> option reformat my XML output?</a></li>
+<li><a class="reference internal" href="#why-can-t-lxml-parse-my-xml-from-unicode-strings" id="toc-entry-35">Why can't lxml parse my XML from unicode strings?</a></li>
+<li><a class="reference internal" href="#can-lxml-parse-from-file-objects-opened-in-unicode-text-mode" id="toc-entry-36">Can lxml parse from file objects opened in unicode/text mode?</a></li>
+<li><a class="reference internal" href="#what-is-the-difference-between-str-xslt-doc-and-xslt-doc-write" id="toc-entry-37">What is the difference between str(xslt(doc)) and xslt(doc).write() ?</a></li>
+<li><a class="reference internal" href="#why-can-t-i-just-delete-parents-or-clear-the-root-node-in-iterparse" id="toc-entry-38">Why can't I just delete parents or clear the root node in iterparse()?</a></li>
+<li><a class="reference internal" href="#how-do-i-output-null-characters-in-xml-text" id="toc-entry-39">How do I output null characters in XML text?</a></li>
+<li><a class="reference internal" href="#is-lxml-vulnerable-to-xml-bombs" id="toc-entry-40">Is lxml vulnerable to XML bombs?</a></li>
+<li><a class="reference internal" href="#how-do-i-use-lxml-safely-as-a-web-service-endpoint" id="toc-entry-41">How do I use lxml safely as a web-service endpoint?</a></li>
+<li><a class="reference internal" href="#how-can-i-sort-the-attributes" id="toc-entry-42">How can I sort the attributes?</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#xpath-and-document-traversal" id="id44">XPath and Document Traversal</a><ul>
-<li><a class="reference internal" href="#what-are-the-findall-and-xpath-methods-on-element-tree" id="id45">What are the <tt class="docutils literal">findall()</tt> and <tt class="docutils literal">xpath()</tt> methods on Element(Tree)?</a></li>
-<li><a class="reference internal" href="#why-doesn-t-findall-support-full-xpath-expressions" id="id46">Why doesn't <tt class="docutils literal">findall()</tt> support full XPath expressions?</a></li>
-<li><a class="reference internal" href="#how-can-i-find-out-which-namespace-prefixes-are-used-in-a-document" id="id47">How can I find out which namespace prefixes are used in a document?</a></li>
-<li><a class="reference internal" href="#how-can-i-specify-a-default-namespace-for-xpath-expressions" id="id48">How can I specify a default namespace for XPath expressions?</a></li>
-<li><a class="reference internal" href="#how-can-i-modify-the-tree-during-iteration" id="id49">How can I modify the tree during iteration?</a></li>
+<li><a class="reference internal" href="#xpath-and-document-traversal" id="toc-entry-43">XPath and Document Traversal</a><ul>
+<li><a class="reference internal" href="#what-are-the-findall-and-xpath-methods-on-element-tree" id="toc-entry-44">What are the <tt class="docutils literal">findall()</tt> and <tt class="docutils literal">xpath()</tt> methods on Element(Tree)?</a></li>
+<li><a class="reference internal" href="#why-doesn-t-findall-support-full-xpath-expressions" id="toc-entry-45">Why doesn't <tt class="docutils literal">findall()</tt> support full XPath expressions?</a></li>
+<li><a class="reference internal" href="#how-can-i-find-out-which-namespace-prefixes-are-used-in-a-document" id="toc-entry-46">How can I find out which namespace prefixes are used in a document?</a></li>
+<li><a class="reference internal" href="#how-can-i-specify-a-default-namespace-for-xpath-expressions" id="toc-entry-47">How can I specify a default namespace for XPath expressions?</a></li>
+<li><a class="reference internal" href="#how-can-i-modify-the-tree-during-iteration" id="toc-entry-48">How can I modify the tree during iteration?</a></li>
 </ul>
 </li>
 </ul>
@@ -587,7 +587,7 @@ getting help.  See the question above for a few hints on what is
 helpful here.</p>
 </div>
 </div>
-<div class="section" id="id1">
+<div class="section" id="threading-1">
 <h1>Threading</h1>
 <div class="section" id="can-i-use-threads-to-concurrently-access-the-lxml-api">
 <h2>Can I use threads to concurrently access the lxml API?</h2>
@@ -1049,7 +1049,7 @@ advance beyond the critical point before touching the tree structure.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index b6a9c218cab8ef45098b72f0a41eee2141a433b2..eb6d4b34158e7c40f6efd514868e4ae3e5cd8385 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <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
@@ -40,21 +40,21 @@ XSLT</a>, <a class="reference external" href="validation.html">validating XML</a
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#lxml-etree" id="id1">lxml.etree</a></li>
-<li><a class="reference internal" href="#other-element-apis" id="id2">Other Element APIs</a></li>
-<li><a class="reference internal" href="#trees-and-documents" id="id3">Trees and Documents</a></li>
-<li><a class="reference internal" href="#iteration" id="id4">Iteration</a></li>
-<li><a class="reference internal" href="#error-handling-on-exceptions" id="id5">Error handling on exceptions</a></li>
-<li><a class="reference internal" href="#error-logging" id="id6">Error logging</a></li>
-<li><a class="reference internal" href="#serialisation" id="id7">Serialisation</a><ul>
-<li><a class="reference internal" href="#c14n" id="id8">C14N</a></li>
-<li><a class="reference internal" href="#pretty-printing" id="id9">Pretty printing</a></li>
-<li><a class="reference internal" href="#xml-declaration" id="id10">XML declaration</a></li>
+<li><a class="reference internal" href="#lxml-etree" id="toc-entry-1">lxml.etree</a></li>
+<li><a class="reference internal" href="#other-element-apis" id="toc-entry-2">Other Element APIs</a></li>
+<li><a class="reference internal" href="#trees-and-documents" id="toc-entry-3">Trees and Documents</a></li>
+<li><a class="reference internal" href="#iteration" id="toc-entry-4">Iteration</a></li>
+<li><a class="reference internal" href="#error-handling-on-exceptions" id="toc-entry-5">Error handling on exceptions</a></li>
+<li><a class="reference internal" href="#error-logging" id="toc-entry-6">Error logging</a></li>
+<li><a class="reference internal" href="#serialisation" id="toc-entry-7">Serialisation</a><ul>
+<li><a class="reference internal" href="#c14n" id="toc-entry-8">C14N</a></li>
+<li><a class="reference internal" href="#pretty-printing" id="toc-entry-9">Pretty printing</a></li>
+<li><a class="reference internal" href="#xml-declaration" id="toc-entry-10">XML declaration</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#incremental-xml-generation" id="id11">Incremental XML generation</a></li>
-<li><a class="reference internal" href="#cdata" id="id12">CDATA</a></li>
-<li><a class="reference internal" href="#xinclude-and-elementinclude" id="id13">XInclude and ElementInclude</a></li>
+<li><a class="reference internal" href="#incremental-xml-generation" id="toc-entry-11">Incremental XML generation</a></li>
+<li><a class="reference internal" href="#cdata" id="toc-entry-12">CDATA</a></li>
+<li><a class="reference internal" href="#xinclude-and-elementinclude" id="toc-entry-13">XInclude and ElementInclude</a></li>
 </ul>
 </div>
 <div class="section" id="lxml-etree">
@@ -336,7 +336,7 @@ underlying transport protocol:</p>
 <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>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XMLSyntaxError</span>: <span class="n">...</span>
 </pre></div>
 <p>Since version 2.3, the serialisation can override the internal subset
@@ -534,7 +534,7 @@ resolvers, you have to stick to the external Python module.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 2bb972c1b67ff4a58d6ec84ae06d9bd5ae2aacf8..f57d831709a59ec62c3e0da12b04e54317a82a47 100644 (file)
     <script src="../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
         <script src="../_static/doctools.js"></script>
+        <script src="../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../index.html" class="icon icon-home">
+            lxml
+              <img src="../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -80,8 +84,8 @@
         <div class="rst-content">
           <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><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">Overview: module code</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
index 11a4bebf503fdfa85a0b675c1dce86aa4c58fac3..4a76dd71b3a95ce4e4631a201ccc9a6cc339122c 100644 (file)
     <script src="../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
         <script src="../_static/doctools.js"></script>
+        <script src="../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../index.html" class="icon icon-home">
+            lxml
+              <img src="../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -80,9 +84,9 @@
         <div class="rst-content">
           <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><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="index.html">Module code</a></li>
+      <li class="breadcrumb-item active">lxml</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
   <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.9.1&quot;</span>
+<span class="n">__version__</span> <span class="o">=</span> <span class="s2">&quot;4.9.3&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>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Returns a list of header include paths (for lxml itself, libxml2</span>
 <span class="sd">    and libxslt) needed to compile C code against lxml if it was built</span>
 <span class="sd">    with statically linked libraries.</span>
index 4aec03021103118517c379a4a6b5780e6492c87c..250db76a24f1bf072d102201db0243ef90364668 100644 (file)
     <script src="../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
         <script src="../../_static/doctools.js"></script>
+        <script src="../../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../../index.html" class="icon icon-home">
+            lxml
+              <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="../index.html">Module code</a></li>
+          <li class="breadcrumb-item"><a href="../lxml.html">lxml</a></li>
+      <li class="breadcrumb-item active">lxml.ElementInclude</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
index 3055220508d5d3854324163ec0eb12cf70d32913..a8e1bfb159ac1fc40b256a083cef8be331f23a2e 100644 (file)
     <script src="../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
         <script src="../../_static/doctools.js"></script>
+        <script src="../../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../../index.html" class="icon icon-home">
+            lxml
+              <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="../index.html">Module code</a></li>
+          <li class="breadcrumb-item"><a href="../lxml.html">lxml</a></li>
+      <li class="breadcrumb-item active">lxml.doctestcompare</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
         <span class="k">return</span> <span class="n">html_fromstring</span></div></div>
     
 <div class="viewcode-block" id="install"><a class="viewcode-back" href="../../lxml.doctestcompare.html#lxml.doctestcompare.install">[docs]</a><span class="k">def</span> <span class="nf">install</span><span class="p">(</span><span class="n">html</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Install doctestcompare for all future doctests.</span>
 
 <span class="sd">    If html is true, then by default the HTML parser will be used;</span>
         <span class="n">doctest</span><span class="o">.</span><span class="n">OutputChecker</span> <span class="o">=</span> <span class="n">LXMLOutputChecker</span></div>
 
 <div class="viewcode-block" id="temp_install"><a class="viewcode-back" href="../../lxml.doctestcompare.html#lxml.doctestcompare.temp_install">[docs]</a><span class="k">def</span> <span class="nf">temp_install</span><span class="p">(</span><span class="n">html</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">del_module</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Use this *inside* a doctest to enable this checker for this</span>
 <span class="sd">    doctest only.</span>
 
index 8e02e4d743edc03154aa208079f9526db11c9989..121fcfe90d9f6f56749d23e379a8821e9886012c 100644 (file)
     <script src="../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
         <script src="../../_static/doctools.js"></script>
+        <script src="../../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../../index.html" class="icon icon-home">
+            lxml
+              <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="../index.html">Module code</a></li>
+          <li class="breadcrumb-item"><a href="../lxml.html">lxml</a></li>
+      <li class="breadcrumb-item active">lxml.html</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
 
 
 <div class="viewcode-block" id="_transform_result"><a class="viewcode-back" href="../../lxml.html.html#lxml.html._transform_result">[docs]</a><span class="k">def</span> <span class="nf">_transform_result</span><span class="p">(</span><span class="n">typ</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Convert the result back into the input type.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Convert the result back into the input type.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">typ</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
         <span class="k">return</span> <span class="n">tostring</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span>
 
 
 <div class="viewcode-block" id="Classes"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.Classes">[docs]</a><span class="k">class</span> <span class="nc">Classes</span><span class="p">(</span><span class="n">MutableSet</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Provides access to an element&#39;s class attribute as a set-like collection.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Provides access to an element&#39;s class attribute as a set-like collection.</span>
 <span class="sd">    Usage::</span>
 
 <span class="sd">        &gt;&gt;&gt; el = fromstring(&#39;&lt;p class=&quot;hidden large&quot;&gt;Text&lt;/p&gt;&#39;)</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">_get_class_value</span> <span class="o">=</span> <span class="n">partial</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="s1">&#39;class&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
 
 <div class="viewcode-block" id="Classes.add"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.Classes.add">[docs]</a>    <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Add a class.</span>
 
 <span class="sd">        This has no effect if the class is already present.</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="s1">&#39;class&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">classes</span><span class="p">)</span></div>
 
 <div class="viewcode-block" id="Classes.discard"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.Classes.discard">[docs]</a>    <span class="k">def</span> <span class="nf">discard</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Remove a class if it is currently present.</span>
 
 <span class="sd">        If the class is not present, do nothing.</span>
             <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="s1">&#39;class&#39;</span><span class="p">]</span></div>
 
 <div class="viewcode-block" id="Classes.remove"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.Classes.remove">[docs]</a>    <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Remove a class; it must currently be present.</span>
 
 <span class="sd">        If the class is not present, raise a KeyError.</span>
     <span class="c1"># non-standard methods</span>
 
 <div class="viewcode-block" id="Classes.update"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.Classes.update">[docs]</a>    <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Add all names from &#39;values&#39;.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="n">classes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_class_value</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
             <span class="bp">self</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="s1">&#39;class&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">classes</span><span class="p">)</span></div>
 
 <div class="viewcode-block" id="Classes.toggle"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.Classes.toggle">[docs]</a>    <span class="k">def</span> <span class="nf">toggle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Add a class name if it isn&#39;t there yet, or remove it if it exists.</span>
 
 <span class="sd">        Returns true if the class was added (and is now enabled) and</span>
 <div class="viewcode-block" id="HtmlMixin"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin">[docs]</a><span class="k">class</span> <span class="nc">HtmlMixin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
 
 <div class="viewcode-block" id="HtmlMixin.set"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;set(self, key, value=None)</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;set(self, key, value=None)</span>
 
 <span class="sd">        Sets an element attribute.  If no value is provided, or if the value is None,</span>
 <span class="sd">        creates a &#39;boolean&#39; attribute without value, e.g. &quot;&lt;form novalidate&gt;&lt;/form&gt;&quot;</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">classes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        A set-like wrapper around the &#39;class&#39; attribute.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="n">Classes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">attrib</span><span class="p">)</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">base_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Returns the base URL, given when the page was parsed.</span>
 
 <span class="sd">        Use with ``urlparse.urljoin(el.base_url, href)`` to get</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">forms</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Return a list of all the forms</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="n">_forms_xpath</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">body</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Return the &lt;body&gt; element.  Can be called from a child element</span>
 <span class="sd">        to get the document&#39;s head.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">head</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Returns the &lt;head&gt; element.  Can be called from a child</span>
 <span class="sd">        element to get the document&#39;s head.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">label</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Get or set any &lt;label&gt; element associated with this element.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="nb">id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">)</span>
             <span class="k">del</span> <span class="n">label</span><span class="o">.</span><span class="n">attrib</span><span class="p">[</span><span class="s1">&#39;for&#39;</span><span class="p">]</span>
 
 <div class="viewcode-block" id="HtmlMixin.drop_tree"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.drop_tree">[docs]</a>    <span class="k">def</span> <span class="nf">drop_tree</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Removes this element from the tree, including its children and</span>
 <span class="sd">        text.  The tail text is joined to the previous element or</span>
 <span class="sd">        parent.</span>
         <span class="n">parent</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
 
 <div class="viewcode-block" id="HtmlMixin.drop_tag"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.drop_tag">[docs]</a>    <span class="k">def</span> <span class="nf">drop_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Remove the tag, but not its children or text.  The children and text</span>
 <span class="sd">        are merged into the parent.</span>
 
         <span class="n">parent</span><span class="p">[</span><span class="n">index</span><span class="p">:</span><span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[:]</span></div>
 
 <div class="viewcode-block" id="HtmlMixin.find_rel_links"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.find_rel_links">[docs]</a>    <span class="k">def</span> <span class="nf">find_rel_links</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rel</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Find any links like ``&lt;a rel=&quot;{rel}&quot;&gt;...&lt;/a&gt;``; returns a list of elements.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="n">rel</span> <span class="o">=</span> <span class="n">rel</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
                 <span class="k">if</span> <span class="n">el</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;rel&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">rel</span><span class="p">]</span></div>
 
 <div class="viewcode-block" id="HtmlMixin.find_class"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.find_class">[docs]</a>    <span class="k">def</span> <span class="nf">find_class</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">class_name</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Find any elements with the given class name.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="n">_class_xpath</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">class_name</span><span class="o">=</span><span class="n">class_name</span><span class="p">)</span></div>
 
 <div class="viewcode-block" id="HtmlMixin.get_element_by_id"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.get_element_by_id">[docs]</a>    <span class="k">def</span> <span class="nf">get_element_by_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="o">*</span><span class="n">default</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Get the first element in a document with the given id.  If none is</span>
 <span class="sd">        found, return the default argument if provided or raise KeyError</span>
 <span class="sd">        otherwise.</span>
                 <span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span></div>
 
 <div class="viewcode-block" id="HtmlMixin.text_content"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.text_content">[docs]</a>    <span class="k">def</span> <span class="nf">text_content</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Return the text content of the tag (and the text in any children).</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="n">_collect_string_content</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
 
 <div class="viewcode-block" id="HtmlMixin.cssselect"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.cssselect">[docs]</a>    <span class="k">def</span> <span class="nf">cssselect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">,</span> <span class="n">translator</span><span class="o">=</span><span class="s1">&#39;html&#39;</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Run the CSS expression on this element and its children,</span>
 <span class="sd">        returning a list of the results.</span>
 
 
 <div class="viewcode-block" id="HtmlMixin.make_links_absolute"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.make_links_absolute">[docs]</a>    <span class="k">def</span> <span class="nf">make_links_absolute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">base_url</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">resolve_base_href</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
                             <span class="n">handle_failures</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Make all links in the document absolute, given the</span>
 <span class="sd">        ``base_url`` for the document (the full URL where the document</span>
 <span class="sd">        came from), or if no ``base_url`` is given, then the ``.base_url``</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">rewrite_links</span><span class="p">(</span><span class="n">link_repl</span><span class="p">)</span></div>
 
 <div class="viewcode-block" id="HtmlMixin.resolve_base_href"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.resolve_base_href">[docs]</a>    <span class="k">def</span> <span class="nf">resolve_base_href</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handle_failures</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Find any ``&lt;base href&gt;`` tag in the document, and apply its</span>
 <span class="sd">        values to all links found in the document.  Also remove the</span>
 <span class="sd">        tag once it has been applied.</span>
                                  <span class="n">handle_failures</span><span class="o">=</span><span class="n">handle_failures</span><span class="p">)</span></div>
 
 <div class="viewcode-block" id="HtmlMixin.iterlinks"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.iterlinks">[docs]</a>    <span class="k">def</span> <span class="nf">iterlinks</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Yield (element, attribute, link, pos), where attribute may be None</span>
 <span class="sd">        (indicating the link is in the text).  ``pos`` is the position</span>
 <span class="sd">        where the link occurs; often 0, but sometimes something else in</span>
 
 <div class="viewcode-block" id="HtmlMixin.rewrite_links"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlMixin.rewrite_links">[docs]</a>    <span class="k">def</span> <span class="nf">rewrite_links</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">link_repl_func</span><span class="p">,</span> <span class="n">resolve_base_href</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
                       <span class="n">base_href</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Rewrite all the links in the document.  For each link</span>
 <span class="sd">        ``link_repl_func(link)`` will be called, and the return value</span>
 <span class="sd">        will replace the old link.</span>
 
 
 <div class="viewcode-block" id="_MethodFunc"><a class="viewcode-back" href="../../lxml.html.html#lxml.html._MethodFunc">[docs]</a><span class="k">class</span> <span class="nc">_MethodFunc</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    An object that represents a method on an element as a function;</span>
 <span class="sd">    the function takes either an element or an HTML string.  It</span>
 <span class="sd">    returns whatever the function normally returns, or if the function</span>
 
 
 <div class="viewcode-block" id="HtmlElementClassLookup"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HtmlElementClassLookup">[docs]</a><span class="k">class</span> <span class="nc">HtmlElementClassLookup</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">CustomElementClassLookup</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;A lookup scheme for HTML Element classes.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;A lookup scheme for HTML Element classes.</span>
 
 <span class="sd">    To create a lookup instance with different Element classes, pass a tag</span>
 <span class="sd">    name mapping of Element classes in the ``classes`` keyword argument and/or</span>
 
 <div class="viewcode-block" id="fragments_fromstring"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.fragments_fromstring">[docs]</a><span class="k">def</span> <span class="nf">fragments_fromstring</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">no_leading_text</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">base_url</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
                          <span class="n">parser</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Parses several HTML elements, returning a list of elements.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Parses several HTML elements, returning a list of elements.</span>
 
 <span class="sd">    The first item in the list may be a string.</span>
 <span class="sd">    If no_leading_text is true, then it will be an error if there is</span>
 
 <div class="viewcode-block" id="fragment_fromstring"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.fragment_fromstring">[docs]</a><span class="k">def</span> <span class="nf">fragment_fromstring</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">create_parent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">base_url</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
                         <span class="n">parser</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Parses a single HTML element; it is an error if there is more than</span>
 <span class="sd">    one element, or if anything but whitespace precedes or follows the</span>
 <span class="sd">    element.</span>
 
 
 <div class="viewcode-block" id="fromstring"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.fromstring">[docs]</a><span class="k">def</span> <span class="nf">fromstring</span><span class="p">(</span><span class="n">html</span><span class="p">,</span> <span class="n">base_url</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">parser</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Parse the html, returning a single element/document.</span>
 
 <span class="sd">    This tries to minimally parse the chunk of text, without knowing if it</span>
 
 
 <div class="viewcode-block" id="parse"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.parse">[docs]</a><span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">filename_or_url</span><span class="p">,</span> <span class="n">parser</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">base_url</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Parse a filename, URL, or file-like object into an HTML document</span>
 <span class="sd">    tree.  Note: this returns a tree, not an element.  Use</span>
 <span class="sd">    ``parse(...).getroot()`` to get the document root.</span>
 <span class="c1">################################################################################</span>
 
 <div class="viewcode-block" id="FormElement"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.FormElement">[docs]</a><span class="k">class</span> <span class="nc">FormElement</span><span class="p">(</span><span class="n">HtmlElement</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Represents a &lt;form&gt; element.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">inputs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Returns an accessor for all the input elements in the form.</span>
 
 <span class="sd">        See `InputGetter` for more information about the object.</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">fields</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Dictionary-like object that represents all the fields in this</span>
 <span class="sd">        form.  You can set values in this dictionary to effect the</span>
 <span class="sd">        form.</span>
         <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span></div>
 
 <div class="viewcode-block" id="FormElement.form_values"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.FormElement.form_values">[docs]</a>    <span class="k">def</span> <span class="nf">form_values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Return a list of tuples of the field values for the form.</span>
 <span class="sd">        This is suitable to be passed to ``urllib.urlencode()``.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">action</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Get/set the form&#39;s ``action`` attribute.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="n">base_url</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_url</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">method</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Get/set the form&#39;s method.  Always returns a capitalized</span>
 <span class="sd">        string, and defaults to ``&#39;GET&#39;``</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 
 
 <div class="viewcode-block" id="submit_form"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.submit_form">[docs]</a><span class="k">def</span> <span class="nf">submit_form</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">extra_values</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">open_http</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Helper function to submit a form.  Returns a file-like object, as from</span>
 <span class="sd">    ``urllib.urlopen()``.  This object also has a ``.geturl()`` function,</span>
 <span class="sd">    which shows the URL if there were any redirects.</span>
 
 <div class="viewcode-block" id="InputGetter"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.InputGetter">[docs]</a><span class="k">class</span> <span class="nc">InputGetter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
 
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    An accessor that represents all the input fields in a form.</span>
 
 <span class="sd">    You can get fields by name from this, with</span>
         <span class="k">return</span> <span class="kc">False</span>
 
 <div class="viewcode-block" id="InputGetter.keys"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.InputGetter.keys">[docs]</a>    <span class="k">def</span> <span class="nf">keys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Returns all unique field names, in document order.</span>
 
 <span class="sd">        :return: A list of all unique field names.</span>
         <span class="k">return</span> <span class="n">names</span></div>
 
 <div class="viewcode-block" id="InputGetter.items"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.InputGetter.items">[docs]</a>    <span class="k">def</span> <span class="nf">items</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Returns all fields with their names, similar to dict.items().</span>
 
 <span class="sd">        :return: A list of (name, field) tuples.</span>
 
 
 <div class="viewcode-block" id="InputMixin"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.InputMixin">[docs]</a><span class="k">class</span> <span class="nc">InputMixin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Mix-in for all input elements (input, select, and textarea)</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Get/set the name of the element</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">)</span>
 
 
 <div class="viewcode-block" id="TextareaElement"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.TextareaElement">[docs]</a><span class="k">class</span> <span class="nc">TextareaElement</span><span class="p">(</span><span class="n">InputMixin</span><span class="p">,</span> <span class="n">HtmlElement</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    ``&lt;textarea&gt;`` element.  You can get the name with ``.name`` and</span>
 <span class="sd">    get/set the value with ``.value``</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Get/set the value (which is the contents of this element)</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="n">content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span>
 
 
 <div class="viewcode-block" id="SelectElement"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.SelectElement">[docs]</a><span class="k">class</span> <span class="nc">SelectElement</span><span class="p">(</span><span class="n">InputMixin</span><span class="p">,</span> <span class="n">HtmlElement</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    ``&lt;select&gt;`` element.  You can get the name with ``.name``.</span>
 
 <span class="sd">    ``.value`` will be the value of the selected option, unless this</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Get/set the value of this select (the selected option).</span>
 
 <span class="sd">        If this is a multi-select, this is a set-like object that</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">value_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        All the possible values this select can have (the ``value``</span>
 <span class="sd">        attribute of all the ``&lt;option&gt;`` elements.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">multiple</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Boolean attribute: is there a ``multiple`` attribute on this element.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="s1">&#39;multiple&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrib</span>
 
 
 <div class="viewcode-block" id="MultipleSelectOptions"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.MultipleSelectOptions">[docs]</a><span class="k">class</span> <span class="nc">MultipleSelectOptions</span><span class="p">(</span><span class="n">SetMixin</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Represents all the selected options in a ``&lt;select multiple&gt;`` element.</span>
 
 <span class="sd">    You can add to this set-like option to select an option, or remove</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Iterator of all the ``&lt;option&gt;`` elements.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="n">_options_xpath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">select</span><span class="p">))</span>
 
 
 <div class="viewcode-block" id="RadioGroup"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.RadioGroup">[docs]</a><span class="k">class</span> <span class="nc">RadioGroup</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    This object represents several ``&lt;input type=radio&gt;`` elements</span>
 <span class="sd">    that have the same name.</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Get/set the value, which checks the radio with that value (and</span>
 <span class="sd">        unchecks any other value).</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">value_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Returns a list of all the possible values.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</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="s1">&#39;value&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">]</span>
 
 
 <div class="viewcode-block" id="CheckboxGroup"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.CheckboxGroup">[docs]</a><span class="k">class</span> <span class="nc">CheckboxGroup</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Represents a group of checkboxes (``&lt;input type=checkbox&gt;``) that</span>
 <span class="sd">    have the same name.</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Return a set-like object that can be modified to check or</span>
 <span class="sd">        uncheck individual checkboxes according to their value.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">value_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Returns a list of all the possible values.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</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="s1">&#39;value&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">]</span>
 
 
 <div class="viewcode-block" id="CheckboxValues"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.CheckboxValues">[docs]</a><span class="k">class</span> <span class="nc">CheckboxValues</span><span class="p">(</span><span class="n">SetMixin</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Represents the values of the checked checkboxes in a group of</span>
 <span class="sd">    checkboxes with the same name.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
 
 
 <div class="viewcode-block" id="InputElement"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.InputElement">[docs]</a><span class="k">class</span> <span class="nc">InputElement</span><span class="p">(</span><span class="n">InputMixin</span><span class="p">,</span> <span class="n">HtmlElement</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Represents an ``&lt;input&gt;`` element.</span>
 
 <span class="sd">    You can get the type with ``.type`` (which is lower-cased and</span>
     <span class="c1">## FIXME: I&#39;m a little uncomfortable with the use of .checked</span>
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Get/set the value of this element, using the ``value`` attribute.</span>
 
 <span class="sd">        Also, if this is a checkbox and it has no value, this defaults</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Return the type of this element (using the type attribute).</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;type&#39;</span><span class="p">,</span> <span class="s1">&#39;text&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">checkable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Boolean: can this element be checked?</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;checkbox&#39;</span><span class="p">,</span> <span class="s1">&#39;radio&#39;</span><span class="p">)</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">checked</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Boolean attribute to get/set the presence of the ``checked``</span>
 <span class="sd">        attribute.</span>
 
 
 
 <div class="viewcode-block" id="LabelElement"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.LabelElement">[docs]</a><span class="k">class</span> <span class="nc">LabelElement</span><span class="p">(</span><span class="n">HtmlElement</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Represents a ``&lt;label&gt;`` element.</span>
 
 <span class="sd">    Label elements are linked to other elements with their ``for``</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">for_element</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">        Get/set the element this label points to.  Return None if it</span>
 <span class="sd">        can&#39;t be found.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 <span class="c1">############################################################</span>
 
 <div class="viewcode-block" id="html_to_xhtml"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.html_to_xhtml">[docs]</a><span class="k">def</span> <span class="nf">html_to_xhtml</span><span class="p">(</span><span class="n">html</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Convert all tags in an HTML tree to XHTML by moving them to the</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Convert all tags in an HTML tree to XHTML by moving them to the</span>
 <span class="sd">    XHTML namespace.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="k">try</span><span class="p">:</span>
 
 
 <div class="viewcode-block" id="xhtml_to_html"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.xhtml_to_html">[docs]</a><span class="k">def</span> <span class="nf">xhtml_to_html</span><span class="p">(</span><span class="n">xhtml</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Convert all tags in an XHTML tree to HTML by removing their</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Convert all tags in an XHTML tree to HTML by removing their</span>
 <span class="sd">    XHTML namespace.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="k">try</span><span class="p">:</span>
 
 <div class="viewcode-block" id="tostring"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.tostring">[docs]</a><span class="k">def</span> <span class="nf">tostring</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">include_meta_content_type</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
              <span class="n">encoding</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s2">&quot;html&quot;</span><span class="p">,</span> <span class="n">with_tail</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">doctype</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Return an HTML string representation of the document.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Return an HTML string representation of the document.</span>
 
 <span class="sd">    Note: if include_meta_content_type is true this will create a</span>
 <span class="sd">    ``&lt;meta http-equiv=&quot;Content-Type&quot; ...&gt;`` tag in the head;</span>
 
 
 <div class="viewcode-block" id="open_in_browser"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.open_in_browser">[docs]</a><span class="k">def</span> <span class="nf">open_in_browser</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Open the HTML document in a web browser, saving it to a temporary</span>
 <span class="sd">    file to open it.  Note that this does not delete the file after</span>
 <span class="sd">    use.  This is mainly meant for debugging.</span>
 <span class="c1">################################################################################</span>
 
 <div class="viewcode-block" id="HTMLParser"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.HTMLParser">[docs]</a><span class="k">class</span> <span class="nc">HTMLParser</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">HTMLParser</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;An HTML parser that is configured to return lxml.html Element</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;An HTML parser that is configured to return lxml.html Element</span>
 <span class="sd">    objects.</span>
 <span class="sd">    &quot;&quot;&quot;</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
 
 
 <div class="viewcode-block" id="XHTMLParser"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.XHTMLParser">[docs]</a><span class="k">class</span> <span class="nc">XHTMLParser</span><span class="p">(</span><span class="n">etree</span><span class="o">.</span><span class="n">XMLParser</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;An XML parser that is configured to return lxml.html Element</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;An XML parser that is configured to return lxml.html Element</span>
 <span class="sd">    objects.</span>
 
 <span class="sd">    Note that this parser is not really XHTML aware unless you let it</span>
 
 
 <div class="viewcode-block" id="Element"><a class="viewcode-back" href="../../lxml.html.html#lxml.html.Element">[docs]</a><span class="k">def</span> <span class="nf">Element</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Create a new HTML Element.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Create a new HTML Element.</span>
 
 <span class="sd">    This can also be used for XHTML documents.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
index 4f180cc1ab63e94d563b037241b410feb56b7139..c67334e006c440605291e5fb7583a88a563b62a4 100644 (file)
     <script src="../../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
         <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../../../index.html" class="icon icon-home">
+            lxml
+              <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="../../index.html">Module code</a></li>
+          <li class="breadcrumb-item"><a href="../../lxml.html">lxml</a></li>
+          <li class="breadcrumb-item"><a href="../html.html">lxml.html</a></li>
+      <li class="breadcrumb-item active">lxml.html._diffcommand</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
index 3fbf66f8e7ef0c9bc43ad526b3215b3856c23039..16e314754424e9e735f6dd43f4bb8bcd542bc201 100644 (file)
     <script src="../../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
         <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../../../index.html" class="icon icon-home">
+            lxml
+              <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="../../index.html">Module code</a></li>
+          <li class="breadcrumb-item"><a href="../../lxml.html">lxml</a></li>
+          <li class="breadcrumb-item"><a href="../html.html">lxml.html</a></li>
+      <li class="breadcrumb-item active">lxml.html._setmixin</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
 
 <div class="viewcode-block" id="SetMixin"><a class="viewcode-back" href="../../../lxml.html._setmixin.html#lxml.html._setmixin.SetMixin">[docs]</a><span class="k">class</span> <span class="nc">SetMixin</span><span class="p">(</span><span class="n">MutableSet</span><span class="p">):</span>
 
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Mix-in for sets.  You must define __iter__, add, remove</span>
 <span class="sd">    &quot;&quot;&quot;</span>
 
index 3f833ba78e2f44554f5be172095a81d29347b50e..08a56e6f347ef5a396a479187407564b5d382ea6 100644 (file)
     <script src="../../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
         <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../../../index.html" class="icon icon-home">
+            lxml
+              <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="../../index.html">Module code</a></li>
+          <li class="breadcrumb-item"><a href="../../lxml.html">lxml</a></li>
+          <li class="breadcrumb-item"><a href="../html.html">lxml.html</a></li>
+      <li class="breadcrumb-item active">lxml.html.builder</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
index 37469051613fd9aa94f7087c199b0d6dc8dcce3a..20041ae8bf80be9bd26223af726ce2847f4990a1 100644 (file)
     <script src="../../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
         <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../../../index.html" class="icon icon-home">
+            lxml
+              <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="../../index.html">Module code</a></li>
+          <li class="breadcrumb-item"><a href="../../lxml.html">lxml</a></li>
+          <li class="breadcrumb-item"><a href="../html.html">lxml.html</a></li>
+      <li class="breadcrumb-item active">lxml.html.formfill</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
            <span class="s1">&#39;DefaultErrorCreator&#39;</span><span class="p">]</span>
 
 <div class="viewcode-block" id="FormNotFound"><a class="viewcode-back" href="../../../lxml.html.formfill.html#lxml.html.formfill.FormNotFound">[docs]</a><span class="k">class</span> <span class="nc">FormNotFound</span><span class="p">(</span><span class="ne">LookupError</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
 <span class="sd">    Raised when no form can be found</span>
 <span class="sd">    &quot;&quot;&quot;</span></div>
 
index 85e229ae0a5978fd2a6893d26c17d19f35248283..21b44e7a8452a2e0ea39dba416956ccd40cc2c64 100644 (file)
     <script src="../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
         <script src="../../_static/doctools.js"></script>
+        <script src="../../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../../index.html" class="icon icon-home">
+            lxml
+              <img src="../../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="../index.html">Module code</a></li>
+          <li class="breadcrumb-item"><a href="../lxml.html">lxml</a></li>
+      <li class="breadcrumb-item active">lxml.isoschematron</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
 
 
 <div class="viewcode-block" id="stylesheet_params"><a class="viewcode-back" href="../../lxml.isoschematron.html#lxml.isoschematron.stylesheet_params">[docs]</a><span class="k">def</span> <span class="nf">stylesheet_params</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Convert keyword args to a dictionary of stylesheet parameters.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Convert keyword args to a dictionary of stylesheet parameters.</span>
 <span class="sd">    XSL stylesheet parameters must be XPath expressions, i.e.:</span>
 
 <span class="sd">    * string expressions, like &quot;&#39;5&#39;&quot;</span>
 
 <span class="c1"># helper function for use in Schematron __init__</span>
 <div class="viewcode-block" id="_stylesheet_param_dict"><a class="viewcode-back" href="../../lxml.isoschematron.html#lxml.isoschematron._stylesheet_param_dict">[docs]</a><span class="k">def</span> <span class="nf">_stylesheet_param_dict</span><span class="p">(</span><span class="n">paramsDict</span><span class="p">,</span> <span class="n">kwargsDict</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Return a copy of paramsDict, updated with kwargsDict entries, wrapped as</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Return a copy of paramsDict, updated with kwargsDict entries, wrapped as</span>
 <span class="sd">    stylesheet arguments.</span>
 <span class="sd">    kwargsDict entries with a value of None are ignored.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
 
 
 <div class="viewcode-block" id="Schematron"><a class="viewcode-back" href="../../lxml.isoschematron.html#lxml.isoschematron.Schematron">[docs]</a><span class="k">class</span> <span class="nc">Schematron</span><span class="p">(</span><span class="n">_etree</span><span class="o">.</span><span class="n">_Validator</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;An ISO Schematron validator.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;An ISO Schematron validator.</span>
 
 <span class="sd">    Pass a root Element or an ElementTree to turn it into a validator.</span>
 <span class="sd">    Alternatively, pass a filename as keyword argument &#39;file&#39; to parse from</span>
         <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;svrl&#39;</span><span class="p">:</span> <span class="n">SVRL_NS</span><span class="p">})</span>
 
 <div class="viewcode-block" id="Schematron._extract"><a class="viewcode-back" href="../../lxml.isoschematron.html#lxml.isoschematron.Schematron._extract">[docs]</a>    <span class="k">def</span> <span class="nf">_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">element</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Extract embedded schematron schema from non-schematron host schema.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Extract embedded schematron schema from non-schematron host schema.</span>
 <span class="sd">        This method will only be called by __init__ if the given schema document</span>
 <span class="sd">        is not a schematron schema by itself.</span>
 <span class="sd">        Must return a schematron schema document tree or None.</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">_validator</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">validator_xslt</span><span class="p">)</span>
 
     <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">etree</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Validate doc using Schematron.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Validate doc using Schematron.</span>
 
 <span class="sd">        Returns true if document is valid, false if not.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">schematron</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;ISO-schematron schema document (None if object has been initialized</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;ISO-schematron schema document (None if object has been initialized</span>
 <span class="sd">        with store_schematron=False).</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schematron</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">validator_xslt</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;ISO-schematron skeleton implementation XSLT validator document (None</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;ISO-schematron skeleton implementation XSLT validator document (None</span>
 <span class="sd">        if object has been initialized with store_xslt=False).</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_validator_xslt</span>
 
     <span class="nd">@property</span>
     <span class="k">def</span> <span class="nf">validation_report</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;ISO-schematron validation result report (None if result-storing has</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;ISO-schematron validation result report (None if result-storing has</span>
 <span class="sd">        been turned off).</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_validation_report</span></div>
index 8c960bd0e549c3292e969e53baaa19be26bc6712..71bc7d6bad2ce60e092c43892c265fd8f09af1bb 100644 (file)
     <script src="../../../_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
         <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/sphinx_highlight.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" /> 
     <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"> lxml
-            <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="../../../index.html" class="icon icon-home">
+            lxml
+              <img src="../../../_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -80,9 +84,9 @@
         <div class="rst-content">
           <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>xml.sax.handler</li>
+      <li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="../../index.html">Module code</a></li>
+      <li class="breadcrumb-item active">xml.sax.handler</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
 <span class="c1"># ===== ERRORHANDLER =====</span>
 
 <span class="k">class</span> <span class="nc">ErrorHandler</span><span class="p">:</span>
-    <span class="sd">&quot;&quot;&quot;Basic interface for SAX error handlers.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Basic interface for SAX error handlers.</span>
 
 <span class="sd">    If you create an object that implements this interface, then</span>
 <span class="sd">    register the object with your XMLReader, the parser will call the</span>
 <span class="c1"># ===== CONTENTHANDLER =====</span>
 
 <span class="k">class</span> <span class="nc">ContentHandler</span><span class="p">:</span>
-    <span class="sd">&quot;&quot;&quot;Interface for receiving logical document content events.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Interface for receiving logical document content events.</span>
 
 <span class="sd">    This is the main callback interface in SAX, and the one most</span>
 <span class="sd">    important to applications. The order of events in this interface</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">_locator</span> <span class="o">=</span> <span class="kc">None</span>
 
     <span class="k">def</span> <span class="nf">setDocumentLocator</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">locator</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Called by the parser to give the application a locator for</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Called by the parser to give the application a locator for</span>
 <span class="sd">        locating the origin of document events.</span>
 
 <span class="sd">        SAX parsers are strongly encouraged (though not absolutely</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">_locator</span> <span class="o">=</span> <span class="n">locator</span>
 
     <span class="k">def</span> <span class="nf">startDocument</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Receive notification of the beginning of a document.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Receive notification of the beginning of a document.</span>
 
 <span class="sd">        The SAX parser will invoke this method only once, before any</span>
 <span class="sd">        other methods in this interface or in DTDHandler (except for</span>
 <span class="sd">        setDocumentLocator).&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">endDocument</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Receive notification of the end of a document.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Receive notification of the end of a document.</span>
 
 <span class="sd">        The SAX parser will invoke this method only once, and it will</span>
 <span class="sd">        be the last method invoked during the parse. The parser shall</span>
 <span class="sd">        input.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">startPrefixMapping</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">uri</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Begin the scope of a prefix-URI Namespace mapping.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Begin the scope of a prefix-URI Namespace mapping.</span>
 
 <span class="sd">        The information from this event is not necessary for normal</span>
 <span class="sd">        Namespace processing: the SAX XML reader will automatically</span>
 <span class="sd">        not guaranteed.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">endPrefixMapping</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;End the scope of a prefix-URI mapping.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;End the scope of a prefix-URI mapping.</span>
 
 <span class="sd">        See startPrefixMapping for details. This event will always</span>
 <span class="sd">        occur after the corresponding endElement event, but the order</span>
 <span class="sd">        of endPrefixMapping events is not otherwise guaranteed.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">startElement</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">attrs</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Signals the start of an element in non-namespace mode.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Signals the start of an element in non-namespace mode.</span>
 
 <span class="sd">        The name parameter contains the raw XML 1.0 name of the</span>
 <span class="sd">        element type as a string and the attrs parameter holds an</span>
 <span class="sd">        the element.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">endElement</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="sd">&quot;&quot;&quot;Signals the end of an element in non-namespace mode.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Signals the end of an element in non-namespace mode.</span>
 
 <span class="sd">        The name parameter contains the name of the element type, just</span>
 <span class="sd">        as with the startElement event.&quot;&quot;&quot;</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">attrs</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Signals the start of an element in namespace mode.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Signals the start of an element in namespace mode.</span>
 
 <span class="sd">        The name parameter contains the name of the element type as a</span>
 <span class="sd">        (uri, localname) tuple, the qname parameter the raw XML 1.0</span>
 <span class="sd">        no namespace.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">endElementNS</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="sd">&quot;&quot;&quot;Signals the end of an element in namespace mode.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Signals the end of an element in namespace mode.</span>
 
 <span class="sd">        The name parameter contains the name of the element type, just</span>
 <span class="sd">        as with the startElementNS event.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">characters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Receive notification of character data.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Receive notification of character data.</span>
 
 <span class="sd">        The Parser will call this method to report each chunk of</span>
 <span class="sd">        character data. SAX parsers may return all contiguous</span>
 <span class="sd">        Locator provides useful information.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">ignorableWhitespace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">whitespace</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Receive notification of ignorable whitespace in element content.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Receive notification of ignorable whitespace in element content.</span>
 
 <span class="sd">        Validating Parsers must use this method to report each chunk</span>
 <span class="sd">        of ignorable whitespace (see the W3C XML 1.0 recommendation,</span>
 <span class="sd">        information.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">processingInstruction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Receive notification of a processing instruction.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Receive notification of a processing instruction.</span>
 
 <span class="sd">        The Parser will invoke this method once for each processing</span>
 <span class="sd">        instruction found: note that processing instructions may occur</span>
 <span class="sd">        using this method.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">skippedEntity</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="sd">&quot;&quot;&quot;Receive notification of a skipped entity.</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Receive notification of a skipped entity.</span>
 
 <span class="sd">        The Parser will invoke this method once for each entity</span>
 <span class="sd">        skipped. Non-validating processors may skip entities if they</span>
 <span class="c1"># ===== DTDHandler =====</span>
 
 <span class="k">class</span> <span class="nc">DTDHandler</span><span class="p">:</span>
-    <span class="sd">&quot;&quot;&quot;Handle DTD events.</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle DTD events.</span>
 
 <span class="sd">    This interface specifies only those DTD events required for basic</span>
 <span class="sd">    parsing (unparsed entities and attributes).&quot;&quot;&quot;</span>
 <span class="c1"># ===== ENTITYRESOLVER =====</span>
 
 <span class="k">class</span> <span class="nc">EntityResolver</span><span class="p">:</span>
-    <span class="sd">&quot;&quot;&quot;Basic interface for resolving entities. If you create an object</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Basic interface for resolving entities. If you create an object</span>
 <span class="sd">    implementing this interface, then register the object with your</span>
 <span class="sd">    Parser, the parser will call the method in your object to</span>
 <span class="sd">    resolve all external entities. Note that DefaultHandler implements</span>
 <span class="sd">    this interface with the default behaviour.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="nf">resolveEntity</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">publicId</span><span class="p">,</span> <span class="n">systemId</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Resolve the system identifier of an entity and return either</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Resolve the system identifier of an entity and return either</span>
 <span class="sd">        the system identifier to read from as a string, or an InputSource</span>
 <span class="sd">        to read from.&quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="n">systemId</span>
                   <span class="n">property_xml_string</span><span class="p">,</span>
                   <span class="n">property_encoding</span><span class="p">,</span>
                   <span class="n">property_interning_dict</span><span class="p">]</span>
+
+
+<span class="k">class</span> <span class="nc">LexicalHandler</span><span class="p">:</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Optional SAX2 handler for lexical events.</span>
+
+<span class="sd">    This handler is used to obtain lexical information about an XML</span>
+<span class="sd">    document, that is, information about how the document was encoded</span>
+<span class="sd">    (as opposed to what it contains, which is reported to the</span>
+<span class="sd">    ContentHandler), such as comments and CDATA marked section</span>
+<span class="sd">    boundaries.</span>
+
+<span class="sd">    To set the LexicalHandler of an XMLReader, use the setProperty</span>
+<span class="sd">    method with the property identifier</span>
+<span class="sd">    &#39;http://xml.org/sax/properties/lexical-handler&#39;.&quot;&quot;&quot;</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">content</span><span class="p">):</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Reports a comment anywhere in the document (including the</span>
+<span class="sd">        DTD and outside the document element).</span>
+
+<span class="sd">        content is a string that holds the contents of the comment.&quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">startDTD</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">public_id</span><span class="p">,</span> <span class="n">system_id</span><span class="p">):</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Report the start of the DTD declarations, if the document</span>
+<span class="sd">        has an associated DTD.</span>
+
+<span class="sd">        A startEntity event will be reported before declaration events</span>
+<span class="sd">        from the external DTD subset are reported, and this can be</span>
+<span class="sd">        used to infer from which subset DTD declarations derive.</span>
+
+<span class="sd">        name is the name of the document element type, public_id the</span>
+<span class="sd">        public identifier of the DTD (or None if none were supplied)</span>
+<span class="sd">        and system_id the system identfier of the external subset (or</span>
+<span class="sd">        None if none were supplied).&quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">endDTD</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Signals the end of DTD declarations.&quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">startCDATA</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Reports the beginning of a CDATA marked section.</span>
+
+<span class="sd">        The contents of the CDATA marked section will be reported</span>
+<span class="sd">        through the characters event.&quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">endCDATA</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Reports the end of a CDATA marked section.&quot;&quot;&quot;</span>
 </pre></div>
 
            </div>
diff --git a/doc/html/apidoc/_static/_sphinx_javascript_frameworks_compat.js b/doc/html/apidoc/_static/_sphinx_javascript_frameworks_compat.js
new file mode 100644 (file)
index 0000000..8141580
--- /dev/null
@@ -0,0 +1,123 @@
+/* Compatability shim for jQuery and underscores.js.
+ *
+ * Copyright Sphinx contributors
+ * Released under the two clause BSD licence
+ */
+
+/**
+ * small helper function to urldecode strings
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
+ */
+jQuery.urldecode = function(x) {
+    if (!x) {
+        return x
+    }
+    return decodeURIComponent(x.replace(/\+/g, ' '));
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+    if (typeof s === 'undefined')
+        s = document.location.search;
+    var parts = s.substr(s.indexOf('?') + 1).split('&');
+    var result = {};
+    for (var i = 0; i < parts.length; i++) {
+        var tmp = parts[i].split('=', 2);
+        var key = jQuery.urldecode(tmp[0]);
+        var value = jQuery.urldecode(tmp[1]);
+        if (key in result)
+            result[key].push(value);
+        else
+            result[key] = [value];
+    }
+    return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+    function highlight(node, addItems) {
+        if (node.nodeType === 3) {
+            var val = node.nodeValue;
+            var pos = val.toLowerCase().indexOf(text);
+            if (pos >= 0 &&
+                !jQuery(node.parentNode).hasClass(className) &&
+                !jQuery(node.parentNode).hasClass("nohighlight")) {
+                var span;
+                var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
+                if (isInSVG) {
+                    span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+                } else {
+                    span = document.createElement("span");
+                    span.className = className;
+                }
+                span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+                node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+                    document.createTextNode(val.substr(pos + text.length)),
+                    node.nextSibling));
+                node.nodeValue = val.substr(0, pos);
+                if (isInSVG) {
+                    var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
+                    var bbox = node.parentElement.getBBox();
+                    rect.x.baseVal.value = bbox.x;
+                    rect.y.baseVal.value = bbox.y;
+                    rect.width.baseVal.value = bbox.width;
+                    rect.height.baseVal.value = bbox.height;
+                    rect.setAttribute('class', className);
+                    addItems.push({
+                        "parent": node.parentNode,
+                        "target": rect});
+                }
+            }
+        }
+        else if (!jQuery(node).is("button, select, textarea")) {
+            jQuery.each(node.childNodes, function() {
+                highlight(this, addItems);
+            });
+        }
+    }
+    var addItems = [];
+    var result = this.each(function() {
+        highlight(this, addItems);
+    });
+    for (var i = 0; i < addItems.length; ++i) {
+        jQuery(addItems[i].parent).before(addItems[i].target);
+    }
+    return result;
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+    jQuery.uaMatch = function(ua) {
+        ua = ua.toLowerCase();
+
+        var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+            /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+            /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+            /(msie) ([\w.]+)/.exec(ua) ||
+            ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+            [];
+
+        return {
+            browser: match[ 1 ] || "",
+            version: match[ 2 ] || "0"
+        };
+    };
+    jQuery.browser = {};
+    jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
index 7d5974c3221c0d7c3e746d64ce1dbed28a32cb91..7577acb1ad176e3f58c15ddf9bf1f73525dfe7ed 100644 (file)
@@ -4,7 +4,7 @@
  *
  * Sphinx stylesheet -- basic theme.
  *
- * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -236,16 +236,6 @@ div.body p, div.body dd, div.body li, div.body blockquote {
 a.headerlink {
     visibility: hidden;
 }
-a.brackets:before,
-span.brackets > a:before{
-    content: "[";
-}
-
-a.brackets:after,
-span.brackets > a:after {
-    content: "]";
-}
-
 
 h1:hover > a.headerlink,
 h2:hover > a.headerlink,
@@ -334,11 +324,17 @@ aside.sidebar {
 p.sidebar-title {
     font-weight: bold;
 }
+
+nav.contents,
+aside.topic,
 div.admonition, div.topic, blockquote {
     clear: left;
 }
 
 /* -- topics ---------------------------------------------------------------- */
+
+nav.contents,
+aside.topic,
 div.topic {
     border: 1px solid #ccc;
     padding: 7px;
@@ -377,6 +373,8 @@ div.body p.centered {
 
 div.sidebar > :last-child,
 aside.sidebar > :last-child,
+nav.contents > :last-child,
+aside.topic > :last-child,
 div.topic > :last-child,
 div.admonition > :last-child {
     margin-bottom: 0;
@@ -384,6 +382,8 @@ div.admonition > :last-child {
 
 div.sidebar::after,
 aside.sidebar::after,
+nav.contents::after,
+aside.topic::after,
 div.topic::after,
 div.admonition::after,
 blockquote::after {
@@ -609,25 +609,6 @@ ul.simple p {
     margin-bottom: 0;
 }
 
-/* Docutils 0.17 and older (footnotes & citations) */
-dl.footnote > dt,
-dl.citation > dt {
-    float: left;
-    margin-right: 0.5em;
-}
-
-dl.footnote > dd,
-dl.citation > dd {
-    margin-bottom: 0em;
-}
-
-dl.footnote > dd:after,
-dl.citation > dd:after {
-    content: "";
-    clear: both;
-}
-
-/* Docutils 0.18+ (footnotes & citations) */
 aside.footnote > span,
 div.citation > span {
     float: left;
@@ -652,8 +633,6 @@ div.citation > p:last-of-type:after {
     clear: both;
 }
 
-/* Footnotes & citations ends */
-
 dl.field-list {
     display: grid;
     grid-template-columns: fit-content(30%) auto;
@@ -666,10 +645,6 @@ dl.field-list > dt {
     padding-right: 5px;
 }
 
-dl.field-list > dt:after {
-    content: ":";
-}
-
 dl.field-list > dd {
     padding-left: 0.5em;
     margin-top: 0em;
index e380325bc6e273d9142c2369883d2a4b2a069cf1..c718cee4418893ad43bbac98411059097788706f 100644 (file)
@@ -1 +1 @@
-.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) 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#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.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}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{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}}
\ No newline at end of file
+.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) 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#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.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}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{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}}
\ No newline at end of file
index 0d9ae7e1a45b82198c53548383a570d924993371..19a446a0e70027fc1c2499729def6191c4bbbb20 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 .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}/*!
+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 button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,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 .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
+ */@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;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.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 p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.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 .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.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.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,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.citation>dd,html.writer-html5 .rst-content dl.citation>dt,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.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,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.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}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 aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.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 aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.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{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;overflow-wrap:normal}.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}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):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(.citation):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(.citation):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(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>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(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>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(.citation):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(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):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(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):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(.citation):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(.citation):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(.citation):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(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):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,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.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
diff --git a/doc/html/apidoc/_static/doctools.js b/doc/html/apidoc/_static/doctools.js
new file mode 100644 (file)
index 0000000..d06a71d
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Base JavaScript utilities for all Sphinx HTML documentation.
+ *
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+"use strict";
+
+const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
+  "TEXTAREA",
+  "INPUT",
+  "SELECT",
+  "BUTTON",
+]);
+
+const _ready = (callback) => {
+  if (document.readyState !== "loading") {
+    callback();
+  } else {
+    document.addEventListener("DOMContentLoaded", callback);
+  }
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const Documentation = {
+  init: () => {
+    Documentation.initDomainIndexTable();
+    Documentation.initOnKeyListeners();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS: {},
+  PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
+  LOCALE: "unknown",
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext: (string) => {
+    const translated = Documentation.TRANSLATIONS[string];
+    switch (typeof translated) {
+      case "undefined":
+        return string; // no translation
+      case "string":
+        return translated; // translation exists
+      default:
+        return translated[0]; // (singular, plural) translation tuple exists
+    }
+  },
+
+  ngettext: (singular, plural, n) => {
+    const translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated !== "undefined")
+      return translated[Documentation.PLURAL_EXPR(n)];
+    return n === 1 ? singular : plural;
+  },
+
+  addTranslations: (catalog) => {
+    Object.assign(Documentation.TRANSLATIONS, catalog.messages);
+    Documentation.PLURAL_EXPR = new Function(
+      "n",
+      `return (${catalog.plural_expr})`
+    );
+    Documentation.LOCALE = catalog.locale;
+  },
+
+  /**
+   * helper function to focus on search bar
+   */
+  focusSearchBar: () => {
+    document.querySelectorAll("input[name=q]")[0]?.focus();
+  },
+
+  /**
+   * Initialise the domain index toggle buttons
+   */
+  initDomainIndexTable: () => {
+    const toggler = (el) => {
+      const idNumber = el.id.substr(7);
+      const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
+      if (el.src.substr(-9) === "minus.png") {
+        el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
+        toggledRows.forEach((el) => (el.style.display = "none"));
+      } else {
+        el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
+        toggledRows.forEach((el) => (el.style.display = ""));
+      }
+    };
+
+    const togglerElements = document.querySelectorAll("img.toggler");
+    togglerElements.forEach((el) =>
+      el.addEventListener("click", (event) => toggler(event.currentTarget))
+    );
+    togglerElements.forEach((el) => (el.style.display = ""));
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
+  },
+
+  initOnKeyListeners: () => {
+    // only install a listener if it is really needed
+    if (
+      !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
+      !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
+    )
+      return;
+
+    document.addEventListener("keydown", (event) => {
+      // bail for input elements
+      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+      // bail with special keys
+      if (event.altKey || event.ctrlKey || event.metaKey) return;
+
+      if (!event.shiftKey) {
+        switch (event.key) {
+          case "ArrowLeft":
+            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+            const prevLink = document.querySelector('link[rel="prev"]');
+            if (prevLink && prevLink.href) {
+              window.location.href = prevLink.href;
+              event.preventDefault();
+            }
+            break;
+          case "ArrowRight":
+            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+            const nextLink = document.querySelector('link[rel="next"]');
+            if (nextLink && nextLink.href) {
+              window.location.href = nextLink.href;
+              event.preventDefault();
+            }
+            break;
+        }
+      }
+
+      // some keyboard layouts may need Shift to get /
+      switch (event.key) {
+        case "/":
+          if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
+          Documentation.focusSearchBar();
+          event.preventDefault();
+      }
+    });
+  },
+};
+
+// quick alias for translations
+const _ = Documentation.gettext;
+
+_ready(Documentation.init);
diff --git a/doc/html/apidoc/_static/documentation_options.js b/doc/html/apidoc/_static/documentation_options.js
new file mode 100644 (file)
index 0000000..b57ae3b
--- /dev/null
@@ -0,0 +1,14 @@
+var DOCUMENTATION_OPTIONS = {
+    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
+    VERSION: '',
+    LANGUAGE: 'en',
+    COLLAPSE_INDEX: false,
+    BUILDER: 'html',
+    FILE_SUFFIX: '.html',
+    LINK_SUFFIX: '.html',
+    HAS_SOURCE: true,
+    SOURCELINK_SUFFIX: '.txt',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/doc/html/apidoc/_static/file.png b/doc/html/apidoc/_static/file.png
new file mode 100644 (file)
index 0000000..a858a41
Binary files /dev/null and b/doc/html/apidoc/_static/file.png differ
diff --git a/doc/html/apidoc/_static/jquery.js b/doc/html/apidoc/_static/jquery.js
new file mode 100644 (file)
index 0000000..c4c6022
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
diff --git a/doc/html/apidoc/_static/js/badge_only.js b/doc/html/apidoc/_static/js/badge_only.js
new file mode 100644 (file)
index 0000000..526d723
--- /dev/null
@@ -0,0 +1 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});
\ No newline at end of file
diff --git a/doc/html/apidoc/_static/js/html5shiv-printshiv.min.js b/doc/html/apidoc/_static/js/html5shiv-printshiv.min.js
new file mode 100644 (file)
index 0000000..2b43bd0
--- /dev/null
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/doc/html/apidoc/_static/js/html5shiv.min.js b/doc/html/apidoc/_static/js/html5shiv.min.js
new file mode 100644 (file)
index 0000000..cd1c674
--- /dev/null
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
diff --git a/doc/html/apidoc/_static/js/theme.js b/doc/html/apidoc/_static/js/theme.js
new file mode 100644 (file)
index 0000000..1fddb6e
--- /dev/null
@@ -0,0 +1 @@
+!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),n("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),n("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n('<button class="toctree-expand" title="Open/close menu"></button>'),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e,t){var i=(new Date).getTime(),o=Math.max(0,16-(i-n)),r=window.setTimeout((function(){e(i+o)}),o);return n=i+o,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()}).call(window)},function(n,e){n.exports=jQuery},function(n,e,t){}]);
\ No newline at end of file
diff --git a/doc/html/apidoc/_static/language_data.js b/doc/html/apidoc/_static/language_data.js
new file mode 100644 (file)
index 0000000..250f566
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+ * language_data.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * This script contains the language-specific data used by searchtools.js,
+ * namely the list of stopwords, stemmer, scorer and splitter.
+ *
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
+
+
+/* Non-minified version is copied as a separate JS file, is available */
+
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
diff --git a/doc/html/apidoc/_static/minus.png b/doc/html/apidoc/_static/minus.png
new file mode 100644 (file)
index 0000000..d96755f
Binary files /dev/null and b/doc/html/apidoc/_static/minus.png differ
diff --git a/doc/html/apidoc/_static/plus.png b/doc/html/apidoc/_static/plus.png
new file mode 100644 (file)
index 0000000..7107cec
Binary files /dev/null and b/doc/html/apidoc/_static/plus.png differ
diff --git a/doc/html/apidoc/_static/python-xml.png b/doc/html/apidoc/_static/python-xml.png
new file mode 100644 (file)
index 0000000..2a630df
Binary files /dev/null and b/doc/html/apidoc/_static/python-xml.png differ
diff --git a/doc/html/apidoc/_static/searchtools.js b/doc/html/apidoc/_static/searchtools.js
new file mode 100644 (file)
index 0000000..97d56a7
--- /dev/null
@@ -0,0 +1,566 @@
+/*
+ * searchtools.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for the full-text search.
+ *
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+"use strict";
+
+/**
+ * Simple result scoring code.
+ */
+if (typeof Scorer === "undefined") {
+  var Scorer = {
+    // Implement the following function to further tweak the score for each result
+    // The function takes a result array [docname, title, anchor, descr, score, filename]
+    // and returns the new score.
+    /*
+    score: result => {
+      const [docname, title, anchor, descr, score, filename] = result
+      return score
+    },
+    */
+
+    // query matches the full name of an object
+    objNameMatch: 11,
+    // or matches in the last dotted part of the object name
+    objPartialMatch: 6,
+    // Additive scores depending on the priority of the object
+    objPrio: {
+      0: 15, // used to be importantResults
+      1: 5, // used to be objectResults
+      2: -5, // used to be unimportantResults
+    },
+    //  Used when the priority is not in the mapping.
+    objPrioDefault: 0,
+
+    // query found in title
+    title: 15,
+    partialTitle: 7,
+    // query found in terms
+    term: 5,
+    partialTerm: 2,
+  };
+}
+
+const _removeChildren = (element) => {
+  while (element && element.lastChild) element.removeChild(element.lastChild);
+};
+
+/**
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
+ */
+const _escapeRegExp = (string) =>
+  string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
+
+const _displayItem = (item, searchTerms) => {
+  const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
+  const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
+  const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+  const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
+  const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
+
+  const [docName, title, anchor, descr, score, _filename] = item;
+
+  let listItem = document.createElement("li");
+  let requestUrl;
+  let linkUrl;
+  if (docBuilder === "dirhtml") {
+    // dirhtml builder
+    let dirname = docName + "/";
+    if (dirname.match(/\/index\/$/))
+      dirname = dirname.substring(0, dirname.length - 6);
+    else if (dirname === "index/") dirname = "";
+    requestUrl = docUrlRoot + dirname;
+    linkUrl = requestUrl;
+  } else {
+    // normal html builders
+    requestUrl = docUrlRoot + docName + docFileSuffix;
+    linkUrl = docName + docLinkSuffix;
+  }
+  let linkEl = listItem.appendChild(document.createElement("a"));
+  linkEl.href = linkUrl + anchor;
+  linkEl.dataset.score = score;
+  linkEl.innerHTML = title;
+  if (descr)
+    listItem.appendChild(document.createElement("span")).innerHTML =
+      " (" + descr + ")";
+  else if (showSearchSummary)
+    fetch(requestUrl)
+      .then((responseData) => responseData.text())
+      .then((data) => {
+        if (data)
+          listItem.appendChild(
+            Search.makeSearchSummary(data, searchTerms)
+          );
+      });
+  Search.output.appendChild(listItem);
+};
+const _finishSearch = (resultCount) => {
+  Search.stopPulse();
+  Search.title.innerText = _("Search Results");
+  if (!resultCount)
+    Search.status.innerText = Documentation.gettext(
+      "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
+    );
+  else
+    Search.status.innerText = _(
+      `Search finished, found ${resultCount} page(s) matching the search query.`
+    );
+};
+const _displayNextItem = (
+  results,
+  resultCount,
+  searchTerms
+) => {
+  // results left, load the summary and display it
+  // this is intended to be dynamic (don't sub resultsCount)
+  if (results.length) {
+    _displayItem(results.pop(), searchTerms);
+    setTimeout(
+      () => _displayNextItem(results, resultCount, searchTerms),
+      5
+    );
+  }
+  // search finished, update title and status message
+  else _finishSearch(resultCount);
+};
+
+/**
+ * Default splitQuery function. Can be overridden in ``sphinx.search`` with a
+ * custom function per language.
+ *
+ * The regular expression works by splitting the string on consecutive characters
+ * that are not Unicode letters, numbers, underscores, or emoji characters.
+ * This is the same as ``\W+`` in Python, preserving the surrogate pair area.
+ */
+if (typeof splitQuery === "undefined") {
+  var splitQuery = (query) => query
+      .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
+      .filter(term => term)  // remove remaining empty strings
+}
+
+/**
+ * Search Module
+ */
+const Search = {
+  _index: null,
+  _queued_query: null,
+  _pulse_status: -1,
+
+  htmlToText: (htmlString) => {
+    const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
+    htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
+    const docContent = htmlElement.querySelector('[role="main"]');
+    if (docContent !== undefined) return docContent.textContent;
+    console.warn(
+      "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
+    );
+    return "";
+  },
+
+  init: () => {
+    const query = new URLSearchParams(window.location.search).get("q");
+    document
+      .querySelectorAll('input[name="q"]')
+      .forEach((el) => (el.value = query));
+    if (query) Search.performSearch(query);
+  },
+
+  loadIndex: (url) =>
+    (document.body.appendChild(document.createElement("script")).src = url),
+
+  setIndex: (index) => {
+    Search._index = index;
+    if (Search._queued_query !== null) {
+      const query = Search._queued_query;
+      Search._queued_query = null;
+      Search.query(query);
+    }
+  },
+
+  hasIndex: () => Search._index !== null,
+
+  deferQuery: (query) => (Search._queued_query = query),
+
+  stopPulse: () => (Search._pulse_status = -1),
+
+  startPulse: () => {
+    if (Search._pulse_status >= 0) return;
+
+    const pulse = () => {
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      Search.dots.innerText = ".".repeat(Search._pulse_status);
+      if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
+    };
+    pulse();
+  },
+
+  /**
+   * perform a search for something (or wait until index is loaded)
+   */
+  performSearch: (query) => {
+    // create the required interface elements
+    const searchText = document.createElement("h2");
+    searchText.textContent = _("Searching");
+    const searchSummary = document.createElement("p");
+    searchSummary.classList.add("search-summary");
+    searchSummary.innerText = "";
+    const searchList = document.createElement("ul");
+    searchList.classList.add("search");
+
+    const out = document.getElementById("search-results");
+    Search.title = out.appendChild(searchText);
+    Search.dots = Search.title.appendChild(document.createElement("span"));
+    Search.status = out.appendChild(searchSummary);
+    Search.output = out.appendChild(searchList);
+
+    const searchProgress = document.getElementById("search-progress");
+    // Some themes don't use the search progress node
+    if (searchProgress) {
+      searchProgress.innerText = _("Preparing search...");
+    }
+    Search.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (Search.hasIndex()) Search.query(query);
+    else Search.deferQuery(query);
+  },
+
+  /**
+   * execute search (requires search index to be loaded)
+   */
+  query: (query) => {
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const titles = Search._index.titles;
+    const allTitles = Search._index.alltitles;
+    const indexEntries = Search._index.indexentries;
+
+    // stem the search terms and add them to the correct list
+    const stemmer = new Stemmer();
+    const searchTerms = new Set();
+    const excludedTerms = new Set();
+    const highlightTerms = new Set();
+    const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
+    splitQuery(query.trim()).forEach((queryTerm) => {
+      const queryTermLower = queryTerm.toLowerCase();
+
+      // maybe skip this "word"
+      // stopwords array is from language_data.js
+      if (
+        stopwords.indexOf(queryTermLower) !== -1 ||
+        queryTerm.match(/^\d+$/)
+      )
+        return;
+
+      // stem the word
+      let word = stemmer.stemWord(queryTermLower);
+      // select the correct list
+      if (word[0] === "-") excludedTerms.add(word.substr(1));
+      else {
+        searchTerms.add(word);
+        highlightTerms.add(queryTermLower);
+      }
+    });
+
+    if (SPHINX_HIGHLIGHT_ENABLED) {  // set in sphinx_highlight.js
+      localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
+    }
+
+    // console.debug("SEARCH: searching for:");
+    // console.info("required: ", [...searchTerms]);
+    // console.info("excluded: ", [...excludedTerms]);
+
+    // array of [docname, title, anchor, descr, score, filename]
+    let results = [];
+    _removeChildren(document.getElementById("search-progress"));
+
+    const queryLower = query.toLowerCase();
+    for (const [title, foundTitles] of Object.entries(allTitles)) {
+      if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
+        for (const [file, id] of foundTitles) {
+          let score = Math.round(100 * queryLower.length / title.length)
+          results.push([
+            docNames[file],
+            titles[file] !== title ? `${titles[file]} > ${title}` : title,
+            id !== null ? "#" + id : "",
+            null,
+            score,
+            filenames[file],
+          ]);
+        }
+      }
+    }
+
+    // search for explicit entries in index directives
+    for (const [entry, foundEntries] of Object.entries(indexEntries)) {
+      if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
+        for (const [file, id] of foundEntries) {
+          let score = Math.round(100 * queryLower.length / entry.length)
+          results.push([
+            docNames[file],
+            titles[file],
+            id ? "#" + id : "",
+            null,
+            score,
+            filenames[file],
+          ]);
+        }
+      }
+    }
+
+    // lookup as object
+    objectTerms.forEach((term) =>
+      results.push(...Search.performObjectSearch(term, objectTerms))
+    );
+
+    // lookup as search terms in fulltext
+    results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
+
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
+
+    // now sort the results by score (in opposite order of appearance, since the
+    // display function below uses pop() to retrieve items) and then
+    // alphabetically
+    results.sort((a, b) => {
+      const leftScore = a[4];
+      const rightScore = b[4];
+      if (leftScore === rightScore) {
+        // same score: sort alphabetically
+        const leftTitle = a[1].toLowerCase();
+        const rightTitle = b[1].toLowerCase();
+        if (leftTitle === rightTitle) return 0;
+        return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
+      }
+      return leftScore > rightScore ? 1 : -1;
+    });
+
+    // remove duplicate search results
+    // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
+    let seen = new Set();
+    results = results.reverse().reduce((acc, result) => {
+      let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
+      if (!seen.has(resultStr)) {
+        acc.push(result);
+        seen.add(resultStr);
+      }
+      return acc;
+    }, []);
+
+    results = results.reverse();
+
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    // console.info("search results:", Search.lastresults);
+
+    // print the results
+    _displayNextItem(results, results.length, searchTerms);
+  },
+
+  /**
+   * search for object names
+   */
+  performObjectSearch: (object, objectTerms) => {
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const objects = Search._index.objects;
+    const objNames = Search._index.objnames;
+    const titles = Search._index.titles;
+
+    const results = [];
+
+    const objectSearchCallback = (prefix, match) => {
+      const name = match[4]
+      const fullname = (prefix ? prefix + "." : "") + name;
+      const fullnameLower = fullname.toLowerCase();
+      if (fullnameLower.indexOf(object) < 0) return;
+
+      let score = 0;
+      const parts = fullnameLower.split(".");
+
+      // check for different match types: exact matches of full name or
+      // "last name" (i.e. last dotted part)
+      if (fullnameLower === object || parts.slice(-1)[0] === object)
+        score += Scorer.objNameMatch;
+      else if (parts.slice(-1)[0].indexOf(object) > -1)
+        score += Scorer.objPartialMatch; // matches in last name
+
+      const objName = objNames[match[1]][2];
+      const title = titles[match[0]];
+
+      // If more than one term searched for, we require other words to be
+      // found in the name/title/description
+      const otherTerms = new Set(objectTerms);
+      otherTerms.delete(object);
+      if (otherTerms.size > 0) {
+        const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
+        if (
+          [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
+        )
+          return;
+      }
+
+      let anchor = match[3];
+      if (anchor === "") anchor = fullname;
+      else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
+
+      const descr = objName + _(", in ") + title;
+
+      // add custom score for some objects according to scorer
+      if (Scorer.objPrio.hasOwnProperty(match[2]))
+        score += Scorer.objPrio[match[2]];
+      else score += Scorer.objPrioDefault;
+
+      results.push([
+        docNames[match[0]],
+        fullname,
+        "#" + anchor,
+        descr,
+        score,
+        filenames[match[0]],
+      ]);
+    };
+    Object.keys(objects).forEach((prefix) =>
+      objects[prefix].forEach((array) =>
+        objectSearchCallback(prefix, array)
+      )
+    );
+    return results;
+  },
+
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch: (searchTerms, excludedTerms) => {
+    // prepare search
+    const terms = Search._index.terms;
+    const titleTerms = Search._index.titleterms;
+    const filenames = Search._index.filenames;
+    const docNames = Search._index.docnames;
+    const titles = Search._index.titles;
+
+    const scoreMap = new Map();
+    const fileMap = new Map();
+
+    // perform the search on the required terms
+    searchTerms.forEach((word) => {
+      const files = [];
+      const arr = [
+        { files: terms[word], score: Scorer.term },
+        { files: titleTerms[word], score: Scorer.title },
+      ];
+      // add support for partial matches
+      if (word.length > 2) {
+        const escapedWord = _escapeRegExp(word);
+        Object.keys(terms).forEach((term) => {
+          if (term.match(escapedWord) && !terms[word])
+            arr.push({ files: terms[term], score: Scorer.partialTerm });
+        });
+        Object.keys(titleTerms).forEach((term) => {
+          if (term.match(escapedWord) && !titleTerms[word])
+            arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
+        });
+      }
+
+      // no match but word was a required one
+      if (arr.every((record) => record.files === undefined)) return;
+
+      // found search word in contents
+      arr.forEach((record) => {
+        if (record.files === undefined) return;
+
+        let recordFiles = record.files;
+        if (recordFiles.length === undefined) recordFiles = [recordFiles];
+        files.push(...recordFiles);
+
+        // set score for the word in each file
+        recordFiles.forEach((file) => {
+          if (!scoreMap.has(file)) scoreMap.set(file, {});
+          scoreMap.get(file)[word] = record.score;
+        });
+      });
+
+      // create the mapping
+      files.forEach((file) => {
+        if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
+          fileMap.get(file).push(word);
+        else fileMap.set(file, [word]);
+      });
+    });
+
+    // now check if the files don't contain excluded terms
+    const results = [];
+    for (const [file, wordList] of fileMap) {
+      // check if all requirements are matched
+
+      // as search terms with length < 3 are discarded
+      const filteredTermCount = [...searchTerms].filter(
+        (term) => term.length > 2
+      ).length;
+      if (
+        wordList.length !== searchTerms.size &&
+        wordList.length !== filteredTermCount
+      )
+        continue;
+
+      // ensure that none of the excluded terms is in the search result
+      if (
+        [...excludedTerms].some(
+          (term) =>
+            terms[term] === file ||
+            titleTerms[term] === file ||
+            (terms[term] || []).includes(file) ||
+            (titleTerms[term] || []).includes(file)
+        )
+      )
+        break;
+
+      // select one (max) score for the file.
+      const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
+      // add result to the result list
+      results.push([
+        docNames[file],
+        titles[file],
+        "",
+        null,
+        score,
+        filenames[file],
+      ]);
+    }
+    return results;
+  },
+
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words.
+   */
+  makeSearchSummary: (htmlText, keywords) => {
+    const text = Search.htmlToText(htmlText);
+    if (text === "") return null;
+
+    const textLower = text.toLowerCase();
+    const actualStartPosition = [...keywords]
+      .map((k) => textLower.indexOf(k.toLowerCase()))
+      .filter((i) => i > -1)
+      .slice(-1)[0];
+    const startWithContext = Math.max(actualStartPosition - 120, 0);
+
+    const top = startWithContext === 0 ? "" : "...";
+    const tail = startWithContext + 240 < text.length ? "..." : "";
+
+    let summary = document.createElement("p");
+    summary.classList.add("context");
+    summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
+
+    return summary;
+  },
+};
+
+_ready(Search.init);
diff --git a/doc/html/apidoc/_static/sphinx_highlight.js b/doc/html/apidoc/_static/sphinx_highlight.js
new file mode 100644 (file)
index 0000000..aae669d
--- /dev/null
@@ -0,0 +1,144 @@
+/* Highlighting utilities for Sphinx HTML documentation. */
+"use strict";
+
+const SPHINX_HIGHLIGHT_ENABLED = true
+
+/**
+ * highlight a given string on a node by wrapping it in
+ * span elements with the given class name.
+ */
+const _highlight = (node, addItems, text, className) => {
+  if (node.nodeType === Node.TEXT_NODE) {
+    const val = node.nodeValue;
+    const parent = node.parentNode;
+    const pos = val.toLowerCase().indexOf(text);
+    if (
+      pos >= 0 &&
+      !parent.classList.contains(className) &&
+      !parent.classList.contains("nohighlight")
+    ) {
+      let span;
+
+      const closestNode = parent.closest("body, svg, foreignObject");
+      const isInSVG = closestNode && closestNode.matches("svg");
+      if (isInSVG) {
+        span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+      } else {
+        span = document.createElement("span");
+        span.classList.add(className);
+      }
+
+      span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+      parent.insertBefore(
+        span,
+        parent.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling
+        )
+      );
+      node.nodeValue = val.substr(0, pos);
+
+      if (isInSVG) {
+        const rect = document.createElementNS(
+          "http://www.w3.org/2000/svg",
+          "rect"
+        );
+        const bbox = parent.getBBox();
+        rect.x.baseVal.value = bbox.x;
+        rect.y.baseVal.value = bbox.y;
+        rect.width.baseVal.value = bbox.width;
+        rect.height.baseVal.value = bbox.height;
+        rect.setAttribute("class", className);
+        addItems.push({ parent: parent, target: rect });
+      }
+    }
+  } else if (node.matches && !node.matches("button, select, textarea")) {
+    node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
+  }
+};
+const _highlightText = (thisNode, text, className) => {
+  let addItems = [];
+  _highlight(thisNode, addItems, text, className);
+  addItems.forEach((obj) =>
+    obj.parent.insertAdjacentElement("beforebegin", obj.target)
+  );
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const SphinxHighlight = {
+
+  /**
+   * highlight the search words provided in localstorage in the text
+   */
+  highlightSearchWords: () => {
+    if (!SPHINX_HIGHLIGHT_ENABLED) return;  // bail if no highlight
+
+    // get and clear terms from localstorage
+    const url = new URL(window.location);
+    const highlight =
+        localStorage.getItem("sphinx_highlight_terms")
+        || url.searchParams.get("highlight")
+        || "";
+    localStorage.removeItem("sphinx_highlight_terms")
+    url.searchParams.delete("highlight");
+    window.history.replaceState({}, "", url);
+
+    // get individual terms from highlight string
+    const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
+    if (terms.length === 0) return; // nothing to do
+
+    // There should never be more than one element matching "div.body"
+    const divBody = document.querySelectorAll("div.body");
+    const body = divBody.length ? divBody[0] : document.querySelector("body");
+    window.setTimeout(() => {
+      terms.forEach((term) => _highlightText(body, term, "highlighted"));
+    }, 10);
+
+    const searchBox = document.getElementById("searchbox");
+    if (searchBox === null) return;
+    searchBox.appendChild(
+      document
+        .createRange()
+        .createContextualFragment(
+          '<p class="highlight-link">' +
+            '<a href="javascript:SphinxHighlight.hideSearchWords()">' +
+            _("Hide Search Matches") +
+            "</a></p>"
+        )
+    );
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords: () => {
+    document
+      .querySelectorAll("#searchbox .highlight-link")
+      .forEach((el) => el.remove());
+    document
+      .querySelectorAll("span.highlighted")
+      .forEach((el) => el.classList.remove("highlighted"));
+    localStorage.removeItem("sphinx_highlight_terms")
+  },
+
+  initEscapeListener: () => {
+    // only install a listener if it is really needed
+    if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
+
+    document.addEventListener("keydown", (event) => {
+      // bail for input elements
+      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+      // bail with special keys
+      if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
+      if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
+        SphinxHighlight.hideSearchWords();
+        event.preventDefault();
+      }
+    });
+  },
+};
+
+_ready(SphinxHighlight.highlightSearchWords);
+_ready(SphinxHighlight.initEscapeListener);
index f7ae3ac41a05108ecebb1bc6558621a3c54b25cd..b59076f18931e516c5d2eb6ccdde7e2aa7da2491 100644 (file)
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.js"></script>
     <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="#" />
     <link rel="search" title="Search" href="search.html" /> 
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -80,8 +84,8 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">Index</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
       </ul></li>
       <li><a href="lxml.html.clean.html#lxml.html.clean.Cleaner.add_nofollow">add_nofollow (lxml.html.clean.Cleaner attribute)</a>
 </li>
+      <li><a href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.add_note">add_note() (lxml.ElementInclude.FatalIncludeError method)</a>
+
+      <ul>
+        <li><a href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.add_note">(lxml.ElementInclude.LimitedRecursiveIncludeError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree._TargetParserResult.add_note">(lxml.etree._TargetParserResult method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.C14NError.add_note">(lxml.etree.C14NError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.DocumentInvalid.add_note">(lxml.etree.DocumentInvalid method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.DTDError.add_note">(lxml.etree.DTDError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.DTDParseError.add_note">(lxml.etree.DTDParseError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.DTDValidateError.add_note">(lxml.etree.DTDValidateError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.Error.add_note">(lxml.etree.Error method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.LxmlError.add_note">(lxml.etree.LxmlError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.LxmlRegistryError.add_note">(lxml.etree.LxmlRegistryError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.LxmlSyntaxError.add_note">(lxml.etree.LxmlSyntaxError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.NamespaceRegistryError.add_note">(lxml.etree.NamespaceRegistryError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.ParseError.add_note">(lxml.etree.ParseError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.ParserError.add_note">(lxml.etree.ParserError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.RelaxNGError.add_note">(lxml.etree.RelaxNGError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.RelaxNGParseError.add_note">(lxml.etree.RelaxNGParseError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.RelaxNGValidateError.add_note">(lxml.etree.RelaxNGValidateError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.SchematronError.add_note">(lxml.etree.SchematronError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.SchematronParseError.add_note">(lxml.etree.SchematronParseError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.SchematronValidateError.add_note">(lxml.etree.SchematronValidateError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.SerialisationError.add_note">(lxml.etree.SerialisationError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XIncludeError.add_note">(lxml.etree.XIncludeError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XMLSchemaError.add_note">(lxml.etree.XMLSchemaError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XMLSchemaParseError.add_note">(lxml.etree.XMLSchemaParseError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XMLSchemaValidateError.add_note">(lxml.etree.XMLSchemaValidateError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.add_note">(lxml.etree.XMLSyntaxAssertionError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XMLSyntaxError.add_note">(lxml.etree.XMLSyntaxError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XPathError.add_note">(lxml.etree.XPathError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XPathEvalError.add_note">(lxml.etree.XPathEvalError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XPathFunctionError.add_note">(lxml.etree.XPathFunctionError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XPathResultError.add_note">(lxml.etree.XPathResultError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XPathSyntaxError.add_note">(lxml.etree.XPathSyntaxError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XSLTApplyError.add_note">(lxml.etree.XSLTApplyError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XSLTError.add_note">(lxml.etree.XSLTError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XSLTExtensionError.add_note">(lxml.etree.XSLTExtensionError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XSLTParseError.add_note">(lxml.etree.XSLTParseError method)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XSLTSaveError.add_note">(lxml.etree.XSLTSaveError method)</a>
+</li>
+        <li><a href="lxml.html.diff.html#lxml.html.diff.NoDeletes.add_note">(lxml.html.diff.NoDeletes method)</a>
+</li>
+        <li><a href="lxml.html.formfill.html#lxml.html.formfill.FormNotFound.add_note">(lxml.html.formfill.FormNotFound method)</a>
+</li>
+        <li><a href="lxml.sax.html#lxml.sax.SaxError.add_note">(lxml.sax.SaxError method)</a>
+</li>
+      </ul></li>
       <li><a href="lxml.objectify.html#lxml.objectify.BoolElement.addattr">addattr() (lxml.objectify.BoolElement method)</a>
 
       <ul>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.AncestorsIterator">AncestorsIterator (class in lxml.etree)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="lxml.html._diffcommand.html#lxml.html._diffcommand.annotate">annotate() (in module lxml.html._diffcommand)</a>
 
       <ul>
         <li><a href="lxml.objectify.html#lxml.objectify.StringElement.append">(lxml.objectify.StringElement method)</a>
 </li>
       </ul></li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="lxml.html.builder.html#lxml.html.builder.APPLET">APPLET (in module lxml.html.builder)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.XSLT.apply">apply() (lxml.etree.XSLT method)</a>
 
       <ul>
         <li><a href="lxml.etree.html#lxml.etree.TreeBuilder.end">(lxml.etree.TreeBuilder method)</a>
+</li>
+      </ul></li>
+      <li><a href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.end_lineno">end_lineno (lxml.ElementInclude.FatalIncludeError attribute)</a>
+
+      <ul>
+        <li><a href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.end_lineno">(lxml.ElementInclude.LimitedRecursiveIncludeError attribute)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.LxmlSyntaxError.end_lineno">(lxml.etree.LxmlSyntaxError attribute)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.ParseError.end_lineno">(lxml.etree.ParseError attribute)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.end_lineno">(lxml.etree.XMLSyntaxAssertionError attribute)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XMLSyntaxError.end_lineno">(lxml.etree.XMLSyntaxError attribute)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XPathSyntaxError.end_lineno">(lxml.etree.XPathSyntaxError attribute)</a>
+</li>
+      </ul></li>
+      <li><a href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.end_offset">end_offset (lxml.ElementInclude.FatalIncludeError attribute)</a>
+
+      <ul>
+        <li><a href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.end_offset">(lxml.ElementInclude.LimitedRecursiveIncludeError attribute)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.LxmlSyntaxError.end_offset">(lxml.etree.LxmlSyntaxError attribute)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.ParseError.end_offset">(lxml.etree.ParseError attribute)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.end_offset">(lxml.etree.XMLSyntaxAssertionError attribute)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XMLSyntaxError.end_offset">(lxml.etree.XMLSyntaxError attribute)</a>
+</li>
+        <li><a href="lxml.etree.html#lxml.etree.XPathSyntaxError.end_offset">(lxml.etree.XPathSyntaxError attribute)</a>
 </li>
       </ul></li>
       <li><a href="lxml.html.diff.html#lxml.html.diff.end_tag">end_tag() (in module lxml.html.diff)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NAME_REQUIRED">ERR_NAME_REQUIRED (lxml.etree.ErrorTypes attribute)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NAME_TOO_LONG">ERR_NAME_TOO_LONG (lxml.etree.ErrorTypes attribute)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NMTOKEN_REQUIRED">ERR_NMTOKEN_REQUIRED (lxml.etree.ErrorTypes attribute)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NOTATION_NOT_FINISHED">ERR_NOTATION_NOT_FINISHED (lxml.etree.ErrorTypes attribute)</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NOTATION_NOT_STARTED">ERR_NOTATION_NOT_STARTED (lxml.etree.ErrorTypes attribute)</a>
 </li>
       <li><a href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NOTATION_PROCESSING">ERR_NOTATION_PROCESSING (lxml.etree.ErrorTypes attribute)</a>
index bc0695c9e0850b34f2390769c6df2d569e143b52..7fa452cdf68b23b7f0a5e95d11a97a6b6c312fdc 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml API Reference &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="#" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -82,8 +86,8 @@
         <div class="rst-content">
           <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><a href="#" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">lxml API Reference</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/index.rst.txt" rel="nofollow"> View page source</a>
       </li>
 </ul>
 </li>
 <li class="toctree-l2"><a class="reference internal" href="lxml.html#submodules">Submodules</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html">lxml.ElementInclude module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="lxml._elementpath.html">lxml._elementpath module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="lxml.builder.html">lxml.builder module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html">lxml.ElementInclude module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude._include"><code class="docutils literal notranslate"><span class="pre">_include()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude._lxml_default_loader"><code class="docutils literal notranslate"><span class="pre">_lxml_default_loader()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude._wrap_et_loader"><code class="docutils literal notranslate"><span class="pre">_wrap_et_loader()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.default_loader"><code class="docutils literal notranslate"><span class="pre">default_loader()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.include"><code class="docutils literal notranslate"><span class="pre">include()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml._elementpath.html">lxml._elementpath module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath._build_path_iterator"><code class="docutils literal notranslate"><span class="pre">_build_path_iterator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.find"><code class="docutils literal notranslate"><span class="pre">find()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.findall"><code class="docutils literal notranslate"><span class="pre">findall()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.findtext"><code class="docutils literal notranslate"><span class="pre">findtext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.iterfind"><code class="docutils literal notranslate"><span class="pre">iterfind()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_child"><code class="docutils literal notranslate"><span class="pre">prepare_child()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_descendant"><code class="docutils literal notranslate"><span class="pre">prepare_descendant()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_parent"><code class="docutils literal notranslate"><span class="pre">prepare_parent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_predicate"><code class="docutils literal notranslate"><span class="pre">prepare_predicate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_self"><code class="docutils literal notranslate"><span class="pre">prepare_self()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_star"><code class="docutils literal notranslate"><span class="pre">prepare_star()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.xpath_tokenizer"><code class="docutils literal notranslate"><span class="pre">xpath_tokenizer()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.builder.html">lxml.builder module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.builder.html#lxml.builder.ElementMaker"><code class="docutils literal notranslate"><span class="pre">ElementMaker</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.builder.html#lxml.builder.__pyx_unpickle_ElementMaker"><code class="docutils literal notranslate"><span class="pre">__pyx_unpickle_ElementMaker()</span></code></a></li>
+</ul>
+</li>
 <li class="toctree-l3"><a class="reference internal" href="lxml.cssselect.html">lxml.cssselect module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html">lxml.doctestcompare module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html">lxml.etree module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html">lxml.objectify module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html">lxml.sax module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html">lxml.doctestcompare module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare._RestoreChecker"><code class="docutils literal notranslate"><span class="pre">_RestoreChecker</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare._find_doctest_frame"><code class="docutils literal notranslate"><span class="pre">_find_doctest_frame()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.html_fromstring"><code class="docutils literal notranslate"><span class="pre">html_fromstring()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.install"><code class="docutils literal notranslate"><span class="pre">install()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.norm_whitespace"><code class="docutils literal notranslate"><span class="pre">norm_whitespace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.strip"><code class="docutils literal notranslate"><span class="pre">strip()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.temp_install"><code class="docutils literal notranslate"><span class="pre">temp_install()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html">lxml.etree module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NError"><code class="docutils literal notranslate"><span class="pre">C14NError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDError"><code class="docutils literal notranslate"><span class="pre">DTDError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDParseError"><code class="docutils literal notranslate"><span class="pre">DTDParseError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDValidateError"><code class="docutils literal notranslate"><span class="pre">DTDValidateError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocumentInvalid"><code class="docutils literal notranslate"><span class="pre">DocumentInvalid</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.Error"><code class="docutils literal notranslate"><span class="pre">Error</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlError"><code class="docutils literal notranslate"><span class="pre">LxmlError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlRegistryError"><code class="docutils literal notranslate"><span class="pre">LxmlRegistryError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.NamespaceRegistryError"><code class="docutils literal notranslate"><span class="pre">NamespaceRegistryError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError"><code class="docutils literal notranslate"><span class="pre">ParseError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParserError"><code class="docutils literal notranslate"><span class="pre">ParserError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGError"><code class="docutils literal notranslate"><span class="pre">RelaxNGError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGParseError"><code class="docutils literal notranslate"><span class="pre">RelaxNGParseError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGValidateError"><code class="docutils literal notranslate"><span class="pre">RelaxNGValidateError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronError"><code class="docutils literal notranslate"><span class="pre">SchematronError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronParseError"><code class="docutils literal notranslate"><span class="pre">SchematronParseError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronValidateError"><code class="docutils literal notranslate"><span class="pre">SchematronValidateError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.SerialisationError"><code class="docutils literal notranslate"><span class="pre">SerialisationError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XIncludeError"><code class="docutils literal notranslate"><span class="pre">XIncludeError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaError"><code class="docutils literal notranslate"><span class="pre">XMLSchemaError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaParseError"><code class="docutils literal notranslate"><span class="pre">XMLSchemaParseError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaValidateError"><code class="docutils literal notranslate"><span class="pre">XMLSchemaValidateError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathError"><code class="docutils literal notranslate"><span class="pre">XPathError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathEvalError"><code class="docutils literal notranslate"><span class="pre">XPathEvalError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathFunctionError"><code class="docutils literal notranslate"><span class="pre">XPathFunctionError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathResultError"><code class="docutils literal notranslate"><span class="pre">XPathResultError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTApplyError"><code class="docutils literal notranslate"><span class="pre">XSLTApplyError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTError"><code class="docutils literal notranslate"><span class="pre">XSLTError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTExtensionError"><code class="docutils literal notranslate"><span class="pre">XSLTExtensionError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTParseError"><code class="docutils literal notranslate"><span class="pre">XSLTParseError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTSaveError"><code class="docutils literal notranslate"><span class="pre">XSLTSaveError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._TargetParserResult"><code class="docutils literal notranslate"><span class="pre">_TargetParserResult</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.AncestorsIterator"><code class="docutils literal notranslate"><span class="pre">AncestorsIterator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.AttributeBasedElementClassLookup"><code class="docutils literal notranslate"><span class="pre">AttributeBasedElementClassLookup</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NWriterTarget"><code class="docutils literal notranslate"><span class="pre">C14NWriterTarget</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.CDATA"><code class="docutils literal notranslate"><span class="pre">CDATA</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase"><code class="docutils literal notranslate"><span class="pre">CommentBase</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.CustomElementClassLookup"><code class="docutils literal notranslate"><span class="pre">CustomElementClassLookup</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD"><code class="docutils literal notranslate"><span class="pre">DTD</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo"><code class="docutils literal notranslate"><span class="pre">DocInfo</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETXPath"><code class="docutils literal notranslate"><span class="pre">ETXPath</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase"><code class="docutils literal notranslate"><span class="pre">ElementBase</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementChildIterator"><code class="docutils literal notranslate"><span class="pre">ElementChildIterator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementClassLookup"><code class="docutils literal notranslate"><span class="pre">ElementClassLookup</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementDefaultClassLookup"><code class="docutils literal notranslate"><span class="pre">ElementDefaultClassLookup</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementDepthFirstIterator"><code class="docutils literal notranslate"><span class="pre">ElementDepthFirstIterator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementNamespaceClassLookup"><code class="docutils literal notranslate"><span class="pre">ElementNamespaceClassLookup</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementTextIterator"><code class="docutils literal notranslate"><span class="pre">ElementTextIterator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase"><code class="docutils literal notranslate"><span class="pre">EntityBase</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains"><code class="docutils literal notranslate"><span class="pre">ErrorDomains</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorLevels"><code class="docutils literal notranslate"><span class="pre">ErrorLevels</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes"><code class="docutils literal notranslate"><span class="pre">ErrorTypes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.FallbackElementClassLookup"><code class="docutils literal notranslate"><span class="pre">FallbackElementClassLookup</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser"><code class="docutils literal notranslate"><span class="pre">HTMLParser</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase"><code class="docutils literal notranslate"><span class="pre">PIBase</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParserBasedElementClassLookup"><code class="docutils literal notranslate"><span class="pre">ParserBasedElementClassLookup</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.PyErrorLog"><code class="docutils literal notranslate"><span class="pre">PyErrorLog</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.PythonElementClassLookup"><code class="docutils literal notranslate"><span class="pre">PythonElementClassLookup</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.QName"><code class="docutils literal notranslate"><span class="pre">QName</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNG"><code class="docutils literal notranslate"><span class="pre">RelaxNG</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.Resolver"><code class="docutils literal notranslate"><span class="pre">Resolver</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.Schematron"><code class="docutils literal notranslate"><span class="pre">Schematron</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.SiblingsIterator"><code class="docutils literal notranslate"><span class="pre">SiblingsIterator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.TreeBuilder"><code class="docutils literal notranslate"><span class="pre">TreeBuilder</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XInclude"><code class="docutils literal notranslate"><span class="pre">XInclude</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser"><code class="docutils literal notranslate"><span class="pre">XMLParser</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser"><code class="docutils literal notranslate"><span class="pre">XMLPullParser</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchema"><code class="docutils literal notranslate"><span class="pre">XMLSchema</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLTreeBuilder"><code class="docutils literal notranslate"><span class="pre">XMLTreeBuilder</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPath"><code class="docutils literal notranslate"><span class="pre">XPath</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathDocumentEvaluator"><code class="docutils literal notranslate"><span class="pre">XPathDocumentEvaluator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathElementEvaluator"><code class="docutils literal notranslate"><span class="pre">XPathElementEvaluator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLT"><code class="docutils literal notranslate"><span class="pre">XSLT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTAccessControl"><code class="docutils literal notranslate"><span class="pre">XSLTAccessControl</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTExtension"><code class="docutils literal notranslate"><span class="pre">XSLTExtension</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib"><code class="docutils literal notranslate"><span class="pre">_Attrib</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._BaseErrorLog"><code class="docutils literal notranslate"><span class="pre">_BaseErrorLog</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment"><code class="docutils literal notranslate"><span class="pre">_Comment</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._Document"><code class="docutils literal notranslate"><span class="pre">_Document</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element"><code class="docutils literal notranslate"><span class="pre">_Element</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementIterator"><code class="docutils literal notranslate"><span class="pre">_ElementIterator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementMatchIterator"><code class="docutils literal notranslate"><span class="pre">_ElementMatchIterator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTagMatcher"><code class="docutils literal notranslate"><span class="pre">_ElementTagMatcher</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree"><code class="docutils literal notranslate"><span class="pre">_ElementTree</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity"><code class="docutils literal notranslate"><span class="pre">_Entity</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog"><code class="docutils literal notranslate"><span class="pre">_ErrorLog</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser"><code class="docutils literal notranslate"><span class="pre">_FeedParser</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict"><code class="docutils literal notranslate"><span class="pre">_IDDict</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry"><code class="docutils literal notranslate"><span class="pre">_LogEntry</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._SaxParserTarget"><code class="docutils literal notranslate"><span class="pre">_SaxParserTarget</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._Validator"><code class="docutils literal notranslate"><span class="pre">_Validator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._XPathEvaluatorBase"><code class="docutils literal notranslate"><span class="pre">_XPathEvaluatorBase</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.htmlfile"><code class="docutils literal notranslate"><span class="pre">htmlfile</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterparse"><code class="docutils literal notranslate"><span class="pre">iterparse</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterwalk"><code class="docutils literal notranslate"><span class="pre">iterwalk</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.xmlfile"><code class="docutils literal notranslate"><span class="pre">xmlfile</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.Comment"><code class="docutils literal notranslate"><span class="pre">Comment()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.Element"><code class="docutils literal notranslate"><span class="pre">Element()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementTree"><code class="docutils literal notranslate"><span class="pre">ElementTree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.Entity"><code class="docutils literal notranslate"><span class="pre">Entity()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.Extension"><code class="docutils literal notranslate"><span class="pre">Extension()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.FunctionNamespace"><code class="docutils literal notranslate"><span class="pre">FunctionNamespace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTML"><code class="docutils literal notranslate"><span class="pre">HTML()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.PI"><code class="docutils literal notranslate"><span class="pre">PI()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.ProcessingInstruction"><code class="docutils literal notranslate"><span class="pre">ProcessingInstruction()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.SubElement"><code class="docutils literal notranslate"><span class="pre">SubElement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XML"><code class="docutils literal notranslate"><span class="pre">XML()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLDTDID"><code class="docutils literal notranslate"><span class="pre">XMLDTDID()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLID"><code class="docutils literal notranslate"><span class="pre">XMLID()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathEvaluator"><code class="docutils literal notranslate"><span class="pre">XPathEvaluator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.adopt_external_document"><code class="docutils literal notranslate"><span class="pre">adopt_external_document()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.canonicalize"><code class="docutils literal notranslate"><span class="pre">canonicalize()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.cleanup_namespaces"><code class="docutils literal notranslate"><span class="pre">cleanup_namespaces()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.clear_error_log"><code class="docutils literal notranslate"><span class="pre">clear_error_log()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.dump"><code class="docutils literal notranslate"><span class="pre">dump()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.fromstring"><code class="docutils literal notranslate"><span class="pre">fromstring()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.fromstringlist"><code class="docutils literal notranslate"><span class="pre">fromstringlist()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.get_default_parser"><code class="docutils literal notranslate"><span class="pre">get_default_parser()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.indent"><code class="docutils literal notranslate"><span class="pre">indent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.iselement"><code class="docutils literal notranslate"><span class="pre">iselement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.parseid"><code class="docutils literal notranslate"><span class="pre">parseid()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.register_namespace"><code class="docutils literal notranslate"><span class="pre">register_namespace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.set_default_parser"><code class="docutils literal notranslate"><span class="pre">set_default_parser()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.strip_attributes"><code class="docutils literal notranslate"><span class="pre">strip_attributes()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.strip_elements"><code class="docutils literal notranslate"><span class="pre">strip_elements()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.strip_tags"><code class="docutils literal notranslate"><span class="pre">strip_tags()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.tostring"><code class="docutils literal notranslate"><span class="pre">tostring()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.tostringlist"><code class="docutils literal notranslate"><span class="pre">tostringlist()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.tounicode"><code class="docutils literal notranslate"><span class="pre">tounicode()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.etree.html#lxml.etree.use_global_python_log"><code class="docutils literal notranslate"><span class="pre">use_global_python_log()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html">lxml.objectify module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement"><code class="docutils literal notranslate"><span class="pre">BoolElement</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ElementMaker"><code class="docutils literal notranslate"><span class="pre">ElementMaker</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement"><code class="docutils literal notranslate"><span class="pre">FloatElement</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement"><code class="docutils literal notranslate"><span class="pre">IntElement</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement"><code class="docutils literal notranslate"><span class="pre">LongElement</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement"><code class="docutils literal notranslate"><span class="pre">NoneElement</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement"><code class="docutils literal notranslate"><span class="pre">NumberElement</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectPath"><code class="docutils literal notranslate"><span class="pre">ObjectPath</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifyElementClassLookup"><code class="docutils literal notranslate"><span class="pre">ObjectifyElementClassLookup</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.PyType"><code class="docutils literal notranslate"><span class="pre">PyType</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement"><code class="docutils literal notranslate"><span class="pre">StringElement</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.DataElement"><code class="docutils literal notranslate"><span class="pre">DataElement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.Element"><code class="docutils literal notranslate"><span class="pre">Element()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.XML"><code class="docutils literal notranslate"><span class="pre">XML()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.__unpickleElementTree"><code class="docutils literal notranslate"><span class="pre">__unpickleElementTree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.annotate"><code class="docutils literal notranslate"><span class="pre">annotate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.deannotate"><code class="docutils literal notranslate"><span class="pre">deannotate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.dump"><code class="docutils literal notranslate"><span class="pre">dump()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.enable_recursive_str"><code class="docutils literal notranslate"><span class="pre">enable_recursive_str()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.fromstring"><code class="docutils literal notranslate"><span class="pre">fromstring()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.getRegisteredTypes"><code class="docutils literal notranslate"><span class="pre">getRegisteredTypes()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.makeparser"><code class="docutils literal notranslate"><span class="pre">makeparser()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.pyannotate"><code class="docutils literal notranslate"><span class="pre">pyannotate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.pytypename"><code class="docutils literal notranslate"><span class="pre">pytypename()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.set_default_parser"><code class="docutils literal notranslate"><span class="pre">set_default_parser()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.set_pytype_attribute_tag"><code class="docutils literal notranslate"><span class="pre">set_pytype_attribute_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.xsiannotate"><code class="docutils literal notranslate"><span class="pre">xsiannotate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html">lxml.sax module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.sax.html#lxml.sax.SaxError"><code class="docutils literal notranslate"><span class="pre">SaxError</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeProducer"><code class="docutils literal notranslate"><span class="pre">ElementTreeProducer</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.sax.html#lxml.sax.__pyx_unpickle_ElementTreeProducer"><code class="docutils literal notranslate"><span class="pre">__pyx_unpickle_ElementTreeProducer()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.sax.html#lxml.sax.saxify"><code class="docutils literal notranslate"><span class="pre">saxify()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html#module-lxml">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html#lxml.get_include"><code class="docutils literal notranslate"><span class="pre">get_include()</span></code></a></li>
 </ul>
 </li>
-<li class="toctree-l2"><a class="reference internal" href="lxml.html#module-lxml">Module contents</a></li>
 </ul>
 </li>
 </ul>
index 12a620526932eb49db9948cf5ef36b3c367f1286..345faf1234b27703a3206bf7639b6f0e8e519412 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.ElementInclude module &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,9 +87,9 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+      <li class="breadcrumb-item active">lxml.ElementInclude module</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml.ElementInclude.rst.txt" rel="nofollow"> View page source</a>
       </li>
@@ -106,6 +110,13 @@ form of custom URL resolvers.</p>
 <dt class="sig sig-object py" id="lxml.ElementInclude.FatalIncludeError">
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlSyntaxError</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.ElementInclude.FatalIncludeError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.ElementInclude.FatalIncludeError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.ElementInclude.FatalIncludeError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.ElementInclude.FatalIncludeError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -118,6 +129,18 @@ set self.__traceback__ to tb and return self.</p>
 <span class="sig-name descname"><span class="pre">args</span></span><a class="headerlink" href="#lxml.ElementInclude.FatalIncludeError.args" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.ElementInclude.FatalIncludeError.end_lineno">
+<span class="sig-name descname"><span class="pre">end_lineno</span></span><a class="headerlink" href="#lxml.ElementInclude.FatalIncludeError.end_lineno" title="Permalink to this definition"></a></dt>
+<dd><p>exception end lineno</p>
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.ElementInclude.FatalIncludeError.end_offset">
+<span class="sig-name descname"><span class="pre">end_offset</span></span><a class="headerlink" href="#lxml.ElementInclude.FatalIncludeError.end_offset" title="Permalink to this definition"></a></dt>
+<dd><p>exception end offset</p>
+</dd></dl>
+
 <dl class="py attribute">
 <dt class="sig sig-object py" id="lxml.ElementInclude.FatalIncludeError.filename">
 <span class="sig-name descname"><span class="pre">filename</span></span><a class="headerlink" href="#lxml.ElementInclude.FatalIncludeError.filename" title="Permalink to this definition"></a></dt>
@@ -160,6 +183,13 @@ set self.__traceback__ to tb and return self.</p>
 <dt class="sig sig-object py" id="lxml.ElementInclude.LimitedRecursiveIncludeError">
 <em class="property"><span class="pre">exception</span><span class="w"> </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">FatalIncludeError</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.ElementInclude.LimitedRecursiveIncludeError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.ElementInclude.LimitedRecursiveIncludeError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.ElementInclude.LimitedRecursiveIncludeError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.ElementInclude.LimitedRecursiveIncludeError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -172,6 +202,18 @@ set self.__traceback__ to tb and return self.</p>
 <span class="sig-name descname"><span class="pre">args</span></span><a class="headerlink" href="#lxml.ElementInclude.LimitedRecursiveIncludeError.args" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.ElementInclude.LimitedRecursiveIncludeError.end_lineno">
+<span class="sig-name descname"><span class="pre">end_lineno</span></span><a class="headerlink" href="#lxml.ElementInclude.LimitedRecursiveIncludeError.end_lineno" title="Permalink to this definition"></a></dt>
+<dd><p>exception end lineno</p>
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.ElementInclude.LimitedRecursiveIncludeError.end_offset">
+<span class="sig-name descname"><span class="pre">end_offset</span></span><a class="headerlink" href="#lxml.ElementInclude.LimitedRecursiveIncludeError.end_offset" title="Permalink to this definition"></a></dt>
+<dd><p>exception end offset</p>
+</dd></dl>
+
 <dl class="py attribute">
 <dt class="sig sig-object py" id="lxml.ElementInclude.LimitedRecursiveIncludeError.filename">
 <span class="sig-name descname"><span class="pre">filename</span></span><a class="headerlink" href="#lxml.ElementInclude.LimitedRecursiveIncludeError.filename" title="Permalink to this definition"></a></dt>
index d486053795086796d2d539efbaf7f304a71d0b68..7be2cdeb9ead096d6b7820a7cd2b51e90447334a 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml._elementpath module &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,9 +87,9 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+      <li class="breadcrumb-item active">lxml._elementpath module</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml._elementpath.rst.txt" rel="nofollow"> View page source</a>
       </li>
index d12b4a6889ecd1a9a72e4e2f0ed0cd3d6aa1307d..5a83bbf7138b396af8f507f57fa32b6f5ed59ea8 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.builder module &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,9 +87,9 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+      <li class="breadcrumb-item active">lxml.builder module</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml.builder.rst.txt" rel="nofollow"> View page source</a>
       </li>
index 5d8511866b3c2b715c4f12108874761ebf140900..2a1f06c1c49cc49ac517f5480b3bd5c5ccccc555 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.cssselect module &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,9 +87,9 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+      <li class="breadcrumb-item active">lxml.cssselect module</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml.cssselect.rst.txt" rel="nofollow"> View page source</a>
       </li>
index 8a3777d6bd68c60bd28855235630918d50ad3ffb..ae7dcc788d2a06a213b4fab576904459357ec36c 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.doctestcompare module &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,9 +87,9 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+      <li class="breadcrumb-item active">lxml.doctestcompare module</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml.doctestcompare.rst.txt" rel="nofollow"> View page source</a>
       </li>
index ec45a47ddc2e2b1d51bdc60d71c95b6f1bc826b0..a0ab485fb725d55ad6b13d9eeba23a8bc8940bc3 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.etree module &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,9 +87,9 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+      <li class="breadcrumb-item active">lxml.etree module</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml.etree.rst.txt" rel="nofollow"> View page source</a>
       </li>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>Error during C14N serialisation.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.C14NError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.C14NError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.C14NError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -122,6 +133,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>Base class for DTD errors.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.DTDError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTDError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.DTDError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTDError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -141,6 +159,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">DTDError</span></code></a></p>
 <p>Error while parsing a DTD.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.DTDParseError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTDParseError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.DTDParseError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTDParseError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -160,6 +185,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">DTDError</span></code></a></p>
 <p>Error while validating an XML document with a DTD.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.DTDValidateError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTDValidateError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.DTDValidateError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DTDValidateError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -181,6 +213,13 @@ set self.__traceback__ to tb and return self.</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>
 method fails.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.DocumentInvalid.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DocumentInvalid.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.DocumentInvalid.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.DocumentInvalid.with_traceback" title="Permalink to this definition"></a></dt>
@@ -199,6 +238,13 @@ set self.__traceback__ to tb and return self.</p>
 <dt class="sig sig-object py" id="lxml.etree.Error">
 <em class="property"><span class="pre">exception</span><span class="w"> </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>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.Error.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Error.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.Error.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.Error.with_traceback" title="Permalink to this definition"></a></dt>
@@ -219,6 +265,13 @@ set self.__traceback__ to tb and return self.</p>
 <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">Error</span></code></a></p>
 <p>Main exception base class for lxml.  All other exceptions inherit from
 this one.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.LxmlError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.LxmlError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.LxmlError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.LxmlError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -238,6 +291,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>Base class of lxml registry errors.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.LxmlRegistryError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.LxmlRegistryError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.LxmlRegistryError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.LxmlRegistryError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -257,6 +317,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">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>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.LxmlSyntaxError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.LxmlSyntaxError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.LxmlSyntaxError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.LxmlSyntaxError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -269,6 +336,18 @@ set self.__traceback__ to tb and return self.</p>
 <span class="sig-name descname"><span class="pre">args</span></span><a class="headerlink" href="#lxml.etree.LxmlSyntaxError.args" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.etree.LxmlSyntaxError.end_lineno">
+<span class="sig-name descname"><span class="pre">end_lineno</span></span><a class="headerlink" href="#lxml.etree.LxmlSyntaxError.end_lineno" title="Permalink to this definition"></a></dt>
+<dd><p>exception end lineno</p>
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.etree.LxmlSyntaxError.end_offset">
+<span class="sig-name descname"><span class="pre">end_offset</span></span><a class="headerlink" href="#lxml.etree.LxmlSyntaxError.end_offset" title="Permalink to this definition"></a></dt>
+<dd><p>exception end offset</p>
+</dd></dl>
+
 <dl class="py attribute">
 <dt class="sig sig-object py" id="lxml.etree.LxmlSyntaxError.filename">
 <span class="sig-name descname"><span class="pre">filename</span></span><a class="headerlink" href="#lxml.etree.LxmlSyntaxError.filename" title="Permalink to this definition"></a></dt>
@@ -312,6 +391,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlRegistryError</span></code></a></p>
 <p>Error registering a namespace extension.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.NamespaceRegistryError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.NamespaceRegistryError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.NamespaceRegistryError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.NamespaceRegistryError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -332,6 +418,13 @@ set self.__traceback__ to tb and return self.</p>
 <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">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 class="sig sig-object py" id="lxml.etree.ParseError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ParseError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.ParseError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ParseError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -344,6 +437,18 @@ set self.__traceback__ to tb and return self.</p>
 <span class="sig-name descname"><span class="pre">args</span></span><a class="headerlink" href="#lxml.etree.ParseError.args" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.etree.ParseError.end_lineno">
+<span class="sig-name descname"><span class="pre">end_lineno</span></span><a class="headerlink" href="#lxml.etree.ParseError.end_lineno" title="Permalink to this definition"></a></dt>
+<dd><p>exception end lineno</p>
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.etree.ParseError.end_offset">
+<span class="sig-name descname"><span class="pre">end_offset</span></span><a class="headerlink" href="#lxml.etree.ParseError.end_offset" title="Permalink to this definition"></a></dt>
+<dd><p>exception end offset</p>
+</dd></dl>
+
 <dl class="py attribute">
 <dt class="sig sig-object py" id="lxml.etree.ParseError.filename">
 <span class="sig-name descname"><span class="pre">filename</span></span><a class="headerlink" href="#lxml.etree.ParseError.filename" title="Permalink to this definition"></a></dt>
@@ -392,6 +497,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>Internal lxml parser error.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.ParserError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ParserError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.ParserError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.ParserError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -411,6 +523,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>Base class for RelaxNG errors.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNGError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.RelaxNGError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNGError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -430,6 +549,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">RelaxNGError</span></code></a></p>
 <p>Error while parsing an XML document as RelaxNG.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGParseError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNGParseError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.RelaxNGParseError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNGParseError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -449,6 +575,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">RelaxNGError</span></code></a></p>
 <p>Error while validating an XML document with a RelaxNG schema.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.RelaxNGValidateError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNGValidateError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.RelaxNGValidateError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.RelaxNGValidateError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -468,6 +601,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>Base class of all Schematron errors.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.SchematronError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SchematronError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.SchematronError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SchematronError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -487,6 +627,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">SchematronError</span></code></a></p>
 <p>Error while parsing an XML document as Schematron schema.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.SchematronParseError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SchematronParseError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.SchematronParseError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SchematronParseError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -506,6 +653,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">SchematronError</span></code></a></p>
 <p>Error while validating an XML document with a Schematron schema.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.SchematronValidateError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SchematronValidateError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.SchematronValidateError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SchematronValidateError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -525,6 +679,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>A libxml2 error that occurred during serialisation.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.SerialisationError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SerialisationError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.SerialisationError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.SerialisationError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -544,6 +705,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>Error during XInclude processing.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XIncludeError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XIncludeError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XIncludeError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XIncludeError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -563,6 +731,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>Base class of all XML Schema errors</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XMLSchemaError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSchemaError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XMLSchemaError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSchemaError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -582,6 +757,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">XMLSchemaError</span></code></a></p>
 <p>Error while parsing an XML document as XML Schema.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XMLSchemaParseError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSchemaParseError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XMLSchemaParseError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSchemaParseError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -601,6 +783,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">XMLSchemaError</span></code></a></p>
 <p>Error while validating an XML document with an XML Schema.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XMLSchemaValidateError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSchemaValidateError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XMLSchemaValidateError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSchemaValidateError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -622,6 +811,13 @@ set self.__traceback__ to tb and return self.</p>
 <p>An XMLSyntaxError that additionally inherits from AssertionError for
 ElementTree / backwards compatibility reasons.</p>
 <p>This class may get replaced by a plain XMLSyntaxError in a future version.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XMLSyntaxAssertionError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSyntaxAssertionError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XMLSyntaxAssertionError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSyntaxAssertionError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -634,6 +830,18 @@ set self.__traceback__ to tb and return self.</p>
 <span class="sig-name descname"><span class="pre">args</span></span><a class="headerlink" href="#lxml.etree.XMLSyntaxAssertionError.args" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.etree.XMLSyntaxAssertionError.end_lineno">
+<span class="sig-name descname"><span class="pre">end_lineno</span></span><a class="headerlink" href="#lxml.etree.XMLSyntaxAssertionError.end_lineno" title="Permalink to this definition"></a></dt>
+<dd><p>exception end lineno</p>
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.etree.XMLSyntaxAssertionError.end_offset">
+<span class="sig-name descname"><span class="pre">end_offset</span></span><a class="headerlink" href="#lxml.etree.XMLSyntaxAssertionError.end_offset" title="Permalink to this definition"></a></dt>
+<dd><p>exception end offset</p>
+</dd></dl>
+
 <dl class="py attribute">
 <dt class="sig sig-object py" id="lxml.etree.XMLSyntaxAssertionError.filename">
 <span class="sig-name descname"><span class="pre">filename</span></span><a class="headerlink" href="#lxml.etree.XMLSyntaxAssertionError.filename" title="Permalink to this definition"></a></dt>
@@ -682,6 +890,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">ParseError</span></code></a></p>
 <p>Syntax error while parsing an XML document.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XMLSyntaxError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSyntaxError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XMLSyntaxError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XMLSyntaxError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -694,6 +909,18 @@ set self.__traceback__ to tb and return self.</p>
 <span class="sig-name descname"><span class="pre">args</span></span><a class="headerlink" href="#lxml.etree.XMLSyntaxError.args" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.etree.XMLSyntaxError.end_lineno">
+<span class="sig-name descname"><span class="pre">end_lineno</span></span><a class="headerlink" href="#lxml.etree.XMLSyntaxError.end_lineno" title="Permalink to this definition"></a></dt>
+<dd><p>exception end lineno</p>
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.etree.XMLSyntaxError.end_offset">
+<span class="sig-name descname"><span class="pre">end_offset</span></span><a class="headerlink" href="#lxml.etree.XMLSyntaxError.end_offset" title="Permalink to this definition"></a></dt>
+<dd><p>exception end offset</p>
+</dd></dl>
+
 <dl class="py attribute">
 <dt class="sig sig-object py" id="lxml.etree.XMLSyntaxError.filename">
 <span class="sig-name descname"><span class="pre">filename</span></span><a class="headerlink" href="#lxml.etree.XMLSyntaxError.filename" title="Permalink to this definition"></a></dt>
@@ -742,6 +969,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>Base class of all XPath errors.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XPathError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XPathError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -761,6 +995,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">XPathError</span></code></a></p>
 <p>Error during XPath evaluation.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XPathEvalError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathEvalError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XPathEvalError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathEvalError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -780,6 +1021,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">XPathEvalError</span></code></a></p>
 <p>Internal error looking up an XPath extension function.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XPathFunctionError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathFunctionError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XPathFunctionError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathFunctionError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -799,6 +1047,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">XPathEvalError</span></code></a></p>
 <p>Error handling an XPath result.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XPathResultError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathResultError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XPathResultError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathResultError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -817,6 +1072,13 @@ set self.__traceback__ to tb and return self.</p>
 <dt class="sig sig-object py" id="lxml.etree.XPathSyntaxError">
 <em class="property"><span class="pre">exception</span><span class="w"> </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">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">XPathError</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XPathSyntaxError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathSyntaxError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XPathSyntaxError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XPathSyntaxError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -829,6 +1091,18 @@ set self.__traceback__ to tb and return self.</p>
 <span class="sig-name descname"><span class="pre">args</span></span><a class="headerlink" href="#lxml.etree.XPathSyntaxError.args" title="Permalink to this definition"></a></dt>
 <dd></dd></dl>
 
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.etree.XPathSyntaxError.end_lineno">
+<span class="sig-name descname"><span class="pre">end_lineno</span></span><a class="headerlink" href="#lxml.etree.XPathSyntaxError.end_lineno" title="Permalink to this definition"></a></dt>
+<dd><p>exception end lineno</p>
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="lxml.etree.XPathSyntaxError.end_offset">
+<span class="sig-name descname"><span class="pre">end_offset</span></span><a class="headerlink" href="#lxml.etree.XPathSyntaxError.end_offset" title="Permalink to this definition"></a></dt>
+<dd><p>exception end offset</p>
+</dd></dl>
+
 <dl class="py attribute">
 <dt class="sig sig-object py" id="lxml.etree.XPathSyntaxError.filename">
 <span class="sig-name descname"><span class="pre">filename</span></span><a class="headerlink" href="#lxml.etree.XPathSyntaxError.filename" title="Permalink to this definition"></a></dt>
@@ -872,6 +1146,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">XSLTError</span></code></a></p>
 <p>Error running an XSL transformation.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XSLTApplyError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTApplyError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XSLTApplyError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTApplyError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -891,6 +1172,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>Base class of all XSLT errors.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XSLTError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XSLTError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -910,6 +1198,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">XSLTError</span></code></a></p>
 <p>Error registering an XSLT extension.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XSLTExtensionError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTExtensionError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XSLTExtensionError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTExtensionError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -929,6 +1224,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">XSLTError</span></code></a></p>
 <p>Error parsing a stylesheet document.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XSLTParseError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTParseError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XSLTParseError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTParseError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -948,6 +1250,13 @@ set self.__traceback__ to tb and return self.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">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">SerialisationError</span></code></a></p>
 <p>Error serialising an XSLT result.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree.XSLTSaveError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTSaveError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree.XSLTSaveError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree.XSLTSaveError.with_traceback" title="Permalink to this definition"></a></dt>
@@ -966,6 +1275,13 @@ set self.__traceback__ to tb and return self.</p>
 <dt class="sig sig-object py" id="lxml.etree._TargetParserResult">
 <em class="property"><span class="pre">exception</span><span class="w"> </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>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.etree._TargetParserResult.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._TargetParserResult.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree._TargetParserResult.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._TargetParserResult.with_traceback" title="Permalink to this definition"></a></dt>
@@ -1205,7 +1521,7 @@ prefixes in the path expression.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -1222,7 +1538,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -1701,7 +2017,7 @@ the <code class="docutils literal notranslate"><span class="pre">parse()</span><
 <dt class="sig sig-object py" id="lxml.etree.ETCompatXMLParser.setElementClassLookup">
 <span class="sig-name descname"><span class="pre">setElementClassLookup</span></span><span class="sig-paren">(</span><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.ETCompatXMLParser.setElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>use <code class="docutils literal notranslate"><span class="pre">parser.set_element_class_lookup(lookup)</span></code> instead.</p>
 </dd>
 </dl>
@@ -1765,7 +2081,7 @@ itself.</p>
 <p>Variables may be provided as keyword arguments.  Note that namespaces
 are currently not supported for variables.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>call the object, not its method.</p>
 </dd>
 </dl>
@@ -1910,7 +2226,7 @@ prefixes in the path expression.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -1927,7 +2243,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -2396,7 +2712,7 @@ prefixes in the path expression.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -2413,7 +2729,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -6650,7 +6966,7 @@ the <code class="docutils literal notranslate"><span class="pre">parse()</span><
 <dt class="sig sig-object py" id="lxml.etree.HTMLParser.setElementClassLookup">
 <span class="sig-name descname"><span class="pre">setElementClassLookup</span></span><span class="sig-paren">(</span><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.HTMLParser.setElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>use <code class="docutils literal notranslate"><span class="pre">parser.set_element_class_lookup(lookup)</span></code> instead.</p>
 </dd>
 </dl>
@@ -6760,7 +7076,7 @@ the <code class="docutils literal notranslate"><span class="pre">parse()</span><
 <dt class="sig sig-object py" id="lxml.etree.HTMLPullParser.setElementClassLookup">
 <span class="sig-name descname"><span class="pre">setElementClassLookup</span></span><span class="sig-paren">(</span><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.HTMLPullParser.setElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>use <code class="docutils literal notranslate"><span class="pre">parser.set_element_class_lookup(lookup)</span></code> instead.</p>
 </dd>
 </dl>
@@ -6920,7 +7236,7 @@ It is not guaranteed to work for all possible text content.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -6937,7 +7253,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -7925,7 +8241,7 @@ the <code class="docutils literal notranslate"><span class="pre">parse()</span><
 <dt class="sig sig-object py" id="lxml.etree.XMLParser.setElementClassLookup">
 <span class="sig-name descname"><span class="pre">setElementClassLookup</span></span><span class="sig-paren">(</span><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.XMLParser.setElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>use <code class="docutils literal notranslate"><span class="pre">parser.set_element_class_lookup(lookup)</span></code> instead.</p>
 </dd>
 </dl>
@@ -8035,7 +8351,7 @@ the <code class="docutils literal notranslate"><span class="pre">parse()</span><
 <dt class="sig sig-object py" id="lxml.etree.XMLPullParser.setElementClassLookup">
 <span class="sig-name descname"><span class="pre">setElementClassLookup</span></span><span class="sig-paren">(</span><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.XMLPullParser.setElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>use <code class="docutils literal notranslate"><span class="pre">parser.set_element_class_lookup(lookup)</span></code> instead.</p>
 </dd>
 </dl>
@@ -8154,7 +8470,7 @@ itself.</p>
 <p>Variables may be provided as keyword arguments.  Note that namespaces
 are currently not supported for variables.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>call the object, not its method.</p>
 </dd>
 </dl>
@@ -8192,7 +8508,7 @@ itself.</p>
 <p>Variables may be provided as keyword arguments.  Note that namespaces
 are currently not supported for variables.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>call the object, not its method.</p>
 </dd>
 </dl>
@@ -8238,7 +8554,7 @@ itself.</p>
 <p>Variables may be provided as keyword arguments.  Note that namespaces
 are currently not supported for variables.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>call the object, not its method.</p>
 </dd>
 </dl>
@@ -8284,7 +8600,8 @@ system (see <cite>XSLTAccessControl</cite>)</p></li>
 </ul>
 <p>Keyword arguments of the XSLT call:</p>
 <ul class="simple">
-<li><p>profile_run: enable XSLT profiling (default: False)</p></li>
+<li><p>profile_run: enable XSLT profiling and make the profile available
+as XML document in <code class="docutils literal notranslate"><span class="pre">result.xslt_profile</span></code> (default: False)</p></li>
 </ul>
 <p>Other keyword arguments of the call are passed to the stylesheet
 as parameters.</p>
@@ -8292,7 +8609,7 @@ as parameters.</p>
 <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>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>call the object, not this method.</p>
 </dd>
 </dl>
@@ -8319,7 +8636,7 @@ libxslt does not support it at a per-stylesheet level.</p>
 <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>
-    <span class="sd">&#39;&#39;&#39;it&#39;s &quot;Monty Python&#39;s&quot; ...&#39;&#39;&#39;</span><span class="p">))</span>
+<span class="w">    </span><span class="sd">&#39;&#39;&#39;it&#39;s &quot;Monty Python&#39;s&quot; ...&#39;&#39;&#39;</span><span class="p">))</span>
 </pre></div>
 </div>
 <p>Escaped string parameters can be reused without restriction.</p>
@@ -8330,7 +8647,7 @@ before passing it into the transformation.  Use it like this:</p>
 <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>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>use str(result_tree) instead.</p>
 </dd>
 </dl>
@@ -8624,7 +8941,7 @@ prefixes in the path expression.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -8641,7 +8958,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -9058,7 +9375,7 @@ prefixes in the path expression.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -9075,7 +9392,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -9418,7 +9735,7 @@ Example: bytes.fromhex(‘B9 01EF’) -&gt; b’\xb9\x01\xef’.</p>
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree._ElementStringResult.hex">
 <span class="sig-name descname"><span class="pre">hex</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementStringResult.hex" title="Permalink to this definition"></a></dt>
-<dd><p>Create a str of hexadecimal numbers from a bytes object.</p>
+<dd><p>Create a string of hexadecimal numbers from a bytes object.</p>
 <blockquote>
 <div><dl class="simple">
 <dt>sep</dt><dd><p>An optional single character or byte to separate hex bytes.</p>
@@ -9575,7 +9892,7 @@ bytes.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree._ElementStringResult.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">old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new</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">-</span> <span class="pre">1</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._ElementStringResult.replace" title="Permalink to this definition"></a></dt>
+<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">old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new</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">-1</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._ElementStringResult.replace" title="Permalink to this definition"></a></dt>
 <dd><p>Return a copy with all occurrences of substring old replaced by new.</p>
 <blockquote>
 <div><dl class="simple">
@@ -9626,7 +9943,7 @@ objects and the original bytes object.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree._ElementStringResult.rsplit">
-<span class="sig-name descname"><span class="pre">rsplit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementStringResult.rsplit" title="Permalink to this definition"></a></dt>
+<span class="sig-name descname"><span class="pre">rsplit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</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.etree._ElementStringResult.rsplit" title="Permalink to this definition"></a></dt>
 <dd><p>Return a list of the sections in the bytes, using sep as the delimiter.</p>
 <blockquote>
 <div><dl class="simple">
@@ -9651,7 +9968,7 @@ None (the default value) means split on ASCII whitespace characters
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree._ElementStringResult.split">
-<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementStringResult.split" title="Permalink to this definition"></a></dt>
+<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</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.etree._ElementStringResult.split" title="Permalink to this definition"></a></dt>
 <dd><p>Return a list of the sections in the bytes, using sep as the delimiter.</p>
 <dl class="simple">
 <dt>sep</dt><dd><p>The delimiter according which to split the bytes.
@@ -9798,7 +10115,7 @@ declarations.  It is always self-contained.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>_Element.iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -10260,7 +10577,7 @@ string.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree._ElementUnicodeResult.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">old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new</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">-</span> <span class="pre">1</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._ElementUnicodeResult.replace" title="Permalink to this definition"></a></dt>
+<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">old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new</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">-1</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._ElementUnicodeResult.replace" title="Permalink to this definition"></a></dt>
 <dd><p>Return a copy with all occurrences of substring old replaced by new.</p>
 <blockquote>
 <div><dl class="simple">
@@ -10311,20 +10628,21 @@ and the original string.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree._ElementUnicodeResult.rsplit">
-<span class="sig-name descname"><span class="pre">rsplit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.rsplit" title="Permalink to this definition"></a></dt>
-<dd><p>Return a list of the words in the string, using sep as the delimiter string.</p>
+<span class="sig-name descname"><span class="pre">rsplit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</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.etree._ElementUnicodeResult.rsplit" title="Permalink to this definition"></a></dt>
+<dd><p>Return a list of the substrings in the string, using sep as the separator string.</p>
 <blockquote>
-<div><dl class="simple">
-<dt>sep</dt><dd><p>The delimiter according which to split the string.
-None (the default value) means split according to any whitespace,
-and discard empty strings from the result.</p>
+<div><dl>
+<dt>sep</dt><dd><p>The separator used to split the string.</p>
+<p>When set to None (the default value), will split on any whitespace
+character (including \n \r \t \f and spaces) and will discard
+empty strings from the result.</p>
 </dd>
-<dt>maxsplit</dt><dd><p>Maximum number of splits to do.
+<dt>maxsplit</dt><dd><p>Maximum number of splits (starting from the left).
 -1 (the default value) means no limit.</p>
 </dd>
 </dl>
 </div></blockquote>
-<p>Splits are done starting at the end of the string and working to the front.</p>
+<p>Splitting starts at the end of the string and works to the front.</p>
 </dd></dl>
 
 <dl class="py method">
@@ -10336,17 +10654,23 @@ and discard empty strings from the result.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.etree._ElementUnicodeResult.split">
-<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.etree._ElementUnicodeResult.split" title="Permalink to this definition"></a></dt>
-<dd><p>Return a list of the words in the string, using sep as the delimiter string.</p>
-<dl class="simple">
-<dt>sep</dt><dd><p>The delimiter according which to split the string.
-None (the default value) means split according to any whitespace,
-and discard empty strings from the result.</p>
+<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</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.etree._ElementUnicodeResult.split" title="Permalink to this definition"></a></dt>
+<dd><p>Return a list of the substrings in the string, using sep as the separator string.</p>
+<blockquote>
+<div><dl>
+<dt>sep</dt><dd><p>The separator used to split the string.</p>
+<p>When set to None (the default value), will split on any whitespace
+character (including \n \r \t \f and spaces) and will discard
+empty strings from the result.</p>
 </dd>
-<dt>maxsplit</dt><dd><p>Maximum number of splits to do.
+<dt>maxsplit</dt><dd><p>Maximum number of splits (starting from the left).
 -1 (the default value) means no limit.</p>
 </dd>
 </dl>
+</div></blockquote>
+<p>Note, str.split() is mainly useful for data that has been intentionally
+delimited.  With natural text that includes punctuation, consider using
+the regular expression module.</p>
 </dd></dl>
 
 <dl class="py method">
@@ -10536,7 +10860,7 @@ prefixes in the path expression.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -10553,7 +10877,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -10910,7 +11234,7 @@ the <code class="docutils literal notranslate"><span class="pre">parse()</span><
 <dt class="sig sig-object py" id="lxml.etree._FeedParser.setElementClassLookup">
 <span class="sig-name descname"><span class="pre">setElementClassLookup</span></span><span class="sig-paren">(</span><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._FeedParser.setElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>use <code class="docutils literal notranslate"><span class="pre">parser.set_element_class_lookup(lookup)</span></code> instead.</p>
 </dd>
 </dl>
@@ -11265,7 +11589,7 @@ It is not guaranteed to work for all possible text content.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -11282,7 +11606,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -11656,7 +11980,7 @@ itself.</p>
 <p>Variables may be provided as keyword arguments.  Note that namespaces
 are currently not supported for variables.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>call the object, not its method.</p>
 </dd>
 </dl>
@@ -11774,7 +12098,7 @@ It is not guaranteed to work for all possible text content.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -11791,7 +12115,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -12108,7 +12432,7 @@ declarations.  It is always self-contained.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>_Element.iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -12945,7 +13269,7 @@ single string wrapped in a list.</p>
 <p>Serialize an element to the Python unicode representation of its XML
 tree.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>use <code class="docutils literal notranslate"><span class="pre">tostring(el,</span> <span class="pre">encoding='unicode')</span></code> instead.</p>
 </dd>
 </dl>
index 54a71bfba0be040a8d234c370132873f8d793ecb..d8fe0ed240e1d6c51c5ed8a782981eda003f206a 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml package &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,8 +87,8 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">lxml package</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml.rst.txt" rel="nofollow"> View page source</a>
       </li>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html.html">lxml.html package</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="lxml.html.html#submodules">Submodules</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._diffcommand.html">lxml.html._diffcommand module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html._diffcommand.html#lxml.html._diffcommand.annotate"><code class="docutils literal notranslate"><span class="pre">annotate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html._diffcommand.html#lxml.html._diffcommand.main"><code class="docutils literal notranslate"><span class="pre">main()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html._diffcommand.html#lxml.html._diffcommand.read_file"><code class="docutils literal notranslate"><span class="pre">read_file()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html._diffcommand.html#lxml.html._diffcommand.split_body"><code class="docutils literal notranslate"><span class="pre">split_body()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html">lxml.html._setmixin module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin"><code class="docutils literal notranslate"><span class="pre">SetMixin</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.builder.html">lxml.html.builder module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.CLASS"><code class="docutils literal notranslate"><span class="pre">CLASS()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FOR"><code class="docutils literal notranslate"><span class="pre">FOR()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.A"><code class="docutils literal notranslate"><span class="pre">A</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.ABBR"><code class="docutils literal notranslate"><span class="pre">ABBR</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.ACRONYM"><code class="docutils literal notranslate"><span class="pre">ACRONYM</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.ADDRESS"><code class="docutils literal notranslate"><span class="pre">ADDRESS</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.APPLET"><code class="docutils literal notranslate"><span class="pre">APPLET</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.AREA"><code class="docutils literal notranslate"><span class="pre">AREA</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.B"><code class="docutils literal notranslate"><span class="pre">B</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BASE"><code class="docutils literal notranslate"><span class="pre">BASE</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BASEFONT"><code class="docutils literal notranslate"><span class="pre">BASEFONT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BDO"><code class="docutils literal notranslate"><span class="pre">BDO</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BIG"><code class="docutils literal notranslate"><span class="pre">BIG</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BLOCKQUOTE"><code class="docutils literal notranslate"><span class="pre">BLOCKQUOTE</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BODY"><code class="docutils literal notranslate"><span class="pre">BODY</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BR"><code class="docutils literal notranslate"><span class="pre">BR</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BUTTON"><code class="docutils literal notranslate"><span class="pre">BUTTON</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.CAPTION"><code class="docutils literal notranslate"><span class="pre">CAPTION</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.CENTER"><code class="docutils literal notranslate"><span class="pre">CENTER</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.CITE"><code class="docutils literal notranslate"><span class="pre">CITE</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.CODE"><code class="docutils literal notranslate"><span class="pre">CODE</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.COL"><code class="docutils literal notranslate"><span class="pre">COL</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.COLGROUP"><code class="docutils literal notranslate"><span class="pre">COLGROUP</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DD"><code class="docutils literal notranslate"><span class="pre">DD</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DEL"><code class="docutils literal notranslate"><span class="pre">DEL</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DFN"><code class="docutils literal notranslate"><span class="pre">DFN</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DIR"><code class="docutils literal notranslate"><span class="pre">DIR</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DIV"><code class="docutils literal notranslate"><span class="pre">DIV</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DL"><code class="docutils literal notranslate"><span class="pre">DL</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DT"><code class="docutils literal notranslate"><span class="pre">DT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.EM"><code class="docutils literal notranslate"><span class="pre">EM</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FIELDSET"><code class="docutils literal notranslate"><span class="pre">FIELDSET</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FONT"><code class="docutils literal notranslate"><span class="pre">FONT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FORM"><code class="docutils literal notranslate"><span class="pre">FORM</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FRAME"><code class="docutils literal notranslate"><span class="pre">FRAME</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FRAMESET"><code class="docutils literal notranslate"><span class="pre">FRAMESET</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H1"><code class="docutils literal notranslate"><span class="pre">H1</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H2"><code class="docutils literal notranslate"><span class="pre">H2</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H3"><code class="docutils literal notranslate"><span class="pre">H3</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H4"><code class="docutils literal notranslate"><span class="pre">H4</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H5"><code class="docutils literal notranslate"><span class="pre">H5</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H6"><code class="docutils literal notranslate"><span class="pre">H6</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.HEAD"><code class="docutils literal notranslate"><span class="pre">HEAD</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.HR"><code class="docutils literal notranslate"><span class="pre">HR</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.HTML"><code class="docutils literal notranslate"><span class="pre">HTML</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.I"><code class="docutils literal notranslate"><span class="pre">I</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.IFRAME"><code class="docutils literal notranslate"><span class="pre">IFRAME</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.IMG"><code class="docutils literal notranslate"><span class="pre">IMG</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.INPUT"><code class="docutils literal notranslate"><span class="pre">INPUT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.INS"><code class="docutils literal notranslate"><span class="pre">INS</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.ISINDEX"><code class="docutils literal notranslate"><span class="pre">ISINDEX</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.KBD"><code class="docutils literal notranslate"><span class="pre">KBD</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.LABEL"><code class="docutils literal notranslate"><span class="pre">LABEL</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.LEGEND"><code class="docutils literal notranslate"><span class="pre">LEGEND</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.LI"><code class="docutils literal notranslate"><span class="pre">LI</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.LINK"><code class="docutils literal notranslate"><span class="pre">LINK</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.MAP"><code class="docutils literal notranslate"><span class="pre">MAP</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.MENU"><code class="docutils literal notranslate"><span class="pre">MENU</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.META"><code class="docutils literal notranslate"><span class="pre">META</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.NOFRAMES"><code class="docutils literal notranslate"><span class="pre">NOFRAMES</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.NOSCRIPT"><code class="docutils literal notranslate"><span class="pre">NOSCRIPT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.OBJECT"><code class="docutils literal notranslate"><span class="pre">OBJECT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.OL"><code class="docutils literal notranslate"><span class="pre">OL</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.OPTGROUP"><code class="docutils literal notranslate"><span class="pre">OPTGROUP</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.OPTION"><code class="docutils literal notranslate"><span class="pre">OPTION</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.P"><code class="docutils literal notranslate"><span class="pre">P</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.PARAM"><code class="docutils literal notranslate"><span class="pre">PARAM</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.PRE"><code class="docutils literal notranslate"><span class="pre">PRE</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.Q"><code class="docutils literal notranslate"><span class="pre">Q</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.S"><code class="docutils literal notranslate"><span class="pre">S</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SAMP"><code class="docutils literal notranslate"><span class="pre">SAMP</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SCRIPT"><code class="docutils literal notranslate"><span class="pre">SCRIPT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SELECT"><code class="docutils literal notranslate"><span class="pre">SELECT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SMALL"><code class="docutils literal notranslate"><span class="pre">SMALL</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SPAN"><code class="docutils literal notranslate"><span class="pre">SPAN</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.STRIKE"><code class="docutils literal notranslate"><span class="pre">STRIKE</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.STRONG"><code class="docutils literal notranslate"><span class="pre">STRONG</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.STYLE"><code class="docutils literal notranslate"><span class="pre">STYLE</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SUB"><code class="docutils literal notranslate"><span class="pre">SUB</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SUP"><code class="docutils literal notranslate"><span class="pre">SUP</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TABLE"><code class="docutils literal notranslate"><span class="pre">TABLE</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TBODY"><code class="docutils literal notranslate"><span class="pre">TBODY</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TD"><code class="docutils literal notranslate"><span class="pre">TD</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TEXTAREA"><code class="docutils literal notranslate"><span class="pre">TEXTAREA</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TFOOT"><code class="docutils literal notranslate"><span class="pre">TFOOT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TH"><code class="docutils literal notranslate"><span class="pre">TH</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.THEAD"><code class="docutils literal notranslate"><span class="pre">THEAD</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TITLE"><code class="docutils literal notranslate"><span class="pre">TITLE</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TR"><code class="docutils literal notranslate"><span class="pre">TR</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TT"><code class="docutils literal notranslate"><span class="pre">TT</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.U"><code class="docutils literal notranslate"><span class="pre">U</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.UL"><code class="docutils literal notranslate"><span class="pre">UL</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.VAR"><code class="docutils literal notranslate"><span class="pre">VAR</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html">lxml.html.clean module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner"><code class="docutils literal notranslate"><span class="pre">Cleaner</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._break_text"><code class="docutils literal notranslate"><span class="pre">_break_text()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._find_image_dataurls"><code class="docutils literal notranslate"><span class="pre">_find_image_dataurls()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._has_javascript_scheme"><code class="docutils literal notranslate"><span class="pre">_has_javascript_scheme()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._insert_break"><code class="docutils literal notranslate"><span class="pre">_insert_break()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._is_unsafe_image_type"><code class="docutils literal notranslate"><span class="pre">_is_unsafe_image_type()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._link_text"><code class="docutils literal notranslate"><span class="pre">_link_text()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._looks_like_tag_content"><code class="docutils literal notranslate"><span class="pre">_looks_like_tag_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._possibly_malicious_schemes"><code class="docutils literal notranslate"><span class="pre">_possibly_malicious_schemes()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._replace_css_import"><code class="docutils literal notranslate"><span class="pre">_replace_css_import()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._replace_css_javascript"><code class="docutils literal notranslate"><span class="pre">_replace_css_javascript()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._substitute_whitespace"><code class="docutils literal notranslate"><span class="pre">_substitute_whitespace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.autolink"><code class="docutils literal notranslate"><span class="pre">autolink()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.autolink_html"><code class="docutils literal notranslate"><span class="pre">autolink_html()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.clean_html"><code class="docutils literal notranslate"><span class="pre">clean_html()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.word_break"><code class="docutils literal notranslate"><span class="pre">word_break()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.word_break_html"><code class="docutils literal notranslate"><span class="pre">word_break_html()</span></code></a></li>
+</ul>
+</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.diff.html">lxml.html.diff module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.NoDeletes"><code class="docutils literal notranslate"><span class="pre">NoDeletes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.DEL_END"><code class="docutils literal notranslate"><span class="pre">DEL_END</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.DEL_START"><code class="docutils literal notranslate"><span class="pre">DEL_START</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token"><code class="docutils literal notranslate"><span class="pre">href_token</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token"><code class="docutils literal notranslate"><span class="pre">tag_token</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token"><code class="docutils literal notranslate"><span class="pre">token</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff._contains_block_level_tag"><code class="docutils literal notranslate"><span class="pre">_contains_block_level_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff._fixup_ins_del_tags"><code class="docutils literal notranslate"><span class="pre">_fixup_ins_del_tags()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff._merge_element_contents"><code class="docutils literal notranslate"><span class="pre">_merge_element_contents()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff._move_el_inside_block"><code class="docutils literal notranslate"><span class="pre">_move_el_inside_block()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.cleanup_delete"><code class="docutils literal notranslate"><span class="pre">cleanup_delete()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.cleanup_html"><code class="docutils literal notranslate"><span class="pre">cleanup_html()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.compress_merge_back"><code class="docutils literal notranslate"><span class="pre">compress_merge_back()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.compress_tokens"><code class="docutils literal notranslate"><span class="pre">compress_tokens()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.copy_annotations"><code class="docutils literal notranslate"><span class="pre">copy_annotations()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.default_markup"><code class="docutils literal notranslate"><span class="pre">default_markup()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.end_tag"><code class="docutils literal notranslate"><span class="pre">end_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.expand_tokens"><code class="docutils literal notranslate"><span class="pre">expand_tokens()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.fixup_chunks"><code class="docutils literal notranslate"><span class="pre">fixup_chunks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.fixup_ins_del_tags"><code class="docutils literal notranslate"><span class="pre">fixup_ins_del_tags()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.flatten_el"><code class="docutils literal notranslate"><span class="pre">flatten_el()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.html_annotate"><code class="docutils literal notranslate"><span class="pre">html_annotate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.html_annotate_merge_annotations"><code class="docutils literal notranslate"><span class="pre">html_annotate_merge_annotations()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.htmldiff"><code class="docutils literal notranslate"><span class="pre">htmldiff()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.htmldiff_tokens"><code class="docutils literal notranslate"><span class="pre">htmldiff_tokens()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.is_end_tag"><code class="docutils literal notranslate"><span class="pre">is_end_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.is_start_tag"><code class="docutils literal notranslate"><span class="pre">is_start_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.is_word"><code class="docutils literal notranslate"><span class="pre">is_word()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.locate_unbalanced_end"><code class="docutils literal notranslate"><span class="pre">locate_unbalanced_end()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.locate_unbalanced_start"><code class="docutils literal notranslate"><span class="pre">locate_unbalanced_start()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.markup_serialize_tokens"><code class="docutils literal notranslate"><span class="pre">markup_serialize_tokens()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.merge_delete"><code class="docutils literal notranslate"><span class="pre">merge_delete()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.merge_insert"><code class="docutils literal notranslate"><span class="pre">merge_insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.parse_html"><code class="docutils literal notranslate"><span class="pre">parse_html()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.serialize_html_fragment"><code class="docutils literal notranslate"><span class="pre">serialize_html_fragment()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.split_delete"><code class="docutils literal notranslate"><span class="pre">split_delete()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.split_trailing_whitespace"><code class="docutils literal notranslate"><span class="pre">split_trailing_whitespace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.split_unbalanced"><code class="docutils literal notranslate"><span class="pre">split_unbalanced()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.split_words"><code class="docutils literal notranslate"><span class="pre">split_words()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.start_tag"><code class="docutils literal notranslate"><span class="pre">start_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tokenize"><code class="docutils literal notranslate"><span class="pre">tokenize()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tokenize_annotated"><code class="docutils literal notranslate"><span class="pre">tokenize_annotated()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.formfill.html">lxml.html.formfill module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.FormNotFound"><code class="docutils literal notranslate"><span class="pre">FormNotFound</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.DefaultErrorCreator"><code class="docutils literal notranslate"><span class="pre">DefaultErrorCreator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._add_class"><code class="docutils literal notranslate"><span class="pre">_add_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._check"><code class="docutils literal notranslate"><span class="pre">_check()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._fill_form"><code class="docutils literal notranslate"><span class="pre">_fill_form()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._fill_multiple"><code class="docutils literal notranslate"><span class="pre">_fill_multiple()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._fill_single"><code class="docutils literal notranslate"><span class="pre">_fill_single()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._find_elements_for_name"><code class="docutils literal notranslate"><span class="pre">_find_elements_for_name()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._find_form"><code class="docutils literal notranslate"><span class="pre">_find_form()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._find_form_ids"><code class="docutils literal notranslate"><span class="pre">_find_form_ids()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._insert_error"><code class="docutils literal notranslate"><span class="pre">_insert_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._select"><code class="docutils literal notranslate"><span class="pre">_select()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._takes_multiple"><code class="docutils literal notranslate"><span class="pre">_takes_multiple()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.fill_form"><code class="docutils literal notranslate"><span class="pre">fill_form()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.fill_form_html"><code class="docutils literal notranslate"><span class="pre">fill_form_html()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.insert_errors"><code class="docutils literal notranslate"><span class="pre">insert_errors()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.insert_errors_html"><code class="docutils literal notranslate"><span class="pre">insert_errors_html()</span></code></a></li>
+</ul>
+</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.html.html#module-lxml.html">Module contents</a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.html#module-lxml.html">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.append"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.clear"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.copy"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.copy()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.count"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.count()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.extend"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.index"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.insert"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.pop"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.pop()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.remove"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.reverse"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.reverse()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.sort"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.sort()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.value"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.value</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxGroup.value_options"><code class="docutils literal notranslate"><span class="pre">CheckboxGroup.value_options</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues"><code class="docutils literal notranslate"><span class="pre">CheckboxValues</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues._from_iterable"><code class="docutils literal notranslate"><span class="pre">CheckboxValues._from_iterable()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues._hash"><code class="docutils literal notranslate"><span class="pre">CheckboxValues._hash()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.add"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.add()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.clear"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.copy"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.copy()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.difference"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.difference()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.difference_update"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.difference_update()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.discard"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.discard()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.intersection"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.intersection()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.intersection_update"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.intersection_update()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.isdisjoint"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.isdisjoint()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.issubset"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.issubset()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.issuperset"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.issuperset()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.pop"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.pop()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.remove"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.symmetric_difference"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.symmetric_difference()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.symmetric_difference_update"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.symmetric_difference_update()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.union"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.union()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues.update"><code class="docutils literal notranslate"><span class="pre">CheckboxValues.update()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.CheckboxValues._abc_impl"><code class="docutils literal notranslate"><span class="pre">CheckboxValues._abc_impl</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.Classes"><code class="docutils literal notranslate"><span class="pre">Classes</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes._from_iterable"><code class="docutils literal notranslate"><span class="pre">Classes._from_iterable()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes._hash"><code class="docutils literal notranslate"><span class="pre">Classes._hash()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes.add"><code class="docutils literal notranslate"><span class="pre">Classes.add()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes.clear"><code class="docutils literal notranslate"><span class="pre">Classes.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes.discard"><code class="docutils literal notranslate"><span class="pre">Classes.discard()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes.isdisjoint"><code class="docutils literal notranslate"><span class="pre">Classes.isdisjoint()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes.pop"><code class="docutils literal notranslate"><span class="pre">Classes.pop()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes.remove"><code class="docutils literal notranslate"><span class="pre">Classes.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes.toggle"><code class="docutils literal notranslate"><span class="pre">Classes.toggle()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes.update"><code class="docutils literal notranslate"><span class="pre">Classes.update()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.Classes._abc_impl"><code class="docutils literal notranslate"><span class="pre">Classes._abc_impl</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict"><code class="docutils literal notranslate"><span class="pre">FieldsDict</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict.clear"><code class="docutils literal notranslate"><span class="pre">FieldsDict.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict.get"><code class="docutils literal notranslate"><span class="pre">FieldsDict.get()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict.items"><code class="docutils literal notranslate"><span class="pre">FieldsDict.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict.keys"><code class="docutils literal notranslate"><span class="pre">FieldsDict.keys()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict.pop"><code class="docutils literal notranslate"><span class="pre">FieldsDict.pop()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict.popitem"><code class="docutils literal notranslate"><span class="pre">FieldsDict.popitem()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict.setdefault"><code class="docutils literal notranslate"><span class="pre">FieldsDict.setdefault()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict.update"><code class="docutils literal notranslate"><span class="pre">FieldsDict.update()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict.values"><code class="docutils literal notranslate"><span class="pre">FieldsDict.values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FieldsDict._abc_impl"><code class="docutils literal notranslate"><span class="pre">FieldsDict._abc_impl</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement"><code class="docutils literal notranslate"><span class="pre">FormElement</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement._init"><code class="docutils literal notranslate"><span class="pre">FormElement._init()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement._name"><code class="docutils literal notranslate"><span class="pre">FormElement._name()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.addnext"><code class="docutils literal notranslate"><span class="pre">FormElement.addnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.addprevious"><code class="docutils literal notranslate"><span class="pre">FormElement.addprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.append"><code class="docutils literal notranslate"><span class="pre">FormElement.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.clear"><code class="docutils literal notranslate"><span class="pre">FormElement.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.cssselect"><code class="docutils literal notranslate"><span class="pre">FormElement.cssselect()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.drop_tag"><code class="docutils literal notranslate"><span class="pre">FormElement.drop_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.drop_tree"><code class="docutils literal notranslate"><span class="pre">FormElement.drop_tree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.extend"><code class="docutils literal notranslate"><span class="pre">FormElement.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.find"><code class="docutils literal notranslate"><span class="pre">FormElement.find()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.find_class"><code class="docutils literal notranslate"><span class="pre">FormElement.find_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.find_rel_links"><code class="docutils literal notranslate"><span class="pre">FormElement.find_rel_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.findall"><code class="docutils literal notranslate"><span class="pre">FormElement.findall()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.findtext"><code class="docutils literal notranslate"><span class="pre">FormElement.findtext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.form_values"><code class="docutils literal notranslate"><span class="pre">FormElement.form_values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.get"><code class="docutils literal notranslate"><span class="pre">FormElement.get()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.get_element_by_id"><code class="docutils literal notranslate"><span class="pre">FormElement.get_element_by_id()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.getchildren"><code class="docutils literal notranslate"><span class="pre">FormElement.getchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.getiterator"><code class="docutils literal notranslate"><span class="pre">FormElement.getiterator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.getnext"><code class="docutils literal notranslate"><span class="pre">FormElement.getnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.getparent"><code class="docutils literal notranslate"><span class="pre">FormElement.getparent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.getprevious"><code class="docutils literal notranslate"><span class="pre">FormElement.getprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.getroottree"><code class="docutils literal notranslate"><span class="pre">FormElement.getroottree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.index"><code class="docutils literal notranslate"><span class="pre">FormElement.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.insert"><code class="docutils literal notranslate"><span class="pre">FormElement.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.items"><code class="docutils literal notranslate"><span class="pre">FormElement.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.iter"><code class="docutils literal notranslate"><span class="pre">FormElement.iter()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">FormElement.iterancestors()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">FormElement.iterchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">FormElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.iterfind"><code class="docutils literal notranslate"><span class="pre">FormElement.iterfind()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.iterlinks"><code class="docutils literal notranslate"><span class="pre">FormElement.iterlinks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">FormElement.itersiblings()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.itertext"><code class="docutils literal notranslate"><span class="pre">FormElement.itertext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.keys"><code class="docutils literal notranslate"><span class="pre">FormElement.keys()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.make_links_absolute"><code class="docutils literal notranslate"><span class="pre">FormElement.make_links_absolute()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.makeelement"><code class="docutils literal notranslate"><span class="pre">FormElement.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.remove"><code class="docutils literal notranslate"><span class="pre">FormElement.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.replace"><code class="docutils literal notranslate"><span class="pre">FormElement.replace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.resolve_base_href"><code class="docutils literal notranslate"><span class="pre">FormElement.resolve_base_href()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.rewrite_links"><code class="docutils literal notranslate"><span class="pre">FormElement.rewrite_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.set"><code class="docutils literal notranslate"><span class="pre">FormElement.set()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.text_content"><code class="docutils literal notranslate"><span class="pre">FormElement.text_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.values"><code class="docutils literal notranslate"><span class="pre">FormElement.values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.xpath"><code class="docutils literal notranslate"><span class="pre">FormElement.xpath()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.action"><code class="docutils literal notranslate"><span class="pre">FormElement.action</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.attrib"><code class="docutils literal notranslate"><span class="pre">FormElement.attrib</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.base"><code class="docutils literal notranslate"><span class="pre">FormElement.base</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.base_url"><code class="docutils literal notranslate"><span class="pre">FormElement.base_url</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.body"><code class="docutils literal notranslate"><span class="pre">FormElement.body</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.classes"><code class="docutils literal notranslate"><span class="pre">FormElement.classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.fields"><code class="docutils literal notranslate"><span class="pre">FormElement.fields</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.forms"><code class="docutils literal notranslate"><span class="pre">FormElement.forms</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.head"><code class="docutils literal notranslate"><span class="pre">FormElement.head</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.inputs"><code class="docutils literal notranslate"><span class="pre">FormElement.inputs</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.label"><code class="docutils literal notranslate"><span class="pre">FormElement.label</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.method"><code class="docutils literal notranslate"><span class="pre">FormElement.method</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.nsmap"><code class="docutils literal notranslate"><span class="pre">FormElement.nsmap</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.prefix"><code class="docutils literal notranslate"><span class="pre">FormElement.prefix</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.sourceline"><code class="docutils literal notranslate"><span class="pre">FormElement.sourceline</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.tag"><code class="docutils literal notranslate"><span class="pre">FormElement.tag</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.tail"><code class="docutils literal notranslate"><span class="pre">FormElement.tail</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.FormElement.text"><code class="docutils literal notranslate"><span class="pre">FormElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser"><code class="docutils literal notranslate"><span class="pre">HTMLParser</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.close"><code class="docutils literal notranslate"><span class="pre">HTMLParser.close()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.copy"><code class="docutils literal notranslate"><span class="pre">HTMLParser.copy()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.feed"><code class="docutils literal notranslate"><span class="pre">HTMLParser.feed()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.makeelement"><code class="docutils literal notranslate"><span class="pre">HTMLParser.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.setElementClassLookup"><code class="docutils literal notranslate"><span class="pre">HTMLParser.setElementClassLookup()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">HTMLParser.set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.error_log"><code class="docutils literal notranslate"><span class="pre">HTMLParser.error_log</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.feed_error_log"><code class="docutils literal notranslate"><span class="pre">HTMLParser.feed_error_log</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.resolvers"><code class="docutils literal notranslate"><span class="pre">HTMLParser.resolvers</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.target"><code class="docutils literal notranslate"><span class="pre">HTMLParser.target</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HTMLParser.version"><code class="docutils literal notranslate"><span class="pre">HTMLParser.version</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment"><code class="docutils literal notranslate"><span class="pre">HtmlComment</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment._init"><code class="docutils literal notranslate"><span class="pre">HtmlComment._init()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.addnext"><code class="docutils literal notranslate"><span class="pre">HtmlComment.addnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.addprevious"><code class="docutils literal notranslate"><span class="pre">HtmlComment.addprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.append"><code class="docutils literal notranslate"><span class="pre">HtmlComment.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.clear"><code class="docutils literal notranslate"><span class="pre">HtmlComment.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.cssselect"><code class="docutils literal notranslate"><span class="pre">HtmlComment.cssselect()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.drop_tag"><code class="docutils literal notranslate"><span class="pre">HtmlComment.drop_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.drop_tree"><code class="docutils literal notranslate"><span class="pre">HtmlComment.drop_tree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.extend"><code class="docutils literal notranslate"><span class="pre">HtmlComment.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.find"><code class="docutils literal notranslate"><span class="pre">HtmlComment.find()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.find_class"><code class="docutils literal notranslate"><span class="pre">HtmlComment.find_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.find_rel_links"><code class="docutils literal notranslate"><span class="pre">HtmlComment.find_rel_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.findall"><code class="docutils literal notranslate"><span class="pre">HtmlComment.findall()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.findtext"><code class="docutils literal notranslate"><span class="pre">HtmlComment.findtext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.get"><code class="docutils literal notranslate"><span class="pre">HtmlComment.get()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.get_element_by_id"><code class="docutils literal notranslate"><span class="pre">HtmlComment.get_element_by_id()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.getchildren"><code class="docutils literal notranslate"><span class="pre">HtmlComment.getchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.getiterator"><code class="docutils literal notranslate"><span class="pre">HtmlComment.getiterator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.getnext"><code class="docutils literal notranslate"><span class="pre">HtmlComment.getnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.getparent"><code class="docutils literal notranslate"><span class="pre">HtmlComment.getparent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.getprevious"><code class="docutils literal notranslate"><span class="pre">HtmlComment.getprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.getroottree"><code class="docutils literal notranslate"><span class="pre">HtmlComment.getroottree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.index"><code class="docutils literal notranslate"><span class="pre">HtmlComment.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.insert"><code class="docutils literal notranslate"><span class="pre">HtmlComment.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.items"><code class="docutils literal notranslate"><span class="pre">HtmlComment.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.iter"><code class="docutils literal notranslate"><span class="pre">HtmlComment.iter()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.iterancestors"><code class="docutils literal notranslate"><span class="pre">HtmlComment.iterancestors()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.iterchildren"><code class="docutils literal notranslate"><span class="pre">HtmlComment.iterchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.iterdescendants"><code class="docutils literal notranslate"><span class="pre">HtmlComment.iterdescendants()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.iterfind"><code class="docutils literal notranslate"><span class="pre">HtmlComment.iterfind()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.iterlinks"><code class="docutils literal notranslate"><span class="pre">HtmlComment.iterlinks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.itersiblings"><code class="docutils literal notranslate"><span class="pre">HtmlComment.itersiblings()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.itertext"><code class="docutils literal notranslate"><span class="pre">HtmlComment.itertext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.keys"><code class="docutils literal notranslate"><span class="pre">HtmlComment.keys()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.make_links_absolute"><code class="docutils literal notranslate"><span class="pre">HtmlComment.make_links_absolute()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.makeelement"><code class="docutils literal notranslate"><span class="pre">HtmlComment.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.remove"><code class="docutils literal notranslate"><span class="pre">HtmlComment.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.replace"><code class="docutils literal notranslate"><span class="pre">HtmlComment.replace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.resolve_base_href"><code class="docutils literal notranslate"><span class="pre">HtmlComment.resolve_base_href()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.rewrite_links"><code class="docutils literal notranslate"><span class="pre">HtmlComment.rewrite_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.set"><code class="docutils literal notranslate"><span class="pre">HtmlComment.set()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.text_content"><code class="docutils literal notranslate"><span class="pre">HtmlComment.text_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.values"><code class="docutils literal notranslate"><span class="pre">HtmlComment.values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.xpath"><code class="docutils literal notranslate"><span class="pre">HtmlComment.xpath()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.attrib"><code class="docutils literal notranslate"><span class="pre">HtmlComment.attrib</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.base"><code class="docutils literal notranslate"><span class="pre">HtmlComment.base</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.base_url"><code class="docutils literal notranslate"><span class="pre">HtmlComment.base_url</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.body"><code class="docutils literal notranslate"><span class="pre">HtmlComment.body</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.classes"><code class="docutils literal notranslate"><span class="pre">HtmlComment.classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.forms"><code class="docutils literal notranslate"><span class="pre">HtmlComment.forms</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.head"><code class="docutils literal notranslate"><span class="pre">HtmlComment.head</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.label"><code class="docutils literal notranslate"><span class="pre">HtmlComment.label</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.nsmap"><code class="docutils literal notranslate"><span class="pre">HtmlComment.nsmap</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.prefix"><code class="docutils literal notranslate"><span class="pre">HtmlComment.prefix</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.sourceline"><code class="docutils literal notranslate"><span class="pre">HtmlComment.sourceline</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.tag"><code class="docutils literal notranslate"><span class="pre">HtmlComment.tag</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.tail"><code class="docutils literal notranslate"><span class="pre">HtmlComment.tail</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlComment.text"><code class="docutils literal notranslate"><span class="pre">HtmlComment.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement"><code class="docutils literal notranslate"><span class="pre">HtmlElement</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement._init"><code class="docutils literal notranslate"><span class="pre">HtmlElement._init()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.addnext"><code class="docutils literal notranslate"><span class="pre">HtmlElement.addnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.addprevious"><code class="docutils literal notranslate"><span class="pre">HtmlElement.addprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.append"><code class="docutils literal notranslate"><span class="pre">HtmlElement.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.clear"><code class="docutils literal notranslate"><span class="pre">HtmlElement.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.cssselect"><code class="docutils literal notranslate"><span class="pre">HtmlElement.cssselect()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.drop_tag"><code class="docutils literal notranslate"><span class="pre">HtmlElement.drop_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.drop_tree"><code class="docutils literal notranslate"><span class="pre">HtmlElement.drop_tree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.extend"><code class="docutils literal notranslate"><span class="pre">HtmlElement.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.find"><code class="docutils literal notranslate"><span class="pre">HtmlElement.find()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.find_class"><code class="docutils literal notranslate"><span class="pre">HtmlElement.find_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.find_rel_links"><code class="docutils literal notranslate"><span class="pre">HtmlElement.find_rel_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.findall"><code class="docutils literal notranslate"><span class="pre">HtmlElement.findall()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.findtext"><code class="docutils literal notranslate"><span class="pre">HtmlElement.findtext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.get"><code class="docutils literal notranslate"><span class="pre">HtmlElement.get()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.get_element_by_id"><code class="docutils literal notranslate"><span class="pre">HtmlElement.get_element_by_id()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.getchildren"><code class="docutils literal notranslate"><span class="pre">HtmlElement.getchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.getiterator"><code class="docutils literal notranslate"><span class="pre">HtmlElement.getiterator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.getnext"><code class="docutils literal notranslate"><span class="pre">HtmlElement.getnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.getparent"><code class="docutils literal notranslate"><span class="pre">HtmlElement.getparent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.getprevious"><code class="docutils literal notranslate"><span class="pre">HtmlElement.getprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.getroottree"><code class="docutils literal notranslate"><span class="pre">HtmlElement.getroottree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.index"><code class="docutils literal notranslate"><span class="pre">HtmlElement.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.insert"><code class="docutils literal notranslate"><span class="pre">HtmlElement.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.items"><code class="docutils literal notranslate"><span class="pre">HtmlElement.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.iter"><code class="docutils literal notranslate"><span class="pre">HtmlElement.iter()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">HtmlElement.iterancestors()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">HtmlElement.iterchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">HtmlElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.iterfind"><code class="docutils literal notranslate"><span class="pre">HtmlElement.iterfind()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.iterlinks"><code class="docutils literal notranslate"><span class="pre">HtmlElement.iterlinks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">HtmlElement.itersiblings()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.itertext"><code class="docutils literal notranslate"><span class="pre">HtmlElement.itertext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.keys"><code class="docutils literal notranslate"><span class="pre">HtmlElement.keys()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.make_links_absolute"><code class="docutils literal notranslate"><span class="pre">HtmlElement.make_links_absolute()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.makeelement"><code class="docutils literal notranslate"><span class="pre">HtmlElement.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.remove"><code class="docutils literal notranslate"><span class="pre">HtmlElement.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.replace"><code class="docutils literal notranslate"><span class="pre">HtmlElement.replace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.resolve_base_href"><code class="docutils literal notranslate"><span class="pre">HtmlElement.resolve_base_href()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.rewrite_links"><code class="docutils literal notranslate"><span class="pre">HtmlElement.rewrite_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.set"><code class="docutils literal notranslate"><span class="pre">HtmlElement.set()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.text_content"><code class="docutils literal notranslate"><span class="pre">HtmlElement.text_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.values"><code class="docutils literal notranslate"><span class="pre">HtmlElement.values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.xpath"><code class="docutils literal notranslate"><span class="pre">HtmlElement.xpath()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.attrib"><code class="docutils literal notranslate"><span class="pre">HtmlElement.attrib</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.base"><code class="docutils literal notranslate"><span class="pre">HtmlElement.base</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.base_url"><code class="docutils literal notranslate"><span class="pre">HtmlElement.base_url</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.body"><code class="docutils literal notranslate"><span class="pre">HtmlElement.body</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.classes"><code class="docutils literal notranslate"><span class="pre">HtmlElement.classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.forms"><code class="docutils literal notranslate"><span class="pre">HtmlElement.forms</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.head"><code class="docutils literal notranslate"><span class="pre">HtmlElement.head</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.label"><code class="docutils literal notranslate"><span class="pre">HtmlElement.label</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.nsmap"><code class="docutils literal notranslate"><span class="pre">HtmlElement.nsmap</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.prefix"><code class="docutils literal notranslate"><span class="pre">HtmlElement.prefix</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.sourceline"><code class="docutils literal notranslate"><span class="pre">HtmlElement.sourceline</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.tag"><code class="docutils literal notranslate"><span class="pre">HtmlElement.tag</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.tail"><code class="docutils literal notranslate"><span class="pre">HtmlElement.tail</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElement.text"><code class="docutils literal notranslate"><span class="pre">HtmlElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElementClassLookup"><code class="docutils literal notranslate"><span class="pre">HtmlElementClassLookup</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElementClassLookup.lookup"><code class="docutils literal notranslate"><span class="pre">HtmlElementClassLookup.lookup()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElementClassLookup.set_fallback"><code class="docutils literal notranslate"><span class="pre">HtmlElementClassLookup.set_fallback()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElementClassLookup._default_element_classes"><code class="docutils literal notranslate"><span class="pre">HtmlElementClassLookup._default_element_classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlElementClassLookup.fallback"><code class="docutils literal notranslate"><span class="pre">HtmlElementClassLookup.fallback</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity"><code class="docutils literal notranslate"><span class="pre">HtmlEntity</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity._init"><code class="docutils literal notranslate"><span class="pre">HtmlEntity._init()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.addnext"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.addnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.addprevious"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.addprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.append"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.clear"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.cssselect"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.cssselect()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.drop_tag"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.drop_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.drop_tree"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.drop_tree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.extend"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.find"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.find()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.find_class"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.find_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.find_rel_links"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.find_rel_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.findall"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.findall()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.findtext"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.findtext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.get"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.get()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.get_element_by_id"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.get_element_by_id()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.getchildren"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.getchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.getiterator"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.getiterator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.getnext"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.getnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.getparent"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.getparent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.getprevious"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.getprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.getroottree"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.getroottree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.index"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.insert"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.items"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.iter"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.iter()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.iterancestors"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.iterancestors()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.iterchildren"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.iterchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.iterdescendants"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.iterdescendants()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.iterfind"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.iterfind()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.iterlinks"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.iterlinks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.itersiblings"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.itersiblings()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.itertext"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.itertext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.keys"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.keys()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.make_links_absolute"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.make_links_absolute()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.makeelement"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.remove"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.replace"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.replace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.resolve_base_href"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.resolve_base_href()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.rewrite_links"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.rewrite_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.set"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.set()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.text_content"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.text_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.values"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.xpath"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.xpath()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.attrib"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.attrib</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.base"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.base</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.base_url"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.base_url</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.body"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.body</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.classes"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.forms"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.forms</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.head"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.head</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.label"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.label</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.name"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.name</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.nsmap"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.nsmap</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.prefix"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.prefix</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.sourceline"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.sourceline</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.tag"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.tag</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.tail"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.tail</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlEntity.text"><code class="docutils literal notranslate"><span class="pre">HtmlEntity.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin"><code class="docutils literal notranslate"><span class="pre">HtmlMixin</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.cssselect"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.cssselect()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.drop_tag"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.drop_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.drop_tree"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.drop_tree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.find_class"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.find_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.find_rel_links"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.find_rel_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.get_element_by_id"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.get_element_by_id()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.iterlinks"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.iterlinks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.make_links_absolute"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.make_links_absolute()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.resolve_base_href"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.resolve_base_href()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.rewrite_links"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.rewrite_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.set"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.set()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.text_content"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.text_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.base_url"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.base_url</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.body"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.body</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.classes"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.forms"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.forms</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.head"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.head</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlMixin.label"><code class="docutils literal notranslate"><span class="pre">HtmlMixin.label</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction._init"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction._init()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.addnext"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.addnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.addprevious"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.addprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.append"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.clear"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.cssselect"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.cssselect()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.drop_tag"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.drop_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.drop_tree"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.drop_tree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.extend"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.find"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.find()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.find_class"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.find_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.find_rel_links"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.find_rel_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.findall"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.findall()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.findtext"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.findtext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.get"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.get()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.get_element_by_id"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.get_element_by_id()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.getchildren"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.getchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.getiterator"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.getiterator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.getnext"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.getnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.getparent"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.getparent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.getprevious"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.getprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.getroottree"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.getroottree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.index"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.insert"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.items"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.iter"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.iter()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.iterancestors"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.iterancestors()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.iterchildren"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.iterchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.iterdescendants"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.iterdescendants()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.iterfind"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.iterfind()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.iterlinks"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.iterlinks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.itersiblings"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.itersiblings()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.itertext"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.itertext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.keys"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.keys()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.make_links_absolute"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.make_links_absolute()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.makeelement"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.remove"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.replace"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.replace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.resolve_base_href"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.resolve_base_href()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.rewrite_links"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.rewrite_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.set"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.set()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.text_content"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.text_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.values"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.xpath"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.xpath()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.attrib"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.attrib</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.base"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.base</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.base_url"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.base_url</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.body"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.body</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.classes"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.forms"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.forms</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.head"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.head</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.label"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.label</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.nsmap"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.nsmap</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.prefix"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.prefix</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.sourceline"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.sourceline</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.tag"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.tag</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.tail"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.tail</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.target"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.target</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.HtmlProcessingInstruction.text"><code class="docutils literal notranslate"><span class="pre">HtmlProcessingInstruction.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement"><code class="docutils literal notranslate"><span class="pre">InputElement</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement._init"><code class="docutils literal notranslate"><span class="pre">InputElement._init()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.addnext"><code class="docutils literal notranslate"><span class="pre">InputElement.addnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.addprevious"><code class="docutils literal notranslate"><span class="pre">InputElement.addprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.append"><code class="docutils literal notranslate"><span class="pre">InputElement.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.clear"><code class="docutils literal notranslate"><span class="pre">InputElement.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.cssselect"><code class="docutils literal notranslate"><span class="pre">InputElement.cssselect()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.drop_tag"><code class="docutils literal notranslate"><span class="pre">InputElement.drop_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.drop_tree"><code class="docutils literal notranslate"><span class="pre">InputElement.drop_tree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.extend"><code class="docutils literal notranslate"><span class="pre">InputElement.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.find"><code class="docutils literal notranslate"><span class="pre">InputElement.find()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.find_class"><code class="docutils literal notranslate"><span class="pre">InputElement.find_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.find_rel_links"><code class="docutils literal notranslate"><span class="pre">InputElement.find_rel_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.findall"><code class="docutils literal notranslate"><span class="pre">InputElement.findall()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.findtext"><code class="docutils literal notranslate"><span class="pre">InputElement.findtext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.get"><code class="docutils literal notranslate"><span class="pre">InputElement.get()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.get_element_by_id"><code class="docutils literal notranslate"><span class="pre">InputElement.get_element_by_id()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.getchildren"><code class="docutils literal notranslate"><span class="pre">InputElement.getchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.getiterator"><code class="docutils literal notranslate"><span class="pre">InputElement.getiterator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.getnext"><code class="docutils literal notranslate"><span class="pre">InputElement.getnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.getparent"><code class="docutils literal notranslate"><span class="pre">InputElement.getparent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.getprevious"><code class="docutils literal notranslate"><span class="pre">InputElement.getprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.getroottree"><code class="docutils literal notranslate"><span class="pre">InputElement.getroottree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.index"><code class="docutils literal notranslate"><span class="pre">InputElement.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.insert"><code class="docutils literal notranslate"><span class="pre">InputElement.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.items"><code class="docutils literal notranslate"><span class="pre">InputElement.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.iter"><code class="docutils literal notranslate"><span class="pre">InputElement.iter()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">InputElement.iterancestors()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">InputElement.iterchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">InputElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.iterfind"><code class="docutils literal notranslate"><span class="pre">InputElement.iterfind()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.iterlinks"><code class="docutils literal notranslate"><span class="pre">InputElement.iterlinks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">InputElement.itersiblings()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.itertext"><code class="docutils literal notranslate"><span class="pre">InputElement.itertext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.keys"><code class="docutils literal notranslate"><span class="pre">InputElement.keys()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.make_links_absolute"><code class="docutils literal notranslate"><span class="pre">InputElement.make_links_absolute()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.makeelement"><code class="docutils literal notranslate"><span class="pre">InputElement.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.remove"><code class="docutils literal notranslate"><span class="pre">InputElement.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.replace"><code class="docutils literal notranslate"><span class="pre">InputElement.replace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.resolve_base_href"><code class="docutils literal notranslate"><span class="pre">InputElement.resolve_base_href()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.rewrite_links"><code class="docutils literal notranslate"><span class="pre">InputElement.rewrite_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.set"><code class="docutils literal notranslate"><span class="pre">InputElement.set()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.text_content"><code class="docutils literal notranslate"><span class="pre">InputElement.text_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.values"><code class="docutils literal notranslate"><span class="pre">InputElement.values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.xpath"><code class="docutils literal notranslate"><span class="pre">InputElement.xpath()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.attrib"><code class="docutils literal notranslate"><span class="pre">InputElement.attrib</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.base"><code class="docutils literal notranslate"><span class="pre">InputElement.base</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.base_url"><code class="docutils literal notranslate"><span class="pre">InputElement.base_url</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.body"><code class="docutils literal notranslate"><span class="pre">InputElement.body</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.checkable"><code class="docutils literal notranslate"><span class="pre">InputElement.checkable</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.checked"><code class="docutils literal notranslate"><span class="pre">InputElement.checked</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.classes"><code class="docutils literal notranslate"><span class="pre">InputElement.classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.forms"><code class="docutils literal notranslate"><span class="pre">InputElement.forms</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.head"><code class="docutils literal notranslate"><span class="pre">InputElement.head</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.label"><code class="docutils literal notranslate"><span class="pre">InputElement.label</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.name"><code class="docutils literal notranslate"><span class="pre">InputElement.name</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.nsmap"><code class="docutils literal notranslate"><span class="pre">InputElement.nsmap</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.prefix"><code class="docutils literal notranslate"><span class="pre">InputElement.prefix</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.sourceline"><code class="docutils literal notranslate"><span class="pre">InputElement.sourceline</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.tag"><code class="docutils literal notranslate"><span class="pre">InputElement.tag</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.tail"><code class="docutils literal notranslate"><span class="pre">InputElement.tail</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.text"><code class="docutils literal notranslate"><span class="pre">InputElement.text</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.type"><code class="docutils literal notranslate"><span class="pre">InputElement.type</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputElement.value"><code class="docutils literal notranslate"><span class="pre">InputElement.value</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.InputGetter"><code class="docutils literal notranslate"><span class="pre">InputGetter</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputGetter.items"><code class="docutils literal notranslate"><span class="pre">InputGetter.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputGetter.keys"><code class="docutils literal notranslate"><span class="pre">InputGetter.keys()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.InputMixin"><code class="docutils literal notranslate"><span class="pre">InputMixin</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.InputMixin.name"><code class="docutils literal notranslate"><span class="pre">InputMixin.name</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement"><code class="docutils literal notranslate"><span class="pre">LabelElement</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement._init"><code class="docutils literal notranslate"><span class="pre">LabelElement._init()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.addnext"><code class="docutils literal notranslate"><span class="pre">LabelElement.addnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.addprevious"><code class="docutils literal notranslate"><span class="pre">LabelElement.addprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.append"><code class="docutils literal notranslate"><span class="pre">LabelElement.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.clear"><code class="docutils literal notranslate"><span class="pre">LabelElement.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.cssselect"><code class="docutils literal notranslate"><span class="pre">LabelElement.cssselect()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.drop_tag"><code class="docutils literal notranslate"><span class="pre">LabelElement.drop_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.drop_tree"><code class="docutils literal notranslate"><span class="pre">LabelElement.drop_tree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.extend"><code class="docutils literal notranslate"><span class="pre">LabelElement.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.find"><code class="docutils literal notranslate"><span class="pre">LabelElement.find()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.find_class"><code class="docutils literal notranslate"><span class="pre">LabelElement.find_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.find_rel_links"><code class="docutils literal notranslate"><span class="pre">LabelElement.find_rel_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.findall"><code class="docutils literal notranslate"><span class="pre">LabelElement.findall()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.findtext"><code class="docutils literal notranslate"><span class="pre">LabelElement.findtext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.get"><code class="docutils literal notranslate"><span class="pre">LabelElement.get()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.get_element_by_id"><code class="docutils literal notranslate"><span class="pre">LabelElement.get_element_by_id()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.getchildren"><code class="docutils literal notranslate"><span class="pre">LabelElement.getchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.getiterator"><code class="docutils literal notranslate"><span class="pre">LabelElement.getiterator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.getnext"><code class="docutils literal notranslate"><span class="pre">LabelElement.getnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.getparent"><code class="docutils literal notranslate"><span class="pre">LabelElement.getparent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.getprevious"><code class="docutils literal notranslate"><span class="pre">LabelElement.getprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.getroottree"><code class="docutils literal notranslate"><span class="pre">LabelElement.getroottree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.index"><code class="docutils literal notranslate"><span class="pre">LabelElement.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.insert"><code class="docutils literal notranslate"><span class="pre">LabelElement.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.items"><code class="docutils literal notranslate"><span class="pre">LabelElement.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.iter"><code class="docutils literal notranslate"><span class="pre">LabelElement.iter()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">LabelElement.iterancestors()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">LabelElement.iterchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">LabelElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.iterfind"><code class="docutils literal notranslate"><span class="pre">LabelElement.iterfind()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.iterlinks"><code class="docutils literal notranslate"><span class="pre">LabelElement.iterlinks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">LabelElement.itersiblings()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.itertext"><code class="docutils literal notranslate"><span class="pre">LabelElement.itertext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.keys"><code class="docutils literal notranslate"><span class="pre">LabelElement.keys()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.make_links_absolute"><code class="docutils literal notranslate"><span class="pre">LabelElement.make_links_absolute()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.makeelement"><code class="docutils literal notranslate"><span class="pre">LabelElement.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.remove"><code class="docutils literal notranslate"><span class="pre">LabelElement.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.replace"><code class="docutils literal notranslate"><span class="pre">LabelElement.replace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.resolve_base_href"><code class="docutils literal notranslate"><span class="pre">LabelElement.resolve_base_href()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.rewrite_links"><code class="docutils literal notranslate"><span class="pre">LabelElement.rewrite_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.set"><code class="docutils literal notranslate"><span class="pre">LabelElement.set()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.text_content"><code class="docutils literal notranslate"><span class="pre">LabelElement.text_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.values"><code class="docutils literal notranslate"><span class="pre">LabelElement.values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.xpath"><code class="docutils literal notranslate"><span class="pre">LabelElement.xpath()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.attrib"><code class="docutils literal notranslate"><span class="pre">LabelElement.attrib</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.base"><code class="docutils literal notranslate"><span class="pre">LabelElement.base</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.base_url"><code class="docutils literal notranslate"><span class="pre">LabelElement.base_url</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.body"><code class="docutils literal notranslate"><span class="pre">LabelElement.body</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.classes"><code class="docutils literal notranslate"><span class="pre">LabelElement.classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.for_element"><code class="docutils literal notranslate"><span class="pre">LabelElement.for_element</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.forms"><code class="docutils literal notranslate"><span class="pre">LabelElement.forms</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.head"><code class="docutils literal notranslate"><span class="pre">LabelElement.head</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.label"><code class="docutils literal notranslate"><span class="pre">LabelElement.label</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.nsmap"><code class="docutils literal notranslate"><span class="pre">LabelElement.nsmap</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.prefix"><code class="docutils literal notranslate"><span class="pre">LabelElement.prefix</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.sourceline"><code class="docutils literal notranslate"><span class="pre">LabelElement.sourceline</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.tag"><code class="docutils literal notranslate"><span class="pre">LabelElement.tag</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.tail"><code class="docutils literal notranslate"><span class="pre">LabelElement.tail</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.LabelElement.text"><code class="docutils literal notranslate"><span class="pre">LabelElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions._from_iterable"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions._from_iterable()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions._hash"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions._hash()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.add"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.add()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.clear"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.copy"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.copy()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.difference"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.difference()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.difference_update"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.difference_update()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.discard"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.discard()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.intersection"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.intersection()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.intersection_update"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.intersection_update()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.isdisjoint"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.isdisjoint()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.issubset"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.issubset()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.issuperset"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.issuperset()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.pop"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.pop()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.remove"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.symmetric_difference"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.symmetric_difference()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.symmetric_difference_update"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.symmetric_difference_update()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.union"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.union()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.update"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.update()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions._abc_impl"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions._abc_impl</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.MultipleSelectOptions.options"><code class="docutils literal notranslate"><span class="pre">MultipleSelectOptions.options</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup"><code class="docutils literal notranslate"><span class="pre">RadioGroup</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.append"><code class="docutils literal notranslate"><span class="pre">RadioGroup.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.clear"><code class="docutils literal notranslate"><span class="pre">RadioGroup.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.copy"><code class="docutils literal notranslate"><span class="pre">RadioGroup.copy()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.count"><code class="docutils literal notranslate"><span class="pre">RadioGroup.count()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.extend"><code class="docutils literal notranslate"><span class="pre">RadioGroup.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.index"><code class="docutils literal notranslate"><span class="pre">RadioGroup.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.insert"><code class="docutils literal notranslate"><span class="pre">RadioGroup.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.pop"><code class="docutils literal notranslate"><span class="pre">RadioGroup.pop()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.remove"><code class="docutils literal notranslate"><span class="pre">RadioGroup.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.reverse"><code class="docutils literal notranslate"><span class="pre">RadioGroup.reverse()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.sort"><code class="docutils literal notranslate"><span class="pre">RadioGroup.sort()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.value"><code class="docutils literal notranslate"><span class="pre">RadioGroup.value</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.RadioGroup.value_options"><code class="docutils literal notranslate"><span class="pre">RadioGroup.value_options</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement"><code class="docutils literal notranslate"><span class="pre">SelectElement</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement._init"><code class="docutils literal notranslate"><span class="pre">SelectElement._init()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.addnext"><code class="docutils literal notranslate"><span class="pre">SelectElement.addnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.addprevious"><code class="docutils literal notranslate"><span class="pre">SelectElement.addprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.append"><code class="docutils literal notranslate"><span class="pre">SelectElement.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.clear"><code class="docutils literal notranslate"><span class="pre">SelectElement.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.cssselect"><code class="docutils literal notranslate"><span class="pre">SelectElement.cssselect()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.drop_tag"><code class="docutils literal notranslate"><span class="pre">SelectElement.drop_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.drop_tree"><code class="docutils literal notranslate"><span class="pre">SelectElement.drop_tree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.extend"><code class="docutils literal notranslate"><span class="pre">SelectElement.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.find"><code class="docutils literal notranslate"><span class="pre">SelectElement.find()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.find_class"><code class="docutils literal notranslate"><span class="pre">SelectElement.find_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.find_rel_links"><code class="docutils literal notranslate"><span class="pre">SelectElement.find_rel_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.findall"><code class="docutils literal notranslate"><span class="pre">SelectElement.findall()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.findtext"><code class="docutils literal notranslate"><span class="pre">SelectElement.findtext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.get"><code class="docutils literal notranslate"><span class="pre">SelectElement.get()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.get_element_by_id"><code class="docutils literal notranslate"><span class="pre">SelectElement.get_element_by_id()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.getchildren"><code class="docutils literal notranslate"><span class="pre">SelectElement.getchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.getiterator"><code class="docutils literal notranslate"><span class="pre">SelectElement.getiterator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.getnext"><code class="docutils literal notranslate"><span class="pre">SelectElement.getnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.getparent"><code class="docutils literal notranslate"><span class="pre">SelectElement.getparent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.getprevious"><code class="docutils literal notranslate"><span class="pre">SelectElement.getprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.getroottree"><code class="docutils literal notranslate"><span class="pre">SelectElement.getroottree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.index"><code class="docutils literal notranslate"><span class="pre">SelectElement.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.insert"><code class="docutils literal notranslate"><span class="pre">SelectElement.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.items"><code class="docutils literal notranslate"><span class="pre">SelectElement.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.iter"><code class="docutils literal notranslate"><span class="pre">SelectElement.iter()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">SelectElement.iterancestors()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">SelectElement.iterchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">SelectElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.iterfind"><code class="docutils literal notranslate"><span class="pre">SelectElement.iterfind()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.iterlinks"><code class="docutils literal notranslate"><span class="pre">SelectElement.iterlinks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">SelectElement.itersiblings()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.itertext"><code class="docutils literal notranslate"><span class="pre">SelectElement.itertext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.keys"><code class="docutils literal notranslate"><span class="pre">SelectElement.keys()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.make_links_absolute"><code class="docutils literal notranslate"><span class="pre">SelectElement.make_links_absolute()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.makeelement"><code class="docutils literal notranslate"><span class="pre">SelectElement.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.remove"><code class="docutils literal notranslate"><span class="pre">SelectElement.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.replace"><code class="docutils literal notranslate"><span class="pre">SelectElement.replace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.resolve_base_href"><code class="docutils literal notranslate"><span class="pre">SelectElement.resolve_base_href()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.rewrite_links"><code class="docutils literal notranslate"><span class="pre">SelectElement.rewrite_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.set"><code class="docutils literal notranslate"><span class="pre">SelectElement.set()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.text_content"><code class="docutils literal notranslate"><span class="pre">SelectElement.text_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.values"><code class="docutils literal notranslate"><span class="pre">SelectElement.values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.xpath"><code class="docutils literal notranslate"><span class="pre">SelectElement.xpath()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.attrib"><code class="docutils literal notranslate"><span class="pre">SelectElement.attrib</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.base"><code class="docutils literal notranslate"><span class="pre">SelectElement.base</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.base_url"><code class="docutils literal notranslate"><span class="pre">SelectElement.base_url</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.body"><code class="docutils literal notranslate"><span class="pre">SelectElement.body</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.classes"><code class="docutils literal notranslate"><span class="pre">SelectElement.classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.forms"><code class="docutils literal notranslate"><span class="pre">SelectElement.forms</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.head"><code class="docutils literal notranslate"><span class="pre">SelectElement.head</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.label"><code class="docutils literal notranslate"><span class="pre">SelectElement.label</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.multiple"><code class="docutils literal notranslate"><span class="pre">SelectElement.multiple</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.name"><code class="docutils literal notranslate"><span class="pre">SelectElement.name</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.nsmap"><code class="docutils literal notranslate"><span class="pre">SelectElement.nsmap</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.prefix"><code class="docutils literal notranslate"><span class="pre">SelectElement.prefix</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.sourceline"><code class="docutils literal notranslate"><span class="pre">SelectElement.sourceline</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.tag"><code class="docutils literal notranslate"><span class="pre">SelectElement.tag</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.tail"><code class="docutils literal notranslate"><span class="pre">SelectElement.tail</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.text"><code class="docutils literal notranslate"><span class="pre">SelectElement.text</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.value"><code class="docutils literal notranslate"><span class="pre">SelectElement.value</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.SelectElement.value_options"><code class="docutils literal notranslate"><span class="pre">SelectElement.value_options</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement"><code class="docutils literal notranslate"><span class="pre">TextareaElement</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement._init"><code class="docutils literal notranslate"><span class="pre">TextareaElement._init()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.addnext"><code class="docutils literal notranslate"><span class="pre">TextareaElement.addnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.addprevious"><code class="docutils literal notranslate"><span class="pre">TextareaElement.addprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.append"><code class="docutils literal notranslate"><span class="pre">TextareaElement.append()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.clear"><code class="docutils literal notranslate"><span class="pre">TextareaElement.clear()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.cssselect"><code class="docutils literal notranslate"><span class="pre">TextareaElement.cssselect()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.drop_tag"><code class="docutils literal notranslate"><span class="pre">TextareaElement.drop_tag()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.drop_tree"><code class="docutils literal notranslate"><span class="pre">TextareaElement.drop_tree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.extend"><code class="docutils literal notranslate"><span class="pre">TextareaElement.extend()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.find"><code class="docutils literal notranslate"><span class="pre">TextareaElement.find()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.find_class"><code class="docutils literal notranslate"><span class="pre">TextareaElement.find_class()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.find_rel_links"><code class="docutils literal notranslate"><span class="pre">TextareaElement.find_rel_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.findall"><code class="docutils literal notranslate"><span class="pre">TextareaElement.findall()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.findtext"><code class="docutils literal notranslate"><span class="pre">TextareaElement.findtext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.get"><code class="docutils literal notranslate"><span class="pre">TextareaElement.get()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.get_element_by_id"><code class="docutils literal notranslate"><span class="pre">TextareaElement.get_element_by_id()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.getchildren"><code class="docutils literal notranslate"><span class="pre">TextareaElement.getchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.getiterator"><code class="docutils literal notranslate"><span class="pre">TextareaElement.getiterator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.getnext"><code class="docutils literal notranslate"><span class="pre">TextareaElement.getnext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.getparent"><code class="docutils literal notranslate"><span class="pre">TextareaElement.getparent()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.getprevious"><code class="docutils literal notranslate"><span class="pre">TextareaElement.getprevious()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.getroottree"><code class="docutils literal notranslate"><span class="pre">TextareaElement.getroottree()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.index"><code class="docutils literal notranslate"><span class="pre">TextareaElement.index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.insert"><code class="docutils literal notranslate"><span class="pre">TextareaElement.insert()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.items"><code class="docutils literal notranslate"><span class="pre">TextareaElement.items()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.iter"><code class="docutils literal notranslate"><span class="pre">TextareaElement.iter()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">TextareaElement.iterancestors()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">TextareaElement.iterchildren()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">TextareaElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.iterfind"><code class="docutils literal notranslate"><span class="pre">TextareaElement.iterfind()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.iterlinks"><code class="docutils literal notranslate"><span class="pre">TextareaElement.iterlinks()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">TextareaElement.itersiblings()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.itertext"><code class="docutils literal notranslate"><span class="pre">TextareaElement.itertext()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.keys"><code class="docutils literal notranslate"><span class="pre">TextareaElement.keys()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.make_links_absolute"><code class="docutils literal notranslate"><span class="pre">TextareaElement.make_links_absolute()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.makeelement"><code class="docutils literal notranslate"><span class="pre">TextareaElement.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.remove"><code class="docutils literal notranslate"><span class="pre">TextareaElement.remove()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.replace"><code class="docutils literal notranslate"><span class="pre">TextareaElement.replace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.resolve_base_href"><code class="docutils literal notranslate"><span class="pre">TextareaElement.resolve_base_href()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.rewrite_links"><code class="docutils literal notranslate"><span class="pre">TextareaElement.rewrite_links()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.set"><code class="docutils literal notranslate"><span class="pre">TextareaElement.set()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.text_content"><code class="docutils literal notranslate"><span class="pre">TextareaElement.text_content()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.values"><code class="docutils literal notranslate"><span class="pre">TextareaElement.values()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.xpath"><code class="docutils literal notranslate"><span class="pre">TextareaElement.xpath()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.attrib"><code class="docutils literal notranslate"><span class="pre">TextareaElement.attrib</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.base"><code class="docutils literal notranslate"><span class="pre">TextareaElement.base</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.base_url"><code class="docutils literal notranslate"><span class="pre">TextareaElement.base_url</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.body"><code class="docutils literal notranslate"><span class="pre">TextareaElement.body</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.classes"><code class="docutils literal notranslate"><span class="pre">TextareaElement.classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.forms"><code class="docutils literal notranslate"><span class="pre">TextareaElement.forms</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.head"><code class="docutils literal notranslate"><span class="pre">TextareaElement.head</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.label"><code class="docutils literal notranslate"><span class="pre">TextareaElement.label</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.name"><code class="docutils literal notranslate"><span class="pre">TextareaElement.name</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.nsmap"><code class="docutils literal notranslate"><span class="pre">TextareaElement.nsmap</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.prefix"><code class="docutils literal notranslate"><span class="pre">TextareaElement.prefix</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.sourceline"><code class="docutils literal notranslate"><span class="pre">TextareaElement.sourceline</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.tag"><code class="docutils literal notranslate"><span class="pre">TextareaElement.tag</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.tail"><code class="docutils literal notranslate"><span class="pre">TextareaElement.tail</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.text"><code class="docutils literal notranslate"><span class="pre">TextareaElement.text</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.TextareaElement.value"><code class="docutils literal notranslate"><span class="pre">TextareaElement.value</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser"><code class="docutils literal notranslate"><span class="pre">XHTMLParser</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.close"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.close()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.copy"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.copy()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.feed"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.feed()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.makeelement"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.makeelement()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.setElementClassLookup"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.setElementClassLookup()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.error_log"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.error_log</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.feed_error_log"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.feed_error_log</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.resolvers"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.resolvers</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.target"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.target</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.html.html#lxml.html.XHTMLParser.version"><code class="docutils literal notranslate"><span class="pre">XHTMLParser.version</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._MethodFunc"><code class="docutils literal notranslate"><span class="pre">_MethodFunc</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.Element"><code class="docutils literal notranslate"><span class="pre">Element()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.__bytes_replace_meta_content_type"><code class="docutils literal notranslate"><span class="pre">__bytes_replace_meta_content_type()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.__fix_docstring"><code class="docutils literal notranslate"><span class="pre">__fix_docstring()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.__str_replace_meta_content_type"><code class="docutils literal notranslate"><span class="pre">__str_replace_meta_content_type()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._contains_block_level_tag"><code class="docutils literal notranslate"><span class="pre">_contains_block_level_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._element_name"><code class="docutils literal notranslate"><span class="pre">_element_name()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._iter_css_imports"><code class="docutils literal notranslate"><span class="pre">_iter_css_imports()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._iter_css_urls"><code class="docutils literal notranslate"><span class="pre">_iter_css_urls()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._looks_like_full_html_bytes"><code class="docutils literal notranslate"><span class="pre">_looks_like_full_html_bytes()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._looks_like_full_html_unicode"><code class="docutils literal notranslate"><span class="pre">_looks_like_full_html_unicode()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._nons"><code class="docutils literal notranslate"><span class="pre">_nons()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._parse_meta_refresh_url"><code class="docutils literal notranslate"><span class="pre">_parse_meta_refresh_url()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._transform_result"><code class="docutils literal notranslate"><span class="pre">_transform_result()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html._unquote_match"><code class="docutils literal notranslate"><span class="pre">_unquote_match()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.document_fromstring"><code class="docutils literal notranslate"><span class="pre">document_fromstring()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.fragment_fromstring"><code class="docutils literal notranslate"><span class="pre">fragment_fromstring()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.fragments_fromstring"><code class="docutils literal notranslate"><span class="pre">fragments_fromstring()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.fromstring"><code class="docutils literal notranslate"><span class="pre">fromstring()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.html_to_xhtml"><code class="docutils literal notranslate"><span class="pre">html_to_xhtml()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.open_http_urllib"><code class="docutils literal notranslate"><span class="pre">open_http_urllib()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.open_in_browser"><code class="docutils literal notranslate"><span class="pre">open_in_browser()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.submit_form"><code class="docutils literal notranslate"><span class="pre">submit_form()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.tostring"><code class="docutils literal notranslate"><span class="pre">tostring()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.html#lxml.html.xhtml_to_html"><code class="docutils literal notranslate"><span class="pre">xhtml_to_html()</span></code></a></li>
+</ul>
+</li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="lxml.isoschematron.html">lxml.isoschematron package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="lxml.isoschematron.html#module-lxml.isoschematron">Module contents</a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.isoschematron.html#module-lxml.isoschematron">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron"><code class="docutils literal notranslate"><span class="pre">Schematron</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._append_log_message"><code class="docutils literal notranslate"><span class="pre">Schematron._append_log_message()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._clear_error_log"><code class="docutils literal notranslate"><span class="pre">Schematron._clear_error_log()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._extract"><code class="docutils literal notranslate"><span class="pre">Schematron._extract()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron.assertValid"><code class="docutils literal notranslate"><span class="pre">Schematron.assertValid()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron.assert_"><code class="docutils literal notranslate"><span class="pre">Schematron.assert_()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron.validate"><code class="docutils literal notranslate"><span class="pre">Schematron.validate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron.ASSERTS_AND_REPORTS"><code class="docutils literal notranslate"><span class="pre">Schematron.ASSERTS_AND_REPORTS</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron.ASSERTS_ONLY"><code class="docutils literal notranslate"><span class="pre">Schematron.ASSERTS_ONLY</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._compile"><code class="docutils literal notranslate"><span class="pre">Schematron._compile</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._domain"><code class="docutils literal notranslate"><span class="pre">Schematron._domain</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._error_type"><code class="docutils literal notranslate"><span class="pre">Schematron._error_type</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._expand"><code class="docutils literal notranslate"><span class="pre">Schematron._expand</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._extract_rng"><code class="docutils literal notranslate"><span class="pre">Schematron._extract_rng</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._extract_xsd"><code class="docutils literal notranslate"><span class="pre">Schematron._extract_xsd</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._include"><code class="docutils literal notranslate"><span class="pre">Schematron._include</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._level"><code class="docutils literal notranslate"><span class="pre">Schematron._level</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron._validation_errors"><code class="docutils literal notranslate"><span class="pre">Schematron._validation_errors</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron.error_log"><code class="docutils literal notranslate"><span class="pre">Schematron.error_log</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron.schematron"><code class="docutils literal notranslate"><span class="pre">Schematron.schematron</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron.validation_report"><code class="docutils literal notranslate"><span class="pre">Schematron.validation_report</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.Schematron.validator_xslt"><code class="docutils literal notranslate"><span class="pre">Schematron.validator_xslt</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron._stylesheet_param_dict"><code class="docutils literal notranslate"><span class="pre">_stylesheet_param_dict()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.isoschematron.html#lxml.isoschematron.stylesheet_params"><code class="docutils literal notranslate"><span class="pre">stylesheet_params()</span></code></a></li>
+</ul>
+</li>
 </ul>
 </li>
 </ul>
 <h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this heading"></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._elementpath.html">lxml._elementpath module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="lxml.builder.html">lxml.builder module</a></li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.ElementInclude.html">lxml.ElementInclude module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.add_note"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.with_traceback"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.args"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.args</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.end_lineno"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.end_lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.end_offset"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.end_offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.filename"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.filename</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.lineno"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.msg"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.msg</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.offset"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.print_file_and_line"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.print_file_and_line</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.FatalIncludeError.text"><code class="docutils literal notranslate"><span class="pre">FatalIncludeError.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.add_note"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.with_traceback"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.args"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.args</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.end_lineno"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.end_lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.end_offset"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.end_offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.filename"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.filename</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.lineno"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.msg"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.msg</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.offset"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.print_file_and_line"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.print_file_and_line</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.LimitedRecursiveIncludeError.text"><code class="docutils literal notranslate"><span class="pre">LimitedRecursiveIncludeError.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude._include"><code class="docutils literal notranslate"><span class="pre">_include()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude._lxml_default_loader"><code class="docutils literal notranslate"><span class="pre">_lxml_default_loader()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude._wrap_et_loader"><code class="docutils literal notranslate"><span class="pre">_wrap_et_loader()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.default_loader"><code class="docutils literal notranslate"><span class="pre">default_loader()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.ElementInclude.html#lxml.ElementInclude.include"><code class="docutils literal notranslate"><span class="pre">include()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="lxml._elementpath.html">lxml._elementpath module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath._build_path_iterator"><code class="docutils literal notranslate"><span class="pre">_build_path_iterator()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.find"><code class="docutils literal notranslate"><span class="pre">find()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.findall"><code class="docutils literal notranslate"><span class="pre">findall()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.findtext"><code class="docutils literal notranslate"><span class="pre">findtext()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.iterfind"><code class="docutils literal notranslate"><span class="pre">iterfind()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_child"><code class="docutils literal notranslate"><span class="pre">prepare_child()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_descendant"><code class="docutils literal notranslate"><span class="pre">prepare_descendant()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_parent"><code class="docutils literal notranslate"><span class="pre">prepare_parent()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_predicate"><code class="docutils literal notranslate"><span class="pre">prepare_predicate()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_self"><code class="docutils literal notranslate"><span class="pre">prepare_self()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.prepare_star"><code class="docutils literal notranslate"><span class="pre">prepare_star()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml._elementpath.html#lxml._elementpath.xpath_tokenizer"><code class="docutils literal notranslate"><span class="pre">xpath_tokenizer()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.builder.html">lxml.builder module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.builder.html#lxml.builder.ElementMaker"><code class="docutils literal notranslate"><span class="pre">ElementMaker</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.builder.html#lxml.builder.ElementMaker._makeelement"><code class="docutils literal notranslate"><span class="pre">ElementMaker._makeelement</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.builder.html#lxml.builder.ElementMaker._namespace"><code class="docutils literal notranslate"><span class="pre">ElementMaker._namespace</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.builder.html#lxml.builder.ElementMaker._nsmap"><code class="docutils literal notranslate"><span class="pre">ElementMaker._nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.builder.html#lxml.builder.ElementMaker._typemap"><code class="docutils literal notranslate"><span class="pre">ElementMaker._typemap</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.builder.html#lxml.builder.__pyx_unpickle_ElementMaker"><code class="docutils literal notranslate"><span class="pre">__pyx_unpickle_ElementMaker()</span></code></a></li>
+</ul>
+</li>
 <li class="toctree-l1"><a class="reference internal" href="lxml.cssselect.html">lxml.cssselect module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="lxml.doctestcompare.html">lxml.doctestcompare module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="lxml.etree.html">lxml.etree module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="lxml.objectify.html">lxml.objectify module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="lxml.sax.html">lxml.sax module</a></li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.doctestcompare.html">lxml.doctestcompare module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker._do_a_fancy_diff"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker._do_a_fancy_diff()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker._looks_like_markup"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker._looks_like_markup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker._toAscii"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker._toAscii()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.check_output"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.check_output()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.collect_diff"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.collect_diff()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.collect_diff_end_tag"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.collect_diff_end_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.collect_diff_tag"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.collect_diff_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.collect_diff_text"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.collect_diff_text()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.compare_docs"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.compare_docs()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.format_doc"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.format_doc()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.format_end_tag"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.format_end_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.format_tag"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.format_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.format_text"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.format_text()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.get_default_parser"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.get_default_parser()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.get_parser"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.get_parser()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.html_empty_tag"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.html_empty_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.output_difference"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.output_difference()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.tag_compare"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.tag_compare()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.text_compare"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.text_compare()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LHTMLOutputChecker.empty_tags"><code class="docutils literal notranslate"><span class="pre">LHTMLOutputChecker.empty_tags</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker._do_a_fancy_diff"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker._do_a_fancy_diff()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker._looks_like_markup"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker._looks_like_markup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker._toAscii"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker._toAscii()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.check_output"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.check_output()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.collect_diff"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.collect_diff()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.collect_diff_end_tag"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.collect_diff_end_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.collect_diff_tag"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.collect_diff_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.collect_diff_text"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.collect_diff_text()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.compare_docs"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.compare_docs()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.format_doc"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.format_doc()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.format_end_tag"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.format_end_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.format_tag"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.format_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.format_text"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.format_text()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.get_default_parser"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.get_default_parser()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.get_parser"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.get_parser()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.html_empty_tag"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.html_empty_tag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.output_difference"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.output_difference()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.tag_compare"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.tag_compare()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.text_compare"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.text_compare()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.LXMLOutputChecker.empty_tags"><code class="docutils literal notranslate"><span class="pre">LXMLOutputChecker.empty_tags</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare._RestoreChecker"><code class="docutils literal notranslate"><span class="pre">_RestoreChecker</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare._RestoreChecker.call_super"><code class="docutils literal notranslate"><span class="pre">_RestoreChecker.call_super()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare._RestoreChecker.install_clone"><code class="docutils literal notranslate"><span class="pre">_RestoreChecker.install_clone()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare._RestoreChecker.install_dt_self"><code class="docutils literal notranslate"><span class="pre">_RestoreChecker.install_dt_self()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare._RestoreChecker.uninstall_clone"><code class="docutils literal notranslate"><span class="pre">_RestoreChecker.uninstall_clone()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare._RestoreChecker.uninstall_dt_self"><code class="docutils literal notranslate"><span class="pre">_RestoreChecker.uninstall_dt_self()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare._RestoreChecker.uninstall_module"><code class="docutils literal notranslate"><span class="pre">_RestoreChecker.uninstall_module()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare._find_doctest_frame"><code class="docutils literal notranslate"><span class="pre">_find_doctest_frame()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.html_fromstring"><code class="docutils literal notranslate"><span class="pre">html_fromstring()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.install"><code class="docutils literal notranslate"><span class="pre">install()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.norm_whitespace"><code class="docutils literal notranslate"><span class="pre">norm_whitespace()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.strip"><code class="docutils literal notranslate"><span class="pre">strip()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.doctestcompare.html#lxml.doctestcompare.temp_install"><code class="docutils literal notranslate"><span class="pre">temp_install()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.etree.html">lxml.etree module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NError"><code class="docutils literal notranslate"><span class="pre">C14NError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NError.add_note"><code class="docutils literal notranslate"><span class="pre">C14NError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NError.with_traceback"><code class="docutils literal notranslate"><span class="pre">C14NError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NError.args"><code class="docutils literal notranslate"><span class="pre">C14NError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDError"><code class="docutils literal notranslate"><span class="pre">DTDError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDError.add_note"><code class="docutils literal notranslate"><span class="pre">DTDError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDError.with_traceback"><code class="docutils literal notranslate"><span class="pre">DTDError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDError.args"><code class="docutils literal notranslate"><span class="pre">DTDError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDParseError"><code class="docutils literal notranslate"><span class="pre">DTDParseError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDParseError.add_note"><code class="docutils literal notranslate"><span class="pre">DTDParseError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDParseError.with_traceback"><code class="docutils literal notranslate"><span class="pre">DTDParseError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDParseError.args"><code class="docutils literal notranslate"><span class="pre">DTDParseError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDValidateError"><code class="docutils literal notranslate"><span class="pre">DTDValidateError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDValidateError.add_note"><code class="docutils literal notranslate"><span class="pre">DTDValidateError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDValidateError.with_traceback"><code class="docutils literal notranslate"><span class="pre">DTDValidateError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTDValidateError.args"><code class="docutils literal notranslate"><span class="pre">DTDValidateError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocumentInvalid"><code class="docutils literal notranslate"><span class="pre">DocumentInvalid</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocumentInvalid.add_note"><code class="docutils literal notranslate"><span class="pre">DocumentInvalid.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocumentInvalid.with_traceback"><code class="docutils literal notranslate"><span class="pre">DocumentInvalid.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocumentInvalid.args"><code class="docutils literal notranslate"><span class="pre">DocumentInvalid.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.Error"><code class="docutils literal notranslate"><span class="pre">Error</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Error.add_note"><code class="docutils literal notranslate"><span class="pre">Error.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Error.with_traceback"><code class="docutils literal notranslate"><span class="pre">Error.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Error.args"><code class="docutils literal notranslate"><span class="pre">Error.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlError"><code class="docutils literal notranslate"><span class="pre">LxmlError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlError.add_note"><code class="docutils literal notranslate"><span class="pre">LxmlError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlError.with_traceback"><code class="docutils literal notranslate"><span class="pre">LxmlError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlError.args"><code class="docutils literal notranslate"><span class="pre">LxmlError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlRegistryError"><code class="docutils literal notranslate"><span class="pre">LxmlRegistryError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlRegistryError.add_note"><code class="docutils literal notranslate"><span class="pre">LxmlRegistryError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlRegistryError.with_traceback"><code class="docutils literal notranslate"><span class="pre">LxmlRegistryError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlRegistryError.args"><code class="docutils literal notranslate"><span class="pre">LxmlRegistryError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.add_note"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.with_traceback"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.args"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.args</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.end_lineno"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.end_lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.end_offset"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.end_offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.filename"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.filename</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.lineno"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.msg"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.msg</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.offset"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.print_file_and_line"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.print_file_and_line</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.LxmlSyntaxError.text"><code class="docutils literal notranslate"><span class="pre">LxmlSyntaxError.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.NamespaceRegistryError"><code class="docutils literal notranslate"><span class="pre">NamespaceRegistryError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.NamespaceRegistryError.add_note"><code class="docutils literal notranslate"><span class="pre">NamespaceRegistryError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.NamespaceRegistryError.with_traceback"><code class="docutils literal notranslate"><span class="pre">NamespaceRegistryError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.NamespaceRegistryError.args"><code class="docutils literal notranslate"><span class="pre">NamespaceRegistryError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError"><code class="docutils literal notranslate"><span class="pre">ParseError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.add_note"><code class="docutils literal notranslate"><span class="pre">ParseError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.with_traceback"><code class="docutils literal notranslate"><span class="pre">ParseError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.args"><code class="docutils literal notranslate"><span class="pre">ParseError.args</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.end_lineno"><code class="docutils literal notranslate"><span class="pre">ParseError.end_lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.end_offset"><code class="docutils literal notranslate"><span class="pre">ParseError.end_offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.filename"><code class="docutils literal notranslate"><span class="pre">ParseError.filename</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.lineno"><code class="docutils literal notranslate"><span class="pre">ParseError.lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.msg"><code class="docutils literal notranslate"><span class="pre">ParseError.msg</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.offset"><code class="docutils literal notranslate"><span class="pre">ParseError.offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.position"><code class="docutils literal notranslate"><span class="pre">ParseError.position</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.print_file_and_line"><code class="docutils literal notranslate"><span class="pre">ParseError.print_file_and_line</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParseError.text"><code class="docutils literal notranslate"><span class="pre">ParseError.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParserError"><code class="docutils literal notranslate"><span class="pre">ParserError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParserError.add_note"><code class="docutils literal notranslate"><span class="pre">ParserError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParserError.with_traceback"><code class="docutils literal notranslate"><span class="pre">ParserError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParserError.args"><code class="docutils literal notranslate"><span class="pre">ParserError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGError"><code class="docutils literal notranslate"><span class="pre">RelaxNGError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGError.add_note"><code class="docutils literal notranslate"><span class="pre">RelaxNGError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGError.with_traceback"><code class="docutils literal notranslate"><span class="pre">RelaxNGError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGError.args"><code class="docutils literal notranslate"><span class="pre">RelaxNGError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGParseError"><code class="docutils literal notranslate"><span class="pre">RelaxNGParseError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGParseError.add_note"><code class="docutils literal notranslate"><span class="pre">RelaxNGParseError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGParseError.with_traceback"><code class="docutils literal notranslate"><span class="pre">RelaxNGParseError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGParseError.args"><code class="docutils literal notranslate"><span class="pre">RelaxNGParseError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGValidateError"><code class="docutils literal notranslate"><span class="pre">RelaxNGValidateError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGValidateError.add_note"><code class="docutils literal notranslate"><span class="pre">RelaxNGValidateError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGValidateError.with_traceback"><code class="docutils literal notranslate"><span class="pre">RelaxNGValidateError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGValidateError.args"><code class="docutils literal notranslate"><span class="pre">RelaxNGValidateError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronError"><code class="docutils literal notranslate"><span class="pre">SchematronError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronError.add_note"><code class="docutils literal notranslate"><span class="pre">SchematronError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronError.with_traceback"><code class="docutils literal notranslate"><span class="pre">SchematronError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronError.args"><code class="docutils literal notranslate"><span class="pre">SchematronError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronParseError"><code class="docutils literal notranslate"><span class="pre">SchematronParseError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronParseError.add_note"><code class="docutils literal notranslate"><span class="pre">SchematronParseError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronParseError.with_traceback"><code class="docutils literal notranslate"><span class="pre">SchematronParseError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronParseError.args"><code class="docutils literal notranslate"><span class="pre">SchematronParseError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronValidateError"><code class="docutils literal notranslate"><span class="pre">SchematronValidateError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronValidateError.add_note"><code class="docutils literal notranslate"><span class="pre">SchematronValidateError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronValidateError.with_traceback"><code class="docutils literal notranslate"><span class="pre">SchematronValidateError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SchematronValidateError.args"><code class="docutils literal notranslate"><span class="pre">SchematronValidateError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.SerialisationError"><code class="docutils literal notranslate"><span class="pre">SerialisationError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SerialisationError.add_note"><code class="docutils literal notranslate"><span class="pre">SerialisationError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SerialisationError.with_traceback"><code class="docutils literal notranslate"><span class="pre">SerialisationError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.SerialisationError.args"><code class="docutils literal notranslate"><span class="pre">SerialisationError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XIncludeError"><code class="docutils literal notranslate"><span class="pre">XIncludeError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XIncludeError.add_note"><code class="docutils literal notranslate"><span class="pre">XIncludeError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XIncludeError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XIncludeError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XIncludeError.args"><code class="docutils literal notranslate"><span class="pre">XIncludeError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaError"><code class="docutils literal notranslate"><span class="pre">XMLSchemaError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaError.add_note"><code class="docutils literal notranslate"><span class="pre">XMLSchemaError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XMLSchemaError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaError.args"><code class="docutils literal notranslate"><span class="pre">XMLSchemaError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaParseError"><code class="docutils literal notranslate"><span class="pre">XMLSchemaParseError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaParseError.add_note"><code class="docutils literal notranslate"><span class="pre">XMLSchemaParseError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaParseError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XMLSchemaParseError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaParseError.args"><code class="docutils literal notranslate"><span class="pre">XMLSchemaParseError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaValidateError"><code class="docutils literal notranslate"><span class="pre">XMLSchemaValidateError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaValidateError.add_note"><code class="docutils literal notranslate"><span class="pre">XMLSchemaValidateError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaValidateError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XMLSchemaValidateError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchemaValidateError.args"><code class="docutils literal notranslate"><span class="pre">XMLSchemaValidateError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.add_note"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.args"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.args</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.end_lineno"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.end_lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.end_offset"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.end_offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.filename"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.filename</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.lineno"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.msg"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.msg</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.offset"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.position"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.position</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.print_file_and_line"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.print_file_and_line</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxAssertionError.text"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxAssertionError.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.add_note"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.args"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.args</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.end_lineno"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.end_lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.end_offset"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.end_offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.filename"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.filename</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.lineno"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.msg"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.msg</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.offset"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.position"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.position</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.print_file_and_line"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.print_file_and_line</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSyntaxError.text"><code class="docutils literal notranslate"><span class="pre">XMLSyntaxError.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathError"><code class="docutils literal notranslate"><span class="pre">XPathError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathError.add_note"><code class="docutils literal notranslate"><span class="pre">XPathError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XPathError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathError.args"><code class="docutils literal notranslate"><span class="pre">XPathError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathEvalError"><code class="docutils literal notranslate"><span class="pre">XPathEvalError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathEvalError.add_note"><code class="docutils literal notranslate"><span class="pre">XPathEvalError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathEvalError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XPathEvalError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathEvalError.args"><code class="docutils literal notranslate"><span class="pre">XPathEvalError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathFunctionError"><code class="docutils literal notranslate"><span class="pre">XPathFunctionError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathFunctionError.add_note"><code class="docutils literal notranslate"><span class="pre">XPathFunctionError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathFunctionError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XPathFunctionError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathFunctionError.args"><code class="docutils literal notranslate"><span class="pre">XPathFunctionError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathResultError"><code class="docutils literal notranslate"><span class="pre">XPathResultError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathResultError.add_note"><code class="docutils literal notranslate"><span class="pre">XPathResultError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathResultError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XPathResultError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathResultError.args"><code class="docutils literal notranslate"><span class="pre">XPathResultError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.add_note"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.args"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.args</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.end_lineno"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.end_lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.end_offset"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.end_offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.filename"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.filename</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.lineno"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.lineno</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.msg"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.msg</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.offset"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.offset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.print_file_and_line"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.print_file_and_line</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathSyntaxError.text"><code class="docutils literal notranslate"><span class="pre">XPathSyntaxError.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTApplyError"><code class="docutils literal notranslate"><span class="pre">XSLTApplyError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTApplyError.add_note"><code class="docutils literal notranslate"><span class="pre">XSLTApplyError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTApplyError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XSLTApplyError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTApplyError.args"><code class="docutils literal notranslate"><span class="pre">XSLTApplyError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTError"><code class="docutils literal notranslate"><span class="pre">XSLTError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTError.add_note"><code class="docutils literal notranslate"><span class="pre">XSLTError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XSLTError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTError.args"><code class="docutils literal notranslate"><span class="pre">XSLTError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTExtensionError"><code class="docutils literal notranslate"><span class="pre">XSLTExtensionError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTExtensionError.add_note"><code class="docutils literal notranslate"><span class="pre">XSLTExtensionError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTExtensionError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XSLTExtensionError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTExtensionError.args"><code class="docutils literal notranslate"><span class="pre">XSLTExtensionError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTParseError"><code class="docutils literal notranslate"><span class="pre">XSLTParseError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTParseError.add_note"><code class="docutils literal notranslate"><span class="pre">XSLTParseError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTParseError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XSLTParseError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTParseError.args"><code class="docutils literal notranslate"><span class="pre">XSLTParseError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTSaveError"><code class="docutils literal notranslate"><span class="pre">XSLTSaveError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTSaveError.add_note"><code class="docutils literal notranslate"><span class="pre">XSLTSaveError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTSaveError.with_traceback"><code class="docutils literal notranslate"><span class="pre">XSLTSaveError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTSaveError.args"><code class="docutils literal notranslate"><span class="pre">XSLTSaveError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._TargetParserResult"><code class="docutils literal notranslate"><span class="pre">_TargetParserResult</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._TargetParserResult.add_note"><code class="docutils literal notranslate"><span class="pre">_TargetParserResult.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._TargetParserResult.with_traceback"><code class="docutils literal notranslate"><span class="pre">_TargetParserResult.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._TargetParserResult.args"><code class="docutils literal notranslate"><span class="pre">_TargetParserResult.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.AncestorsIterator"><code class="docutils literal notranslate"><span class="pre">AncestorsIterator</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.AttributeBasedElementClassLookup"><code class="docutils literal notranslate"><span class="pre">AttributeBasedElementClassLookup</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.AttributeBasedElementClassLookup.set_fallback"><code class="docutils literal notranslate"><span class="pre">AttributeBasedElementClassLookup.set_fallback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.AttributeBasedElementClassLookup.fallback"><code class="docutils literal notranslate"><span class="pre">AttributeBasedElementClassLookup.fallback</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NWriterTarget"><code class="docutils literal notranslate"><span class="pre">C14NWriterTarget</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NWriterTarget._iter_namespaces"><code class="docutils literal notranslate"><span class="pre">C14NWriterTarget._iter_namespaces()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NWriterTarget.close"><code class="docutils literal notranslate"><span class="pre">C14NWriterTarget.close()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NWriterTarget.comment"><code class="docutils literal notranslate"><span class="pre">C14NWriterTarget.comment()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NWriterTarget.data"><code class="docutils literal notranslate"><span class="pre">C14NWriterTarget.data()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NWriterTarget.end"><code class="docutils literal notranslate"><span class="pre">C14NWriterTarget.end()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NWriterTarget.pi"><code class="docutils literal notranslate"><span class="pre">C14NWriterTarget.pi()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NWriterTarget.start"><code class="docutils literal notranslate"><span class="pre">C14NWriterTarget.start()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.C14NWriterTarget.start_ns"><code class="docutils literal notranslate"><span class="pre">C14NWriterTarget.start_ns()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.CDATA"><code class="docutils literal notranslate"><span class="pre">CDATA</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase"><code class="docutils literal notranslate"><span class="pre">CommentBase</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase._init"><code class="docutils literal notranslate"><span class="pre">CommentBase._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.addnext"><code class="docutils literal notranslate"><span class="pre">CommentBase.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.addprevious"><code class="docutils literal notranslate"><span class="pre">CommentBase.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.append"><code class="docutils literal notranslate"><span class="pre">CommentBase.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.clear"><code class="docutils literal notranslate"><span class="pre">CommentBase.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.cssselect"><code class="docutils literal notranslate"><span class="pre">CommentBase.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.extend"><code class="docutils literal notranslate"><span class="pre">CommentBase.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.find"><code class="docutils literal notranslate"><span class="pre">CommentBase.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.findall"><code class="docutils literal notranslate"><span class="pre">CommentBase.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.findtext"><code class="docutils literal notranslate"><span class="pre">CommentBase.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.get"><code class="docutils literal notranslate"><span class="pre">CommentBase.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.getchildren"><code class="docutils literal notranslate"><span class="pre">CommentBase.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.getiterator"><code class="docutils literal notranslate"><span class="pre">CommentBase.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.getnext"><code class="docutils literal notranslate"><span class="pre">CommentBase.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.getparent"><code class="docutils literal notranslate"><span class="pre">CommentBase.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.getprevious"><code class="docutils literal notranslate"><span class="pre">CommentBase.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.getroottree"><code class="docutils literal notranslate"><span class="pre">CommentBase.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.index"><code class="docutils literal notranslate"><span class="pre">CommentBase.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.insert"><code class="docutils literal notranslate"><span class="pre">CommentBase.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.items"><code class="docutils literal notranslate"><span class="pre">CommentBase.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.iter"><code class="docutils literal notranslate"><span class="pre">CommentBase.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.iterancestors"><code class="docutils literal notranslate"><span class="pre">CommentBase.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.iterchildren"><code class="docutils literal notranslate"><span class="pre">CommentBase.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.iterdescendants"><code class="docutils literal notranslate"><span class="pre">CommentBase.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.iterfind"><code class="docutils literal notranslate"><span class="pre">CommentBase.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.itersiblings"><code class="docutils literal notranslate"><span class="pre">CommentBase.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.itertext"><code class="docutils literal notranslate"><span class="pre">CommentBase.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.keys"><code class="docutils literal notranslate"><span class="pre">CommentBase.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.makeelement"><code class="docutils literal notranslate"><span class="pre">CommentBase.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.remove"><code class="docutils literal notranslate"><span class="pre">CommentBase.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.replace"><code class="docutils literal notranslate"><span class="pre">CommentBase.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.set"><code class="docutils literal notranslate"><span class="pre">CommentBase.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.values"><code class="docutils literal notranslate"><span class="pre">CommentBase.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.xpath"><code class="docutils literal notranslate"><span class="pre">CommentBase.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.attrib"><code class="docutils literal notranslate"><span class="pre">CommentBase.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.base"><code class="docutils literal notranslate"><span class="pre">CommentBase.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.nsmap"><code class="docutils literal notranslate"><span class="pre">CommentBase.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.prefix"><code class="docutils literal notranslate"><span class="pre">CommentBase.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.sourceline"><code class="docutils literal notranslate"><span class="pre">CommentBase.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.tag"><code class="docutils literal notranslate"><span class="pre">CommentBase.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.tail"><code class="docutils literal notranslate"><span class="pre">CommentBase.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CommentBase.text"><code class="docutils literal notranslate"><span class="pre">CommentBase.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.CustomElementClassLookup"><code class="docutils literal notranslate"><span class="pre">CustomElementClassLookup</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CustomElementClassLookup.lookup"><code class="docutils literal notranslate"><span class="pre">CustomElementClassLookup.lookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CustomElementClassLookup.set_fallback"><code class="docutils literal notranslate"><span class="pre">CustomElementClassLookup.set_fallback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.CustomElementClassLookup.fallback"><code class="docutils literal notranslate"><span class="pre">CustomElementClassLookup.fallback</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD"><code class="docutils literal notranslate"><span class="pre">DTD</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD._append_log_message"><code class="docutils literal notranslate"><span class="pre">DTD._append_log_message()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD._clear_error_log"><code class="docutils literal notranslate"><span class="pre">DTD._clear_error_log()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.assertValid"><code class="docutils literal notranslate"><span class="pre">DTD.assertValid()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.assert_"><code class="docutils literal notranslate"><span class="pre">DTD.assert_()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.elements"><code class="docutils literal notranslate"><span class="pre">DTD.elements()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.entities"><code class="docutils literal notranslate"><span class="pre">DTD.entities()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.iterelements"><code class="docutils literal notranslate"><span class="pre">DTD.iterelements()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.iterentities"><code class="docutils literal notranslate"><span class="pre">DTD.iterentities()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.validate"><code class="docutils literal notranslate"><span class="pre">DTD.validate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.error_log"><code class="docutils literal notranslate"><span class="pre">DTD.error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.external_id"><code class="docutils literal notranslate"><span class="pre">DTD.external_id</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.name"><code class="docutils literal notranslate"><span class="pre">DTD.name</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DTD.system_url"><code class="docutils literal notranslate"><span class="pre">DTD.system_url</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo"><code class="docutils literal notranslate"><span class="pre">DocInfo</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.clear"><code class="docutils literal notranslate"><span class="pre">DocInfo.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.URL"><code class="docutils literal notranslate"><span class="pre">DocInfo.URL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.doctype"><code class="docutils literal notranslate"><span class="pre">DocInfo.doctype</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.encoding"><code class="docutils literal notranslate"><span class="pre">DocInfo.encoding</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.externalDTD"><code class="docutils literal notranslate"><span class="pre">DocInfo.externalDTD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.internalDTD"><code class="docutils literal notranslate"><span class="pre">DocInfo.internalDTD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.public_id"><code class="docutils literal notranslate"><span class="pre">DocInfo.public_id</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.root_name"><code class="docutils literal notranslate"><span class="pre">DocInfo.root_name</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.standalone"><code class="docutils literal notranslate"><span class="pre">DocInfo.standalone</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.system_url"><code class="docutils literal notranslate"><span class="pre">DocInfo.system_url</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.DocInfo.xml_version"><code class="docutils literal notranslate"><span class="pre">DocInfo.xml_version</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.close"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.close()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.copy"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.feed"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.feed()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.makeelement"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.setElementClassLookup"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.setElementClassLookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.error_log"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.feed_error_log"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.feed_error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.resolvers"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.resolvers</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.target"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.target</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETCompatXMLParser.version"><code class="docutils literal notranslate"><span class="pre">ETCompatXMLParser.version</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETXPath"><code class="docutils literal notranslate"><span class="pre">ETXPath</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETXPath.evaluate"><code class="docutils literal notranslate"><span class="pre">ETXPath.evaluate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETXPath.error_log"><code class="docutils literal notranslate"><span class="pre">ETXPath.error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ETXPath.path"><code class="docutils literal notranslate"><span class="pre">ETXPath.path</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase"><code class="docutils literal notranslate"><span class="pre">ElementBase</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase._init"><code class="docutils literal notranslate"><span class="pre">ElementBase._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.addnext"><code class="docutils literal notranslate"><span class="pre">ElementBase.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.addprevious"><code class="docutils literal notranslate"><span class="pre">ElementBase.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.append"><code class="docutils literal notranslate"><span class="pre">ElementBase.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.clear"><code class="docutils literal notranslate"><span class="pre">ElementBase.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.cssselect"><code class="docutils literal notranslate"><span class="pre">ElementBase.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.extend"><code class="docutils literal notranslate"><span class="pre">ElementBase.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.find"><code class="docutils literal notranslate"><span class="pre">ElementBase.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.findall"><code class="docutils literal notranslate"><span class="pre">ElementBase.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.findtext"><code class="docutils literal notranslate"><span class="pre">ElementBase.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.get"><code class="docutils literal notranslate"><span class="pre">ElementBase.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.getchildren"><code class="docutils literal notranslate"><span class="pre">ElementBase.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.getiterator"><code class="docutils literal notranslate"><span class="pre">ElementBase.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.getnext"><code class="docutils literal notranslate"><span class="pre">ElementBase.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.getparent"><code class="docutils literal notranslate"><span class="pre">ElementBase.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.getprevious"><code class="docutils literal notranslate"><span class="pre">ElementBase.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.getroottree"><code class="docutils literal notranslate"><span class="pre">ElementBase.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.index"><code class="docutils literal notranslate"><span class="pre">ElementBase.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.insert"><code class="docutils literal notranslate"><span class="pre">ElementBase.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.items"><code class="docutils literal notranslate"><span class="pre">ElementBase.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.iter"><code class="docutils literal notranslate"><span class="pre">ElementBase.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.iterancestors"><code class="docutils literal notranslate"><span class="pre">ElementBase.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.iterchildren"><code class="docutils literal notranslate"><span class="pre">ElementBase.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.iterdescendants"><code class="docutils literal notranslate"><span class="pre">ElementBase.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.iterfind"><code class="docutils literal notranslate"><span class="pre">ElementBase.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.itersiblings"><code class="docutils literal notranslate"><span class="pre">ElementBase.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.itertext"><code class="docutils literal notranslate"><span class="pre">ElementBase.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.keys"><code class="docutils literal notranslate"><span class="pre">ElementBase.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.makeelement"><code class="docutils literal notranslate"><span class="pre">ElementBase.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.remove"><code class="docutils literal notranslate"><span class="pre">ElementBase.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.replace"><code class="docutils literal notranslate"><span class="pre">ElementBase.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.set"><code class="docutils literal notranslate"><span class="pre">ElementBase.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.values"><code class="docutils literal notranslate"><span class="pre">ElementBase.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.xpath"><code class="docutils literal notranslate"><span class="pre">ElementBase.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.attrib"><code class="docutils literal notranslate"><span class="pre">ElementBase.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.base"><code class="docutils literal notranslate"><span class="pre">ElementBase.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.nsmap"><code class="docutils literal notranslate"><span class="pre">ElementBase.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.prefix"><code class="docutils literal notranslate"><span class="pre">ElementBase.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.sourceline"><code class="docutils literal notranslate"><span class="pre">ElementBase.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.tag"><code class="docutils literal notranslate"><span class="pre">ElementBase.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.tail"><code class="docutils literal notranslate"><span class="pre">ElementBase.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementBase.text"><code class="docutils literal notranslate"><span class="pre">ElementBase.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementChildIterator"><code class="docutils literal notranslate"><span class="pre">ElementChildIterator</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementClassLookup"><code class="docutils literal notranslate"><span class="pre">ElementClassLookup</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementDefaultClassLookup"><code class="docutils literal notranslate"><span class="pre">ElementDefaultClassLookup</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementDefaultClassLookup.comment_class"><code class="docutils literal notranslate"><span class="pre">ElementDefaultClassLookup.comment_class</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementDefaultClassLookup.element_class"><code class="docutils literal notranslate"><span class="pre">ElementDefaultClassLookup.element_class</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementDefaultClassLookup.entity_class"><code class="docutils literal notranslate"><span class="pre">ElementDefaultClassLookup.entity_class</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementDefaultClassLookup.pi_class"><code class="docutils literal notranslate"><span class="pre">ElementDefaultClassLookup.pi_class</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementDepthFirstIterator"><code class="docutils literal notranslate"><span class="pre">ElementDepthFirstIterator</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementNamespaceClassLookup"><code class="docutils literal notranslate"><span class="pre">ElementNamespaceClassLookup</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementNamespaceClassLookup.get_namespace"><code class="docutils literal notranslate"><span class="pre">ElementNamespaceClassLookup.get_namespace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementNamespaceClassLookup.set_fallback"><code class="docutils literal notranslate"><span class="pre">ElementNamespaceClassLookup.set_fallback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementNamespaceClassLookup.fallback"><code class="docutils literal notranslate"><span class="pre">ElementNamespaceClassLookup.fallback</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementTextIterator"><code class="docutils literal notranslate"><span class="pre">ElementTextIterator</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase"><code class="docutils literal notranslate"><span class="pre">EntityBase</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase._init"><code class="docutils literal notranslate"><span class="pre">EntityBase._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.addnext"><code class="docutils literal notranslate"><span class="pre">EntityBase.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.addprevious"><code class="docutils literal notranslate"><span class="pre">EntityBase.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.append"><code class="docutils literal notranslate"><span class="pre">EntityBase.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.clear"><code class="docutils literal notranslate"><span class="pre">EntityBase.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.cssselect"><code class="docutils literal notranslate"><span class="pre">EntityBase.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.extend"><code class="docutils literal notranslate"><span class="pre">EntityBase.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.find"><code class="docutils literal notranslate"><span class="pre">EntityBase.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.findall"><code class="docutils literal notranslate"><span class="pre">EntityBase.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.findtext"><code class="docutils literal notranslate"><span class="pre">EntityBase.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.get"><code class="docutils literal notranslate"><span class="pre">EntityBase.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.getchildren"><code class="docutils literal notranslate"><span class="pre">EntityBase.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.getiterator"><code class="docutils literal notranslate"><span class="pre">EntityBase.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.getnext"><code class="docutils literal notranslate"><span class="pre">EntityBase.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.getparent"><code class="docutils literal notranslate"><span class="pre">EntityBase.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.getprevious"><code class="docutils literal notranslate"><span class="pre">EntityBase.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.getroottree"><code class="docutils literal notranslate"><span class="pre">EntityBase.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.index"><code class="docutils literal notranslate"><span class="pre">EntityBase.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.insert"><code class="docutils literal notranslate"><span class="pre">EntityBase.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.items"><code class="docutils literal notranslate"><span class="pre">EntityBase.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.iter"><code class="docutils literal notranslate"><span class="pre">EntityBase.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.iterancestors"><code class="docutils literal notranslate"><span class="pre">EntityBase.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.iterchildren"><code class="docutils literal notranslate"><span class="pre">EntityBase.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.iterdescendants"><code class="docutils literal notranslate"><span class="pre">EntityBase.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.iterfind"><code class="docutils literal notranslate"><span class="pre">EntityBase.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.itersiblings"><code class="docutils literal notranslate"><span class="pre">EntityBase.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.itertext"><code class="docutils literal notranslate"><span class="pre">EntityBase.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.keys"><code class="docutils literal notranslate"><span class="pre">EntityBase.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.makeelement"><code class="docutils literal notranslate"><span class="pre">EntityBase.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.remove"><code class="docutils literal notranslate"><span class="pre">EntityBase.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.replace"><code class="docutils literal notranslate"><span class="pre">EntityBase.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.set"><code class="docutils literal notranslate"><span class="pre">EntityBase.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.values"><code class="docutils literal notranslate"><span class="pre">EntityBase.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.xpath"><code class="docutils literal notranslate"><span class="pre">EntityBase.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.attrib"><code class="docutils literal notranslate"><span class="pre">EntityBase.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.base"><code class="docutils literal notranslate"><span class="pre">EntityBase.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.name"><code class="docutils literal notranslate"><span class="pre">EntityBase.name</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.nsmap"><code class="docutils literal notranslate"><span class="pre">EntityBase.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.prefix"><code class="docutils literal notranslate"><span class="pre">EntityBase.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.sourceline"><code class="docutils literal notranslate"><span class="pre">EntityBase.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.tag"><code class="docutils literal notranslate"><span class="pre">EntityBase.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.tail"><code class="docutils literal notranslate"><span class="pre">EntityBase.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.EntityBase.text"><code class="docutils literal notranslate"><span class="pre">EntityBase.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains"><code class="docutils literal notranslate"><span class="pre">ErrorDomains</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains._getName"><code class="docutils literal notranslate"><span class="pre">ErrorDomains._getName()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.BUFFER"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.BUFFER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.C14N"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.C14N</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.CATALOG"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.CATALOG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.CHECK"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.CHECK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.DATATYPE"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.DATATYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.DTD"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.DTD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.FTP"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.FTP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.HTML"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.HTML</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.HTTP"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.HTTP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.I18N"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.I18N</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.IO"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.IO</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.MEMORY"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.MEMORY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.MODULE"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.MODULE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.NAMESPACE"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.NAMESPACE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.NONE"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.NONE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.OUTPUT"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.OUTPUT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.PARSER"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.PARSER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.REGEXP"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.REGEXP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.RELAXNGP"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.RELAXNGP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.RELAXNGV"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.RELAXNGV</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.SCHEMASP"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.SCHEMASP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.SCHEMASV"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.SCHEMASV</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.SCHEMATRONV"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.SCHEMATRONV</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.TREE"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.TREE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.URI"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.URI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.VALID"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.WRITER"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.WRITER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.XINCLUDE"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.XINCLUDE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.XPATH"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.XPATH</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.XPOINTER"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.XPOINTER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains.XSLT"><code class="docutils literal notranslate"><span class="pre">ErrorDomains.XSLT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorDomains._names"><code class="docutils literal notranslate"><span class="pre">ErrorDomains._names</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorLevels"><code class="docutils literal notranslate"><span class="pre">ErrorLevels</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorLevels._getName"><code class="docutils literal notranslate"><span class="pre">ErrorLevels._getName()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorLevels.ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorLevels.ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorLevels.FATAL"><code class="docutils literal notranslate"><span class="pre">ErrorLevels.FATAL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorLevels.NONE"><code class="docutils literal notranslate"><span class="pre">ErrorLevels.NONE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorLevels.WARNING"><code class="docutils literal notranslate"><span class="pre">ErrorLevels.WARNING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorLevels._names"><code class="docutils literal notranslate"><span class="pre">ErrorLevels._names</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes"><code class="docutils literal notranslate"><span class="pre">ErrorTypes</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes._getName"><code class="docutils literal notranslate"><span class="pre">ErrorTypes._getName()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.BUF_OVERFLOW"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.BUF_OVERFLOW</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.C14N_CREATE_CTXT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.C14N_CREATE_CTXT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.C14N_CREATE_STACK"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.C14N_CREATE_STACK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.C14N_INVALID_NODE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.C14N_INVALID_NODE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.C14N_RELATIVE_NAMESPACE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.C14N_RELATIVE_NAMESPACE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.C14N_REQUIRES_UTF8"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.C14N_REQUIRES_UTF8</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.C14N_UNKNOW_NODE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.C14N_UNKNOW_NODE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CATALOG_ENTRY_BROKEN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CATALOG_ENTRY_BROKEN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CATALOG_MISSING_ATTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CATALOG_MISSING_ATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CATALOG_NOT_CATALOG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CATALOG_NOT_CATALOG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CATALOG_PREFER_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CATALOG_PREFER_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CATALOG_RECURSION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CATALOG_RECURSION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_ENTITY_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_ENTITY_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_ATTRIBUTE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_ATTRIBUTE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_CDATA"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_CDATA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_COMMENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_COMMENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_DOCTYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_DOCTYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_ELEMENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_ELEMENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_ENTITY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_ENTITY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_ENTITYREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_ENTITYREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_FRAGMENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_FRAGMENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_NOTATION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_NOTATION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_PI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_PI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_FOUND_TEXT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_FOUND_TEXT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NAME_NOT_NULL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NAME_NOT_NULL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NOT_ATTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NOT_ATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NOT_ATTR_DECL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NOT_ATTR_DECL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NOT_DTD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NOT_DTD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NOT_ELEM_DECL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NOT_ELEM_DECL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NOT_ENTITY_DECL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NOT_ENTITY_DECL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NOT_NCNAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NOT_NCNAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NOT_NS_DECL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NOT_NS_DECL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NOT_UTF8"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NOT_UTF8</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NO_DICT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NO_DICT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NO_DOC"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NO_DOC</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NO_ELEM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NO_ELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NO_HREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NO_HREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NO_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NO_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NO_NEXT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NO_NEXT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NO_PARENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NO_PARENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NO_PREV"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NO_PREV</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NS_ANCESTOR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NS_ANCESTOR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_NS_SCOPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_NS_SCOPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_OUTSIDE_DICT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_OUTSIDE_DICT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_UNKNOWN_NODE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_UNKNOWN_NODE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_WRONG_DOC"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_WRONG_DOC</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_WRONG_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_WRONG_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_WRONG_NEXT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_WRONG_NEXT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_WRONG_PARENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_WRONG_PARENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.CHECK_WRONG_PREV"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.CHECK_WRONG_PREV</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ATTRIBUTE_DEFAULT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ATTRIBUTE_DEFAULT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ATTRIBUTE_REDEFINED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ATTRIBUTE_REDEFINED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ATTRIBUTE_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ATTRIBUTE_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_CONTENT_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_CONTENT_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_CONTENT_MODEL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_CONTENT_MODEL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_CONTENT_NOT_DETERMINIST"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_CONTENT_NOT_DETERMINIST</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_DIFFERENT_PREFIX"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_DIFFERENT_PREFIX</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_DUP_TOKEN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_DUP_TOKEN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ELEM_DEFAULT_NAMESPACE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ELEM_DEFAULT_NAMESPACE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ELEM_NAMESPACE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ELEM_NAMESPACE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ELEM_REDEFINED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ELEM_REDEFINED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_EMPTY_NOTATION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_EMPTY_NOTATION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ENTITY_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ENTITY_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ID_FIXED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ID_FIXED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ID_REDEFINED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ID_REDEFINED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ID_SUBSET"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ID_SUBSET</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_INVALID_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_INVALID_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_INVALID_DEFAULT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_INVALID_DEFAULT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_LOAD_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_LOAD_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_MISSING_ATTRIBUTE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_MISSING_ATTRIBUTE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_MIXED_CORRUPT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_MIXED_CORRUPT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_MULTIPLE_ID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_MULTIPLE_ID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_NOTATION_REDEFINED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_NOTATION_REDEFINED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_NOTATION_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_NOTATION_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_NOT_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_NOT_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_NOT_PCDATA"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_NOT_PCDATA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_NOT_STANDALONE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_NOT_STANDALONE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_NO_DOC"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_NO_DOC</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_NO_DTD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_NO_DTD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_NO_ELEM_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_NO_ELEM_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_NO_PREFIX"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_NO_PREFIX</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_NO_ROOT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_NO_ROOT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_ROOT_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_ROOT_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_STANDALONE_DEFAULTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_STANDALONE_DEFAULTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_STANDALONE_WHITE_SPACE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_STANDALONE_WHITE_SPACE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_UNKNOWN_ATTRIBUTE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_UNKNOWN_ATTRIBUTE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_UNKNOWN_ELEM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_UNKNOWN_ELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_UNKNOWN_ENTITY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_UNKNOWN_ENTITY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_UNKNOWN_ID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_UNKNOWN_ID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_UNKNOWN_NOTATION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_UNKNOWN_NOTATION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_XMLID_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_XMLID_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.DTD_XMLID_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.DTD_XMLID_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ATTLIST_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ATTLIST_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ATTRIBUTE_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ATTRIBUTE_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_REDEFINED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ATTRIBUTE_REDEFINED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ATTRIBUTE_WITHOUT_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ATTRIBUTE_WITHOUT_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_CDATA_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_CDATA_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_CHARREF_AT_EOF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_CHARREF_AT_EOF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_CHARREF_IN_DTD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_CHARREF_IN_DTD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_CHARREF_IN_EPILOG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_CHARREF_IN_EPILOG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_CHARREF_IN_PROLOG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_CHARREF_IN_PROLOG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_COMMENT_ABRUPTLY_ENDED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_COMMENT_ABRUPTLY_ENDED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_COMMENT_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_COMMENT_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_CONDSEC_INVALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID_KEYWORD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_CONDSEC_INVALID_KEYWORD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_CONDSEC_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_CONDSEC_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_DOCTYPE_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_DOCTYPE_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_DOCUMENT_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_DOCUMENT_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_DOCUMENT_END"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_DOCUMENT_END</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_DOCUMENT_START"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_DOCUMENT_START</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ELEMCONTENT_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ELEMCONTENT_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENCODING_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENCODING_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITYREF_AT_EOF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITYREF_AT_EOF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_DTD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITYREF_IN_DTD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_EPILOG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITYREF_IN_EPILOG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_PROLOG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITYREF_IN_PROLOG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITYREF_NO_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITYREF_NO_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITYREF_SEMICOL_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITYREF_SEMICOL_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITY_BOUNDARY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITY_BOUNDARY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITY_CHAR_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITY_CHAR_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITY_IS_EXTERNAL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITY_IS_EXTERNAL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITY_IS_PARAMETER"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITY_IS_PARAMETER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITY_LOOP"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITY_LOOP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITY_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITY_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITY_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITY_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITY_PE_INTERNAL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITY_PE_INTERNAL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_ENTITY_PROCESSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_ENTITY_PROCESSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_EQUAL_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_EQUAL_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_EXTRA_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_EXTRA_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_EXT_ENTITY_STANDALONE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_EXT_ENTITY_STANDALONE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_EXT_SUBSET_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_EXT_SUBSET_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_GT_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_GT_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_HYPHEN_IN_COMMENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_HYPHEN_IN_COMMENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_INTERNAL_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_INTERNAL_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_INVALID_CHAR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_INVALID_CHAR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_INVALID_CHARREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_INVALID_CHARREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_INVALID_DEC_CHARREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_INVALID_DEC_CHARREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_INVALID_ENCODING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_INVALID_ENCODING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_INVALID_HEX_CHARREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_INVALID_HEX_CHARREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_INVALID_URI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_INVALID_URI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_LITERAL_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_LITERAL_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_LITERAL_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_LITERAL_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_LTSLASH_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_LTSLASH_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_LT_IN_ATTRIBUTE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_LT_IN_ATTRIBUTE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_LT_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_LT_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_MISPLACED_CDATA_END"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_MISPLACED_CDATA_END</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_MISSING_ENCODING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_MISSING_ENCODING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_MIXED_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_MIXED_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_MIXED_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_MIXED_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NAME_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NAME_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NAME_TOO_LONG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NAME_TOO_LONG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NMTOKEN_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NMTOKEN_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NOTATION_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NOTATION_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NOTATION_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NOTATION_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NOTATION_PROCESSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NOTATION_PROCESSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NOT_STANDALONE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NOT_STANDALONE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NOT_WELL_BALANCED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NOT_WELL_BALANCED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NO_DTD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NO_DTD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NO_MEMORY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NO_MEMORY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_NS_DECL_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_NS_DECL_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_OK"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_OK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_PCDATA_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_PCDATA_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_PEREF_AT_EOF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_PEREF_AT_EOF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_PEREF_IN_EPILOG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_PEREF_IN_EPILOG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_PEREF_IN_INT_SUBSET"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_PEREF_IN_INT_SUBSET</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_PEREF_IN_PROLOG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_PEREF_IN_PROLOG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_PEREF_NO_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_PEREF_NO_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_PEREF_SEMICOL_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_PEREF_SEMICOL_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_PI_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_PI_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_PI_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_PI_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_PUBID_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_PUBID_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_RESERVED_XML_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_RESERVED_XML_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_SEPARATOR_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_SEPARATOR_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_SPACE_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_SPACE_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_STANDALONE_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_STANDALONE_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_STRING_NOT_CLOSED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_STRING_NOT_CLOSED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_STRING_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_STRING_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_TAG_NAME_MISMATCH"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_TAG_NAME_MISMATCH</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_TAG_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_TAG_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_UNDECLARED_ENTITY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_UNDECLARED_ENTITY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_UNKNOWN_ENCODING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_UNKNOWN_ENCODING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_UNKNOWN_VERSION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_UNKNOWN_VERSION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_UNPARSED_ENTITY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_UNPARSED_ENTITY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_UNSUPPORTED_ENCODING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_UNSUPPORTED_ENCODING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_URI_FRAGMENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_URI_FRAGMENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_URI_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_URI_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_USER_STOP"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_USER_STOP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_VALUE_REQUIRED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_VALUE_REQUIRED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_VERSION_MISMATCH"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_VERSION_MISMATCH</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_VERSION_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_VERSION_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_FINISHED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_XMLDECL_NOT_FINISHED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_STARTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.ERR_XMLDECL_NOT_STARTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.FTP_ACCNT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.FTP_ACCNT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.FTP_EPSV_ANSWER"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.FTP_EPSV_ANSWER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.FTP_PASV_ANSWER"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.FTP_PASV_ANSWER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.FTP_URL_SYNTAX"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.FTP_URL_SYNTAX</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.HTML_STRUCURE_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.HTML_STRUCURE_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.HTML_UNKNOWN_TAG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.HTML_UNKNOWN_TAG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.HTTP_UNKNOWN_HOST"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.HTTP_UNKNOWN_HOST</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.HTTP_URL_SYNTAX"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.HTTP_URL_SYNTAX</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.HTTP_USE_IP"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.HTTP_USE_IP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.I18N_CONV_FAILED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.I18N_CONV_FAILED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.I18N_EXCESS_HANDLER"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.I18N_EXCESS_HANDLER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.I18N_NO_HANDLER"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.I18N_NO_HANDLER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.I18N_NO_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.I18N_NO_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.I18N_NO_OUTPUT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.I18N_NO_OUTPUT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_BUFFER_FULL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_BUFFER_FULL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EACCES"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EACCES</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EADDRINUSE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EADDRINUSE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EAFNOSUPPORT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EAFNOSUPPORT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EAGAIN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EAGAIN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EALREADY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EALREADY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EBADF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EBADF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EBADMSG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EBADMSG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EBUSY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EBUSY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ECANCELED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ECANCELED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ECHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ECHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ECONNREFUSED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ECONNREFUSED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EDEADLK"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EDEADLK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EDOM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EDOM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EEXIST"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EEXIST</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EFAULT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EFAULT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EFBIG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EFBIG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EINPROGRESS"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EINPROGRESS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EINTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EINTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EINVAL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EINVAL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EIO"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EIO</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EISCONN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EISCONN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EISDIR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EISDIR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EMFILE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EMFILE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EMLINK"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EMLINK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EMSGSIZE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EMSGSIZE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENAMETOOLONG"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENAMETOOLONG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENCODER"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENCODER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENETUNREACH"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENETUNREACH</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENFILE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENFILE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENODEV"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENODEV</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOEXEC"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOEXEC</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOLCK"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOLCK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOMEM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOMEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOSPC"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOSPC</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOSYS"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOSYS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOTDIR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOTDIR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOTEMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOTEMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOTSOCK"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOTSOCK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOTSUP"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOTSUP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENOTTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENOTTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ENXIO"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ENXIO</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EPERM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EPERM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EPIPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EPIPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ERANGE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ERANGE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EROFS"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EROFS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ESPIPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ESPIPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ESRCH"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ESRCH</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_ETIMEDOUT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_ETIMEDOUT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_EXDEV"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_EXDEV</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_FLUSH"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_FLUSH</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_LOAD_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_LOAD_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_NETWORK_ATTEMPT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_NETWORK_ATTEMPT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_NO_INPUT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_NO_INPUT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_UNKNOWN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_UNKNOWN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.IO_WRITE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.IO_WRITE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.MODULE_CLOSE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.MODULE_CLOSE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.MODULE_OPEN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.MODULE_OPEN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.NS_ERR_ATTRIBUTE_REDEFINED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.NS_ERR_ATTRIBUTE_REDEFINED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.NS_ERR_COLON"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.NS_ERR_COLON</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.NS_ERR_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.NS_ERR_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.NS_ERR_QNAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.NS_ERR_QNAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.NS_ERR_UNDEFINED_NAMESPACE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.NS_ERR_UNDEFINED_NAMESPACE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.NS_ERR_XML_NAMESPACE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.NS_ERR_XML_NAMESPACE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.REGEXP_COMPILE_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.REGEXP_COMPILE_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ANYNAME_ATTR_ANCESTOR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ANYNAME_ATTR_ANCESTOR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CHILDREN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ATTRIBUTE_CHILDREN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ATTRIBUTE_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ATTRIBUTE_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_NOOP"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ATTRIBUTE_NOOP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ATTR_CONFLICT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ATTR_CONFLICT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_CHOICE_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_CHOICE_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_CHOICE_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_CHOICE_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_CREATE_FAILURE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_CREATE_FAILURE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_DATA_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_DATA_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_DEFINE_CREATE_FAILED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_DEFINE_CREATE_FAILED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_DEFINE_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_DEFINE_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_DEFINE_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_DEFINE_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_DEFINE_NAME_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_DEFINE_NAME_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_DEF_CHOICE_AND_INTERLEAVE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_DEF_CHOICE_AND_INTERLEAVE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ELEMENT_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ELEMENT_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ELEMENT_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ELEMENT_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ELEMENT_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ELEMENT_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ELEMENT_NO_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ELEMENT_NO_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ELEM_CONTENT_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ELEM_CONTENT_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ELEM_TEXT_CONFLICT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ELEM_TEXT_CONFLICT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EMPTY_CONSTRUCT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EMPTY_CONSTRUCT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EMPTY_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EMPTY_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EMPTY_NOT_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EMPTY_NOT_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_ERROR_TYPE_LIB"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_ERROR_TYPE_LIB</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EXCEPT_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EXCEPT_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EXCEPT_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EXCEPT_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EXCEPT_MULTIPLE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EXCEPT_MULTIPLE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EXCEPT_NO_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EXCEPT_NO_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EXTERNALREF_EMTPY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EXTERNALREF_EMTPY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EXTERNALREF_RECURSE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EXTERNALREF_RECURSE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_EXTERNAL_REF_FAILURE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_EXTERNAL_REF_FAILURE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_FORBIDDEN_ATTRIBUTE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_FORBIDDEN_ATTRIBUTE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_FOREIGN_ELEMENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_FOREIGN_ELEMENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_GRAMMAR_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_GRAMMAR_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_GRAMMAR_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_GRAMMAR_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_GRAMMAR_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_GRAMMAR_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_GRAMMAR_NO_START"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_GRAMMAR_NO_START</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_GROUP_ATTR_CONFLICT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_GROUP_ATTR_CONFLICT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_HREF_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_HREF_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_INCLUDE_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_INCLUDE_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_INCLUDE_FAILURE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_INCLUDE_FAILURE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_INCLUDE_RECURSE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_INCLUDE_RECURSE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_ADD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_INTERLEAVE_ADD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_CREATE_FAILED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_INTERLEAVE_CREATE_FAILED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_INTERLEAVE_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_INTERLEAVE_NO_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_INTERLEAVE_NO_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_INVALID_DEFINE_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_INVALID_DEFINE_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_INVALID_URI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_INVALID_URI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_INVALID_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_INVALID_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_MISSING_HREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_MISSING_HREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_NAME_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_NAME_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_NEED_COMBINE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_NEED_COMBINE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_NOTALLOWED_NOT_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_NOTALLOWED_NOT_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_NSNAME_ATTR_ANCESTOR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_NSNAME_ATTR_ANCESTOR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_NSNAME_NO_NS"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_NSNAME_NO_NS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PARAM_FORBIDDEN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PARAM_FORBIDDEN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PARAM_NAME_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PARAM_NAME_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PARENTREF_CREATE_FAILED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PARENTREF_CREATE_FAILED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PARENTREF_NAME_INVALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PARENTREF_NAME_INVALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PARENTREF_NOT_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PARENTREF_NOT_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PARENTREF_NO_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_PARENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PARENTREF_NO_PARENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PARSE_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PARSE_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_ANYNAME_EXCEPT_ANYNAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_ANYNAME_EXCEPT_ANYNAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ATTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_ATTR_ATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ELEM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_ATTR_ELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ATTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_DATA_EXCEPT_ATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ELEM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_DATA_EXCEPT_ELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_DATA_EXCEPT_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_GROUP"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_DATA_EXCEPT_GROUP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_INTERLEAVE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_DATA_EXCEPT_INTERLEAVE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_LIST"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_DATA_EXCEPT_LIST</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ONEMORE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_DATA_EXCEPT_ONEMORE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_REF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_DATA_EXCEPT_REF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_TEXT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_DATA_EXCEPT_TEXT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_LIST_ATTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_LIST_ATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_LIST_ELEM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_LIST_ELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_LIST_INTERLEAVE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_LIST_INTERLEAVE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_LIST_LIST"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_LIST_LIST</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_LIST_REF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_LIST_REF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_LIST_TEXT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_LIST_TEXT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_ANYNAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_ANYNAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_NSNAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_NSNAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_GROUP_ATTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_ONEMORE_GROUP_ATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_INTERLEAVE_ATTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_ONEMORE_INTERLEAVE_ATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_START_ATTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_START_ATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_START_DATA"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_START_DATA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_START_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_START_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_START_GROUP"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_START_GROUP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_START_INTERLEAVE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_START_INTERLEAVE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_START_LIST"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_START_LIST</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_START_ONEMORE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_START_ONEMORE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_START_TEXT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_START_TEXT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PAT_START_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PAT_START_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_PREFIX_UNDEFINED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_PREFIX_UNDEFINED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_REF_CREATE_FAILED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_REF_CREATE_FAILED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_REF_CYCLE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_REF_CYCLE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_REF_NAME_INVALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_REF_NAME_INVALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_REF_NOT_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_REF_NOT_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_REF_NO_DEF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_REF_NO_DEF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_REF_NO_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_REF_NO_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_START_CHOICE_AND_INTERLEAVE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_START_CHOICE_AND_INTERLEAVE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_START_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_START_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_START_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_START_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_START_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_START_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_TEXT_EXPECTED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_TEXT_EXPECTED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_TEXT_HAS_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_TEXT_HAS_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_TYPE_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_TYPE_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_TYPE_NOT_FOUND"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_TYPE_NOT_FOUND</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_TYPE_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_TYPE_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_UNKNOWN_ATTRIBUTE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_UNKNOWN_ATTRIBUTE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_UNKNOWN_COMBINE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_UNKNOWN_COMBINE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_UNKNOWN_CONSTRUCT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_UNKNOWN_CONSTRUCT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_UNKNOWN_TYPE_LIB"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_UNKNOWN_TYPE_LIB</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_URI_FRAGMENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_URI_FRAGMENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_URI_NOT_ABSOLUTE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_URI_NOT_ABSOLUTE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_VALUE_EMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_VALUE_EMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_VALUE_NO_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_VALUE_NO_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_XMLNS_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_XMLNS_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.RNGP_XML_NS"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.RNGP_XML_NS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SAVE_CHAR_INVALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SAVE_CHAR_INVALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SAVE_NOT_UTF8"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SAVE_NOT_UTF8</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SAVE_NO_DOCTYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SAVE_NO_DOCTYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SAVE_UNKNOWN_ENCODING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SAVE_UNKNOWN_ENCODING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_AG_PROPS_CORRECT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_AG_PROPS_CORRECT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_ATTRFORMDEFAULT_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_ATTRFORMDEFAULT_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_ATTRGRP_NONAME_NOREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_ATTRGRP_NONAME_NOREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_ATTR_NONAME_NOREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_ATTR_NONAME_NOREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_AU_PROPS_CORRECT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_AU_PROPS_CORRECT_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_A_PROPS_CORRECT_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_A_PROPS_CORRECT_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COMPLEXTYPE_NONAME_NOREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COMPLEXTYPE_NONAME_NOREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ALL_LIMITED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ALL_LIMITED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_4"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_4</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_5"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_5</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_4"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_4</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_5"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_5</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_4"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_4</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_5"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_5</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_CVC_SIMPLE_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_CVC_SIMPLE_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_C_PROPS_CORRECT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_C_PROPS_CORRECT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_DEF_AND_PREFIX"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_DEF_AND_PREFIX</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_ELEMFORMDEFAULT_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_ELEMFORMDEFAULT_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_ELEM_DEFAULT_FIXED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_ELEM_DEFAULT_FIXED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_ELEM_NONAME_NOREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_ELEM_NONAME_NOREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_EXTENSION_NO_BASE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_EXTENSION_NO_BASE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_E_PROPS_CORRECT_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_E_PROPS_CORRECT_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_4"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_E_PROPS_CORRECT_4</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_5"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_E_PROPS_CORRECT_5</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_6"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_E_PROPS_CORRECT_6</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_FACET_NO_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_FACET_NO_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_FAILED_BUILD_IMPORT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_FAILED_BUILD_IMPORT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_FAILED_LOAD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_FAILED_LOAD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_FAILED_PARSE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_FAILED_PARSE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_GROUP_NONAME_NOREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_GROUP_NONAME_NOREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_IMPORT_NAMESPACE_NOT_URI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_IMPORT_NAMESPACE_NOT_URI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_IMPORT_REDEFINE_NSNAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_IMPORT_REDEFINE_NSNAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_IMPORT_SCHEMA_NOT_URI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_IMPORT_SCHEMA_NOT_URI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NOT_URI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NOT_URI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NO_URI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NO_URI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INTERNAL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INTERNAL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_COMBINATION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_ATTR_COMBINATION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_INLINE_COMBINATION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_ATTR_INLINE_COMBINATION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_ATTR_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_USE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_ATTR_USE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_BOOLEAN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_BOOLEAN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_ENUM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_ENUM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_FACET</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_FACET_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_MAXOCCURS"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_MAXOCCURS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_MINOCCURS"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_MINOCCURS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_REF_AND_SUBTYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_REF_AND_SUBTYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_INVALID_WHITE_SPACE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_INVALID_WHITE_SPACE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_MISSING_SIMPLETYPE_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_MISSING_SIMPLETYPE_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_NOATTR_NOREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_NOATTR_NOREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_NOROOT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_NOROOT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_NOTATION_NO_NAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_NOTATION_NO_NAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_NOTHING_TO_PARSE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_NOTHING_TO_PARSE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_NOTYPE_NOREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_NOTYPE_NOREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_NOT_DETERMINISTIC"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_NOT_DETERMINISTIC</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_NOT_SCHEMA"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_NOT_SCHEMA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_NO_XMLNS"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_NO_XMLNS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_NO_XSI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_NO_XSI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_PREFIX_UNDEFINED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_PREFIX_UNDEFINED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_P_PROPS_CORRECT_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_RECURSIVE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_RECURSIVE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_REDEFINED_ATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTRGROUP"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_REDEFINED_ATTRGROUP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ELEMENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_REDEFINED_ELEMENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_GROUP"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_REDEFINED_GROUP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_NOTATION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_REDEFINED_NOTATION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_REDEFINED_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_REF_AND_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_REF_AND_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_REF_AND_SUBTYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_REF_AND_SUBTYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_REGEXP_INVALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_REGEXP_INVALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_RESTRICTION_NONAME_NOREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_RESTRICTION_NONAME_NOREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_INVALID_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_S4S_ATTR_INVALID_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_S4S_ATTR_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_NOT_ALLOWED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_S4S_ATTR_NOT_ALLOWED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_S4S_ELEM_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_NOT_ALLOWED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_S4S_ELEM_NOT_ALLOWED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SIMPLETYPE_NONAME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SIMPLETYPE_NONAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_4"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_4</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_CT_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_CT_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ELEMENT_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ELEMENT_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ELEMENT_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_ELEMENT_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_IMPORT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_IMPORT_1_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_IMPORT_1_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_IMPORT_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_IMPORT_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_IMPORT_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_IMPORT_3_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_IMPORT_3_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_INCLUDE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_INCLUDE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_REDEFINE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_REDEFINE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_RESOLVE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_RESOLVE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_4"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_4</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_TYPE_AND_SUBTYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_TYPE_AND_SUBTYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNION_NOT_EXPRESSIBLE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNION_NOT_EXPRESSIBLE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ALL_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_ALL_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRGRP_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_ATTRGRP_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTR_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_ATTR_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_BASE_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_BASE_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_CHOICE_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_CHOICE_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ELEM_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_ELEM_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_EXTENSION_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_EXTENSION_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_FACET_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_FACET_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_GROUP_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_GROUP_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_IMPORT_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_IMPORT_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_INCLUDE_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_INCLUDE_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_LIST_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_LIST_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_MEMBER_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_MEMBER_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_NOTATION_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_NOTATION_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PREFIX"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_PREFIX</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_REF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_REF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_RESTRICTION_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_RESTRICTION_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SCHEMAS_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_SCHEMAS_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SEQUENCE_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_SEQUENCE_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_UNION_CHILD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_UNKNOWN_UNION_CHILD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_POINTLESS_PROH"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_WARN_ATTR_POINTLESS_PROH</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_REDECL_PROH"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_WARN_ATTR_REDECL_PROH</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_WARN_SKIP_SCHEMA"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_WARN_SKIP_SCHEMA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_WARN_UNLOCATED_SCHEMA"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_WARN_UNLOCATED_SCHEMA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAP_WILDCARD_INVALID_NS_MEMBER"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAP_WILDCARD_INVALID_NS_MEMBER</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMATRONV_ASSERT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMATRONV_ASSERT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMATRONV_REPORT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMATRONV_REPORT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_ATTRINVALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_ATTRINVALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_ATTRUNKNOWN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_ATTRUNKNOWN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CONSTRUCT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CONSTRUCT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_4"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_4</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_AU"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_AU</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_4"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_4</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_4"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_4</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_3_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_3_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_3_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_4_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_4_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_3"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_4_3</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_5_1_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_5_1_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_5_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_6"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_6</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_7"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ELT_7</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_ENUMERATION_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_ENUMERATION_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_FACET_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_FACET_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_FRACTIONDIGITS_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_FRACTIONDIGITS_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_IDC"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_IDC</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_LENGTH_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_LENGTH_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXEXCLUSIVE_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_MAXEXCLUSIVE_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXINCLUSIVE_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_MAXINCLUSIVE_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXLENGTH_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_MAXLENGTH_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_MINEXCLUSIVE_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_MINEXCLUSIVE_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_MININCLUSIVE_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_MININCLUSIVE_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_MINLENGTH_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_MINLENGTH_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_PATTERN_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_PATTERN_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_TOTALDIGITS_VALID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_TOTALDIGITS_VALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_TYPE_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_TYPE_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_1"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_TYPE_3_1_1</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_2"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_TYPE_3_1_2</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_CVC_WILDCARD"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_CVC_WILDCARD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_DOCUMENT_ELEMENT_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_DOCUMENT_ELEMENT_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_ELEMCONT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_ELEMCONT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_ELEMENT_CONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_ELEMENT_CONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_EXTRACONTENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_EXTRACONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_FACET"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_FACET</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_HAVEDEFAULT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_HAVEDEFAULT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_INTERNAL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_INTERNAL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_INVALIDATTR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_INVALIDATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_INVALIDELEM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_INVALIDELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_ISABSTRACT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_ISABSTRACT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_MISC"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_MISC</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_MISSING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_MISSING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_NOROLLBACK"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_NOROLLBACK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_NOROOT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_NOROOT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_NOTDETERMINIST"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_NOTDETERMINIST</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_NOTEMPTY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_NOTEMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_NOTNILLABLE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_NOTNILLABLE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_NOTSIMPLE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_NOTSIMPLE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_NOTTOPLEVEL"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_NOTTOPLEVEL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_NOTYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_NOTYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_UNDECLAREDELEM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_UNDECLAREDELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.SCHEMAV_WRONGELEM"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.SCHEMAV_WRONGELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.TREE_INVALID_DEC"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.TREE_INVALID_DEC</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.TREE_INVALID_HEX"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.TREE_INVALID_HEX</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.TREE_NOT_UTF8"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.TREE_NOT_UTF8</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.TREE_UNTERMINATED_ENTITY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.TREE_UNTERMINATED_ENTITY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.WAR_CATALOG_PI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.WAR_CATALOG_PI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.WAR_ENTITY_REDEFINED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.WAR_ENTITY_REDEFINED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.WAR_LANG_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.WAR_LANG_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.WAR_NS_COLUMN"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.WAR_NS_COLUMN</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.WAR_NS_URI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.WAR_NS_URI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.WAR_NS_URI_RELATIVE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.WAR_NS_URI_RELATIVE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.WAR_SPACE_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.WAR_SPACE_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.WAR_UNDECLARED_ENTITY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.WAR_UNDECLARED_ENTITY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.WAR_UNKNOWN_VERSION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.WAR_UNKNOWN_VERSION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_BUILD_FAILED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_BUILD_FAILED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_DEPRECATED_NS"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_DEPRECATED_NS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_ENTITY_DEF_MISMATCH"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_ENTITY_DEF_MISMATCH</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_FALLBACKS_IN_INCLUDE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_FALLBACKS_IN_INCLUDE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_FALLBACK_NOT_IN_INCLUDE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_FALLBACK_NOT_IN_INCLUDE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_FRAGMENT_ID"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_FRAGMENT_ID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_HREF_URI"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_HREF_URI</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_INCLUDE_IN_INCLUDE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_INCLUDE_IN_INCLUDE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_INVALID_CHAR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_INVALID_CHAR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_MULTIPLE_ROOT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_MULTIPLE_ROOT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_NO_FALLBACK"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_NO_FALLBACK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_NO_HREF"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_NO_HREF</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_PARSE_VALUE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_PARSE_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_RECURSION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_RECURSION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_TEXT_DOCUMENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_TEXT_DOCUMENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_TEXT_FRAGMENT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_TEXT_FRAGMENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_UNKNOWN_ENCODING"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_UNKNOWN_ENCODING</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_XPTR_FAILED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_XPTR_FAILED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XINCLUDE_XPTR_RESULT"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XINCLUDE_XPTR_RESULT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_ENCODING_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_ENCODING_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_EXPRESSION_OK"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_EXPRESSION_OK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_EXPR_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_EXPR_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_INVALID_ARITY"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_INVALID_ARITY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_INVALID_CHAR_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_INVALID_CHAR_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_POSITION"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_INVALID_CTXT_POSITION</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_SIZE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_INVALID_CTXT_SIZE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_INVALID_OPERAND"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_INVALID_OPERAND</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_INVALID_PREDICATE_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_INVALID_PREDICATE_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_INVALID_TYPE"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_INVALID_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_MEMORY_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_MEMORY_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_NUMBER_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_NUMBER_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_START_LITERAL_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_START_LITERAL_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_UNCLOSED_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_UNCLOSED_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_UNDEF_PREFIX_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_UNDEF_PREFIX_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_UNDEF_VARIABLE_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_UNDEF_VARIABLE_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_UNFINISHED_LITERAL_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_UNFINISHED_LITERAL_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_UNKNOWN_FUNC_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_UNKNOWN_FUNC_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPATH_VARIABLE_REF_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPATH_VARIABLE_REF_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPTR_CHILDSEQ_START"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPTR_CHILDSEQ_START</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPTR_EVAL_FAILED"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPTR_EVAL_FAILED</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPTR_EXTRA_OBJECTS"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPTR_EXTRA_OBJECTS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPTR_RESOURCE_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPTR_RESOURCE_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPTR_SUB_RESOURCE_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPTR_SUB_RESOURCE_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPTR_SYNTAX_ERROR"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPTR_SYNTAX_ERROR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes.XPTR_UNKNOWN_SCHEME"><code class="docutils literal notranslate"><span class="pre">ErrorTypes.XPTR_UNKNOWN_SCHEME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ErrorTypes._names"><code class="docutils literal notranslate"><span class="pre">ErrorTypes._names</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.FallbackElementClassLookup"><code class="docutils literal notranslate"><span class="pre">FallbackElementClassLookup</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.FallbackElementClassLookup.set_fallback"><code class="docutils literal notranslate"><span class="pre">FallbackElementClassLookup.set_fallback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.FallbackElementClassLookup.fallback"><code class="docutils literal notranslate"><span class="pre">FallbackElementClassLookup.fallback</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser"><code class="docutils literal notranslate"><span class="pre">HTMLParser</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.close"><code class="docutils literal notranslate"><span class="pre">HTMLParser.close()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.copy"><code class="docutils literal notranslate"><span class="pre">HTMLParser.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.feed"><code class="docutils literal notranslate"><span class="pre">HTMLParser.feed()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.makeelement"><code class="docutils literal notranslate"><span class="pre">HTMLParser.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.setElementClassLookup"><code class="docutils literal notranslate"><span class="pre">HTMLParser.setElementClassLookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">HTMLParser.set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.error_log"><code class="docutils literal notranslate"><span class="pre">HTMLParser.error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.feed_error_log"><code class="docutils literal notranslate"><span class="pre">HTMLParser.feed_error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.resolvers"><code class="docutils literal notranslate"><span class="pre">HTMLParser.resolvers</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.target"><code class="docutils literal notranslate"><span class="pre">HTMLParser.target</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLParser.version"><code class="docutils literal notranslate"><span class="pre">HTMLParser.version</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.close"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.close()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.copy"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.feed"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.feed()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.makeelement"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.read_events"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.read_events()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.setElementClassLookup"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.setElementClassLookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.error_log"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.feed_error_log"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.feed_error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.resolvers"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.resolvers</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.target"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.target</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTMLPullParser.version"><code class="docutils literal notranslate"><span class="pre">HTMLPullParser.version</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase"><code class="docutils literal notranslate"><span class="pre">PIBase</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase._init"><code class="docutils literal notranslate"><span class="pre">PIBase._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.addnext"><code class="docutils literal notranslate"><span class="pre">PIBase.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.addprevious"><code class="docutils literal notranslate"><span class="pre">PIBase.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.append"><code class="docutils literal notranslate"><span class="pre">PIBase.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.clear"><code class="docutils literal notranslate"><span class="pre">PIBase.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.cssselect"><code class="docutils literal notranslate"><span class="pre">PIBase.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.extend"><code class="docutils literal notranslate"><span class="pre">PIBase.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.find"><code class="docutils literal notranslate"><span class="pre">PIBase.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.findall"><code class="docutils literal notranslate"><span class="pre">PIBase.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.findtext"><code class="docutils literal notranslate"><span class="pre">PIBase.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.get"><code class="docutils literal notranslate"><span class="pre">PIBase.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.getchildren"><code class="docutils literal notranslate"><span class="pre">PIBase.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.getiterator"><code class="docutils literal notranslate"><span class="pre">PIBase.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.getnext"><code class="docutils literal notranslate"><span class="pre">PIBase.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.getparent"><code class="docutils literal notranslate"><span class="pre">PIBase.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.getprevious"><code class="docutils literal notranslate"><span class="pre">PIBase.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.getroottree"><code class="docutils literal notranslate"><span class="pre">PIBase.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.index"><code class="docutils literal notranslate"><span class="pre">PIBase.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.insert"><code class="docutils literal notranslate"><span class="pre">PIBase.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.items"><code class="docutils literal notranslate"><span class="pre">PIBase.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.iter"><code class="docutils literal notranslate"><span class="pre">PIBase.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.iterancestors"><code class="docutils literal notranslate"><span class="pre">PIBase.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.iterchildren"><code class="docutils literal notranslate"><span class="pre">PIBase.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.iterdescendants"><code class="docutils literal notranslate"><span class="pre">PIBase.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.iterfind"><code class="docutils literal notranslate"><span class="pre">PIBase.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.itersiblings"><code class="docutils literal notranslate"><span class="pre">PIBase.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.itertext"><code class="docutils literal notranslate"><span class="pre">PIBase.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.keys"><code class="docutils literal notranslate"><span class="pre">PIBase.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.makeelement"><code class="docutils literal notranslate"><span class="pre">PIBase.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.remove"><code class="docutils literal notranslate"><span class="pre">PIBase.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.replace"><code class="docutils literal notranslate"><span class="pre">PIBase.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.set"><code class="docutils literal notranslate"><span class="pre">PIBase.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.values"><code class="docutils literal notranslate"><span class="pre">PIBase.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.xpath"><code class="docutils literal notranslate"><span class="pre">PIBase.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.attrib"><code class="docutils literal notranslate"><span class="pre">PIBase.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.base"><code class="docutils literal notranslate"><span class="pre">PIBase.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.nsmap"><code class="docutils literal notranslate"><span class="pre">PIBase.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.prefix"><code class="docutils literal notranslate"><span class="pre">PIBase.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.sourceline"><code class="docutils literal notranslate"><span class="pre">PIBase.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.tag"><code class="docutils literal notranslate"><span class="pre">PIBase.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.tail"><code class="docutils literal notranslate"><span class="pre">PIBase.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.target"><code class="docutils literal notranslate"><span class="pre">PIBase.target</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PIBase.text"><code class="docutils literal notranslate"><span class="pre">PIBase.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParserBasedElementClassLookup"><code class="docutils literal notranslate"><span class="pre">ParserBasedElementClassLookup</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParserBasedElementClassLookup.set_fallback"><code class="docutils literal notranslate"><span class="pre">ParserBasedElementClassLookup.set_fallback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.ParserBasedElementClassLookup.fallback"><code class="docutils literal notranslate"><span class="pre">ParserBasedElementClassLookup.fallback</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.PyErrorLog"><code class="docutils literal notranslate"><span class="pre">PyErrorLog</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PyErrorLog.copy"><code class="docutils literal notranslate"><span class="pre">PyErrorLog.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PyErrorLog.log"><code class="docutils literal notranslate"><span class="pre">PyErrorLog.log()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PyErrorLog.receive"><code class="docutils literal notranslate"><span class="pre">PyErrorLog.receive()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PyErrorLog.last_error"><code class="docutils literal notranslate"><span class="pre">PyErrorLog.last_error</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PyErrorLog.level_map"><code class="docutils literal notranslate"><span class="pre">PyErrorLog.level_map</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.PythonElementClassLookup"><code class="docutils literal notranslate"><span class="pre">PythonElementClassLookup</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PythonElementClassLookup.lookup"><code class="docutils literal notranslate"><span class="pre">PythonElementClassLookup.lookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PythonElementClassLookup.set_fallback"><code class="docutils literal notranslate"><span class="pre">PythonElementClassLookup.set_fallback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.PythonElementClassLookup.fallback"><code class="docutils literal notranslate"><span class="pre">PythonElementClassLookup.fallback</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.QName"><code class="docutils literal notranslate"><span class="pre">QName</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.QName.localname"><code class="docutils literal notranslate"><span class="pre">QName.localname</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.QName.namespace"><code class="docutils literal notranslate"><span class="pre">QName.namespace</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.QName.text"><code class="docutils literal notranslate"><span class="pre">QName.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNG"><code class="docutils literal notranslate"><span class="pre">RelaxNG</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNG._append_log_message"><code class="docutils literal notranslate"><span class="pre">RelaxNG._append_log_message()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNG._clear_error_log"><code class="docutils literal notranslate"><span class="pre">RelaxNG._clear_error_log()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNG.assertValid"><code class="docutils literal notranslate"><span class="pre">RelaxNG.assertValid()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNG.assert_"><code class="docutils literal notranslate"><span class="pre">RelaxNG.assert_()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNG.from_rnc_string"><code class="docutils literal notranslate"><span class="pre">RelaxNG.from_rnc_string()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNG.validate"><code class="docutils literal notranslate"><span class="pre">RelaxNG.validate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNG.error_log"><code class="docutils literal notranslate"><span class="pre">RelaxNG.error_log</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes._getName"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes._getName()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTREXTRANS"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ATTREXTRANS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNAME"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ATTRNAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNONS"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ATTRNONS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRVALID"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ATTRVALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRWRONGNS"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ATTRWRONGNS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_CONTENTVALID"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_CONTENTVALID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATAELEM"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_DATAELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATATYPE"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_DATATYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DUPID"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_DUPID</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMEXTRANS"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ELEMEXTRANS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNAME"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ELEMNAME</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNONS"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ELEMNONS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNOTEMPTY"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ELEMNOTEMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONG"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONGNS"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONGNS</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRACONTENT"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_EXTRACONTENT</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRADATA"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_EXTRADATA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTEREXTRA"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_INTEREXTRA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNAL"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_INTERNAL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNODATA"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_INTERNODATA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERSEQ"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_INTERSEQ</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INVALIDATTR"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_INVALIDATTR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LACKDATA"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_LACKDATA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LIST"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_LIST</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTELEM"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_LISTELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEMPTY"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_LISTEMPTY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEXTRA"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_LISTEXTRA</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_MEMORY"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_MEMORY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NODEFINE"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_NODEFINE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOELEM"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_NOELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOGRAMMAR"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_NOGRAMMAR</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOSTATE"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_NOSTATE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOTELEM"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_NOTELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TEXTWRONG"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_TEXTWRONG</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPE"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_TYPE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPECMP"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_TYPECMP</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPEVAL"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_TYPEVAL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALELEM"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_VALELEM</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALUE"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_ERR_VALUE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes.RELAXNG_OK"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes.RELAXNG_OK</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.RelaxNGErrorTypes._names"><code class="docutils literal notranslate"><span class="pre">RelaxNGErrorTypes._names</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.Resolver"><code class="docutils literal notranslate"><span class="pre">Resolver</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Resolver.resolve"><code class="docutils literal notranslate"><span class="pre">Resolver.resolve()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Resolver.resolve_empty"><code class="docutils literal notranslate"><span class="pre">Resolver.resolve_empty()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Resolver.resolve_file"><code class="docutils literal notranslate"><span class="pre">Resolver.resolve_file()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Resolver.resolve_filename"><code class="docutils literal notranslate"><span class="pre">Resolver.resolve_filename()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Resolver.resolve_string"><code class="docutils literal notranslate"><span class="pre">Resolver.resolve_string()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.Schematron"><code class="docutils literal notranslate"><span class="pre">Schematron</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Schematron._append_log_message"><code class="docutils literal notranslate"><span class="pre">Schematron._append_log_message()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Schematron._clear_error_log"><code class="docutils literal notranslate"><span class="pre">Schematron._clear_error_log()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Schematron.assertValid"><code class="docutils literal notranslate"><span class="pre">Schematron.assertValid()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Schematron.assert_"><code class="docutils literal notranslate"><span class="pre">Schematron.assert_()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Schematron.validate"><code class="docutils literal notranslate"><span class="pre">Schematron.validate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.Schematron.error_log"><code class="docutils literal notranslate"><span class="pre">Schematron.error_log</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.SiblingsIterator"><code class="docutils literal notranslate"><span class="pre">SiblingsIterator</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.TreeBuilder"><code class="docutils literal notranslate"><span class="pre">TreeBuilder</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.TreeBuilder.close"><code class="docutils literal notranslate"><span class="pre">TreeBuilder.close()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.TreeBuilder.comment"><code class="docutils literal notranslate"><span class="pre">TreeBuilder.comment()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.TreeBuilder.data"><code class="docutils literal notranslate"><span class="pre">TreeBuilder.data()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.TreeBuilder.end"><code class="docutils literal notranslate"><span class="pre">TreeBuilder.end()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.TreeBuilder.pi"><code class="docutils literal notranslate"><span class="pre">TreeBuilder.pi()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.TreeBuilder.start"><code class="docutils literal notranslate"><span class="pre">TreeBuilder.start()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XInclude"><code class="docutils literal notranslate"><span class="pre">XInclude</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XInclude.error_log"><code class="docutils literal notranslate"><span class="pre">XInclude.error_log</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser"><code class="docutils literal notranslate"><span class="pre">XMLParser</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.close"><code class="docutils literal notranslate"><span class="pre">XMLParser.close()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.copy"><code class="docutils literal notranslate"><span class="pre">XMLParser.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.feed"><code class="docutils literal notranslate"><span class="pre">XMLParser.feed()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.makeelement"><code class="docutils literal notranslate"><span class="pre">XMLParser.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.setElementClassLookup"><code class="docutils literal notranslate"><span class="pre">XMLParser.setElementClassLookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">XMLParser.set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.error_log"><code class="docutils literal notranslate"><span class="pre">XMLParser.error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.feed_error_log"><code class="docutils literal notranslate"><span class="pre">XMLParser.feed_error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.resolvers"><code class="docutils literal notranslate"><span class="pre">XMLParser.resolvers</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.target"><code class="docutils literal notranslate"><span class="pre">XMLParser.target</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLParser.version"><code class="docutils literal notranslate"><span class="pre">XMLParser.version</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser"><code class="docutils literal notranslate"><span class="pre">XMLPullParser</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.close"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.close()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.copy"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.feed"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.feed()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.makeelement"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.read_events"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.read_events()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.setElementClassLookup"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.setElementClassLookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.error_log"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.feed_error_log"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.feed_error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.resolvers"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.resolvers</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.target"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.target</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLPullParser.version"><code class="docutils literal notranslate"><span class="pre">XMLPullParser.version</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchema"><code class="docutils literal notranslate"><span class="pre">XMLSchema</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchema._append_log_message"><code class="docutils literal notranslate"><span class="pre">XMLSchema._append_log_message()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchema._clear_error_log"><code class="docutils literal notranslate"><span class="pre">XMLSchema._clear_error_log()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchema.assertValid"><code class="docutils literal notranslate"><span class="pre">XMLSchema.assertValid()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchema.assert_"><code class="docutils literal notranslate"><span class="pre">XMLSchema.assert_()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchema.validate"><code class="docutils literal notranslate"><span class="pre">XMLSchema.validate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLSchema.error_log"><code class="docutils literal notranslate"><span class="pre">XMLSchema.error_log</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLTreeBuilder"><code class="docutils literal notranslate"><span class="pre">XMLTreeBuilder</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPath"><code class="docutils literal notranslate"><span class="pre">XPath</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPath.evaluate"><code class="docutils literal notranslate"><span class="pre">XPath.evaluate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPath.error_log"><code class="docutils literal notranslate"><span class="pre">XPath.error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPath.path"><code class="docutils literal notranslate"><span class="pre">XPath.path</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathDocumentEvaluator"><code class="docutils literal notranslate"><span class="pre">XPathDocumentEvaluator</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathDocumentEvaluator.evaluate"><code class="docutils literal notranslate"><span class="pre">XPathDocumentEvaluator.evaluate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathDocumentEvaluator.register_namespace"><code class="docutils literal notranslate"><span class="pre">XPathDocumentEvaluator.register_namespace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathDocumentEvaluator.register_namespaces"><code class="docutils literal notranslate"><span class="pre">XPathDocumentEvaluator.register_namespaces()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathDocumentEvaluator.error_log"><code class="docutils literal notranslate"><span class="pre">XPathDocumentEvaluator.error_log</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathElementEvaluator"><code class="docutils literal notranslate"><span class="pre">XPathElementEvaluator</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathElementEvaluator.evaluate"><code class="docutils literal notranslate"><span class="pre">XPathElementEvaluator.evaluate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathElementEvaluator.register_namespace"><code class="docutils literal notranslate"><span class="pre">XPathElementEvaluator.register_namespace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathElementEvaluator.register_namespaces"><code class="docutils literal notranslate"><span class="pre">XPathElementEvaluator.register_namespaces()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathElementEvaluator.error_log"><code class="docutils literal notranslate"><span class="pre">XPathElementEvaluator.error_log</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLT"><code class="docutils literal notranslate"><span class="pre">XSLT</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLT.apply"><code class="docutils literal notranslate"><span class="pre">XSLT.apply()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLT.set_global_max_depth"><code class="docutils literal notranslate"><span class="pre">XSLT.set_global_max_depth()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLT.strparam"><code class="docutils literal notranslate"><span class="pre">XSLT.strparam()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLT.tostring"><code class="docutils literal notranslate"><span class="pre">XSLT.tostring()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLT.error_log"><code class="docutils literal notranslate"><span class="pre">XSLT.error_log</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTAccessControl"><code class="docutils literal notranslate"><span class="pre">XSLTAccessControl</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTAccessControl.DENY_ALL"><code class="docutils literal notranslate"><span class="pre">XSLTAccessControl.DENY_ALL</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTAccessControl.DENY_WRITE"><code class="docutils literal notranslate"><span class="pre">XSLTAccessControl.DENY_WRITE</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTAccessControl.options"><code class="docutils literal notranslate"><span class="pre">XSLTAccessControl.options</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTExtension"><code class="docutils literal notranslate"><span class="pre">XSLTExtension</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTExtension.apply_templates"><code class="docutils literal notranslate"><span class="pre">XSLTExtension.apply_templates()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTExtension.execute"><code class="docutils literal notranslate"><span class="pre">XSLTExtension.execute()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.XSLTExtension.process_children"><code class="docutils literal notranslate"><span class="pre">XSLTExtension.process_children()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib"><code class="docutils literal notranslate"><span class="pre">_Attrib</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.clear"><code class="docutils literal notranslate"><span class="pre">_Attrib.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.get"><code class="docutils literal notranslate"><span class="pre">_Attrib.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.has_key"><code class="docutils literal notranslate"><span class="pre">_Attrib.has_key()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.items"><code class="docutils literal notranslate"><span class="pre">_Attrib.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.iteritems"><code class="docutils literal notranslate"><span class="pre">_Attrib.iteritems()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.iterkeys"><code class="docutils literal notranslate"><span class="pre">_Attrib.iterkeys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.itervalues"><code class="docutils literal notranslate"><span class="pre">_Attrib.itervalues()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.keys"><code class="docutils literal notranslate"><span class="pre">_Attrib.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.pop"><code class="docutils literal notranslate"><span class="pre">_Attrib.pop()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.update"><code class="docutils literal notranslate"><span class="pre">_Attrib.update()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Attrib.values"><code class="docutils literal notranslate"><span class="pre">_Attrib.values()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._BaseErrorLog"><code class="docutils literal notranslate"><span class="pre">_BaseErrorLog</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._BaseErrorLog.copy"><code class="docutils literal notranslate"><span class="pre">_BaseErrorLog.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._BaseErrorLog.receive"><code class="docutils literal notranslate"><span class="pre">_BaseErrorLog.receive()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._BaseErrorLog.last_error"><code class="docutils literal notranslate"><span class="pre">_BaseErrorLog.last_error</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment"><code class="docutils literal notranslate"><span class="pre">_Comment</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment._init"><code class="docutils literal notranslate"><span class="pre">_Comment._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.addnext"><code class="docutils literal notranslate"><span class="pre">_Comment.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.addprevious"><code class="docutils literal notranslate"><span class="pre">_Comment.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.append"><code class="docutils literal notranslate"><span class="pre">_Comment.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.clear"><code class="docutils literal notranslate"><span class="pre">_Comment.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.cssselect"><code class="docutils literal notranslate"><span class="pre">_Comment.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.extend"><code class="docutils literal notranslate"><span class="pre">_Comment.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.find"><code class="docutils literal notranslate"><span class="pre">_Comment.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.findall"><code class="docutils literal notranslate"><span class="pre">_Comment.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.findtext"><code class="docutils literal notranslate"><span class="pre">_Comment.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.get"><code class="docutils literal notranslate"><span class="pre">_Comment.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.getchildren"><code class="docutils literal notranslate"><span class="pre">_Comment.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.getiterator"><code class="docutils literal notranslate"><span class="pre">_Comment.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.getnext"><code class="docutils literal notranslate"><span class="pre">_Comment.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.getparent"><code class="docutils literal notranslate"><span class="pre">_Comment.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.getprevious"><code class="docutils literal notranslate"><span class="pre">_Comment.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.getroottree"><code class="docutils literal notranslate"><span class="pre">_Comment.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.index"><code class="docutils literal notranslate"><span class="pre">_Comment.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.insert"><code class="docutils literal notranslate"><span class="pre">_Comment.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.items"><code class="docutils literal notranslate"><span class="pre">_Comment.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.iter"><code class="docutils literal notranslate"><span class="pre">_Comment.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.iterancestors"><code class="docutils literal notranslate"><span class="pre">_Comment.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.iterchildren"><code class="docutils literal notranslate"><span class="pre">_Comment.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.iterdescendants"><code class="docutils literal notranslate"><span class="pre">_Comment.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.iterfind"><code class="docutils literal notranslate"><span class="pre">_Comment.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.itersiblings"><code class="docutils literal notranslate"><span class="pre">_Comment.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.itertext"><code class="docutils literal notranslate"><span class="pre">_Comment.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.keys"><code class="docutils literal notranslate"><span class="pre">_Comment.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.makeelement"><code class="docutils literal notranslate"><span class="pre">_Comment.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.remove"><code class="docutils literal notranslate"><span class="pre">_Comment.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.replace"><code class="docutils literal notranslate"><span class="pre">_Comment.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.set"><code class="docutils literal notranslate"><span class="pre">_Comment.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.values"><code class="docutils literal notranslate"><span class="pre">_Comment.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.xpath"><code class="docutils literal notranslate"><span class="pre">_Comment.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.attrib"><code class="docutils literal notranslate"><span class="pre">_Comment.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.base"><code class="docutils literal notranslate"><span class="pre">_Comment.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.nsmap"><code class="docutils literal notranslate"><span class="pre">_Comment.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.prefix"><code class="docutils literal notranslate"><span class="pre">_Comment.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.sourceline"><code class="docutils literal notranslate"><span class="pre">_Comment.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.tag"><code class="docutils literal notranslate"><span class="pre">_Comment.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.tail"><code class="docutils literal notranslate"><span class="pre">_Comment.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Comment.text"><code class="docutils literal notranslate"><span class="pre">_Comment.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._Document"><code class="docutils literal notranslate"><span class="pre">_Document</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.clear"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.copy"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.filter_domains"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.filter_domains()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.filter_from_errors"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.filter_from_errors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.filter_from_fatals"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.filter_from_fatals()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.filter_from_level"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.filter_from_level()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.filter_from_warnings"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.filter_from_warnings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.filter_levels"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.filter_levels()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.filter_types"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.filter_types()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.receive"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.receive()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._DomainErrorLog.last_error"><code class="docutils literal notranslate"><span class="pre">_DomainErrorLog.last_error</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element"><code class="docutils literal notranslate"><span class="pre">_Element</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element._init"><code class="docutils literal notranslate"><span class="pre">_Element._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.addnext"><code class="docutils literal notranslate"><span class="pre">_Element.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.addprevious"><code class="docutils literal notranslate"><span class="pre">_Element.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.append"><code class="docutils literal notranslate"><span class="pre">_Element.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.clear"><code class="docutils literal notranslate"><span class="pre">_Element.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.cssselect"><code class="docutils literal notranslate"><span class="pre">_Element.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.extend"><code class="docutils literal notranslate"><span class="pre">_Element.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.find"><code class="docutils literal notranslate"><span class="pre">_Element.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.findall"><code class="docutils literal notranslate"><span class="pre">_Element.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.findtext"><code class="docutils literal notranslate"><span class="pre">_Element.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.get"><code class="docutils literal notranslate"><span class="pre">_Element.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.getchildren"><code class="docutils literal notranslate"><span class="pre">_Element.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.getiterator"><code class="docutils literal notranslate"><span class="pre">_Element.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.getnext"><code class="docutils literal notranslate"><span class="pre">_Element.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.getparent"><code class="docutils literal notranslate"><span class="pre">_Element.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.getprevious"><code class="docutils literal notranslate"><span class="pre">_Element.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.getroottree"><code class="docutils literal notranslate"><span class="pre">_Element.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.index"><code class="docutils literal notranslate"><span class="pre">_Element.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.insert"><code class="docutils literal notranslate"><span class="pre">_Element.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.items"><code class="docutils literal notranslate"><span class="pre">_Element.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.iter"><code class="docutils literal notranslate"><span class="pre">_Element.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.iterancestors"><code class="docutils literal notranslate"><span class="pre">_Element.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.iterchildren"><code class="docutils literal notranslate"><span class="pre">_Element.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.iterdescendants"><code class="docutils literal notranslate"><span class="pre">_Element.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.iterfind"><code class="docutils literal notranslate"><span class="pre">_Element.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.itersiblings"><code class="docutils literal notranslate"><span class="pre">_Element.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.itertext"><code class="docutils literal notranslate"><span class="pre">_Element.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.keys"><code class="docutils literal notranslate"><span class="pre">_Element.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.makeelement"><code class="docutils literal notranslate"><span class="pre">_Element.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.remove"><code class="docutils literal notranslate"><span class="pre">_Element.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.replace"><code class="docutils literal notranslate"><span class="pre">_Element.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.set"><code class="docutils literal notranslate"><span class="pre">_Element.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.values"><code class="docutils literal notranslate"><span class="pre">_Element.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.xpath"><code class="docutils literal notranslate"><span class="pre">_Element.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.attrib"><code class="docutils literal notranslate"><span class="pre">_Element.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.base"><code class="docutils literal notranslate"><span class="pre">_Element.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.nsmap"><code class="docutils literal notranslate"><span class="pre">_Element.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.prefix"><code class="docutils literal notranslate"><span class="pre">_Element.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.sourceline"><code class="docutils literal notranslate"><span class="pre">_Element.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.tag"><code class="docutils literal notranslate"><span class="pre">_Element.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.tail"><code class="docutils literal notranslate"><span class="pre">_Element.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Element.text"><code class="docutils literal notranslate"><span class="pre">_Element.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementIterator"><code class="docutils literal notranslate"><span class="pre">_ElementIterator</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementMatchIterator"><code class="docutils literal notranslate"><span class="pre">_ElementMatchIterator</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.capitalize"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.capitalize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.center"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.center()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.count"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.count()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.decode"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.decode()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.endswith"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.endswith()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.expandtabs"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.expandtabs()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.find"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.fromhex"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.fromhex()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.getparent"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.hex"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.hex()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.index"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.isalnum"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.isalnum()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.isalpha"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.isalpha()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.isascii"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.isascii()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.isdigit"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.isdigit()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.islower"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.islower()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.isspace"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.isspace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.istitle"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.istitle()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.isupper"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.isupper()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.join"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.join()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.ljust"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.ljust()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.lower"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.lower()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.lstrip"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.lstrip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.maketrans"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.maketrans()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.partition"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.partition()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.removeprefix"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.removeprefix()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.removesuffix"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.removesuffix()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.replace"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.rfind"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.rfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.rindex"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.rindex()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.rjust"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.rjust()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.rpartition"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.rpartition()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.rsplit"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.rsplit()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.rstrip"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.rstrip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.split"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.split()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.splitlines"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.splitlines()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.startswith"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.startswith()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.strip"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.strip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.swapcase"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.swapcase()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.title"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.title()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.translate"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.translate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.upper"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.upper()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementStringResult.zfill"><code class="docutils literal notranslate"><span class="pre">_ElementStringResult.zfill()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTagMatcher"><code class="docutils literal notranslate"><span class="pre">_ElementTagMatcher</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree"><code class="docutils literal notranslate"><span class="pre">_ElementTree</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree._setroot"><code class="docutils literal notranslate"><span class="pre">_ElementTree._setroot()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.find"><code class="docutils literal notranslate"><span class="pre">_ElementTree.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.findall"><code class="docutils literal notranslate"><span class="pre">_ElementTree.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.findtext"><code class="docutils literal notranslate"><span class="pre">_ElementTree.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.getelementpath"><code class="docutils literal notranslate"><span class="pre">_ElementTree.getelementpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.getiterator"><code class="docutils literal notranslate"><span class="pre">_ElementTree.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.getpath"><code class="docutils literal notranslate"><span class="pre">_ElementTree.getpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.getroot"><code class="docutils literal notranslate"><span class="pre">_ElementTree.getroot()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.iter"><code class="docutils literal notranslate"><span class="pre">_ElementTree.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.iterfind"><code class="docutils literal notranslate"><span class="pre">_ElementTree.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.parse"><code class="docutils literal notranslate"><span class="pre">_ElementTree.parse()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.relaxng"><code class="docutils literal notranslate"><span class="pre">_ElementTree.relaxng()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.write"><code class="docutils literal notranslate"><span class="pre">_ElementTree.write()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.write_c14n"><code class="docutils literal notranslate"><span class="pre">_ElementTree.write_c14n()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.xinclude"><code class="docutils literal notranslate"><span class="pre">_ElementTree.xinclude()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.xmlschema"><code class="docutils literal notranslate"><span class="pre">_ElementTree.xmlschema()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.xpath"><code class="docutils literal notranslate"><span class="pre">_ElementTree.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.xslt"><code class="docutils literal notranslate"><span class="pre">_ElementTree.xslt()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.docinfo"><code class="docutils literal notranslate"><span class="pre">_ElementTree.docinfo</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementTree.parser"><code class="docutils literal notranslate"><span class="pre">_ElementTree.parser</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.capitalize"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.capitalize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.casefold"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.casefold()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.center"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.center()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.count"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.count()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.encode"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.encode()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.endswith"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.endswith()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.expandtabs"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.expandtabs()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.find"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.format"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.format()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.format_map"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.format_map()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.getparent"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.index"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.isalnum"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.isalnum()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.isalpha"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.isalpha()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.isascii"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.isascii()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.isdecimal"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.isdecimal()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.isdigit"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.isdigit()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.isidentifier"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.isidentifier()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.islower"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.islower()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.isnumeric"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.isnumeric()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.isprintable"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.isprintable()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.isspace"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.isspace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.istitle"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.istitle()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.isupper"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.isupper()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.join"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.join()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.ljust"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.ljust()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.lower"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.lower()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.lstrip"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.lstrip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.maketrans"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.maketrans()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.partition"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.partition()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.removeprefix"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.removeprefix()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.removesuffix"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.removesuffix()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.replace"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.rfind"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.rfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.rindex"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.rindex()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.rjust"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.rjust()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.rpartition"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.rpartition()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.rsplit"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.rsplit()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.rstrip"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.rstrip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.split"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.split()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.splitlines"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.splitlines()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.startswith"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.startswith()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.strip"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.strip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.swapcase"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.swapcase()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.title"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.title()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.translate"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.translate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.upper"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.upper()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.zfill"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.zfill()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.attrname"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.attrname</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.is_attribute"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.is_attribute</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.is_tail"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.is_tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ElementUnicodeResult.is_text"><code class="docutils literal notranslate"><span class="pre">_ElementUnicodeResult.is_text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity"><code class="docutils literal notranslate"><span class="pre">_Entity</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity._init"><code class="docutils literal notranslate"><span class="pre">_Entity._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.addnext"><code class="docutils literal notranslate"><span class="pre">_Entity.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.addprevious"><code class="docutils literal notranslate"><span class="pre">_Entity.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.append"><code class="docutils literal notranslate"><span class="pre">_Entity.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.clear"><code class="docutils literal notranslate"><span class="pre">_Entity.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.cssselect"><code class="docutils literal notranslate"><span class="pre">_Entity.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.extend"><code class="docutils literal notranslate"><span class="pre">_Entity.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.find"><code class="docutils literal notranslate"><span class="pre">_Entity.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.findall"><code class="docutils literal notranslate"><span class="pre">_Entity.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.findtext"><code class="docutils literal notranslate"><span class="pre">_Entity.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.get"><code class="docutils literal notranslate"><span class="pre">_Entity.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.getchildren"><code class="docutils literal notranslate"><span class="pre">_Entity.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.getiterator"><code class="docutils literal notranslate"><span class="pre">_Entity.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.getnext"><code class="docutils literal notranslate"><span class="pre">_Entity.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.getparent"><code class="docutils literal notranslate"><span class="pre">_Entity.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.getprevious"><code class="docutils literal notranslate"><span class="pre">_Entity.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.getroottree"><code class="docutils literal notranslate"><span class="pre">_Entity.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.index"><code class="docutils literal notranslate"><span class="pre">_Entity.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.insert"><code class="docutils literal notranslate"><span class="pre">_Entity.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.items"><code class="docutils literal notranslate"><span class="pre">_Entity.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.iter"><code class="docutils literal notranslate"><span class="pre">_Entity.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.iterancestors"><code class="docutils literal notranslate"><span class="pre">_Entity.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.iterchildren"><code class="docutils literal notranslate"><span class="pre">_Entity.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.iterdescendants"><code class="docutils literal notranslate"><span class="pre">_Entity.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.iterfind"><code class="docutils literal notranslate"><span class="pre">_Entity.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.itersiblings"><code class="docutils literal notranslate"><span class="pre">_Entity.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.itertext"><code class="docutils literal notranslate"><span class="pre">_Entity.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.keys"><code class="docutils literal notranslate"><span class="pre">_Entity.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.makeelement"><code class="docutils literal notranslate"><span class="pre">_Entity.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.remove"><code class="docutils literal notranslate"><span class="pre">_Entity.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.replace"><code class="docutils literal notranslate"><span class="pre">_Entity.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.set"><code class="docutils literal notranslate"><span class="pre">_Entity.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.values"><code class="docutils literal notranslate"><span class="pre">_Entity.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.xpath"><code class="docutils literal notranslate"><span class="pre">_Entity.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.attrib"><code class="docutils literal notranslate"><span class="pre">_Entity.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.base"><code class="docutils literal notranslate"><span class="pre">_Entity.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.name"><code class="docutils literal notranslate"><span class="pre">_Entity.name</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.nsmap"><code class="docutils literal notranslate"><span class="pre">_Entity.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.prefix"><code class="docutils literal notranslate"><span class="pre">_Entity.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.sourceline"><code class="docutils literal notranslate"><span class="pre">_Entity.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.tag"><code class="docutils literal notranslate"><span class="pre">_Entity.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.tail"><code class="docutils literal notranslate"><span class="pre">_Entity.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Entity.text"><code class="docutils literal notranslate"><span class="pre">_Entity.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog"><code class="docutils literal notranslate"><span class="pre">_ErrorLog</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.clear"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.copy"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.filter_domains"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.filter_domains()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.filter_from_errors"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.filter_from_errors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.filter_from_fatals"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.filter_from_fatals()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.filter_from_level"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.filter_from_level()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.filter_from_warnings"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.filter_from_warnings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.filter_levels"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.filter_levels()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.filter_types"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.filter_types()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.receive"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.receive()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ErrorLog.last_error"><code class="docutils literal notranslate"><span class="pre">_ErrorLog.last_error</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser"><code class="docutils literal notranslate"><span class="pre">_FeedParser</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.close"><code class="docutils literal notranslate"><span class="pre">_FeedParser.close()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.copy"><code class="docutils literal notranslate"><span class="pre">_FeedParser.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.feed"><code class="docutils literal notranslate"><span class="pre">_FeedParser.feed()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.makeelement"><code class="docutils literal notranslate"><span class="pre">_FeedParser.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.setElementClassLookup"><code class="docutils literal notranslate"><span class="pre">_FeedParser.setElementClassLookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">_FeedParser.set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.error_log"><code class="docutils literal notranslate"><span class="pre">_FeedParser.error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.feed_error_log"><code class="docutils literal notranslate"><span class="pre">_FeedParser.feed_error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.resolvers"><code class="docutils literal notranslate"><span class="pre">_FeedParser.resolvers</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.target"><code class="docutils literal notranslate"><span class="pre">_FeedParser.target</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._FeedParser.version"><code class="docutils literal notranslate"><span class="pre">_FeedParser.version</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict"><code class="docutils literal notranslate"><span class="pre">_IDDict</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict.copy"><code class="docutils literal notranslate"><span class="pre">_IDDict.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict.get"><code class="docutils literal notranslate"><span class="pre">_IDDict.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict.has_key"><code class="docutils literal notranslate"><span class="pre">_IDDict.has_key()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict.items"><code class="docutils literal notranslate"><span class="pre">_IDDict.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict.iteritems"><code class="docutils literal notranslate"><span class="pre">_IDDict.iteritems()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict.iterkeys"><code class="docutils literal notranslate"><span class="pre">_IDDict.iterkeys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict.itervalues"><code class="docutils literal notranslate"><span class="pre">_IDDict.itervalues()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict.keys"><code class="docutils literal notranslate"><span class="pre">_IDDict.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._IDDict.values"><code class="docutils literal notranslate"><span class="pre">_IDDict.values()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog.copy"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog.filter_domains"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog.filter_domains()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog.filter_from_errors"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog.filter_from_errors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog.filter_from_fatals"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog.filter_from_fatals()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog.filter_from_level"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog.filter_from_level()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog.filter_from_warnings"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog.filter_from_warnings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog.filter_levels"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog.filter_levels()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog.filter_types"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog.filter_types()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog.receive"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog.receive()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ListErrorLog.last_error"><code class="docutils literal notranslate"><span class="pre">_ListErrorLog.last_error</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry"><code class="docutils literal notranslate"><span class="pre">_LogEntry</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.column"><code class="docutils literal notranslate"><span class="pre">_LogEntry.column</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.domain"><code class="docutils literal notranslate"><span class="pre">_LogEntry.domain</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.domain_name"><code class="docutils literal notranslate"><span class="pre">_LogEntry.domain_name</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.filename"><code class="docutils literal notranslate"><span class="pre">_LogEntry.filename</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.level"><code class="docutils literal notranslate"><span class="pre">_LogEntry.level</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.level_name"><code class="docutils literal notranslate"><span class="pre">_LogEntry.level_name</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.line"><code class="docutils literal notranslate"><span class="pre">_LogEntry.line</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.message"><code class="docutils literal notranslate"><span class="pre">_LogEntry.message</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.path"><code class="docutils literal notranslate"><span class="pre">_LogEntry.path</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.type"><code class="docutils literal notranslate"><span class="pre">_LogEntry.type</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._LogEntry.type_name"><code class="docutils literal notranslate"><span class="pre">_LogEntry.type_name</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction._init"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.addnext"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.addprevious"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.append"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.clear"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.cssselect"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.extend"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.find"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.findall"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.findtext"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.get"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.getchildren"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.getiterator"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.getnext"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.getparent"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.getprevious"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.getroottree"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.index"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.insert"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.items"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.iter"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.iterancestors"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.iterchildren"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.iterdescendants"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.iterfind"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.itersiblings"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.itertext"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.keys"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.makeelement"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.remove"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.replace"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.set"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.values"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.xpath"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.attrib"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.base"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.nsmap"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.prefix"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.sourceline"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.tag"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.tail"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.target"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.target</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._ProcessingInstruction.text"><code class="docutils literal notranslate"><span class="pre">_ProcessingInstruction.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.clear"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.copy"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.filter_domains"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.filter_domains()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.filter_from_errors"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.filter_from_errors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.filter_from_fatals"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.filter_from_fatals()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.filter_from_level"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.filter_from_level()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.filter_from_warnings"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.filter_from_warnings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.filter_levels"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.filter_levels()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.filter_types"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.filter_types()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.receive"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.receive()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._RotatingErrorLog.last_error"><code class="docutils literal notranslate"><span class="pre">_RotatingErrorLog.last_error</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._SaxParserTarget"><code class="docutils literal notranslate"><span class="pre">_SaxParserTarget</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._Validator"><code class="docutils literal notranslate"><span class="pre">_Validator</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Validator._append_log_message"><code class="docutils literal notranslate"><span class="pre">_Validator._append_log_message()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Validator._clear_error_log"><code class="docutils literal notranslate"><span class="pre">_Validator._clear_error_log()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Validator.assertValid"><code class="docutils literal notranslate"><span class="pre">_Validator.assertValid()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Validator.assert_"><code class="docutils literal notranslate"><span class="pre">_Validator.assert_()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Validator.validate"><code class="docutils literal notranslate"><span class="pre">_Validator.validate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._Validator.error_log"><code class="docutils literal notranslate"><span class="pre">_Validator.error_log</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._XPathEvaluatorBase"><code class="docutils literal notranslate"><span class="pre">_XPathEvaluatorBase</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XPathEvaluatorBase.evaluate"><code class="docutils literal notranslate"><span class="pre">_XPathEvaluatorBase.evaluate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XPathEvaluatorBase.error_log"><code class="docutils literal notranslate"><span class="pre">_XPathEvaluatorBase.error_log</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction._init"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.addnext"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.addprevious"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.append"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.clear"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.cssselect"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.extend"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.find"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.findall"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.findtext"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.get"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.getchildren"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.getiterator"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.getnext"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.getparent"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.getprevious"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.getroottree"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.index"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.insert"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.items"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.iter"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.iterancestors"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.iterchildren"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.iterdescendants"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.iterfind"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.itersiblings"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.itertext"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.keys"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.makeelement"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.parseXSL"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.parseXSL()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.remove"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.replace"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.set"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.values"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.xpath"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.attrib"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.base"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.nsmap"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.prefix"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.sourceline"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.tag"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.tail"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.target"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.target</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTProcessingInstruction.text"><code class="docutils literal notranslate"><span class="pre">_XSLTProcessingInstruction.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree._setroot"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree._setroot()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.find"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.findall"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.findtext"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.getelementpath"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.getelementpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.getiterator"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.getpath"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.getpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.getroot"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.getroot()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.iter"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.iterfind"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.parse"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.parse()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.relaxng"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.relaxng()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.write"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.write()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.write_c14n"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.write_c14n()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.write_output"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.write_output()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.xinclude"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.xinclude()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.xmlschema"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.xmlschema()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.xpath"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.xslt"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.xslt()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.docinfo"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.docinfo</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.parser"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.parser</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree._XSLTResultTree.xslt_profile"><code class="docutils literal notranslate"><span class="pre">_XSLTResultTree.xslt_profile</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.htmlfile"><code class="docutils literal notranslate"><span class="pre">htmlfile</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterparse"><code class="docutils literal notranslate"><span class="pre">iterparse</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterparse.makeelement"><code class="docutils literal notranslate"><span class="pre">iterparse.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterparse.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">iterparse.set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterparse.error_log"><code class="docutils literal notranslate"><span class="pre">iterparse.error_log</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterparse.resolvers"><code class="docutils literal notranslate"><span class="pre">iterparse.resolvers</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterparse.root"><code class="docutils literal notranslate"><span class="pre">iterparse.root</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterparse.version"><code class="docutils literal notranslate"><span class="pre">iterparse.version</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterwalk"><code class="docutils literal notranslate"><span class="pre">iterwalk</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.etree.html#lxml.etree.iterwalk.skip_subtree"><code class="docutils literal notranslate"><span class="pre">iterwalk.skip_subtree()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.xmlfile"><code class="docutils literal notranslate"><span class="pre">xmlfile</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.Comment"><code class="docutils literal notranslate"><span class="pre">Comment()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.Element"><code class="docutils literal notranslate"><span class="pre">Element()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ElementTree"><code class="docutils literal notranslate"><span class="pre">ElementTree()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.Entity"><code class="docutils literal notranslate"><span class="pre">Entity()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.Extension"><code class="docutils literal notranslate"><span class="pre">Extension()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.FunctionNamespace"><code class="docutils literal notranslate"><span class="pre">FunctionNamespace()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.HTML"><code class="docutils literal notranslate"><span class="pre">HTML()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.PI"><code class="docutils literal notranslate"><span class="pre">PI()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.ProcessingInstruction"><code class="docutils literal notranslate"><span class="pre">ProcessingInstruction()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.SubElement"><code class="docutils literal notranslate"><span class="pre">SubElement()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XML"><code class="docutils literal notranslate"><span class="pre">XML()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLDTDID"><code class="docutils literal notranslate"><span class="pre">XMLDTDID()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XMLID"><code class="docutils literal notranslate"><span class="pre">XMLID()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.XPathEvaluator"><code class="docutils literal notranslate"><span class="pre">XPathEvaluator()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.adopt_external_document"><code class="docutils literal notranslate"><span class="pre">adopt_external_document()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.canonicalize"><code class="docutils literal notranslate"><span class="pre">canonicalize()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.cleanup_namespaces"><code class="docutils literal notranslate"><span class="pre">cleanup_namespaces()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.clear_error_log"><code class="docutils literal notranslate"><span class="pre">clear_error_log()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.dump"><code class="docutils literal notranslate"><span class="pre">dump()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.fromstring"><code class="docutils literal notranslate"><span class="pre">fromstring()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.fromstringlist"><code class="docutils literal notranslate"><span class="pre">fromstringlist()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.get_default_parser"><code class="docutils literal notranslate"><span class="pre">get_default_parser()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.indent"><code class="docutils literal notranslate"><span class="pre">indent()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.iselement"><code class="docutils literal notranslate"><span class="pre">iselement()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.parseid"><code class="docutils literal notranslate"><span class="pre">parseid()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.register_namespace"><code class="docutils literal notranslate"><span class="pre">register_namespace()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.set_default_parser"><code class="docutils literal notranslate"><span class="pre">set_default_parser()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.set_element_class_lookup"><code class="docutils literal notranslate"><span class="pre">set_element_class_lookup()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.strip_attributes"><code class="docutils literal notranslate"><span class="pre">strip_attributes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.strip_elements"><code class="docutils literal notranslate"><span class="pre">strip_elements()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.strip_tags"><code class="docutils literal notranslate"><span class="pre">strip_tags()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.tostring"><code class="docutils literal notranslate"><span class="pre">tostring()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.tostringlist"><code class="docutils literal notranslate"><span class="pre">tostringlist()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.tounicode"><code class="docutils literal notranslate"><span class="pre">tounicode()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.etree.html#lxml.etree.use_global_python_log"><code class="docutils literal notranslate"><span class="pre">use_global_python_log()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.objectify.html">lxml.objectify module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement"><code class="docutils literal notranslate"><span class="pre">BoolElement</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement._init"><code class="docutils literal notranslate"><span class="pre">BoolElement._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement._setText"><code class="docutils literal notranslate"><span class="pre">BoolElement._setText()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement._setValueParser"><code class="docutils literal notranslate"><span class="pre">BoolElement._setValueParser()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.addattr"><code class="docutils literal notranslate"><span class="pre">BoolElement.addattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.addnext"><code class="docutils literal notranslate"><span class="pre">BoolElement.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.addprevious"><code class="docutils literal notranslate"><span class="pre">BoolElement.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.append"><code class="docutils literal notranslate"><span class="pre">BoolElement.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.clear"><code class="docutils literal notranslate"><span class="pre">BoolElement.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.countchildren"><code class="docutils literal notranslate"><span class="pre">BoolElement.countchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.cssselect"><code class="docutils literal notranslate"><span class="pre">BoolElement.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.descendantpaths"><code class="docutils literal notranslate"><span class="pre">BoolElement.descendantpaths()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.extend"><code class="docutils literal notranslate"><span class="pre">BoolElement.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.find"><code class="docutils literal notranslate"><span class="pre">BoolElement.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.findall"><code class="docutils literal notranslate"><span class="pre">BoolElement.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.findtext"><code class="docutils literal notranslate"><span class="pre">BoolElement.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.get"><code class="docutils literal notranslate"><span class="pre">BoolElement.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.getchildren"><code class="docutils literal notranslate"><span class="pre">BoolElement.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.getiterator"><code class="docutils literal notranslate"><span class="pre">BoolElement.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.getnext"><code class="docutils literal notranslate"><span class="pre">BoolElement.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.getparent"><code class="docutils literal notranslate"><span class="pre">BoolElement.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.getprevious"><code class="docutils literal notranslate"><span class="pre">BoolElement.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.getroottree"><code class="docutils literal notranslate"><span class="pre">BoolElement.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.index"><code class="docutils literal notranslate"><span class="pre">BoolElement.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.insert"><code class="docutils literal notranslate"><span class="pre">BoolElement.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.items"><code class="docutils literal notranslate"><span class="pre">BoolElement.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.iter"><code class="docutils literal notranslate"><span class="pre">BoolElement.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">BoolElement.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">BoolElement.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">BoolElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.iterfind"><code class="docutils literal notranslate"><span class="pre">BoolElement.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">BoolElement.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.itertext"><code class="docutils literal notranslate"><span class="pre">BoolElement.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.keys"><code class="docutils literal notranslate"><span class="pre">BoolElement.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.makeelement"><code class="docutils literal notranslate"><span class="pre">BoolElement.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.remove"><code class="docutils literal notranslate"><span class="pre">BoolElement.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.replace"><code class="docutils literal notranslate"><span class="pre">BoolElement.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.set"><code class="docutils literal notranslate"><span class="pre">BoolElement.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.values"><code class="docutils literal notranslate"><span class="pre">BoolElement.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.xpath"><code class="docutils literal notranslate"><span class="pre">BoolElement.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.attrib"><code class="docutils literal notranslate"><span class="pre">BoolElement.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.base"><code class="docutils literal notranslate"><span class="pre">BoolElement.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.nsmap"><code class="docutils literal notranslate"><span class="pre">BoolElement.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.prefix"><code class="docutils literal notranslate"><span class="pre">BoolElement.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.pyval"><code class="docutils literal notranslate"><span class="pre">BoolElement.pyval</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.sourceline"><code class="docutils literal notranslate"><span class="pre">BoolElement.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.tag"><code class="docutils literal notranslate"><span class="pre">BoolElement.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.tail"><code class="docutils literal notranslate"><span class="pre">BoolElement.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.BoolElement.text"><code class="docutils literal notranslate"><span class="pre">BoolElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ElementMaker"><code class="docutils literal notranslate"><span class="pre">ElementMaker</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement"><code class="docutils literal notranslate"><span class="pre">FloatElement</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement._init"><code class="docutils literal notranslate"><span class="pre">FloatElement._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement._setText"><code class="docutils literal notranslate"><span class="pre">FloatElement._setText()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement._setValueParser"><code class="docutils literal notranslate"><span class="pre">FloatElement._setValueParser()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.addattr"><code class="docutils literal notranslate"><span class="pre">FloatElement.addattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.addnext"><code class="docutils literal notranslate"><span class="pre">FloatElement.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.addprevious"><code class="docutils literal notranslate"><span class="pre">FloatElement.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.append"><code class="docutils literal notranslate"><span class="pre">FloatElement.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.clear"><code class="docutils literal notranslate"><span class="pre">FloatElement.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.countchildren"><code class="docutils literal notranslate"><span class="pre">FloatElement.countchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.cssselect"><code class="docutils literal notranslate"><span class="pre">FloatElement.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.descendantpaths"><code class="docutils literal notranslate"><span class="pre">FloatElement.descendantpaths()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.extend"><code class="docutils literal notranslate"><span class="pre">FloatElement.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.find"><code class="docutils literal notranslate"><span class="pre">FloatElement.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.findall"><code class="docutils literal notranslate"><span class="pre">FloatElement.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.findtext"><code class="docutils literal notranslate"><span class="pre">FloatElement.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.get"><code class="docutils literal notranslate"><span class="pre">FloatElement.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.getchildren"><code class="docutils literal notranslate"><span class="pre">FloatElement.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.getiterator"><code class="docutils literal notranslate"><span class="pre">FloatElement.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.getnext"><code class="docutils literal notranslate"><span class="pre">FloatElement.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.getparent"><code class="docutils literal notranslate"><span class="pre">FloatElement.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.getprevious"><code class="docutils literal notranslate"><span class="pre">FloatElement.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.getroottree"><code class="docutils literal notranslate"><span class="pre">FloatElement.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.index"><code class="docutils literal notranslate"><span class="pre">FloatElement.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.insert"><code class="docutils literal notranslate"><span class="pre">FloatElement.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.items"><code class="docutils literal notranslate"><span class="pre">FloatElement.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.iter"><code class="docutils literal notranslate"><span class="pre">FloatElement.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">FloatElement.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">FloatElement.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">FloatElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.iterfind"><code class="docutils literal notranslate"><span class="pre">FloatElement.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">FloatElement.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.itertext"><code class="docutils literal notranslate"><span class="pre">FloatElement.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.keys"><code class="docutils literal notranslate"><span class="pre">FloatElement.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.makeelement"><code class="docutils literal notranslate"><span class="pre">FloatElement.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.remove"><code class="docutils literal notranslate"><span class="pre">FloatElement.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.replace"><code class="docutils literal notranslate"><span class="pre">FloatElement.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.set"><code class="docutils literal notranslate"><span class="pre">FloatElement.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.values"><code class="docutils literal notranslate"><span class="pre">FloatElement.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.xpath"><code class="docutils literal notranslate"><span class="pre">FloatElement.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.attrib"><code class="docutils literal notranslate"><span class="pre">FloatElement.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.base"><code class="docutils literal notranslate"><span class="pre">FloatElement.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.nsmap"><code class="docutils literal notranslate"><span class="pre">FloatElement.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.prefix"><code class="docutils literal notranslate"><span class="pre">FloatElement.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.pyval"><code class="docutils literal notranslate"><span class="pre">FloatElement.pyval</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.sourceline"><code class="docutils literal notranslate"><span class="pre">FloatElement.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.tag"><code class="docutils literal notranslate"><span class="pre">FloatElement.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.tail"><code class="docutils literal notranslate"><span class="pre">FloatElement.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.FloatElement.text"><code class="docutils literal notranslate"><span class="pre">FloatElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement"><code class="docutils literal notranslate"><span class="pre">IntElement</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement._init"><code class="docutils literal notranslate"><span class="pre">IntElement._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement._setText"><code class="docutils literal notranslate"><span class="pre">IntElement._setText()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement._setValueParser"><code class="docutils literal notranslate"><span class="pre">IntElement._setValueParser()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.addattr"><code class="docutils literal notranslate"><span class="pre">IntElement.addattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.addnext"><code class="docutils literal notranslate"><span class="pre">IntElement.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.addprevious"><code class="docutils literal notranslate"><span class="pre">IntElement.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.append"><code class="docutils literal notranslate"><span class="pre">IntElement.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.clear"><code class="docutils literal notranslate"><span class="pre">IntElement.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.countchildren"><code class="docutils literal notranslate"><span class="pre">IntElement.countchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.cssselect"><code class="docutils literal notranslate"><span class="pre">IntElement.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.descendantpaths"><code class="docutils literal notranslate"><span class="pre">IntElement.descendantpaths()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.extend"><code class="docutils literal notranslate"><span class="pre">IntElement.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.find"><code class="docutils literal notranslate"><span class="pre">IntElement.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.findall"><code class="docutils literal notranslate"><span class="pre">IntElement.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.findtext"><code class="docutils literal notranslate"><span class="pre">IntElement.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.get"><code class="docutils literal notranslate"><span class="pre">IntElement.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.getchildren"><code class="docutils literal notranslate"><span class="pre">IntElement.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.getiterator"><code class="docutils literal notranslate"><span class="pre">IntElement.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.getnext"><code class="docutils literal notranslate"><span class="pre">IntElement.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.getparent"><code class="docutils literal notranslate"><span class="pre">IntElement.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.getprevious"><code class="docutils literal notranslate"><span class="pre">IntElement.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.getroottree"><code class="docutils literal notranslate"><span class="pre">IntElement.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.index"><code class="docutils literal notranslate"><span class="pre">IntElement.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.insert"><code class="docutils literal notranslate"><span class="pre">IntElement.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.items"><code class="docutils literal notranslate"><span class="pre">IntElement.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.iter"><code class="docutils literal notranslate"><span class="pre">IntElement.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">IntElement.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">IntElement.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">IntElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.iterfind"><code class="docutils literal notranslate"><span class="pre">IntElement.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">IntElement.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.itertext"><code class="docutils literal notranslate"><span class="pre">IntElement.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.keys"><code class="docutils literal notranslate"><span class="pre">IntElement.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.makeelement"><code class="docutils literal notranslate"><span class="pre">IntElement.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.remove"><code class="docutils literal notranslate"><span class="pre">IntElement.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.replace"><code class="docutils literal notranslate"><span class="pre">IntElement.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.set"><code class="docutils literal notranslate"><span class="pre">IntElement.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.values"><code class="docutils literal notranslate"><span class="pre">IntElement.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.xpath"><code class="docutils literal notranslate"><span class="pre">IntElement.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.attrib"><code class="docutils literal notranslate"><span class="pre">IntElement.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.base"><code class="docutils literal notranslate"><span class="pre">IntElement.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.nsmap"><code class="docutils literal notranslate"><span class="pre">IntElement.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.prefix"><code class="docutils literal notranslate"><span class="pre">IntElement.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.pyval"><code class="docutils literal notranslate"><span class="pre">IntElement.pyval</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.sourceline"><code class="docutils literal notranslate"><span class="pre">IntElement.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.tag"><code class="docutils literal notranslate"><span class="pre">IntElement.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.tail"><code class="docutils literal notranslate"><span class="pre">IntElement.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.IntElement.text"><code class="docutils literal notranslate"><span class="pre">IntElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement"><code class="docutils literal notranslate"><span class="pre">LongElement</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement._init"><code class="docutils literal notranslate"><span class="pre">LongElement._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement._setText"><code class="docutils literal notranslate"><span class="pre">LongElement._setText()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement._setValueParser"><code class="docutils literal notranslate"><span class="pre">LongElement._setValueParser()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.addattr"><code class="docutils literal notranslate"><span class="pre">LongElement.addattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.addnext"><code class="docutils literal notranslate"><span class="pre">LongElement.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.addprevious"><code class="docutils literal notranslate"><span class="pre">LongElement.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.append"><code class="docutils literal notranslate"><span class="pre">LongElement.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.clear"><code class="docutils literal notranslate"><span class="pre">LongElement.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.countchildren"><code class="docutils literal notranslate"><span class="pre">LongElement.countchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.cssselect"><code class="docutils literal notranslate"><span class="pre">LongElement.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.descendantpaths"><code class="docutils literal notranslate"><span class="pre">LongElement.descendantpaths()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.extend"><code class="docutils literal notranslate"><span class="pre">LongElement.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.find"><code class="docutils literal notranslate"><span class="pre">LongElement.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.findall"><code class="docutils literal notranslate"><span class="pre">LongElement.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.findtext"><code class="docutils literal notranslate"><span class="pre">LongElement.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.get"><code class="docutils literal notranslate"><span class="pre">LongElement.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.getchildren"><code class="docutils literal notranslate"><span class="pre">LongElement.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.getiterator"><code class="docutils literal notranslate"><span class="pre">LongElement.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.getnext"><code class="docutils literal notranslate"><span class="pre">LongElement.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.getparent"><code class="docutils literal notranslate"><span class="pre">LongElement.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.getprevious"><code class="docutils literal notranslate"><span class="pre">LongElement.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.getroottree"><code class="docutils literal notranslate"><span class="pre">LongElement.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.index"><code class="docutils literal notranslate"><span class="pre">LongElement.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.insert"><code class="docutils literal notranslate"><span class="pre">LongElement.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.items"><code class="docutils literal notranslate"><span class="pre">LongElement.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.iter"><code class="docutils literal notranslate"><span class="pre">LongElement.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">LongElement.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">LongElement.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">LongElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.iterfind"><code class="docutils literal notranslate"><span class="pre">LongElement.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">LongElement.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.itertext"><code class="docutils literal notranslate"><span class="pre">LongElement.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.keys"><code class="docutils literal notranslate"><span class="pre">LongElement.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.makeelement"><code class="docutils literal notranslate"><span class="pre">LongElement.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.remove"><code class="docutils literal notranslate"><span class="pre">LongElement.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.replace"><code class="docutils literal notranslate"><span class="pre">LongElement.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.set"><code class="docutils literal notranslate"><span class="pre">LongElement.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.values"><code class="docutils literal notranslate"><span class="pre">LongElement.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.xpath"><code class="docutils literal notranslate"><span class="pre">LongElement.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.attrib"><code class="docutils literal notranslate"><span class="pre">LongElement.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.base"><code class="docutils literal notranslate"><span class="pre">LongElement.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.nsmap"><code class="docutils literal notranslate"><span class="pre">LongElement.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.prefix"><code class="docutils literal notranslate"><span class="pre">LongElement.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.pyval"><code class="docutils literal notranslate"><span class="pre">LongElement.pyval</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.sourceline"><code class="docutils literal notranslate"><span class="pre">LongElement.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.tag"><code class="docutils literal notranslate"><span class="pre">LongElement.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.tail"><code class="docutils literal notranslate"><span class="pre">LongElement.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.LongElement.text"><code class="docutils literal notranslate"><span class="pre">LongElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement"><code class="docutils literal notranslate"><span class="pre">NoneElement</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement._init"><code class="docutils literal notranslate"><span class="pre">NoneElement._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement._setText"><code class="docutils literal notranslate"><span class="pre">NoneElement._setText()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.addattr"><code class="docutils literal notranslate"><span class="pre">NoneElement.addattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.addnext"><code class="docutils literal notranslate"><span class="pre">NoneElement.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.addprevious"><code class="docutils literal notranslate"><span class="pre">NoneElement.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.append"><code class="docutils literal notranslate"><span class="pre">NoneElement.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.clear"><code class="docutils literal notranslate"><span class="pre">NoneElement.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.countchildren"><code class="docutils literal notranslate"><span class="pre">NoneElement.countchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.cssselect"><code class="docutils literal notranslate"><span class="pre">NoneElement.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.descendantpaths"><code class="docutils literal notranslate"><span class="pre">NoneElement.descendantpaths()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.extend"><code class="docutils literal notranslate"><span class="pre">NoneElement.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.find"><code class="docutils literal notranslate"><span class="pre">NoneElement.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.findall"><code class="docutils literal notranslate"><span class="pre">NoneElement.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.findtext"><code class="docutils literal notranslate"><span class="pre">NoneElement.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.get"><code class="docutils literal notranslate"><span class="pre">NoneElement.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.getchildren"><code class="docutils literal notranslate"><span class="pre">NoneElement.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.getiterator"><code class="docutils literal notranslate"><span class="pre">NoneElement.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.getnext"><code class="docutils literal notranslate"><span class="pre">NoneElement.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.getparent"><code class="docutils literal notranslate"><span class="pre">NoneElement.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.getprevious"><code class="docutils literal notranslate"><span class="pre">NoneElement.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.getroottree"><code class="docutils literal notranslate"><span class="pre">NoneElement.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.index"><code class="docutils literal notranslate"><span class="pre">NoneElement.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.insert"><code class="docutils literal notranslate"><span class="pre">NoneElement.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.items"><code class="docutils literal notranslate"><span class="pre">NoneElement.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.iter"><code class="docutils literal notranslate"><span class="pre">NoneElement.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">NoneElement.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">NoneElement.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">NoneElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.iterfind"><code class="docutils literal notranslate"><span class="pre">NoneElement.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">NoneElement.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.itertext"><code class="docutils literal notranslate"><span class="pre">NoneElement.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.keys"><code class="docutils literal notranslate"><span class="pre">NoneElement.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.makeelement"><code class="docutils literal notranslate"><span class="pre">NoneElement.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.remove"><code class="docutils literal notranslate"><span class="pre">NoneElement.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.replace"><code class="docutils literal notranslate"><span class="pre">NoneElement.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.set"><code class="docutils literal notranslate"><span class="pre">NoneElement.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.values"><code class="docutils literal notranslate"><span class="pre">NoneElement.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.xpath"><code class="docutils literal notranslate"><span class="pre">NoneElement.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.attrib"><code class="docutils literal notranslate"><span class="pre">NoneElement.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.base"><code class="docutils literal notranslate"><span class="pre">NoneElement.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.nsmap"><code class="docutils literal notranslate"><span class="pre">NoneElement.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.prefix"><code class="docutils literal notranslate"><span class="pre">NoneElement.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.pyval"><code class="docutils literal notranslate"><span class="pre">NoneElement.pyval</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.sourceline"><code class="docutils literal notranslate"><span class="pre">NoneElement.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.tag"><code class="docutils literal notranslate"><span class="pre">NoneElement.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.tail"><code class="docutils literal notranslate"><span class="pre">NoneElement.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NoneElement.text"><code class="docutils literal notranslate"><span class="pre">NoneElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement"><code class="docutils literal notranslate"><span class="pre">NumberElement</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement._init"><code class="docutils literal notranslate"><span class="pre">NumberElement._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement._setText"><code class="docutils literal notranslate"><span class="pre">NumberElement._setText()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement._setValueParser"><code class="docutils literal notranslate"><span class="pre">NumberElement._setValueParser()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.addattr"><code class="docutils literal notranslate"><span class="pre">NumberElement.addattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.addnext"><code class="docutils literal notranslate"><span class="pre">NumberElement.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.addprevious"><code class="docutils literal notranslate"><span class="pre">NumberElement.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.append"><code class="docutils literal notranslate"><span class="pre">NumberElement.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.clear"><code class="docutils literal notranslate"><span class="pre">NumberElement.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.countchildren"><code class="docutils literal notranslate"><span class="pre">NumberElement.countchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.cssselect"><code class="docutils literal notranslate"><span class="pre">NumberElement.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.descendantpaths"><code class="docutils literal notranslate"><span class="pre">NumberElement.descendantpaths()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.extend"><code class="docutils literal notranslate"><span class="pre">NumberElement.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.find"><code class="docutils literal notranslate"><span class="pre">NumberElement.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.findall"><code class="docutils literal notranslate"><span class="pre">NumberElement.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.findtext"><code class="docutils literal notranslate"><span class="pre">NumberElement.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.get"><code class="docutils literal notranslate"><span class="pre">NumberElement.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.getchildren"><code class="docutils literal notranslate"><span class="pre">NumberElement.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.getiterator"><code class="docutils literal notranslate"><span class="pre">NumberElement.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.getnext"><code class="docutils literal notranslate"><span class="pre">NumberElement.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.getparent"><code class="docutils literal notranslate"><span class="pre">NumberElement.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.getprevious"><code class="docutils literal notranslate"><span class="pre">NumberElement.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.getroottree"><code class="docutils literal notranslate"><span class="pre">NumberElement.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.index"><code class="docutils literal notranslate"><span class="pre">NumberElement.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.insert"><code class="docutils literal notranslate"><span class="pre">NumberElement.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.items"><code class="docutils literal notranslate"><span class="pre">NumberElement.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.iter"><code class="docutils literal notranslate"><span class="pre">NumberElement.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">NumberElement.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">NumberElement.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">NumberElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.iterfind"><code class="docutils literal notranslate"><span class="pre">NumberElement.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">NumberElement.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.itertext"><code class="docutils literal notranslate"><span class="pre">NumberElement.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.keys"><code class="docutils literal notranslate"><span class="pre">NumberElement.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.makeelement"><code class="docutils literal notranslate"><span class="pre">NumberElement.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.remove"><code class="docutils literal notranslate"><span class="pre">NumberElement.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.replace"><code class="docutils literal notranslate"><span class="pre">NumberElement.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.set"><code class="docutils literal notranslate"><span class="pre">NumberElement.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.values"><code class="docutils literal notranslate"><span class="pre">NumberElement.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.xpath"><code class="docutils literal notranslate"><span class="pre">NumberElement.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.attrib"><code class="docutils literal notranslate"><span class="pre">NumberElement.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.base"><code class="docutils literal notranslate"><span class="pre">NumberElement.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.nsmap"><code class="docutils literal notranslate"><span class="pre">NumberElement.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.prefix"><code class="docutils literal notranslate"><span class="pre">NumberElement.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.pyval"><code class="docutils literal notranslate"><span class="pre">NumberElement.pyval</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.sourceline"><code class="docutils literal notranslate"><span class="pre">NumberElement.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.tag"><code class="docutils literal notranslate"><span class="pre">NumberElement.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.tail"><code class="docutils literal notranslate"><span class="pre">NumberElement.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.NumberElement.text"><code class="docutils literal notranslate"><span class="pre">NumberElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectPath"><code class="docutils literal notranslate"><span class="pre">ObjectPath</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectPath.addattr"><code class="docutils literal notranslate"><span class="pre">ObjectPath.addattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectPath.hasattr"><code class="docutils literal notranslate"><span class="pre">ObjectPath.hasattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectPath.setattr"><code class="docutils literal notranslate"><span class="pre">ObjectPath.setattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectPath.find"><code class="docutils literal notranslate"><span class="pre">ObjectPath.find</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement._init"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement._setText"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement._setText()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.addattr"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.addattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.addnext"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.addprevious"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.append"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.clear"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.countchildren"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.countchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.cssselect"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.descendantpaths"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.descendantpaths()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.extend"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.find"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.findall"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.findtext"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.get"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.getchildren"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.getiterator"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.getnext"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.getparent"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.getprevious"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.getroottree"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.index"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.insert"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.items"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.iter"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.iterfind"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.itertext"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.keys"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.makeelement"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.remove"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.replace"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.set"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.values"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.xpath"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.attrib"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.base"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.nsmap"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.prefix"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.pyval"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.pyval</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.sourceline"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.tag"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.tail"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedDataElement.text"><code class="docutils literal notranslate"><span class="pre">ObjectifiedDataElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement._init"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.addattr"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.addattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.addnext"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.addprevious"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.append"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.clear"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.countchildren"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.countchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.cssselect"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.descendantpaths"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.descendantpaths()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.extend"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.find"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.findall"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.findtext"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.get"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.getchildren"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.getiterator"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.getnext"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.getparent"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.getprevious"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.getroottree"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.index"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.insert"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.items"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.iter"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.iterfind"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.itertext"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.keys"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.makeelement"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.remove"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.replace"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.set"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.values"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.xpath"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.attrib"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.base"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.nsmap"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.prefix"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.sourceline"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.tag"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.tail"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifiedElement.text"><code class="docutils literal notranslate"><span class="pre">ObjectifiedElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.ObjectifyElementClassLookup"><code class="docutils literal notranslate"><span class="pre">ObjectifyElementClassLookup</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.PyType"><code class="docutils literal notranslate"><span class="pre">PyType</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.PyType.register"><code class="docutils literal notranslate"><span class="pre">PyType.register()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.PyType.unregister"><code class="docutils literal notranslate"><span class="pre">PyType.unregister()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.PyType.name"><code class="docutils literal notranslate"><span class="pre">PyType.name</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.PyType.stringify"><code class="docutils literal notranslate"><span class="pre">PyType.stringify</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.PyType.type_check"><code class="docutils literal notranslate"><span class="pre">PyType.type_check</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.PyType.xmlSchemaTypes"><code class="docutils literal notranslate"><span class="pre">PyType.xmlSchemaTypes</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement"><code class="docutils literal notranslate"><span class="pre">StringElement</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement._init"><code class="docutils literal notranslate"><span class="pre">StringElement._init()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement._setText"><code class="docutils literal notranslate"><span class="pre">StringElement._setText()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.addattr"><code class="docutils literal notranslate"><span class="pre">StringElement.addattr()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.addnext"><code class="docutils literal notranslate"><span class="pre">StringElement.addnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.addprevious"><code class="docutils literal notranslate"><span class="pre">StringElement.addprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.append"><code class="docutils literal notranslate"><span class="pre">StringElement.append()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.clear"><code class="docutils literal notranslate"><span class="pre">StringElement.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.countchildren"><code class="docutils literal notranslate"><span class="pre">StringElement.countchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.cssselect"><code class="docutils literal notranslate"><span class="pre">StringElement.cssselect()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.descendantpaths"><code class="docutils literal notranslate"><span class="pre">StringElement.descendantpaths()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.extend"><code class="docutils literal notranslate"><span class="pre">StringElement.extend()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.find"><code class="docutils literal notranslate"><span class="pre">StringElement.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.findall"><code class="docutils literal notranslate"><span class="pre">StringElement.findall()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.findtext"><code class="docutils literal notranslate"><span class="pre">StringElement.findtext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.get"><code class="docutils literal notranslate"><span class="pre">StringElement.get()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.getchildren"><code class="docutils literal notranslate"><span class="pre">StringElement.getchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.getiterator"><code class="docutils literal notranslate"><span class="pre">StringElement.getiterator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.getnext"><code class="docutils literal notranslate"><span class="pre">StringElement.getnext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.getparent"><code class="docutils literal notranslate"><span class="pre">StringElement.getparent()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.getprevious"><code class="docutils literal notranslate"><span class="pre">StringElement.getprevious()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.getroottree"><code class="docutils literal notranslate"><span class="pre">StringElement.getroottree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.index"><code class="docutils literal notranslate"><span class="pre">StringElement.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.insert"><code class="docutils literal notranslate"><span class="pre">StringElement.insert()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.items"><code class="docutils literal notranslate"><span class="pre">StringElement.items()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.iter"><code class="docutils literal notranslate"><span class="pre">StringElement.iter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.iterancestors"><code class="docutils literal notranslate"><span class="pre">StringElement.iterancestors()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.iterchildren"><code class="docutils literal notranslate"><span class="pre">StringElement.iterchildren()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.iterdescendants"><code class="docutils literal notranslate"><span class="pre">StringElement.iterdescendants()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.iterfind"><code class="docutils literal notranslate"><span class="pre">StringElement.iterfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.itersiblings"><code class="docutils literal notranslate"><span class="pre">StringElement.itersiblings()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.itertext"><code class="docutils literal notranslate"><span class="pre">StringElement.itertext()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.keys"><code class="docutils literal notranslate"><span class="pre">StringElement.keys()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.makeelement"><code class="docutils literal notranslate"><span class="pre">StringElement.makeelement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.remove"><code class="docutils literal notranslate"><span class="pre">StringElement.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.replace"><code class="docutils literal notranslate"><span class="pre">StringElement.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.set"><code class="docutils literal notranslate"><span class="pre">StringElement.set()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.strlen"><code class="docutils literal notranslate"><span class="pre">StringElement.strlen()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.values"><code class="docutils literal notranslate"><span class="pre">StringElement.values()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.xpath"><code class="docutils literal notranslate"><span class="pre">StringElement.xpath()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.attrib"><code class="docutils literal notranslate"><span class="pre">StringElement.attrib</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.base"><code class="docutils literal notranslate"><span class="pre">StringElement.base</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.nsmap"><code class="docutils literal notranslate"><span class="pre">StringElement.nsmap</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.prefix"><code class="docutils literal notranslate"><span class="pre">StringElement.prefix</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.pyval"><code class="docutils literal notranslate"><span class="pre">StringElement.pyval</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.sourceline"><code class="docutils literal notranslate"><span class="pre">StringElement.sourceline</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.tag"><code class="docutils literal notranslate"><span class="pre">StringElement.tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.tail"><code class="docutils literal notranslate"><span class="pre">StringElement.tail</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.StringElement.text"><code class="docutils literal notranslate"><span class="pre">StringElement.text</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.DataElement"><code class="docutils literal notranslate"><span class="pre">DataElement()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.Element"><code class="docutils literal notranslate"><span class="pre">Element()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.XML"><code class="docutils literal notranslate"><span class="pre">XML()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.__unpickleElementTree"><code class="docutils literal notranslate"><span class="pre">__unpickleElementTree()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.annotate"><code class="docutils literal notranslate"><span class="pre">annotate()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.deannotate"><code class="docutils literal notranslate"><span class="pre">deannotate()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.dump"><code class="docutils literal notranslate"><span class="pre">dump()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.enable_recursive_str"><code class="docutils literal notranslate"><span class="pre">enable_recursive_str()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.fromstring"><code class="docutils literal notranslate"><span class="pre">fromstring()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.getRegisteredTypes"><code class="docutils literal notranslate"><span class="pre">getRegisteredTypes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.makeparser"><code class="docutils literal notranslate"><span class="pre">makeparser()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.parse"><code class="docutils literal notranslate"><span class="pre">parse()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.pyannotate"><code class="docutils literal notranslate"><span class="pre">pyannotate()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.pytypename"><code class="docutils literal notranslate"><span class="pre">pytypename()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.set_default_parser"><code class="docutils literal notranslate"><span class="pre">set_default_parser()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.set_pytype_attribute_tag"><code class="docutils literal notranslate"><span class="pre">set_pytype_attribute_tag()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.objectify.html#lxml.objectify.xsiannotate"><code class="docutils literal notranslate"><span class="pre">xsiannotate()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.sax.html">lxml.sax module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.sax.html#lxml.sax.SaxError"><code class="docutils literal notranslate"><span class="pre">SaxError</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.SaxError.add_note"><code class="docutils literal notranslate"><span class="pre">SaxError.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.SaxError.with_traceback"><code class="docutils literal notranslate"><span class="pre">SaxError.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.SaxError.args"><code class="docutils literal notranslate"><span class="pre">SaxError.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler._buildTag"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler._buildTag()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler._get_etree"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler._get_etree()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.characters"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.characters()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.endDocument"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.endDocument()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.endElement"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.endElement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.endElementNS"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.endElementNS()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.endPrefixMapping"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.endPrefixMapping()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.ignorableWhitespace"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.ignorableWhitespace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.processingInstruction"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.processingInstruction()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.setDocumentLocator"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.setDocumentLocator()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.skippedEntity"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.skippedEntity()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.startDocument"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.startDocument()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.startElement"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.startElement()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.startElementNS"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.startElementNS()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.startPrefixMapping"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.startPrefixMapping()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeContentHandler.etree"><code class="docutils literal notranslate"><span class="pre">ElementTreeContentHandler.etree</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeProducer"><code class="docutils literal notranslate"><span class="pre">ElementTreeProducer</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.sax.html#lxml.sax.ElementTreeProducer.saxify"><code class="docutils literal notranslate"><span class="pre">ElementTreeProducer.saxify()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.sax.html#lxml.sax.__pyx_unpickle_ElementTreeProducer"><code class="docutils literal notranslate"><span class="pre">__pyx_unpickle_ElementTreeProducer()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.sax.html#lxml.sax.saxify"><code class="docutils literal notranslate"><span class="pre">saxify()</span></code></a></li>
+</ul>
+</li>
 </ul>
 </div>
 </section>
index b3653da639354ba1f084c694e0c2da3fcfc549e0..4bb57f9c43c2da057c3668577ec3689f951d95bb 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.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>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+          <li class="breadcrumb-item"><a href="lxml.html.html">lxml.html package</a></li>
+      <li class="breadcrumb-item active">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>
index d1e015c65986e1e9e2d4dafb45b3e5877fb16c16..656b5944aaf8846ce8a4fad722e8bab782cc5d81 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.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>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+          <li class="breadcrumb-item"><a href="lxml.html.html">lxml.html package</a></li>
+      <li class="breadcrumb-item active">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>
index 192d180de80e4cbdb89ba26f122826181954286b..af5f7cbc8a1da43a78d1902ff3a93d268428ed35 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.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>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+          <li class="breadcrumb-item"><a href="lxml.html.html">lxml.html package</a></li>
+      <li class="breadcrumb-item active">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>
@@ -212,7 +216,8 @@ by the built-in frozenset type.</p>
 <dl class="py method">
 <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>
+<dd><p>Return self|value.</p>
+</dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html._setmixin.SetMixin.update">
index 9f398b7da4a1bbd4178c1bae327535a84bba5645..b9615b4eb854775df73162b484b9f520b86bc5f3 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.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>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+          <li class="breadcrumb-item"><a href="lxml.html.html">lxml.html package</a></li>
+      <li class="breadcrumb-item active">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>
index 56ca5f07cdad03968bc13e6b15687d4d487c148e..df245e39ace8501aa0964172920ef6ce5ee19c46 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.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>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+          <li class="breadcrumb-item"><a href="lxml.html.html">lxml.html package</a></li>
+      <li class="breadcrumb-item active">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>
@@ -206,10 +210,10 @@ more sneaky attempts.</p>
 <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>
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><p><strong>el</strong> – an element.</p>
 </dd>
-<dt class="field-even">Returns</dt>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
 <dd class="field-even"><p>true to accept the element or false to reject/discard it.</p>
 </dd>
 </dl>
@@ -221,13 +225,13 @@ more sneaky attempts.</p>
 <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">
-<dt class="field-odd">Parameters</dt>
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>el</strong> – an element.</p></li>
 <li><p><strong>url</strong> – a URL found on the element.</p></li>
 </ul>
 </dd>
-<dt class="field-even">Returns</dt>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
 <dd class="field-even"><p>true to accept the URL and false to reject it.</p>
 </dd>
 </dl>
index 287b751c7670de51cff670fd1c81751987c476d8..e895574eba151257dd9639fc91f8aee23511cb35 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.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>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+          <li class="breadcrumb-item"><a href="lxml.html.html">lxml.html package</a></li>
+      <li class="breadcrumb-item active">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>
index ef1a6f08a40bef74875f6386a72d594de565ff2f..6b00cbf45cf925596f412957efe6e2420a94fc19 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.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>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+          <li class="breadcrumb-item"><a href="lxml.html.html">lxml.html package</a></li>
+      <li class="breadcrumb-item active">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>
 <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>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.html.diff.NoDeletes.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.NoDeletes.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.diff.NoDeletes.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.NoDeletes.with_traceback" title="Permalink to this definition"></a></dt>
@@ -312,7 +323,7 @@ is faster to compute than either .ratio() or .quick_ratio().</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">s</span><span class="o">.</span><span class="n">set_seq1</span><span class="p">(</span><span class="s2">&quot;bcde&quot;</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">s</span><span class="o">.</span><span class="n">ratio</span><span class="p">()</span>
 <span class="go">1.0</span>
-<span class="go">&gt;&gt;&gt;</span>
+<span class="gp">&gt;&gt;&gt;</span>
 </pre></div>
 </div>
 <p>SequenceMatcher computes and caches detailed information about the
@@ -333,7 +344,7 @@ repeatedly for each of the other sequences.</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">s</span><span class="o">.</span><span class="n">set_seq2</span><span class="p">(</span><span class="s2">&quot;abcd&quot;</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">s</span><span class="o">.</span><span class="n">ratio</span><span class="p">()</span>
 <span class="go">1.0</span>
-<span class="go">&gt;&gt;&gt;</span>
+<span class="gp">&gt;&gt;&gt;</span>
 </pre></div>
 </div>
 <p>SequenceMatcher computes and caches detailed information about the
@@ -634,7 +645,7 @@ string.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.diff.href_token.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">old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new</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">-</span> <span class="pre">1</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.html.diff.href_token.replace" title="Permalink to this definition"></a></dt>
+<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">old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new</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">-1</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.html.diff.href_token.replace" title="Permalink to this definition"></a></dt>
 <dd><p>Return a copy with all occurrences of substring old replaced by new.</p>
 <blockquote>
 <div><dl class="simple">
@@ -685,20 +696,21 @@ and the original string.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.diff.href_token.rsplit">
-<span class="sig-name descname"><span class="pre">rsplit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.href_token.rsplit" title="Permalink to this definition"></a></dt>
-<dd><p>Return a list of the words in the string, using sep as the delimiter string.</p>
+<span class="sig-name descname"><span class="pre">rsplit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</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.html.diff.href_token.rsplit" title="Permalink to this definition"></a></dt>
+<dd><p>Return a list of the substrings in the string, using sep as the separator string.</p>
 <blockquote>
-<div><dl class="simple">
-<dt>sep</dt><dd><p>The delimiter according which to split the string.
-None (the default value) means split according to any whitespace,
-and discard empty strings from the result.</p>
+<div><dl>
+<dt>sep</dt><dd><p>The separator used to split the string.</p>
+<p>When set to None (the default value), will split on any whitespace
+character (including \n \r \t \f and spaces) and will discard
+empty strings from the result.</p>
 </dd>
-<dt>maxsplit</dt><dd><p>Maximum number of splits to do.
+<dt>maxsplit</dt><dd><p>Maximum number of splits (starting from the left).
 -1 (the default value) means no limit.</p>
 </dd>
 </dl>
 </div></blockquote>
-<p>Splits are done starting at the end of the string and working to the front.</p>
+<p>Splitting starts at the end of the string and works to the front.</p>
 </dd></dl>
 
 <dl class="py method">
@@ -710,17 +722,23 @@ and discard empty strings from the result.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.diff.href_token.split">
-<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.href_token.split" title="Permalink to this definition"></a></dt>
-<dd><p>Return a list of the words in the string, using sep as the delimiter string.</p>
-<dl class="simple">
-<dt>sep</dt><dd><p>The delimiter according which to split the string.
-None (the default value) means split according to any whitespace,
-and discard empty strings from the result.</p>
+<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</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.html.diff.href_token.split" title="Permalink to this definition"></a></dt>
+<dd><p>Return a list of the substrings in the string, using sep as the separator string.</p>
+<blockquote>
+<div><dl>
+<dt>sep</dt><dd><p>The separator used to split the string.</p>
+<p>When set to None (the default value), will split on any whitespace
+character (including \n \r \t \f and spaces) and will discard
+empty strings from the result.</p>
 </dd>
-<dt>maxsplit</dt><dd><p>Maximum number of splits to do.
+<dt>maxsplit</dt><dd><p>Maximum number of splits (starting from the left).
 -1 (the default value) means no limit.</p>
 </dd>
 </dl>
+</div></blockquote>
+<p>Note, str.split() is mainly useful for data that has been intentionally
+delimited.  With natural text that includes punctuation, consider using
+the regular expression module.</p>
 </dd></dl>
 
 <dl class="py method">
@@ -1070,7 +1088,7 @@ string.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.diff.tag_token.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">old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new</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">-</span> <span class="pre">1</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.html.diff.tag_token.replace" title="Permalink to this definition"></a></dt>
+<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">old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new</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">-1</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.html.diff.tag_token.replace" title="Permalink to this definition"></a></dt>
 <dd><p>Return a copy with all occurrences of substring old replaced by new.</p>
 <blockquote>
 <div><dl class="simple">
@@ -1121,20 +1139,21 @@ and the original string.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.diff.tag_token.rsplit">
-<span class="sig-name descname"><span class="pre">rsplit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.tag_token.rsplit" title="Permalink to this definition"></a></dt>
-<dd><p>Return a list of the words in the string, using sep as the delimiter string.</p>
+<span class="sig-name descname"><span class="pre">rsplit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</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.html.diff.tag_token.rsplit" title="Permalink to this definition"></a></dt>
+<dd><p>Return a list of the substrings in the string, using sep as the separator string.</p>
 <blockquote>
-<div><dl class="simple">
-<dt>sep</dt><dd><p>The delimiter according which to split the string.
-None (the default value) means split according to any whitespace,
-and discard empty strings from the result.</p>
+<div><dl>
+<dt>sep</dt><dd><p>The separator used to split the string.</p>
+<p>When set to None (the default value), will split on any whitespace
+character (including \n \r \t \f and spaces) and will discard
+empty strings from the result.</p>
 </dd>
-<dt>maxsplit</dt><dd><p>Maximum number of splits to do.
+<dt>maxsplit</dt><dd><p>Maximum number of splits (starting from the left).
 -1 (the default value) means no limit.</p>
 </dd>
 </dl>
 </div></blockquote>
-<p>Splits are done starting at the end of the string and working to the front.</p>
+<p>Splitting starts at the end of the string and works to the front.</p>
 </dd></dl>
 
 <dl class="py method">
@@ -1146,17 +1165,23 @@ and discard empty strings from the result.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.diff.tag_token.split">
-<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.tag_token.split" title="Permalink to this definition"></a></dt>
-<dd><p>Return a list of the words in the string, using sep as the delimiter string.</p>
-<dl class="simple">
-<dt>sep</dt><dd><p>The delimiter according which to split the string.
-None (the default value) means split according to any whitespace,
-and discard empty strings from the result.</p>
+<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</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.html.diff.tag_token.split" title="Permalink to this definition"></a></dt>
+<dd><p>Return a list of the substrings in the string, using sep as the separator string.</p>
+<blockquote>
+<div><dl>
+<dt>sep</dt><dd><p>The separator used to split the string.</p>
+<p>When set to None (the default value), will split on any whitespace
+character (including \n \r \t \f and spaces) and will discard
+empty strings from the result.</p>
 </dd>
-<dt>maxsplit</dt><dd><p>Maximum number of splits to do.
+<dt>maxsplit</dt><dd><p>Maximum number of splits (starting from the left).
 -1 (the default value) means no limit.</p>
 </dd>
 </dl>
+</div></blockquote>
+<p>Note, str.split() is mainly useful for data that has been intentionally
+delimited.  With natural text that includes punctuation, consider using
+the regular expression module.</p>
 </dd></dl>
 
 <dl class="py method">
@@ -1513,7 +1538,7 @@ string.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.diff.token.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">old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new</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">-</span> <span class="pre">1</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.html.diff.token.replace" title="Permalink to this definition"></a></dt>
+<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">old</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">new</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">-1</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.html.diff.token.replace" title="Permalink to this definition"></a></dt>
 <dd><p>Return a copy with all occurrences of substring old replaced by new.</p>
 <blockquote>
 <div><dl class="simple">
@@ -1564,20 +1589,21 @@ and the original string.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.diff.token.rsplit">
-<span class="sig-name descname"><span class="pre">rsplit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.token.rsplit" title="Permalink to this definition"></a></dt>
-<dd><p>Return a list of the words in the string, using sep as the delimiter string.</p>
+<span class="sig-name descname"><span class="pre">rsplit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</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.html.diff.token.rsplit" title="Permalink to this definition"></a></dt>
+<dd><p>Return a list of the substrings in the string, using sep as the separator string.</p>
 <blockquote>
-<div><dl class="simple">
-<dt>sep</dt><dd><p>The delimiter according which to split the string.
-None (the default value) means split according to any whitespace,
-and discard empty strings from the result.</p>
+<div><dl>
+<dt>sep</dt><dd><p>The separator used to split the string.</p>
+<p>When set to None (the default value), will split on any whitespace
+character (including \n \r \t \f and spaces) and will discard
+empty strings from the result.</p>
 </dd>
-<dt>maxsplit</dt><dd><p>Maximum number of splits to do.
+<dt>maxsplit</dt><dd><p>Maximum number of splits (starting from the left).
 -1 (the default value) means no limit.</p>
 </dd>
 </dl>
 </div></blockquote>
-<p>Splits are done starting at the end of the string and working to the front.</p>
+<p>Splitting starts at the end of the string and works to the front.</p>
 </dd></dl>
 
 <dl class="py method">
@@ -1589,17 +1615,23 @@ and discard empty strings from the result.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.diff.token.split">
-<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.diff.token.split" title="Permalink to this definition"></a></dt>
-<dd><p>Return a list of the words in the string, using sep as the delimiter string.</p>
-<dl class="simple">
-<dt>sep</dt><dd><p>The delimiter according which to split the string.
-None (the default value) means split according to any whitespace,
-and discard empty strings from the result.</p>
+<span class="sig-name descname"><span class="pre">split</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sep</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">maxsplit</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.html.diff.token.split" title="Permalink to this definition"></a></dt>
+<dd><p>Return a list of the substrings in the string, using sep as the separator string.</p>
+<blockquote>
+<div><dl>
+<dt>sep</dt><dd><p>The separator used to split the string.</p>
+<p>When set to None (the default value), will split on any whitespace
+character (including \n \r \t \f and spaces) and will discard
+empty strings from the result.</p>
 </dd>
-<dt>maxsplit</dt><dd><p>Maximum number of splits to do.
+<dt>maxsplit</dt><dd><p>Maximum number of splits (starting from the left).
 -1 (the default value) means no limit.</p>
 </dd>
 </dl>
+</div></blockquote>
+<p>Note, str.split() is mainly useful for data that has been intentionally
+delimited.  With natural text that includes punctuation, consider using
+the regular expression module.</p>
 </dd></dl>
 
 <dl class="py method">
index 03a4f82bd4a772d10be98e90a84b56e7e5745f7d..363e27ac69e1234fad14de8fc0cef5b085dc1113 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.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>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+          <li class="breadcrumb-item"><a href="lxml.html.html">lxml.html package</a></li>
+      <li class="breadcrumb-item active">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>
 <em class="property"><span class="pre">exception</span><span class="w"> </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>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.html.formfill.FormNotFound.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.formfill.FormNotFound.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.formfill.FormNotFound.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.formfill.FormNotFound.with_traceback" title="Permalink to this definition"></a></dt>
index bbde814fd29a3a364231108b03006207e4751a79..fd931c0d82e52b3ec7c1af6db0c0c19443b65d56 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.html package &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,9 +87,9 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+      <li class="breadcrumb-item active">lxml.html package</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml.html.rst.txt" rel="nofollow"> View page source</a>
       </li>
 <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._diffcommand.html">lxml.html._diffcommand module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="lxml.html._setmixin.html">lxml.html._setmixin module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="lxml.html.builder.html">lxml.html.builder module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="lxml.html.clean.html">lxml.html.clean module</a></li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.html._diffcommand.html">lxml.html._diffcommand module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html._diffcommand.html#lxml.html._diffcommand.annotate"><code class="docutils literal notranslate"><span class="pre">annotate()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html._diffcommand.html#lxml.html._diffcommand.main"><code class="docutils literal notranslate"><span class="pre">main()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html._diffcommand.html#lxml.html._diffcommand.read_file"><code class="docutils literal notranslate"><span class="pre">read_file()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html._diffcommand.html#lxml.html._diffcommand.split_body"><code class="docutils literal notranslate"><span class="pre">split_body()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.html._setmixin.html">lxml.html._setmixin module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin"><code class="docutils literal notranslate"><span class="pre">SetMixin</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin._from_iterable"><code class="docutils literal notranslate"><span class="pre">SetMixin._from_iterable()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin._hash"><code class="docutils literal notranslate"><span class="pre">SetMixin._hash()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.add"><code class="docutils literal notranslate"><span class="pre">SetMixin.add()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.clear"><code class="docutils literal notranslate"><span class="pre">SetMixin.clear()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.copy"><code class="docutils literal notranslate"><span class="pre">SetMixin.copy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.difference"><code class="docutils literal notranslate"><span class="pre">SetMixin.difference()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.difference_update"><code class="docutils literal notranslate"><span class="pre">SetMixin.difference_update()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.discard"><code class="docutils literal notranslate"><span class="pre">SetMixin.discard()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.intersection"><code class="docutils literal notranslate"><span class="pre">SetMixin.intersection()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.intersection_update"><code class="docutils literal notranslate"><span class="pre">SetMixin.intersection_update()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.isdisjoint"><code class="docutils literal notranslate"><span class="pre">SetMixin.isdisjoint()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.issubset"><code class="docutils literal notranslate"><span class="pre">SetMixin.issubset()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.issuperset"><code class="docutils literal notranslate"><span class="pre">SetMixin.issuperset()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.pop"><code class="docutils literal notranslate"><span class="pre">SetMixin.pop()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.remove"><code class="docutils literal notranslate"><span class="pre">SetMixin.remove()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.symmetric_difference"><code class="docutils literal notranslate"><span class="pre">SetMixin.symmetric_difference()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.symmetric_difference_update"><code class="docutils literal notranslate"><span class="pre">SetMixin.symmetric_difference_update()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.union"><code class="docutils literal notranslate"><span class="pre">SetMixin.union()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin.update"><code class="docutils literal notranslate"><span class="pre">SetMixin.update()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html._setmixin.html#lxml.html._setmixin.SetMixin._abc_impl"><code class="docutils literal notranslate"><span class="pre">SetMixin._abc_impl</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.html.builder.html">lxml.html.builder module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.CLASS"><code class="docutils literal notranslate"><span class="pre">CLASS()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FOR"><code class="docutils literal notranslate"><span class="pre">FOR()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.A"><code class="docutils literal notranslate"><span class="pre">A</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.ABBR"><code class="docutils literal notranslate"><span class="pre">ABBR</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.ACRONYM"><code class="docutils literal notranslate"><span class="pre">ACRONYM</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.ADDRESS"><code class="docutils literal notranslate"><span class="pre">ADDRESS</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.APPLET"><code class="docutils literal notranslate"><span class="pre">APPLET</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.AREA"><code class="docutils literal notranslate"><span class="pre">AREA</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.B"><code class="docutils literal notranslate"><span class="pre">B</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BASE"><code class="docutils literal notranslate"><span class="pre">BASE</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BASEFONT"><code class="docutils literal notranslate"><span class="pre">BASEFONT</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BDO"><code class="docutils literal notranslate"><span class="pre">BDO</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BIG"><code class="docutils literal notranslate"><span class="pre">BIG</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BLOCKQUOTE"><code class="docutils literal notranslate"><span class="pre">BLOCKQUOTE</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BODY"><code class="docutils literal notranslate"><span class="pre">BODY</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BR"><code class="docutils literal notranslate"><span class="pre">BR</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.BUTTON"><code class="docutils literal notranslate"><span class="pre">BUTTON</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.CAPTION"><code class="docutils literal notranslate"><span class="pre">CAPTION</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.CENTER"><code class="docutils literal notranslate"><span class="pre">CENTER</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.CITE"><code class="docutils literal notranslate"><span class="pre">CITE</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.CODE"><code class="docutils literal notranslate"><span class="pre">CODE</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.COL"><code class="docutils literal notranslate"><span class="pre">COL</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.COLGROUP"><code class="docutils literal notranslate"><span class="pre">COLGROUP</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DD"><code class="docutils literal notranslate"><span class="pre">DD</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DEL"><code class="docutils literal notranslate"><span class="pre">DEL</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DFN"><code class="docutils literal notranslate"><span class="pre">DFN</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DIR"><code class="docutils literal notranslate"><span class="pre">DIR</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DIV"><code class="docutils literal notranslate"><span class="pre">DIV</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DL"><code class="docutils literal notranslate"><span class="pre">DL</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.DT"><code class="docutils literal notranslate"><span class="pre">DT</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.EM"><code class="docutils literal notranslate"><span class="pre">EM</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FIELDSET"><code class="docutils literal notranslate"><span class="pre">FIELDSET</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FONT"><code class="docutils literal notranslate"><span class="pre">FONT</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FORM"><code class="docutils literal notranslate"><span class="pre">FORM</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FRAME"><code class="docutils literal notranslate"><span class="pre">FRAME</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.FRAMESET"><code class="docutils literal notranslate"><span class="pre">FRAMESET</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H1"><code class="docutils literal notranslate"><span class="pre">H1</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H2"><code class="docutils literal notranslate"><span class="pre">H2</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H3"><code class="docutils literal notranslate"><span class="pre">H3</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H4"><code class="docutils literal notranslate"><span class="pre">H4</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H5"><code class="docutils literal notranslate"><span class="pre">H5</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.H6"><code class="docutils literal notranslate"><span class="pre">H6</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.HEAD"><code class="docutils literal notranslate"><span class="pre">HEAD</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.HR"><code class="docutils literal notranslate"><span class="pre">HR</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.HTML"><code class="docutils literal notranslate"><span class="pre">HTML</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.I"><code class="docutils literal notranslate"><span class="pre">I</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.IFRAME"><code class="docutils literal notranslate"><span class="pre">IFRAME</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.IMG"><code class="docutils literal notranslate"><span class="pre">IMG</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.INPUT"><code class="docutils literal notranslate"><span class="pre">INPUT</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.INS"><code class="docutils literal notranslate"><span class="pre">INS</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.ISINDEX"><code class="docutils literal notranslate"><span class="pre">ISINDEX</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.KBD"><code class="docutils literal notranslate"><span class="pre">KBD</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.LABEL"><code class="docutils literal notranslate"><span class="pre">LABEL</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.LEGEND"><code class="docutils literal notranslate"><span class="pre">LEGEND</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.LI"><code class="docutils literal notranslate"><span class="pre">LI</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.LINK"><code class="docutils literal notranslate"><span class="pre">LINK</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.MAP"><code class="docutils literal notranslate"><span class="pre">MAP</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.MENU"><code class="docutils literal notranslate"><span class="pre">MENU</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.META"><code class="docutils literal notranslate"><span class="pre">META</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.NOFRAMES"><code class="docutils literal notranslate"><span class="pre">NOFRAMES</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.NOSCRIPT"><code class="docutils literal notranslate"><span class="pre">NOSCRIPT</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.OBJECT"><code class="docutils literal notranslate"><span class="pre">OBJECT</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.OL"><code class="docutils literal notranslate"><span class="pre">OL</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.OPTGROUP"><code class="docutils literal notranslate"><span class="pre">OPTGROUP</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.OPTION"><code class="docutils literal notranslate"><span class="pre">OPTION</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.P"><code class="docutils literal notranslate"><span class="pre">P</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.PARAM"><code class="docutils literal notranslate"><span class="pre">PARAM</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.PRE"><code class="docutils literal notranslate"><span class="pre">PRE</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.Q"><code class="docutils literal notranslate"><span class="pre">Q</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.S"><code class="docutils literal notranslate"><span class="pre">S</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SAMP"><code class="docutils literal notranslate"><span class="pre">SAMP</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SCRIPT"><code class="docutils literal notranslate"><span class="pre">SCRIPT</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SELECT"><code class="docutils literal notranslate"><span class="pre">SELECT</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SMALL"><code class="docutils literal notranslate"><span class="pre">SMALL</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SPAN"><code class="docutils literal notranslate"><span class="pre">SPAN</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.STRIKE"><code class="docutils literal notranslate"><span class="pre">STRIKE</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.STRONG"><code class="docutils literal notranslate"><span class="pre">STRONG</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.STYLE"><code class="docutils literal notranslate"><span class="pre">STYLE</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SUB"><code class="docutils literal notranslate"><span class="pre">SUB</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.SUP"><code class="docutils literal notranslate"><span class="pre">SUP</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TABLE"><code class="docutils literal notranslate"><span class="pre">TABLE</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TBODY"><code class="docutils literal notranslate"><span class="pre">TBODY</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TD"><code class="docutils literal notranslate"><span class="pre">TD</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TEXTAREA"><code class="docutils literal notranslate"><span class="pre">TEXTAREA</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TFOOT"><code class="docutils literal notranslate"><span class="pre">TFOOT</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TH"><code class="docutils literal notranslate"><span class="pre">TH</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.THEAD"><code class="docutils literal notranslate"><span class="pre">THEAD</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TITLE"><code class="docutils literal notranslate"><span class="pre">TITLE</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TR"><code class="docutils literal notranslate"><span class="pre">TR</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.TT"><code class="docutils literal notranslate"><span class="pre">TT</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.U"><code class="docutils literal notranslate"><span class="pre">U</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.UL"><code class="docutils literal notranslate"><span class="pre">UL</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.builder.html#lxml.html.builder.VAR"><code class="docutils literal notranslate"><span class="pre">VAR</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.html.clean.html">lxml.html.clean module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner"><code class="docutils literal notranslate"><span class="pre">Cleaner</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner._has_sneaky_javascript"><code class="docutils literal notranslate"><span class="pre">Cleaner._has_sneaky_javascript()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner._kill_elements"><code class="docutils literal notranslate"><span class="pre">Cleaner._kill_elements()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner._remove_javascript_link"><code class="docutils literal notranslate"><span class="pre">Cleaner._remove_javascript_link()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner._substitute_comments"><code class="docutils literal notranslate"><span class="pre">Cleaner._substitute_comments()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.allow_element"><code class="docutils literal notranslate"><span class="pre">Cleaner.allow_element()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.allow_embedded_url"><code class="docutils literal notranslate"><span class="pre">Cleaner.allow_embedded_url()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.allow_follow"><code class="docutils literal notranslate"><span class="pre">Cleaner.allow_follow()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.clean_html"><code class="docutils literal notranslate"><span class="pre">Cleaner.clean_html()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.kill_conditional_comments"><code class="docutils literal notranslate"><span class="pre">Cleaner.kill_conditional_comments()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner._tag_link_attrs"><code class="docutils literal notranslate"><span class="pre">Cleaner._tag_link_attrs</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.add_nofollow"><code class="docutils literal notranslate"><span class="pre">Cleaner.add_nofollow</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.allow_tags"><code class="docutils literal notranslate"><span class="pre">Cleaner.allow_tags</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.annoying_tags"><code class="docutils literal notranslate"><span class="pre">Cleaner.annoying_tags</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.comments"><code class="docutils literal notranslate"><span class="pre">Cleaner.comments</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.embedded"><code class="docutils literal notranslate"><span class="pre">Cleaner.embedded</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.forms"><code class="docutils literal notranslate"><span class="pre">Cleaner.forms</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.frames"><code class="docutils literal notranslate"><span class="pre">Cleaner.frames</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.host_whitelist"><code class="docutils literal notranslate"><span class="pre">Cleaner.host_whitelist</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.inline_style"><code class="docutils literal notranslate"><span class="pre">Cleaner.inline_style</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.javascript"><code class="docutils literal notranslate"><span class="pre">Cleaner.javascript</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.kill_tags"><code class="docutils literal notranslate"><span class="pre">Cleaner.kill_tags</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.links"><code class="docutils literal notranslate"><span class="pre">Cleaner.links</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.meta"><code class="docutils literal notranslate"><span class="pre">Cleaner.meta</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.page_structure"><code class="docutils literal notranslate"><span class="pre">Cleaner.page_structure</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.processing_instructions"><code class="docutils literal notranslate"><span class="pre">Cleaner.processing_instructions</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.remove_tags"><code class="docutils literal notranslate"><span class="pre">Cleaner.remove_tags</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.remove_unknown_tags"><code class="docutils literal notranslate"><span class="pre">Cleaner.remove_unknown_tags</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.safe_attrs"><code class="docutils literal notranslate"><span class="pre">Cleaner.safe_attrs</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.safe_attrs_only"><code class="docutils literal notranslate"><span class="pre">Cleaner.safe_attrs_only</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.scripts"><code class="docutils literal notranslate"><span class="pre">Cleaner.scripts</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.style"><code class="docutils literal notranslate"><span class="pre">Cleaner.style</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.Cleaner.whitelist_tags"><code class="docutils literal notranslate"><span class="pre">Cleaner.whitelist_tags</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._break_text"><code class="docutils literal notranslate"><span class="pre">_break_text()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._find_image_dataurls"><code class="docutils literal notranslate"><span class="pre">_find_image_dataurls()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._has_javascript_scheme"><code class="docutils literal notranslate"><span class="pre">_has_javascript_scheme()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._insert_break"><code class="docutils literal notranslate"><span class="pre">_insert_break()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._is_unsafe_image_type"><code class="docutils literal notranslate"><span class="pre">_is_unsafe_image_type()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._link_text"><code class="docutils literal notranslate"><span class="pre">_link_text()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._looks_like_tag_content"><code class="docutils literal notranslate"><span class="pre">_looks_like_tag_content()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._possibly_malicious_schemes"><code class="docutils literal notranslate"><span class="pre">_possibly_malicious_schemes()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._replace_css_import"><code class="docutils literal notranslate"><span class="pre">_replace_css_import()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._replace_css_javascript"><code class="docutils literal notranslate"><span class="pre">_replace_css_javascript()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean._substitute_whitespace"><code class="docutils literal notranslate"><span class="pre">_substitute_whitespace()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.autolink"><code class="docutils literal notranslate"><span class="pre">autolink()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.autolink_html"><code class="docutils literal notranslate"><span class="pre">autolink_html()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.clean_html"><code class="docutils literal notranslate"><span class="pre">clean_html()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.word_break"><code class="docutils literal notranslate"><span class="pre">word_break()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.clean.html#lxml.html.clean.word_break_html"><code class="docutils literal notranslate"><span class="pre">word_break_html()</span></code></a></li>
+</ul>
+</li>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html.defs.html">lxml.html.defs module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="lxml.html.diff.html">lxml.html.diff module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="lxml.html.formfill.html">lxml.html.formfill module</a></li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.html.diff.html">lxml.html.diff module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.NoDeletes"><code class="docutils literal notranslate"><span class="pre">NoDeletes</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.NoDeletes.add_note"><code class="docutils literal notranslate"><span class="pre">NoDeletes.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.NoDeletes.with_traceback"><code class="docutils literal notranslate"><span class="pre">NoDeletes.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.NoDeletes.args"><code class="docutils literal notranslate"><span class="pre">NoDeletes.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.DEL_END"><code class="docutils literal notranslate"><span class="pre">DEL_END</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.DEL_START"><code class="docutils literal notranslate"><span class="pre">DEL_START</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.find_longest_match"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.find_longest_match()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.get_grouped_opcodes"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.get_grouped_opcodes()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.get_matching_blocks"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.get_matching_blocks()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.get_opcodes"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.get_opcodes()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.quick_ratio"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.quick_ratio()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.ratio"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.ratio()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.real_quick_ratio"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.real_quick_ratio()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.set_seq1"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.set_seq1()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.set_seq2"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.set_seq2()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.set_seqs"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.set_seqs()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.InsensitiveSequenceMatcher.threshold"><code class="docutils literal notranslate"><span class="pre">InsensitiveSequenceMatcher.threshold</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token"><code class="docutils literal notranslate"><span class="pre">href_token</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.capitalize"><code class="docutils literal notranslate"><span class="pre">href_token.capitalize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.casefold"><code class="docutils literal notranslate"><span class="pre">href_token.casefold()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.center"><code class="docutils literal notranslate"><span class="pre">href_token.center()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.count"><code class="docutils literal notranslate"><span class="pre">href_token.count()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.encode"><code class="docutils literal notranslate"><span class="pre">href_token.encode()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.endswith"><code class="docutils literal notranslate"><span class="pre">href_token.endswith()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.expandtabs"><code class="docutils literal notranslate"><span class="pre">href_token.expandtabs()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.find"><code class="docutils literal notranslate"><span class="pre">href_token.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.format"><code class="docutils literal notranslate"><span class="pre">href_token.format()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.format_map"><code class="docutils literal notranslate"><span class="pre">href_token.format_map()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.html"><code class="docutils literal notranslate"><span class="pre">href_token.html()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.index"><code class="docutils literal notranslate"><span class="pre">href_token.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.isalnum"><code class="docutils literal notranslate"><span class="pre">href_token.isalnum()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.isalpha"><code class="docutils literal notranslate"><span class="pre">href_token.isalpha()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.isascii"><code class="docutils literal notranslate"><span class="pre">href_token.isascii()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.isdecimal"><code class="docutils literal notranslate"><span class="pre">href_token.isdecimal()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.isdigit"><code class="docutils literal notranslate"><span class="pre">href_token.isdigit()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.isidentifier"><code class="docutils literal notranslate"><span class="pre">href_token.isidentifier()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.islower"><code class="docutils literal notranslate"><span class="pre">href_token.islower()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.isnumeric"><code class="docutils literal notranslate"><span class="pre">href_token.isnumeric()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.isprintable"><code class="docutils literal notranslate"><span class="pre">href_token.isprintable()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.isspace"><code class="docutils literal notranslate"><span class="pre">href_token.isspace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.istitle"><code class="docutils literal notranslate"><span class="pre">href_token.istitle()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.isupper"><code class="docutils literal notranslate"><span class="pre">href_token.isupper()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.join"><code class="docutils literal notranslate"><span class="pre">href_token.join()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.ljust"><code class="docutils literal notranslate"><span class="pre">href_token.ljust()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.lower"><code class="docutils literal notranslate"><span class="pre">href_token.lower()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.lstrip"><code class="docutils literal notranslate"><span class="pre">href_token.lstrip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.maketrans"><code class="docutils literal notranslate"><span class="pre">href_token.maketrans()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.partition"><code class="docutils literal notranslate"><span class="pre">href_token.partition()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.removeprefix"><code class="docutils literal notranslate"><span class="pre">href_token.removeprefix()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.removesuffix"><code class="docutils literal notranslate"><span class="pre">href_token.removesuffix()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.replace"><code class="docutils literal notranslate"><span class="pre">href_token.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.rfind"><code class="docutils literal notranslate"><span class="pre">href_token.rfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.rindex"><code class="docutils literal notranslate"><span class="pre">href_token.rindex()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.rjust"><code class="docutils literal notranslate"><span class="pre">href_token.rjust()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.rpartition"><code class="docutils literal notranslate"><span class="pre">href_token.rpartition()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.rsplit"><code class="docutils literal notranslate"><span class="pre">href_token.rsplit()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.rstrip"><code class="docutils literal notranslate"><span class="pre">href_token.rstrip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.split"><code class="docutils literal notranslate"><span class="pre">href_token.split()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.splitlines"><code class="docutils literal notranslate"><span class="pre">href_token.splitlines()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.startswith"><code class="docutils literal notranslate"><span class="pre">href_token.startswith()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.strip"><code class="docutils literal notranslate"><span class="pre">href_token.strip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.swapcase"><code class="docutils literal notranslate"><span class="pre">href_token.swapcase()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.title"><code class="docutils literal notranslate"><span class="pre">href_token.title()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.translate"><code class="docutils literal notranslate"><span class="pre">href_token.translate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.upper"><code class="docutils literal notranslate"><span class="pre">href_token.upper()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.zfill"><code class="docutils literal notranslate"><span class="pre">href_token.zfill()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.href_token.hide_when_equal"><code class="docutils literal notranslate"><span class="pre">href_token.hide_when_equal</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token"><code class="docutils literal notranslate"><span class="pre">tag_token</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.capitalize"><code class="docutils literal notranslate"><span class="pre">tag_token.capitalize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.casefold"><code class="docutils literal notranslate"><span class="pre">tag_token.casefold()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.center"><code class="docutils literal notranslate"><span class="pre">tag_token.center()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.count"><code class="docutils literal notranslate"><span class="pre">tag_token.count()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.encode"><code class="docutils literal notranslate"><span class="pre">tag_token.encode()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.endswith"><code class="docutils literal notranslate"><span class="pre">tag_token.endswith()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.expandtabs"><code class="docutils literal notranslate"><span class="pre">tag_token.expandtabs()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.find"><code class="docutils literal notranslate"><span class="pre">tag_token.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.format"><code class="docutils literal notranslate"><span class="pre">tag_token.format()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.format_map"><code class="docutils literal notranslate"><span class="pre">tag_token.format_map()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.html"><code class="docutils literal notranslate"><span class="pre">tag_token.html()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.index"><code class="docutils literal notranslate"><span class="pre">tag_token.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.isalnum"><code class="docutils literal notranslate"><span class="pre">tag_token.isalnum()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.isalpha"><code class="docutils literal notranslate"><span class="pre">tag_token.isalpha()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.isascii"><code class="docutils literal notranslate"><span class="pre">tag_token.isascii()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.isdecimal"><code class="docutils literal notranslate"><span class="pre">tag_token.isdecimal()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.isdigit"><code class="docutils literal notranslate"><span class="pre">tag_token.isdigit()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.isidentifier"><code class="docutils literal notranslate"><span class="pre">tag_token.isidentifier()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.islower"><code class="docutils literal notranslate"><span class="pre">tag_token.islower()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.isnumeric"><code class="docutils literal notranslate"><span class="pre">tag_token.isnumeric()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.isprintable"><code class="docutils literal notranslate"><span class="pre">tag_token.isprintable()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.isspace"><code class="docutils literal notranslate"><span class="pre">tag_token.isspace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.istitle"><code class="docutils literal notranslate"><span class="pre">tag_token.istitle()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.isupper"><code class="docutils literal notranslate"><span class="pre">tag_token.isupper()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.join"><code class="docutils literal notranslate"><span class="pre">tag_token.join()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.ljust"><code class="docutils literal notranslate"><span class="pre">tag_token.ljust()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.lower"><code class="docutils literal notranslate"><span class="pre">tag_token.lower()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.lstrip"><code class="docutils literal notranslate"><span class="pre">tag_token.lstrip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.maketrans"><code class="docutils literal notranslate"><span class="pre">tag_token.maketrans()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.partition"><code class="docutils literal notranslate"><span class="pre">tag_token.partition()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.removeprefix"><code class="docutils literal notranslate"><span class="pre">tag_token.removeprefix()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.removesuffix"><code class="docutils literal notranslate"><span class="pre">tag_token.removesuffix()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.replace"><code class="docutils literal notranslate"><span class="pre">tag_token.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.rfind"><code class="docutils literal notranslate"><span class="pre">tag_token.rfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.rindex"><code class="docutils literal notranslate"><span class="pre">tag_token.rindex()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.rjust"><code class="docutils literal notranslate"><span class="pre">tag_token.rjust()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.rpartition"><code class="docutils literal notranslate"><span class="pre">tag_token.rpartition()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.rsplit"><code class="docutils literal notranslate"><span class="pre">tag_token.rsplit()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.rstrip"><code class="docutils literal notranslate"><span class="pre">tag_token.rstrip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.split"><code class="docutils literal notranslate"><span class="pre">tag_token.split()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.splitlines"><code class="docutils literal notranslate"><span class="pre">tag_token.splitlines()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.startswith"><code class="docutils literal notranslate"><span class="pre">tag_token.startswith()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.strip"><code class="docutils literal notranslate"><span class="pre">tag_token.strip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.swapcase"><code class="docutils literal notranslate"><span class="pre">tag_token.swapcase()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.title"><code class="docutils literal notranslate"><span class="pre">tag_token.title()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.translate"><code class="docutils literal notranslate"><span class="pre">tag_token.translate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.upper"><code class="docutils literal notranslate"><span class="pre">tag_token.upper()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.zfill"><code class="docutils literal notranslate"><span class="pre">tag_token.zfill()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tag_token.hide_when_equal"><code class="docutils literal notranslate"><span class="pre">tag_token.hide_when_equal</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token"><code class="docutils literal notranslate"><span class="pre">token</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.capitalize"><code class="docutils literal notranslate"><span class="pre">token.capitalize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.casefold"><code class="docutils literal notranslate"><span class="pre">token.casefold()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.center"><code class="docutils literal notranslate"><span class="pre">token.center()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.count"><code class="docutils literal notranslate"><span class="pre">token.count()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.encode"><code class="docutils literal notranslate"><span class="pre">token.encode()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.endswith"><code class="docutils literal notranslate"><span class="pre">token.endswith()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.expandtabs"><code class="docutils literal notranslate"><span class="pre">token.expandtabs()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.find"><code class="docutils literal notranslate"><span class="pre">token.find()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.format"><code class="docutils literal notranslate"><span class="pre">token.format()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.format_map"><code class="docutils literal notranslate"><span class="pre">token.format_map()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.html"><code class="docutils literal notranslate"><span class="pre">token.html()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.index"><code class="docutils literal notranslate"><span class="pre">token.index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.isalnum"><code class="docutils literal notranslate"><span class="pre">token.isalnum()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.isalpha"><code class="docutils literal notranslate"><span class="pre">token.isalpha()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.isascii"><code class="docutils literal notranslate"><span class="pre">token.isascii()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.isdecimal"><code class="docutils literal notranslate"><span class="pre">token.isdecimal()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.isdigit"><code class="docutils literal notranslate"><span class="pre">token.isdigit()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.isidentifier"><code class="docutils literal notranslate"><span class="pre">token.isidentifier()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.islower"><code class="docutils literal notranslate"><span class="pre">token.islower()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.isnumeric"><code class="docutils literal notranslate"><span class="pre">token.isnumeric()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.isprintable"><code class="docutils literal notranslate"><span class="pre">token.isprintable()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.isspace"><code class="docutils literal notranslate"><span class="pre">token.isspace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.istitle"><code class="docutils literal notranslate"><span class="pre">token.istitle()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.isupper"><code class="docutils literal notranslate"><span class="pre">token.isupper()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.join"><code class="docutils literal notranslate"><span class="pre">token.join()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.ljust"><code class="docutils literal notranslate"><span class="pre">token.ljust()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.lower"><code class="docutils literal notranslate"><span class="pre">token.lower()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.lstrip"><code class="docutils literal notranslate"><span class="pre">token.lstrip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.maketrans"><code class="docutils literal notranslate"><span class="pre">token.maketrans()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.partition"><code class="docutils literal notranslate"><span class="pre">token.partition()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.removeprefix"><code class="docutils literal notranslate"><span class="pre">token.removeprefix()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.removesuffix"><code class="docutils literal notranslate"><span class="pre">token.removesuffix()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.replace"><code class="docutils literal notranslate"><span class="pre">token.replace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.rfind"><code class="docutils literal notranslate"><span class="pre">token.rfind()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.rindex"><code class="docutils literal notranslate"><span class="pre">token.rindex()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.rjust"><code class="docutils literal notranslate"><span class="pre">token.rjust()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.rpartition"><code class="docutils literal notranslate"><span class="pre">token.rpartition()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.rsplit"><code class="docutils literal notranslate"><span class="pre">token.rsplit()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.rstrip"><code class="docutils literal notranslate"><span class="pre">token.rstrip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.split"><code class="docutils literal notranslate"><span class="pre">token.split()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.splitlines"><code class="docutils literal notranslate"><span class="pre">token.splitlines()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.startswith"><code class="docutils literal notranslate"><span class="pre">token.startswith()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.strip"><code class="docutils literal notranslate"><span class="pre">token.strip()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.swapcase"><code class="docutils literal notranslate"><span class="pre">token.swapcase()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.title"><code class="docutils literal notranslate"><span class="pre">token.title()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.translate"><code class="docutils literal notranslate"><span class="pre">token.translate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.upper"><code class="docutils literal notranslate"><span class="pre">token.upper()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.zfill"><code class="docutils literal notranslate"><span class="pre">token.zfill()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.token.hide_when_equal"><code class="docutils literal notranslate"><span class="pre">token.hide_when_equal</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff._contains_block_level_tag"><code class="docutils literal notranslate"><span class="pre">_contains_block_level_tag()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff._fixup_ins_del_tags"><code class="docutils literal notranslate"><span class="pre">_fixup_ins_del_tags()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff._merge_element_contents"><code class="docutils literal notranslate"><span class="pre">_merge_element_contents()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff._move_el_inside_block"><code class="docutils literal notranslate"><span class="pre">_move_el_inside_block()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.cleanup_delete"><code class="docutils literal notranslate"><span class="pre">cleanup_delete()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.cleanup_html"><code class="docutils literal notranslate"><span class="pre">cleanup_html()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.compress_merge_back"><code class="docutils literal notranslate"><span class="pre">compress_merge_back()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.compress_tokens"><code class="docutils literal notranslate"><span class="pre">compress_tokens()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.copy_annotations"><code class="docutils literal notranslate"><span class="pre">copy_annotations()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.default_markup"><code class="docutils literal notranslate"><span class="pre">default_markup()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.end_tag"><code class="docutils literal notranslate"><span class="pre">end_tag()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.expand_tokens"><code class="docutils literal notranslate"><span class="pre">expand_tokens()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.fixup_chunks"><code class="docutils literal notranslate"><span class="pre">fixup_chunks()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.fixup_ins_del_tags"><code class="docutils literal notranslate"><span class="pre">fixup_ins_del_tags()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.flatten_el"><code class="docutils literal notranslate"><span class="pre">flatten_el()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.html_annotate"><code class="docutils literal notranslate"><span class="pre">html_annotate()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.html_annotate_merge_annotations"><code class="docutils literal notranslate"><span class="pre">html_annotate_merge_annotations()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.htmldiff"><code class="docutils literal notranslate"><span class="pre">htmldiff()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.htmldiff_tokens"><code class="docutils literal notranslate"><span class="pre">htmldiff_tokens()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.is_end_tag"><code class="docutils literal notranslate"><span class="pre">is_end_tag()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.is_start_tag"><code class="docutils literal notranslate"><span class="pre">is_start_tag()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.is_word"><code class="docutils literal notranslate"><span class="pre">is_word()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.locate_unbalanced_end"><code class="docutils literal notranslate"><span class="pre">locate_unbalanced_end()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.locate_unbalanced_start"><code class="docutils literal notranslate"><span class="pre">locate_unbalanced_start()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.markup_serialize_tokens"><code class="docutils literal notranslate"><span class="pre">markup_serialize_tokens()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.merge_delete"><code class="docutils literal notranslate"><span class="pre">merge_delete()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.merge_insert"><code class="docutils literal notranslate"><span class="pre">merge_insert()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.parse_html"><code class="docutils literal notranslate"><span class="pre">parse_html()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.serialize_html_fragment"><code class="docutils literal notranslate"><span class="pre">serialize_html_fragment()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.split_delete"><code class="docutils literal notranslate"><span class="pre">split_delete()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.split_trailing_whitespace"><code class="docutils literal notranslate"><span class="pre">split_trailing_whitespace()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.split_unbalanced"><code class="docutils literal notranslate"><span class="pre">split_unbalanced()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.split_words"><code class="docutils literal notranslate"><span class="pre">split_words()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.start_tag"><code class="docutils literal notranslate"><span class="pre">start_tag()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tokenize"><code class="docutils literal notranslate"><span class="pre">tokenize()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.diff.html#lxml.html.diff.tokenize_annotated"><code class="docutils literal notranslate"><span class="pre">tokenize_annotated()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="lxml.html.formfill.html">lxml.html.formfill module</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.FormNotFound"><code class="docutils literal notranslate"><span class="pre">FormNotFound</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.FormNotFound.add_note"><code class="docutils literal notranslate"><span class="pre">FormNotFound.add_note()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.FormNotFound.with_traceback"><code class="docutils literal notranslate"><span class="pre">FormNotFound.with_traceback()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.FormNotFound.args"><code class="docutils literal notranslate"><span class="pre">FormNotFound.args</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.DefaultErrorCreator"><code class="docutils literal notranslate"><span class="pre">DefaultErrorCreator</span></code></a><ul>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.DefaultErrorCreator.block_inside"><code class="docutils literal notranslate"><span class="pre">DefaultErrorCreator.block_inside</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.DefaultErrorCreator.default_message"><code class="docutils literal notranslate"><span class="pre">DefaultErrorCreator.default_message</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.DefaultErrorCreator.error_block_class"><code class="docutils literal notranslate"><span class="pre">DefaultErrorCreator.error_block_class</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.DefaultErrorCreator.error_container_tag"><code class="docutils literal notranslate"><span class="pre">DefaultErrorCreator.error_container_tag</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.DefaultErrorCreator.error_message_class"><code class="docutils literal notranslate"><span class="pre">DefaultErrorCreator.error_message_class</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.DefaultErrorCreator.insert_before"><code class="docutils literal notranslate"><span class="pre">DefaultErrorCreator.insert_before</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._add_class"><code class="docutils literal notranslate"><span class="pre">_add_class()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._check"><code class="docutils literal notranslate"><span class="pre">_check()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._fill_form"><code class="docutils literal notranslate"><span class="pre">_fill_form()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._fill_multiple"><code class="docutils literal notranslate"><span class="pre">_fill_multiple()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._fill_single"><code class="docutils literal notranslate"><span class="pre">_fill_single()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._find_elements_for_name"><code class="docutils literal notranslate"><span class="pre">_find_elements_for_name()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._find_form"><code class="docutils literal notranslate"><span class="pre">_find_form()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._find_form_ids"><code class="docutils literal notranslate"><span class="pre">_find_form_ids()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._insert_error"><code class="docutils literal notranslate"><span class="pre">_insert_error()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._select"><code class="docutils literal notranslate"><span class="pre">_select()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill._takes_multiple"><code class="docutils literal notranslate"><span class="pre">_takes_multiple()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.fill_form"><code class="docutils literal notranslate"><span class="pre">fill_form()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.fill_form_html"><code class="docutils literal notranslate"><span class="pre">fill_form_html()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.insert_errors"><code class="docutils literal notranslate"><span class="pre">insert_errors()</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal" href="lxml.html.formfill.html#lxml.html.formfill.insert_errors_html"><code class="docutils literal notranslate"><span class="pre">insert_errors_html()</span></code></a></li>
+</ul>
+</li>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html.html5parser.html">lxml.html.html5parser module</a></li>
 <li class="toctree-l1"><a class="reference internal" href="lxml.html.soupparser.html">lxml.html.soupparser module</a></li>
 </ul>
@@ -172,7 +603,7 @@ to get the possible values.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.CheckboxGroup.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">index</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</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.html.CheckboxGroup.pop" title="Permalink to this definition"></a></dt>
+<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">index</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-1</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.html.CheckboxGroup.pop" title="Permalink to this definition"></a></dt>
 <dd><p>Remove and return item at index (default last).</p>
 <p>Raises IndexError if list is empty or index is out of range.</p>
 </dd></dl>
@@ -331,7 +762,8 @@ by the built-in frozenset type.</p>
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.CheckboxValues.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.CheckboxValues.union" title="Permalink to this definition"></a></dt>
-<dd></dd></dl>
+<dd><p>Return self|value.</p>
+</dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.CheckboxValues.update">
@@ -668,7 +1100,7 @@ the same.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -685,7 +1117,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -1115,7 +1547,7 @@ the <code class="docutils literal notranslate"><span class="pre">parse()</span><
 <dt class="sig sig-object py" id="lxml.html.HTMLParser.setElementClassLookup">
 <span class="sig-name descname"><span class="pre">setElementClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">lookup</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.HTMLParser.setElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>use <code class="docutils literal notranslate"><span class="pre">parser.set_element_class_lookup(lookup)</span></code> instead.</p>
 </dd>
 </dl>
@@ -1305,7 +1737,7 @@ the same.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -1322,7 +1754,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -1808,7 +2240,7 @@ the same.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -1825,7 +2257,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -2354,7 +2786,7 @@ the same.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -2371,7 +2803,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -3042,7 +3474,7 @@ the same.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -3059,7 +3491,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -3561,7 +3993,7 @@ the same.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -3578,7 +4010,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -3984,7 +4416,7 @@ checkboxes and radio elements are returned individually.</p>
 <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>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
 <dd class="field-odd"><p>A list of (name, field) tuples.</p>
 </dd>
 </dl>
@@ -3995,7 +4427,7 @@ checkboxes and radio elements are returned individually.</p>
 <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>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
 <dd class="field-odd"><p>A list of all unique field names.</p>
 </dd>
 </dl>
@@ -4165,7 +4597,7 @@ the same.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -4182,7 +4614,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -4657,7 +5089,8 @@ by the built-in frozenset type.</p>
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.MultipleSelectOptions.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.MultipleSelectOptions.union" title="Permalink to this definition"></a></dt>
-<dd></dd></dl>
+<dd><p>Return self|value.</p>
+</dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.MultipleSelectOptions.update">
@@ -4731,7 +5164,7 @@ that have the same name.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.html.RadioGroup.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">index</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</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.html.RadioGroup.pop" title="Permalink to this definition"></a></dt>
+<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">index</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-1</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.html.RadioGroup.pop" title="Permalink to this definition"></a></dt>
 <dd><p>Remove and return item at index (default last).</p>
 <p>Raises IndexError if list is empty or index is out of range.</p>
 </dd></dl>
@@ -4928,7 +5361,7 @@ the same.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -4945,7 +5378,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -5472,7 +5905,7 @@ the same.</p>
 <dd><p>Returns all direct children.  The elements are returned in document
 order.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method has been deprecated as of
 ElementTree 1.3 and lxml 2.0.  New code should use
 <code class="docutils literal notranslate"><span class="pre">list(element)</span></code> or simply iterate over elements.</p>
@@ -5489,7 +5922,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -5915,7 +6348,7 @@ the <code class="docutils literal notranslate"><span class="pre">parse()</span><
 <dt class="sig sig-object py" id="lxml.html.XHTMLParser.setElementClassLookup">
 <span class="sig-name descname"><span class="pre">setElementClassLookup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">lookup</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#lxml.html.XHTMLParser.setElementClassLookup" title="Permalink to this definition"></a></dt>
 <dd><dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>use <code class="docutils literal notranslate"><span class="pre">parser.set_element_class_lookup(lookup)</span></code> instead.</p>
 </dd>
 </dl>
index 20c6649a42af454dc229280e7d9eb4af56dedf5f..6a7a35d03eb2dab29eb1b65ab5464d5bc6608735 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.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>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+          <li class="breadcrumb-item"><a href="lxml.html.html">lxml.html package</a></li>
+      <li class="breadcrumb-item active">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>
index 6ebfc9454d95d92b83c277ac60c92e3a86126477..1eccd0492455794681325314ad7801cda874b917 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.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>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+          <li class="breadcrumb-item"><a href="lxml.html.html">lxml.html package</a></li>
+      <li class="breadcrumb-item active">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>
index 99c4ba30afb68f48137c8c89839f84c10a976b1a..abaf491646262326404f16b699c82a2a56ba2127 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.isoschematron package &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,9 +87,9 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+      <li class="breadcrumb-item active">lxml.isoschematron package</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml.isoschematron.rst.txt" rel="nofollow"> View page source</a>
       </li>
index 5f9f2d3c288ebccc6d050a5f93e633e351510921..8d35b28a0d9010701eb19f9023c4aee621fecd74 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.objectify module &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,9 +87,9 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+      <li class="breadcrumb-item active">lxml.objectify module</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml.objectify.rst.txt" rel="nofollow"> View page source</a>
       </li>
@@ -246,7 +250,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -667,7 +671,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -1061,7 +1065,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -1455,7 +1459,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -1842,7 +1846,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -2236,7 +2240,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -2657,7 +2661,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -3048,7 +3052,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
@@ -3499,7 +3503,7 @@ element.</p>
 <p>Can be restricted to find only elements with specific tags,
 see <cite>iter</cite>.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Deprecated</dt>
+<dt class="field-odd">Deprecated<span class="colon">:</span></dt>
 <dd class="field-odd"><p>Note that this method is deprecated as of
 ElementTree 1.3 and lxml 2.0.  It returns an iterator in
 lxml, which diverges from the original ElementTree
index a7d4168abe86e47c91a6bafe1352be3d6488be40..0f3065805cd3a16c618c278a6fb4680ac194f403 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html class="writer-html5" lang="en" >
 <head>
-  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title>lxml.sax module &mdash; lxml  documentation</title>
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -82,9 +86,9 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="lxml.html">lxml package</a></li>
+      <li class="breadcrumb-item active">lxml.sax module</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/lxml.sax.rst.txt" rel="nofollow"> View page source</a>
       </li>
@@ -107,6 +111,13 @@ the SAX events of an ElementTree against a SAX ContentHandler.</p>
 <em class="property"><span class="pre">exception</span><span class="w"> </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">LxmlError</span></code></a></p>
 <p>General SAX error.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="lxml.sax.SaxError.add_note">
+<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.SaxError.add_note" title="Permalink to this definition"></a></dt>
+<dd><p>Exception.add_note(note) –
+add a note to the exception</p>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="lxml.sax.SaxError.with_traceback">
 <span class="sig-name descname"><span class="pre">with_traceback</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#lxml.sax.SaxError.with_traceback" title="Permalink to this definition"></a></dt>
diff --git a/doc/html/apidoc/objects.inv b/doc/html/apidoc/objects.inv
new file mode 100644 (file)
index 0000000..de83b69
Binary files /dev/null and b/doc/html/apidoc/objects.inv differ
index b3c378c198907dddc0d9c0e58b9ad0d4894c9e95..b09629060e29b3cb04a23ea3b2947c91f073c660 100644 (file)
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.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" />
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,8 +87,8 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">Python Module Index</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
index da1e08d5e31bd189f3031b1622d2246574058f2c..33b4971ccd444a8aff5a631228868608c164c332 100644 (file)
     <script src="_static/js/html5shiv.min.js"></script>
   <![endif]-->
   
-        <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/_sphinx_javascript_frameworks_compat.js"></script>
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
         <script src="_static/doctools.js"></script>
+        <script src="_static/sphinx_highlight.js"></script>
     <script src="_static/js/theme.js"></script>
     <script src="_static/searchtools.js"></script>
     <script src="_static/language_data.js"></script>
     <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"> lxml
-            <img src="_static/python-xml.png" class="logo" alt="Logo"/>
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            lxml
+              <img src="_static/python-xml.png" class="logo" alt="Logo"/>
           </a>
               <div class="version">
-                4.9.1
+                4.9.3
               </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="text" name="q" placeholder="Search docs" aria-label="Search docs" />
     <input type="hidden" name="check_keywords" value="yes" />
     <input type="hidden" name="area" value="default" />
   </form>
@@ -83,8 +87,8 @@
         <div class="rst-content">
           <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><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">Search</li>
       <li class="wy-breadcrumbs-aside">
       </li>
   </ul>
diff --git a/doc/html/apidoc/searchindex.js b/doc/html/apidoc/searchindex.js
new file mode 100644 (file)
index 0000000..dfc661b
--- /dev/null
@@ -0,0 +1 @@
+Search.setIndex({"docnames": ["index", "lxml", "lxml.ElementInclude", "lxml._elementpath", "lxml.builder", "lxml.cssselect", "lxml.doctestcompare", "lxml.etree", "lxml.html", "lxml.html.ElementSoup", "lxml.html._diffcommand", "lxml.html._setmixin", "lxml.html.builder", "lxml.html.clean", "lxml.html.defs", "lxml.html.diff", "lxml.html.formfill", "lxml.html.html5parser", "lxml.html.soupparser", "lxml.isoschematron", "lxml.objectify", "lxml.sax"], "filenames": ["index.rst", "lxml.rst", "lxml.ElementInclude.rst", "lxml._elementpath.rst", "lxml.builder.rst", "lxml.cssselect.rst", "lxml.doctestcompare.rst", "lxml.etree.rst", "lxml.html.rst", "lxml.html.ElementSoup.rst", "lxml.html._diffcommand.rst", "lxml.html._setmixin.rst", "lxml.html.builder.rst", "lxml.html.clean.rst", "lxml.html.defs.rst", "lxml.html.diff.rst", "lxml.html.formfill.rst", "lxml.html.html5parser.rst", "lxml.html.soupparser.rst", "lxml.isoschematron.rst", "lxml.objectify.rst", "lxml.sax.rst"], "titles": ["lxml API Reference", "lxml package", "lxml.ElementInclude module", "lxml._elementpath module", "lxml.builder module", "lxml.cssselect module", "lxml.doctestcompare module", "lxml.etree module", "lxml.html package", "lxml.html.ElementSoup module", "lxml.html._diffcommand module", "lxml.html._setmixin module", "lxml.html.builder module", "lxml.html.clean module", "lxml.html.defs module", "lxml.html.diff module", "lxml.html.formfill module", "lxml.html.html5parser module", "lxml.html.soupparser module", "lxml.isoschematron package", "lxml.objectify module", "lxml.sax module"], "terms": {"packag": [0, 2, 7], "subpackag": 0, "html": [0, 1, 4, 6, 7, 20, 21], "submodul": 0, "modul": 0, "content": [0, 6, 7, 12, 13, 15, 20, 21], "isoschematron": [0, 1], "elementinclud": [0, 1], "fatalincludeerror": [0, 1, 2], "limitedrecursiveincludeerror": [0, 1, 2], "_includ": [0, 1, 2, 19], "_lxml_default_load": [0, 1, 2], "_wrap_et_load": [0, 1, 2], "default_load": [0, 1, 2], "includ": [0, 1, 2, 6, 7, 8, 13, 15, 19, 20], "_elementpath": [0, 1], "_build_path_iter": [0, 1, 3], "find": [0, 1, 3, 7, 8, 15, 19, 20], "findal": [0, 1, 3, 7, 8, 20], "findtext": [0, 1, 3, 7, 8, 20], "iterfind": [0, 1, 3, 7, 8, 20], "prepare_child": [0, 1, 3], "prepare_descend": [0, 1, 3], "prepare_par": [0, 1, 3], "prepare_pred": [0, 1, 3], "prepare_self": [0, 1, 3], "prepare_star": [0, 1, 3], "xpath_token": [0, 1, 3], "builder": [0, 1, 7, 8], "elementmak": [0, 1, 4, 12, 20], "__pyx_unpickle_elementmak": [0, 1, 4], "cssselect": [0, 1, 7, 8, 20], "doctestcompar": [0, 1], "lhtmloutputcheck": [0, 1, 6], "lxmloutputcheck": [0, 1, 6], "_restorecheck": [0, 1, 6], "_find_doctest_fram": [0, 1, 6], "html_fromstr": [0, 1, 6], "instal": [0, 1, 6, 7, 8], "norm_whitespac": [0, 1, 6], "strip": [0, 1, 6, 7, 8, 15], "temp_instal": [0, 1, 6], "etre": [0, 1, 2, 4, 12, 19, 20, 21], "c14nerror": [0, 1, 7], "dtderror": [0, 1, 7], "dtdparseerror": [0, 1, 7], "dtdvalidateerror": [0, 1, 7], "documentinvalid": [0, 1, 7, 19], "error": [0, 1, 7, 8, 15, 16, 19, 21], "lxmlerror": [0, 1, 7, 21], "lxmlregistryerror": [0, 1, 7], "lxmlsyntaxerror": [0, 1, 2, 7], "namespaceregistryerror": [0, 1, 7], "parseerror": [0, 1, 7, 8], "parsererror": [0, 1, 7], "relaxngerror": [0, 1, 7], "relaxngparseerror": [0, 1, 7], "relaxngvalidateerror": [0, 1, 7], "schematronerror": [0, 1, 7], "schematronparseerror": [0, 1, 7], "schematronvalidateerror": [0, 1, 7], "serialisationerror": [0, 1, 7], "xincludeerror": [0, 1, 7], "xmlschemaerror": [0, 1, 7], "xmlschemaparseerror": [0, 1, 7], "xmlschemavalidateerror": [0, 1, 7], "xmlsyntaxassertionerror": [0, 1, 7], "xmlsyntaxerror": [0, 1, 7], "xpatherror": [0, 1, 7], "xpathevalerror": [0, 1, 7], "xpathfunctionerror": [0, 1, 7], "xpathresulterror": [0, 1, 7], "xpathsyntaxerror": [0, 1, 7], "xsltapplyerror": [0, 1, 7], "xslterror": [0, 1, 7], "xsltextensionerror": [0, 1, 7], "xsltparseerror": [0, 1, 7], "xsltsaveerror": [0, 1, 7], "_targetparserresult": [0, 1, 7], "ancestorsiter": [0, 1, 7], "attributebasedelementclasslookup": [0, 1, 7], "c14nwritertarget": [0, 1, 7], "cdata": [0, 1, 7], "commentbas": [0, 1, 7, 8], "customelementclasslookup": [0, 1, 7, 8], "dtd": [0, 1, 7, 8, 20, 21], "docinfo": [0, 1, 7, 8], "etcompatxmlpars": [0, 1, 7], "etxpath": [0, 1, 7], "elementbas": [0, 1, 7, 8, 20], "elementchilditer": [0, 1, 7], "elementclasslookup": [0, 1, 7, 20], "elementdefaultclasslookup": [0, 1, 7], "elementdepthfirstiter": [0, 1, 7], "elementnamespaceclasslookup": [0, 1, 7], "elementtextiter": [0, 1, 7], "entitybas": [0, 1, 7, 8], "errordomain": [0, 1, 7], "errorlevel": [0, 1, 7], "errortyp": [0, 1, 7], "fallbackelementclasslookup": [0, 1, 7], "htmlparser": [0, 1, 7, 8], "htmlpullpars": [0, 1, 7], "pibas": [0, 1, 7, 8], "parserbasedelementclasslookup": [0, 1, 7], "pyerrorlog": [0, 1, 7], "pythonelementclasslookup": [0, 1, 7], "qname": [0, 1, 7, 21], "relaxng": [0, 1, 7, 19], "relaxngerrortyp": [0, 1, 7], "resolv": [0, 1, 2, 7, 8, 15], "schematron": [0, 1, 7, 19], "siblingsiter": [0, 1, 7], "treebuild": [0, 1, 7], "xinclud": [0, 1, 2, 7, 20], "xmlparser": [0, 1, 7, 8, 20], "xmlpullpars": [0, 1, 7], "xmlschema": [0, 1, 7], "xmltreebuild": [0, 1, 7], "xpath": [0, 1, 7, 8, 19, 20], "xpathdocumentevalu": [0, 1, 7], "xpathelementevalu": [0, 1, 7], "xslt": [0, 1, 7, 19], "xsltaccesscontrol": [0, 1, 7], "xsltextens": [0, 1, 7], "_attrib": [0, 1, 7], "_baseerrorlog": [0, 1, 7], "_comment": [0, 1, 7], "_document": [0, 1, 7], "_domainerrorlog": [0, 1, 7], "_element": [0, 1, 7, 20], "_elementiter": [0, 1, 7], "_elementmatchiter": [0, 1, 7], "_elementstringresult": [0, 1, 7], "_elementtagmatch": [0, 1, 7], "_elementtre": [0, 1, 7], "_elementunicoderesult": [0, 1, 7], "_entiti": [0, 1, 7], "_errorlog": [0, 1, 7], "_feedpars": [0, 1, 7], "_iddict": [0, 1, 7], "_listerrorlog": [0, 1, 7], "_logentri": [0, 1, 7], "_processinginstruct": [0, 1, 7], "_rotatingerrorlog": [0, 1, 7], "_saxparsertarget": [0, 1, 7], "_valid": [0, 1, 7, 19], "_xpathevaluatorbas": [0, 1, 7], "_xsltprocessinginstruct": [0, 1, 7], "_xsltresulttre": [0, 1, 7], "htmlfile": [0, 1, 7], "iterpars": [0, 1, 7], "iterwalk": [0, 1, 7], "xmlfile": [0, 1, 7], "comment": [0, 1, 7, 8, 13, 20], "element": [0, 1, 4, 6, 7, 8, 11, 12, 13, 14, 15, 19, 20, 21], "elementtre": [0, 1, 2, 7, 8, 19, 20, 21], "entiti": [0, 1, 7, 8, 20, 21], "extens": [0, 1, 7, 8, 20], "functionnamespac": [0, 1, 7], "pi": [0, 1, 7], "processinginstruct": [0, 1, 7, 8, 20, 21], "subel": [0, 1, 7, 8, 20], "xml": [0, 1, 4, 6, 7, 8, 19, 20, 21], "xmldtdid": [0, 1, 7], "xmlid": [0, 1, 7], "xpathevalu": [0, 1, 7], "adopt_external_docu": [0, 1, 7], "canonic": [0, 1, 7], "cleanup_namespac": [0, 1, 7, 20], "clear_error_log": [0, 1, 7], "dump": [0, 1, 7, 20], "fromstr": [0, 1, 7, 8, 20], "fromstringlist": [0, 1, 7], "get_default_pars": [0, 1, 6, 7], "indent": [0, 1, 6, 7], "isel": [0, 1, 7], "pars": [0, 1, 2, 6, 7, 8, 15, 19, 20, 21], "parseid": [0, 1, 7], "register_namespac": [0, 1, 7], "set_default_pars": [0, 1, 7, 20], "set_element_class_lookup": [0, 1, 7, 8], "strip_attribut": [0, 1, 7], "strip_el": [0, 1, 7], "strip_tag": [0, 1, 7], "tostr": [0, 1, 4, 7, 8, 12, 20], "tostringlist": [0, 1, 7], "tounicod": [0, 1, 7], "use_global_python_log": [0, 1, 7], "objectifi": [0, 1, 7], "boolel": [0, 1, 20], "floatel": [0, 1, 20], "intel": [0, 1, 20], "longel": [0, 1, 20], "noneel": [0, 1, 20], "numberel": [0, 1, 20], "objectpath": [0, 1, 20], "objectifieddatael": [0, 1, 20], "objectifiedel": [0, 1, 20], "objectifyelementclasslookup": [0, 1, 20], "pytyp": [0, 1, 20], "stringel": [0, 1, 20], "datael": [0, 1, 20], "__unpickleelementtre": [0, 1, 20], "annot": [0, 1, 8, 10, 15, 20], "deannot": [0, 1, 20], "enable_recursive_str": [0, 1, 20], "getregisteredtyp": [0, 1, 20], "makepars": [0, 1, 20], "pyannot": [0, 1, 20], "pytypenam": [0, 1, 20], "set_pytype_attribute_tag": [0, 1, 20], "xsiannot": [0, 1, 20], "sax": [0, 1, 7], "saxerror": [0, 1, 21], "elementtreecontenthandl": [0, 1, 21], "elementtreeproduc": [0, 1, 21], "__pyx_unpickle_elementtreeproduc": [0, 1, 21], "saxifi": [0, 1, 21], "get_includ": [0, 1], "index": [0, 1, 7, 8, 14, 15, 20], "search": [0, 7, 8, 13, 15, 21], "page": [0, 4, 8, 13, 15], "elementsoup": [1, 8], "_diffcommand": [1, 8], "main": [1, 7, 8, 10, 12, 19, 20, 21], "read_fil": [1, 7, 8, 10], "split_bodi": [1, 8, 10], "_setmixin": [1, 8], "setmixin": [1, 8, 11], "class": [1, 4, 6, 7, 8, 11, 12, 13, 15, 16, 19, 20, 21], "FOR": [1, 8, 12], "A": [1, 4, 7, 8, 12, 13, 15, 21], "abbr": [1, 8, 12, 13], "acronym": [1, 8, 12], "address": [1, 8, 12], "applet": [1, 8, 12, 13], "area": [1, 6, 8, 12], "b": [1, 4, 7, 8, 12, 15, 19], "base": [1, 2, 4, 6, 7, 8, 11, 12, 13, 15, 16, 19, 20, 21], "basefont": [1, 6, 8, 12], "bdo": [1, 8, 12], "big": [1, 7, 8, 12], "blockquot": [1, 8, 12], "bodi": [1, 4, 6, 8, 12, 13, 15, 20], "br": [1, 6, 8, 12, 20], "button": [1, 8, 12], "caption": [1, 8, 12], "center": [1, 7, 8, 12, 15], "cite": [1, 8, 12, 13], "code": [1, 7, 8, 12, 13, 15, 20], "col": [1, 6, 8, 12, 13], "colgroup": [1, 8, 12], "dd": [1, 8, 12], "del": [1, 8, 12, 15], "dfn": [1, 8, 12], "dir": [1, 8, 12, 13], "div": [1, 8, 12, 15, 16], "dl": [1, 8, 12], "dt": [1, 8, 12], "em": [1, 8, 12], "fieldset": [1, 8, 12], "font": [1, 8, 12, 20], "form": [1, 2, 7, 8, 12, 13, 15, 16], "frame": [1, 8, 12, 13], "frameset": [1, 8, 12], "h1": [1, 4, 8, 12], "h2": [1, 8, 12], "h3": [1, 8, 12], "h4": [1, 8, 12], "h5": [1, 8, 12], "h6": [1, 8, 12], "head": [1, 4, 8, 12, 13, 15], "hr": [1, 8, 12], "i": [1, 4, 6, 7, 8, 11, 12, 13, 15, 19, 20, 21], "ifram": [1, 8, 12, 13], "img": [1, 6, 8, 12, 15], "input": [1, 6, 7, 8, 11, 12, 16, 21], "INS": [1, 8, 12], "isindex": [1, 8, 12], "kbd": [1, 8, 12], "label": [1, 8, 12, 13], "legend": [1, 8, 12], "li": [1, 8, 12], "link": [1, 4, 6, 8, 12, 13], "map": [1, 4, 7, 8, 12, 15, 20, 21], "menu": [1, 8, 12], "meta": [1, 6, 8, 12, 13], "nofram": [1, 8, 12], "noscript": [1, 8, 12], "object": [1, 4, 6, 7, 8, 11, 12, 13, 15, 16, 19, 20, 21], "ol": [1, 8, 12], "optgroup": [1, 8, 12], "option": [1, 4, 6, 7, 8, 10, 12, 13, 15, 20], "p": [1, 4, 8, 12, 13, 15, 20], "param": [1, 6, 8, 12], "pre": [1, 7, 8, 12, 13, 15, 20], "q": [1, 8, 12, 15], "": [1, 4, 6, 7, 8, 11, 12, 13, 15, 20, 21], "samp": [1, 8, 12], "script": [1, 4, 8, 12, 13], "select": [1, 7, 8, 12, 13, 16], "small": [1, 4, 8, 12, 15], "span": [1, 8, 12, 13, 15], "strike": [1, 8, 12], "strong": [1, 8, 12], "style": [1, 7, 8, 12, 13, 20], "sub": [1, 7, 8, 12, 15], "sup": [1, 8, 12], "tabl": [1, 7, 8, 12, 15], "tbodi": [1, 8, 12], "td": [1, 8, 12, 15], "textarea": [1, 8, 12, 13], "tfoot": [1, 8, 12], "th": [1, 8, 12], "thead": [1, 8, 12], "titl": [1, 4, 7, 8, 12, 13, 15, 19], "tr": [1, 8, 12, 14], "tt": [1, 8, 12], "u": [1, 7, 8, 12, 15], "ul": [1, 8, 12], "var": [1, 8, 12], "clean": [1, 7, 8, 15], "cleaner": [1, 8, 13], "_break_text": [1, 8, 13], "_find_image_dataurl": [1, 8, 13], "_has_javascript_schem": [1, 8, 13], "_insert_break": [1, 8, 13], "_is_unsafe_image_typ": [1, 8, 13], "_link_text": [1, 8, 13], "_looks_like_tag_cont": [1, 8, 13], "_possibly_malicious_schem": [1, 8, 13], "_replace_css_import": [1, 8, 13], "_replace_css_javascript": [1, 8, 13], "_substitute_whitespac": [1, 8, 13], "autolink": [1, 8, 13], "autolink_html": [1, 8, 13], "clean_html": [1, 8, 13], "word_break": [1, 8, 13], "word_break_html": [1, 8, 13], "def": [1, 4, 7, 8, 15], "diff": [1, 6, 8], "nodelet": [1, 8, 15], "del_end": [1, 8, 15], "del_start": [1, 8, 15], "insensitivesequencematch": [1, 8, 15], "href_token": [1, 8, 15], "tag_token": [1, 8, 15], "token": [1, 3, 8, 15], "_contains_block_level_tag": [1, 8, 15], "_fixup_ins_del_tag": [1, 8, 15], "_merge_element_cont": [1, 8, 15], "_move_el_inside_block": [1, 8, 15], "cleanup_delet": [1, 8, 15], "cleanup_html": [1, 8, 15], "compress_merge_back": [1, 8, 15], "compress_token": [1, 8, 15], "copy_annot": [1, 8, 15], "default_markup": [1, 8, 15], "end_tag": [1, 8, 15], "expand_token": [1, 8, 15], "fixup_chunk": [1, 8, 15], "fixup_ins_del_tag": [1, 8, 15], "flatten_el": [1, 8, 15], "html_annot": [1, 8, 15], "html_annotate_merge_annot": [1, 8, 15], "htmldiff": [1, 8, 15], "htmldiff_token": [1, 8, 15], "is_end_tag": [1, 8, 15], "is_start_tag": [1, 8, 15], "is_word": [1, 8, 15], "locate_unbalanced_end": [1, 8, 15], "locate_unbalanced_start": [1, 8, 15], "markup_serialize_token": [1, 8, 15], "merge_delet": [1, 8, 15], "merge_insert": [1, 8, 15], "parse_html": [1, 6, 8, 15], "serialize_html_frag": [1, 8, 15], "split_delet": [1, 8, 15], "split_trailing_whitespac": [1, 8, 15], "split_unbalanc": [1, 8, 15], "split_word": [1, 8, 15], "start_tag": [1, 8, 15], "tokenize_annot": [1, 8, 15], "formfil": [1, 8], "formnotfound": [1, 8, 16], "defaulterrorcr": [1, 8, 16], "_add_class": [1, 8, 16], "_check": [1, 8, 16], "_fill_form": [1, 8, 16], "_fill_multipl": [1, 8, 16], "_fill_singl": [1, 8, 16], "_find_elements_for_nam": [1, 8, 16], "_find_form": [1, 8, 16], "_find_form_id": [1, 8, 16], "_insert_error": [1, 8, 16], "_select": [1, 8, 16], "_takes_multipl": [1, 8, 16], "fill_form": [1, 8, 16], "fill_form_html": [1, 8, 16], "insert_error": [1, 8, 16], "insert_errors_html": [1, 8, 16], "html5parser": [1, 8], "souppars": [1, 8], "checkboxgroup": [1, 8], "append": [1, 7, 8, 20], "clear": [1, 7, 8, 11, 13, 20], "copi": [1, 7, 8, 11, 13, 15, 19, 21], "count": [1, 7, 8, 13, 15], "extend": [1, 7, 8, 15, 20], "insert": [1, 4, 7, 8, 12, 13, 15, 20], "pop": [1, 7, 8, 11, 15], "remov": [1, 7, 8, 11, 13, 15, 20], "revers": [1, 7, 8, 20], "sort": [1, 8], "valu": [1, 4, 7, 8, 11, 12, 13, 15, 16, 19, 20, 21], "value_opt": [1, 8], "checkboxvalu": [1, 8], "_from_iter": [1, 8, 11], "_hash": [1, 8, 11], "add": [1, 2, 7, 8, 11, 15, 16, 20, 21], "differ": [1, 6, 7, 8, 11, 20], "difference_upd": [1, 8, 11], "discard": [1, 7, 8, 11, 13, 15, 20], "intersect": [1, 8, 11], "intersection_upd": [1, 8, 11], "isdisjoint": [1, 8, 11], "issubset": [1, 8, 11], "issuperset": [1, 8, 11], "symmetric_differ": [1, 8, 11], "symmetric_difference_upd": [1, 8, 11], "union": [1, 8, 11], "updat": [1, 7, 8, 11, 19], "_abc_impl": [1, 8, 11], "toggl": [1, 8], "fieldsdict": [1, 8], "get": [1, 7, 8, 13, 15, 19, 20], "item": [1, 7, 8, 11, 12, 15, 20], "kei": [1, 4, 7, 8, 15, 20], "popitem": [1, 8], "setdefault": [1, 8], "formel": [1, 8], "_init": [1, 7, 8, 20], "_name": [1, 7, 8], "addnext": [1, 7, 8, 20], "addprevi": [1, 7, 8, 20], "drop_tag": [1, 8], "drop_tre": [1, 8], "find_class": [1, 8], "find_rel_link": [1, 8], "form_valu": [1, 8], "get_element_by_id": [1, 8], "getchildren": [1, 7, 8, 20], "getiter": [1, 7, 8, 20], "getnext": [1, 7, 8, 20], "getpar": [1, 7, 8, 20], "getprevi": [1, 7, 8, 20], "getroottre": [1, 7, 8, 20], "iter": [1, 7, 8, 11, 13, 15, 20], "iterancestor": [1, 7, 8, 20], "iterchildren": [1, 7, 8, 20], "iterdescend": [1, 7, 8, 20], "iterlink": [1, 8], "iters": [1, 7, 8, 20], "itertext": [1, 7, 8, 20], "make_links_absolut": [1, 8], "makeel": [1, 7, 8, 20, 21], "replac": [1, 7, 8, 13, 15, 20, 21], "resolve_base_href": [1, 8], "rewrite_link": [1, 8], "set": [1, 2, 6, 7, 8, 11, 12, 13, 15, 16, 19, 20, 21], "text_cont": [1, 8], "action": [1, 8, 13], "attrib": [1, 7, 8, 20], "base_url": [1, 2, 7, 8, 20], "field": [1, 7, 8, 12, 15], "method": [1, 7, 8, 11, 13, 15, 19, 20, 21], "nsmap": [1, 4, 7, 8, 20], "prefix": [1, 6, 7, 8, 15, 20, 21], "sourcelin": [1, 7, 8, 20], "tag": [1, 4, 6, 7, 8, 12, 13, 15, 20], "tail": [1, 4, 7, 8, 13, 15, 20], "text": [1, 2, 4, 6, 7, 8, 12, 13, 15, 19, 20, 21], "close": [1, 7, 8, 15], "feed": [1, 7, 8], "setelementclasslookup": [1, 7, 8], "error_log": [1, 7, 8, 19], "feed_error_log": [1, 7, 8], "target": [1, 4, 7, 8, 13, 20, 21], "version": [1, 4, 7, 8, 15, 20], "htmlcomment": [1, 8], "htmlelement": [1, 8], "htmlelementclasslookup": [1, 8], "lookup": [1, 7, 8, 15, 20], "set_fallback": [1, 7, 8], "_default_element_class": [1, 8], "fallback": [1, 7, 8], "htmlentiti": [1, 8], "name": [1, 7, 8, 12, 13, 15, 16, 19, 20, 21], "htmlmixin": [1, 8], "htmlprocessinginstruct": [1, 8], "inputel": [1, 8], "checkabl": [1, 8], "check": [1, 6, 7, 8, 13, 16, 20], "type": [1, 6, 7, 8, 11, 13, 19, 20, 21], "inputgett": [1, 8], "inputmixin": [1, 8], "labelel": [1, 8], "for_el": [1, 8], "multipleselectopt": [1, 8], "radiogroup": [1, 8], "selectel": [1, 8], "multipl": [1, 7, 8, 13, 20], "textareael": [1, 8], "xhtmlparser": [1, 8], "_methodfunc": [1, 8], "__bytes_replace_meta_content_typ": [1, 8], "__fix_docstr": [1, 8], "__str_replace_meta_content_typ": [1, 8], "_element_nam": [1, 8], "_iter_css_import": [1, 8], "_iter_css_url": [1, 8], "_looks_like_full_html_byt": [1, 8], "_looks_like_full_html_unicod": [1, 8], "_non": [1, 8], "_parse_meta_refresh_url": [1, 8], "_transform_result": [1, 8], "_unquote_match": [1, 8], "document_fromstr": [1, 8], "fragment_fromstr": [1, 8], "fragments_fromstr": [1, 8], "html_to_xhtml": [1, 8], "open_http_urllib": [1, 8], "open_in_brows": [1, 8], "submit_form": [1, 8], "xhtml_to_html": [1, 8], "_append_log_messag": [1, 7, 19], "_clear_error_log": [1, 7, 19], "_extract": [1, 19], "assertvalid": [1, 7, 19], "assert_": [1, 7, 19], "valid": [1, 7, 8, 15, 19, 20, 21], "asserts_and_report": [1, 19], "asserts_onli": [1, 19], "_compil": [1, 19], "_domain": [1, 19], "_error_typ": [1, 19], "_expand": [1, 19], "_extract_rng": [1, 19], "_extract_xsd": [1, 19], "_level": [1, 19], "_validation_error": [1, 19], "validation_report": [1, 19], "validator_xslt": [1, 19], "_stylesheet_param_dict": [1, 19], "stylesheet_param": [1, 19], "add_not": [1, 2, 7, 8, 15, 16, 21], "with_traceback": [1, 2, 7, 8, 15, 16, 21], "arg": [1, 2, 6, 7, 8, 10, 13, 15, 16, 19, 21], "end_lineno": [1, 2, 7], "end_offset": [1, 2, 7], "filenam": [1, 2, 7, 8, 10, 19], "lineno": [1, 2, 7], "msg": [1, 2, 7], "offset": [1, 2, 7], "print_file_and_lin": [1, 2, 7], "_makeel": [1, 4], "_namespac": [1, 4], "_nsmap": [1, 4], "_typemap": [1, 4], "_do_a_fancy_diff": [1, 6], "_looks_like_markup": [1, 6], "_toascii": [1, 6], "check_output": [1, 6], "collect_diff": [1, 6], "collect_diff_end_tag": [1, 6], "collect_diff_tag": [1, 6], "collect_diff_text": [1, 6], "compare_doc": [1, 6], "format_doc": [1, 6], "format_end_tag": [1, 6], "format_tag": [1, 6], "format_text": [1, 6], "get_pars": [1, 6], "html_empty_tag": [1, 6], "output_differ": [1, 6], "tag_compar": [1, 6], "text_compar": [1, 6], "empty_tag": [1, 6], "call_sup": [1, 6], "install_clon": [1, 6], "install_dt_self": [1, 6], "uninstall_clon": [1, 6], "uninstall_dt_self": [1, 6], "uninstall_modul": [1, 6], "posit": [1, 7, 8, 13, 15, 20, 21], "_iter_namespac": [1, 7], "data": [1, 7, 8, 12, 14, 15, 20, 21], "end": [1, 2, 7, 8, 15, 20, 21], "start": [1, 6, 7, 8, 13, 15, 20, 21], "start_n": [1, 7], "iterel": [1, 7], "iterent": [1, 7], "external_id": [1, 7], "system_url": [1, 7], "url": [1, 2, 7, 8, 13, 20], "doctyp": [1, 7, 8], "encod": [1, 2, 7, 8, 15], "externaldtd": [1, 7], "internaldtd": [1, 7], "public_id": [1, 7], "root_nam": [1, 7], "standalon": [1, 7], "xml_version": [1, 7], "evalu": [1, 7, 8, 20], "path": [1, 3, 7, 8, 19, 20], "comment_class": [1, 7], "element_class": [1, 7], "entity_class": [1, 7], "pi_class": [1, 7], "get_namespac": [1, 7], "_getnam": [1, 7], "buffer": [1, 7, 8], "c14n": [1, 7], "catalog": [1, 7, 8], "datatyp": [1, 7, 20], "ftp": [1, 7], "http": [1, 4, 7, 8, 12, 13, 14, 19, 20, 21], "i18n": [1, 7, 12], "io": [1, 7], "memori": [1, 7], "namespac": [1, 3, 4, 7, 8, 20, 21], "none": [1, 2, 3, 6, 7, 8, 10, 13, 15, 16, 19, 20, 21], "output": [1, 4, 6, 7, 8, 12], "parser": [1, 2, 6, 7, 8, 13, 20, 21], "regexp": [1, 7], "relaxngp": [1, 7], "relaxngv": [1, 7], "schemasp": [1, 7], "schemasv": [1, 7], "schematronv": [1, 7], "tree": [1, 7, 8, 19, 20, 21], "uri": [1, 7, 8, 12, 20, 21], "writer": [1, 7], "xpointer": [1, 7], "fatal": [1, 7], "warn": [1, 7, 19], "buf_overflow": [1, 7], "c14n_create_ctxt": [1, 7], "c14n_create_stack": [1, 7], "c14n_invalid_nod": [1, 7], "c14n_relative_namespac": [1, 7], "c14n_requires_utf8": [1, 7], "c14n_unknow_nod": [1, 7], "catalog_entry_broken": [1, 7], "catalog_missing_attr": [1, 7], "catalog_not_catalog": [1, 7], "catalog_prefer_valu": [1, 7], "catalog_recurs": [1, 7], "check_entity_typ": [1, 7], "check_found_attribut": [1, 7], "check_found_cdata": [1, 7], "check_found_com": [1, 7], "check_found_doctyp": [1, 7], "check_found_el": [1, 7], "check_found_ent": [1, 7], "check_found_entityref": [1, 7], "check_found_frag": [1, 7], "check_found_not": [1, 7], "check_found_pi": [1, 7], "check_found_text": [1, 7], "check_name_not_nul": [1, 7], "check_not_attr": [1, 7], "check_not_attr_decl": [1, 7], "check_not_dtd": [1, 7], "check_not_elem_decl": [1, 7], "check_not_entity_decl": [1, 7], "check_not_ncnam": [1, 7], "check_not_ns_decl": [1, 7], "check_not_utf8": [1, 7], "check_no_dict": [1, 7], "check_no_doc": [1, 7], "check_no_elem": [1, 7], "check_no_href": [1, 7], "check_no_nam": [1, 7], "check_no_next": [1, 7], "check_no_par": [1, 7], "check_no_prev": [1, 7], "check_ns_ancestor": [1, 7], "check_ns_scop": [1, 7], "check_outside_dict": [1, 7], "check_unknown_nod": [1, 7], "check_wrong_doc": [1, 7], "check_wrong_nam": [1, 7], "check_wrong_next": [1, 7], "check_wrong_par": [1, 7], "check_wrong_prev": [1, 7], "dtd_attribute_default": [1, 7], "dtd_attribute_redefin": [1, 7], "dtd_attribute_valu": [1, 7], "dtd_content_error": [1, 7], "dtd_content_model": [1, 7], "dtd_content_not_determinist": [1, 7], "dtd_different_prefix": [1, 7], "dtd_dup_token": [1, 7], "dtd_elem_default_namespac": [1, 7], "dtd_elem_namespac": [1, 7], "dtd_elem_redefin": [1, 7], "dtd_empty_not": [1, 7], "dtd_entity_typ": [1, 7], "dtd_id_fix": [1, 7], "dtd_id_redefin": [1, 7], "dtd_id_subset": [1, 7], "dtd_invalid_child": [1, 7], "dtd_invalid_default": [1, 7], "dtd_load_error": [1, 7], "dtd_missing_attribut": [1, 7], "dtd_mixed_corrupt": [1, 7], "dtd_multiple_id": [1, 7], "dtd_notation_redefin": [1, 7], "dtd_notation_valu": [1, 7], "dtd_not_empti": [1, 7], "dtd_not_pcdata": [1, 7], "dtd_not_standalon": [1, 7], "dtd_no_doc": [1, 7], "dtd_no_dtd": [1, 7], "dtd_no_elem_nam": [1, 7], "dtd_no_prefix": [1, 7], "dtd_no_root": [1, 7], "dtd_root_nam": [1, 7], "dtd_standalone_default": [1, 7], "dtd_standalone_white_spac": [1, 7], "dtd_unknown_attribut": [1, 7], "dtd_unknown_elem": [1, 7], "dtd_unknown_ent": [1, 7], "dtd_unknown_id": [1, 7], "dtd_unknown_not": [1, 7], "dtd_xmlid_typ": [1, 7], "dtd_xmlid_valu": [1, 7], "err_attlist_not_finish": [1, 7], "err_attlist_not_start": [1, 7], "err_attribute_not_finish": [1, 7], "err_attribute_not_start": [1, 7], "err_attribute_redefin": [1, 7], "err_attribute_without_valu": [1, 7], "err_cdata_not_finish": [1, 7], "err_charref_at_eof": [1, 7], "err_charref_in_dtd": [1, 7], "err_charref_in_epilog": [1, 7], "err_charref_in_prolog": [1, 7], "err_comment_abruptly_end": [1, 7], "err_comment_not_finish": [1, 7], "err_condsec_invalid": [1, 7], "err_condsec_invalid_keyword": [1, 7], "err_condsec_not_finish": [1, 7], "err_condsec_not_start": [1, 7], "err_doctype_not_finish": [1, 7], "err_document_empti": [1, 7], "err_document_end": [1, 7], "err_document_start": [1, 7], "err_elemcontent_not_finish": [1, 7], "err_elemcontent_not_start": [1, 7], "err_encoding_nam": [1, 7], "err_entityref_at_eof": [1, 7], "err_entityref_in_dtd": [1, 7], "err_entityref_in_epilog": [1, 7], "err_entityref_in_prolog": [1, 7], "err_entityref_no_nam": [1, 7], "err_entityref_semicol_miss": [1, 7], "err_entity_boundari": [1, 7], "err_entity_char_error": [1, 7], "err_entity_is_extern": [1, 7], "err_entity_is_paramet": [1, 7], "err_entity_loop": [1, 7], "err_entity_not_finish": [1, 7], "err_entity_not_start": [1, 7], "err_entity_pe_intern": [1, 7], "err_entity_process": [1, 7], "err_equal_requir": [1, 7], "err_extra_cont": [1, 7], "err_ext_entity_standalon": [1, 7], "err_ext_subset_not_finish": [1, 7], "err_gt_requir": [1, 7], "err_hyphen_in_com": [1, 7], "err_internal_error": [1, 7], "err_invalid_char": [1, 7], "err_invalid_charref": [1, 7], "err_invalid_dec_charref": [1, 7], "err_invalid_encod": [1, 7], "err_invalid_hex_charref": [1, 7], "err_invalid_uri": [1, 7], "err_literal_not_finish": [1, 7], "err_literal_not_start": [1, 7], "err_ltslash_requir": [1, 7], "err_lt_in_attribut": [1, 7], "err_lt_requir": [1, 7], "err_misplaced_cdata_end": [1, 7], "err_missing_encod": [1, 7], "err_mixed_not_finish": [1, 7], "err_mixed_not_start": [1, 7], "err_name_requir": [1, 7], "err_name_too_long": [1, 7], "err_nmtoken_requir": [1, 7], "err_notation_not_finish": [1, 7], "err_notation_not_start": [1, 7], "err_notation_process": [1, 7], "err_not_standalon": [1, 7], "err_not_well_balanc": [1, 7], "err_no_dtd": [1, 7], "err_no_memori": [1, 7], "err_ns_decl_error": [1, 7], "err_ok": [1, 7], "err_pcdata_requir": [1, 7], "err_peref_at_eof": [1, 7], "err_peref_in_epilog": [1, 7], "err_peref_in_int_subset": [1, 7], "err_peref_in_prolog": [1, 7], "err_peref_no_nam": [1, 7], "err_peref_semicol_miss": [1, 7], "err_pi_not_finish": [1, 7], "err_pi_not_start": [1, 7], "err_pubid_requir": [1, 7], "err_reserved_xml_nam": [1, 7], "err_separator_requir": [1, 7], "err_space_requir": [1, 7], "err_standalone_valu": [1, 7], "err_string_not_clos": [1, 7], "err_string_not_start": [1, 7], "err_tag_name_mismatch": [1, 7], "err_tag_not_finish": [1, 7], "err_undeclared_ent": [1, 7], "err_unknown_encod": [1, 7], "err_unknown_vers": [1, 7], "err_unparsed_ent": [1, 7], "err_unsupported_encod": [1, 7], "err_uri_frag": [1, 7], "err_uri_requir": [1, 7], "err_user_stop": [1, 7], "err_value_requir": [1, 7], "err_version_mismatch": [1, 7], "err_version_miss": [1, 7], "err_xmldecl_not_finish": [1, 7], "err_xmldecl_not_start": [1, 7], "ftp_accnt": [1, 7], "ftp_epsv_answ": [1, 7], "ftp_pasv_answ": [1, 7], "ftp_url_syntax": [1, 7], "html_strucure_error": [1, 7], "html_unknown_tag": [1, 7], "http_unknown_host": [1, 7], "http_url_syntax": [1, 7], "http_use_ip": [1, 7], "i18n_conv_fail": [1, 7], "i18n_excess_handl": [1, 7], "i18n_no_handl": [1, 7], "i18n_no_nam": [1, 7], "i18n_no_output": [1, 7], "io_buffer_ful": [1, 7], "io_eacc": [1, 7], "io_eaddrinus": [1, 7], "io_eafnosupport": [1, 7], "io_eagain": [1, 7], "io_ealreadi": [1, 7], "io_ebadf": [1, 7], "io_ebadmsg": [1, 7], "io_ebusi": [1, 7], "io_ecancel": [1, 7], "io_echild": [1, 7], "io_econnrefus": [1, 7], "io_edeadlk": [1, 7], "io_edom": [1, 7], "io_eexist": [1, 7], "io_efault": [1, 7], "io_efbig": [1, 7], "io_einprogress": [1, 7], "io_eintr": [1, 7], "io_einv": [1, 7], "io_eio": [1, 7], "io_eisconn": [1, 7], "io_eisdir": [1, 7], "io_emfil": [1, 7], "io_emlink": [1, 7], "io_emsgs": [1, 7], "io_enametoolong": [1, 7], "io_encod": [1, 7], "io_enetunreach": [1, 7], "io_enfil": [1, 7], "io_enodev": [1, 7], "io_eno": [1, 7], "io_enoexec": [1, 7], "io_enolck": [1, 7], "io_enomem": [1, 7], "io_enospc": [1, 7], "io_enosi": [1, 7], "io_enotdir": [1, 7], "io_enotempti": [1, 7], "io_enotsock": [1, 7], "io_enotsup": [1, 7], "io_enotti": [1, 7], "io_enxio": [1, 7], "io_eperm": [1, 7], "io_epip": [1, 7], "io_erang": [1, 7], "io_erof": [1, 7], "io_espip": [1, 7], "io_esrch": [1, 7], "io_etimedout": [1, 7], "io_exdev": [1, 7], "io_flush": [1, 7], "io_load_error": [1, 7], "io_network_attempt": [1, 7], "io_no_input": [1, 7], "io_unknown": [1, 7], "io_writ": [1, 7], "module_clos": [1, 7], "module_open": [1, 7], "ns_err_attribute_redefin": [1, 7], "ns_err_colon": [1, 7], "ns_err_empti": [1, 7], "ns_err_qnam": [1, 7], "ns_err_undefined_namespac": [1, 7], "ns_err_xml_namespac": [1, 7], "regexp_compile_error": [1, 7], "rngp_anyname_attr_ancestor": [1, 7], "rngp_attribute_children": [1, 7], "rngp_attribute_cont": [1, 7], "rngp_attribute_empti": [1, 7], "rngp_attribute_noop": [1, 7], "rngp_attr_conflict": [1, 7], "rngp_choice_cont": [1, 7], "rngp_choice_empti": [1, 7], "rngp_create_failur": [1, 7], "rngp_data_cont": [1, 7], "rngp_define_create_fail": [1, 7], "rngp_define_empti": [1, 7], "rngp_define_miss": [1, 7], "rngp_define_name_miss": [1, 7], "rngp_def_choice_and_interleav": [1, 7], "rngp_element_cont": [1, 7], "rngp_element_empti": [1, 7], "rngp_element_nam": [1, 7], "rngp_element_no_cont": [1, 7], "rngp_elem_content_empti": [1, 7], "rngp_elem_content_error": [1, 7], "rngp_elem_text_conflict": [1, 7], "rngp_empti": [1, 7], "rngp_empty_construct": [1, 7], "rngp_empty_cont": [1, 7], "rngp_empty_not_empti": [1, 7], "rngp_error_type_lib": [1, 7], "rngp_except_empti": [1, 7], "rngp_except_miss": [1, 7], "rngp_except_multipl": [1, 7], "rngp_except_no_cont": [1, 7], "rngp_externalref_emtpi": [1, 7], "rngp_externalref_recurs": [1, 7], "rngp_external_ref_failur": [1, 7], "rngp_forbidden_attribut": [1, 7], "rngp_foreign_el": [1, 7], "rngp_grammar_cont": [1, 7], "rngp_grammar_empti": [1, 7], "rngp_grammar_miss": [1, 7], "rngp_grammar_no_start": [1, 7], "rngp_group_attr_conflict": [1, 7], "rngp_href_error": [1, 7], "rngp_include_empti": [1, 7], "rngp_include_failur": [1, 7], "rngp_include_recurs": [1, 7], "rngp_interleave_add": [1, 7], "rngp_interleave_create_fail": [1, 7], "rngp_interleave_empti": [1, 7], "rngp_interleave_no_cont": [1, 7], "rngp_invalid_define_nam": [1, 7], "rngp_invalid_uri": [1, 7], "rngp_invalid_valu": [1, 7], "rngp_missing_href": [1, 7], "rngp_name_miss": [1, 7], "rngp_need_combin": [1, 7], "rngp_notallowed_not_empti": [1, 7], "rngp_nsname_attr_ancestor": [1, 7], "rngp_nsname_no_n": [1, 7], "rngp_param_forbidden": [1, 7], "rngp_param_name_miss": [1, 7], "rngp_parentref_create_fail": [1, 7], "rngp_parentref_name_invalid": [1, 7], "rngp_parentref_not_empti": [1, 7], "rngp_parentref_no_nam": [1, 7], "rngp_parentref_no_par": [1, 7], "rngp_parse_error": [1, 7], "rngp_pat_anyname_except_anynam": [1, 7], "rngp_pat_attr_attr": [1, 7], "rngp_pat_attr_elem": [1, 7], "rngp_pat_data_except_attr": [1, 7], "rngp_pat_data_except_elem": [1, 7], "rngp_pat_data_except_empti": [1, 7], "rngp_pat_data_except_group": [1, 7], "rngp_pat_data_except_interleav": [1, 7], "rngp_pat_data_except_list": [1, 7], "rngp_pat_data_except_onemor": [1, 7], "rngp_pat_data_except_ref": [1, 7], "rngp_pat_data_except_text": [1, 7], "rngp_pat_list_attr": [1, 7], "rngp_pat_list_elem": [1, 7], "rngp_pat_list_interleav": [1, 7], "rngp_pat_list_list": [1, 7], "rngp_pat_list_ref": [1, 7], "rngp_pat_list_text": [1, 7], "rngp_pat_nsname_except_anynam": [1, 7], "rngp_pat_nsname_except_nsnam": [1, 7], "rngp_pat_onemore_group_attr": [1, 7], "rngp_pat_onemore_interleave_attr": [1, 7], "rngp_pat_start_attr": [1, 7], "rngp_pat_start_data": [1, 7], "rngp_pat_start_empti": [1, 7], "rngp_pat_start_group": [1, 7], "rngp_pat_start_interleav": [1, 7], "rngp_pat_start_list": [1, 7], "rngp_pat_start_onemor": [1, 7], "rngp_pat_start_text": [1, 7], "rngp_pat_start_valu": [1, 7], "rngp_prefix_undefin": [1, 7], "rngp_ref_create_fail": [1, 7], "rngp_ref_cycl": [1, 7], "rngp_ref_name_invalid": [1, 7], "rngp_ref_not_empti": [1, 7], "rngp_ref_no_def": [1, 7], "rngp_ref_no_nam": [1, 7], "rngp_start_choice_and_interleav": [1, 7], "rngp_start_cont": [1, 7], "rngp_start_empti": [1, 7], "rngp_start_miss": [1, 7], "rngp_text_expect": [1, 7], "rngp_text_has_child": [1, 7], "rngp_type_miss": [1, 7], "rngp_type_not_found": [1, 7], "rngp_type_valu": [1, 7], "rngp_unknown_attribut": [1, 7], "rngp_unknown_combin": [1, 7], "rngp_unknown_construct": [1, 7], "rngp_unknown_type_lib": [1, 7], "rngp_uri_frag": [1, 7], "rngp_uri_not_absolut": [1, 7], "rngp_value_empti": [1, 7], "rngp_value_no_cont": [1, 7], "rngp_xmlns_name": [1, 7], "rngp_xml_n": [1, 7], "save_char_invalid": [1, 7], "save_not_utf8": [1, 7], "save_no_doctyp": [1, 7], "save_unknown_encod": [1, 7], "schemap_ag_props_correct": [1, 7], "schemap_attrformdefault_valu": [1, 7], "schemap_attrgrp_noname_noref": [1, 7], "schemap_attr_noname_noref": [1, 7], "schemap_au_props_correct": [1, 7], "schemap_au_props_correct_2": [1, 7], "schemap_a_props_correct_2": [1, 7], "schemap_a_props_correct_3": [1, 7], "schemap_complextype_noname_noref": [1, 7], "schemap_cos_all_limit": [1, 7], "schemap_cos_ct_extends_1_1": [1, 7], "schemap_cos_ct_extends_1_2": [1, 7], "schemap_cos_ct_extends_1_3": [1, 7], "schemap_cos_st_derived_ok_2_1": [1, 7], "schemap_cos_st_derived_ok_2_2": [1, 7], "schemap_cos_st_restricts_1_1": [1, 7], "schemap_cos_st_restricts_1_2": [1, 7], "schemap_cos_st_restricts_1_3_1": [1, 7], "schemap_cos_st_restricts_1_3_2": [1, 7], "schemap_cos_st_restricts_2_1": [1, 7], "schemap_cos_st_restricts_2_3_1_1": [1, 7], "schemap_cos_st_restricts_2_3_1_2": [1, 7], "schemap_cos_st_restricts_2_3_2_1": [1, 7], "schemap_cos_st_restricts_2_3_2_2": [1, 7], "schemap_cos_st_restricts_2_3_2_3": [1, 7], "schemap_cos_st_restricts_2_3_2_4": [1, 7], "schemap_cos_st_restricts_2_3_2_5": [1, 7], "schemap_cos_st_restricts_3_1": [1, 7], "schemap_cos_st_restricts_3_3_1": [1, 7], "schemap_cos_st_restricts_3_3_1_2": [1, 7], "schemap_cos_st_restricts_3_3_2_1": [1, 7], "schemap_cos_st_restricts_3_3_2_2": [1, 7], "schemap_cos_st_restricts_3_3_2_3": [1, 7], "schemap_cos_st_restricts_3_3_2_4": [1, 7], "schemap_cos_st_restricts_3_3_2_5": [1, 7], "schemap_cos_valid_default_1": [1, 7], "schemap_cos_valid_default_2_1": [1, 7], "schemap_cos_valid_default_2_2_1": [1, 7], "schemap_cos_valid_default_2_2_2": [1, 7], "schemap_ct_props_correct_1": [1, 7], "schemap_ct_props_correct_2": [1, 7], "schemap_ct_props_correct_3": [1, 7], "schemap_ct_props_correct_4": [1, 7], "schemap_ct_props_correct_5": [1, 7], "schemap_cvc_simple_typ": [1, 7], "schemap_c_props_correct": [1, 7], "schemap_def_and_prefix": [1, 7], "schemap_derivation_ok_restriction_1": [1, 7], "schemap_derivation_ok_restriction_2_1_1": [1, 7], "schemap_derivation_ok_restriction_2_1_2": [1, 7], "schemap_derivation_ok_restriction_2_1_3": [1, 7], "schemap_derivation_ok_restriction_2_2": [1, 7], "schemap_derivation_ok_restriction_3": [1, 7], "schemap_derivation_ok_restriction_4_1": [1, 7], "schemap_derivation_ok_restriction_4_2": [1, 7], "schemap_derivation_ok_restriction_4_3": [1, 7], "schemap_elemformdefault_valu": [1, 7], "schemap_elem_default_fix": [1, 7], "schemap_elem_noname_noref": [1, 7], "schemap_extension_no_bas": [1, 7], "schemap_e_props_correct_2": [1, 7], "schemap_e_props_correct_3": [1, 7], "schemap_e_props_correct_4": [1, 7], "schemap_e_props_correct_5": [1, 7], "schemap_e_props_correct_6": [1, 7], "schemap_facet_no_valu": [1, 7], "schemap_failed_build_import": [1, 7], "schemap_failed_load": [1, 7], "schemap_failed_pars": [1, 7], "schemap_group_noname_noref": [1, 7], "schemap_import_namespace_not_uri": [1, 7], "schemap_import_redefine_nsnam": [1, 7], "schemap_import_schema_not_uri": [1, 7], "schemap_include_schema_not_uri": [1, 7], "schemap_include_schema_no_uri": [1, 7], "schemap_intern": [1, 7], "schemap_intersection_not_express": [1, 7], "schemap_invalid_attr_combin": [1, 7], "schemap_invalid_attr_inline_combin": [1, 7], "schemap_invalid_attr_nam": [1, 7], "schemap_invalid_attr_us": [1, 7], "schemap_invalid_boolean": [1, 7], "schemap_invalid_enum": [1, 7], "schemap_invalid_facet": [1, 7], "schemap_invalid_facet_valu": [1, 7], "schemap_invalid_maxoccur": [1, 7], "schemap_invalid_minoccur": [1, 7], "schemap_invalid_ref_and_subtyp": [1, 7], "schemap_invalid_white_spac": [1, 7], "schemap_mg_props_correct_1": [1, 7], "schemap_mg_props_correct_2": [1, 7], "schemap_missing_simpletype_child": [1, 7], "schemap_noattr_noref": [1, 7], "schemap_noroot": [1, 7], "schemap_notation_no_nam": [1, 7], "schemap_nothing_to_pars": [1, 7], "schemap_notype_noref": [1, 7], "schemap_not_determinist": [1, 7], "schemap_not_schema": [1, 7], "schemap_no_xmln": [1, 7], "schemap_no_xsi": [1, 7], "schemap_prefix_undefin": [1, 7], "schemap_p_props_correct_1": [1, 7], "schemap_p_props_correct_2_1": [1, 7], "schemap_p_props_correct_2_2": [1, 7], "schemap_recurs": [1, 7], "schemap_redefined_attr": [1, 7], "schemap_redefined_attrgroup": [1, 7], "schemap_redefined_el": [1, 7], "schemap_redefined_group": [1, 7], "schemap_redefined_not": [1, 7], "schemap_redefined_typ": [1, 7], "schemap_ref_and_cont": [1, 7], "schemap_ref_and_subtyp": [1, 7], "schemap_regexp_invalid": [1, 7], "schemap_restriction_noname_noref": [1, 7], "schemap_s4s_attr_invalid_valu": [1, 7], "schemap_s4s_attr_miss": [1, 7], "schemap_s4s_attr_not_allow": [1, 7], "schemap_s4s_elem_miss": [1, 7], "schemap_s4s_elem_not_allow": [1, 7], "schemap_simpletype_nonam": [1, 7], "schemap_src_attribute_1": [1, 7], "schemap_src_attribute_2": [1, 7], "schemap_src_attribute_3_1": [1, 7], "schemap_src_attribute_3_2": [1, 7], "schemap_src_attribute_4": [1, 7], "schemap_src_attribute_group_1": [1, 7], "schemap_src_attribute_group_2": [1, 7], "schemap_src_attribute_group_3": [1, 7], "schemap_src_ct_1": [1, 7], "schemap_src_element_1": [1, 7], "schemap_src_element_2_1": [1, 7], "schemap_src_element_2_2": [1, 7], "schemap_src_element_3": [1, 7], "schemap_src_import": [1, 7], "schemap_src_import_1_1": [1, 7], "schemap_src_import_1_2": [1, 7], "schemap_src_import_2": [1, 7], "schemap_src_import_2_1": [1, 7], "schemap_src_import_2_2": [1, 7], "schemap_src_import_3_1": [1, 7], "schemap_src_import_3_2": [1, 7], "schemap_src_includ": [1, 7], "schemap_src_list_itemtype_or_simpletyp": [1, 7], "schemap_src_redefin": [1, 7], "schemap_src_resolv": [1, 7], "schemap_src_restriction_base_or_simpletyp": [1, 7], "schemap_src_simple_type_1": [1, 7], "schemap_src_simple_type_2": [1, 7], "schemap_src_simple_type_3": [1, 7], "schemap_src_simple_type_4": [1, 7], "schemap_src_union_membertypes_or_simpletyp": [1, 7], "schemap_st_props_correct_1": [1, 7], "schemap_st_props_correct_2": [1, 7], "schemap_st_props_correct_3": [1, 7], "schemap_supernumerous_list_item_typ": [1, 7], "schemap_type_and_subtyp": [1, 7], "schemap_union_not_express": [1, 7], "schemap_unknown_all_child": [1, 7], "schemap_unknown_anyattribute_child": [1, 7], "schemap_unknown_attrgrp_child": [1, 7], "schemap_unknown_attribute_group": [1, 7], "schemap_unknown_attr_child": [1, 7], "schemap_unknown_base_typ": [1, 7], "schemap_unknown_choice_child": [1, 7], "schemap_unknown_complexcontent_child": [1, 7], "schemap_unknown_complextype_child": [1, 7], "schemap_unknown_elem_child": [1, 7], "schemap_unknown_extension_child": [1, 7], "schemap_unknown_facet_child": [1, 7], "schemap_unknown_facet_typ": [1, 7], "schemap_unknown_group_child": [1, 7], "schemap_unknown_import_child": [1, 7], "schemap_unknown_include_child": [1, 7], "schemap_unknown_list_child": [1, 7], "schemap_unknown_member_typ": [1, 7], "schemap_unknown_notation_child": [1, 7], "schemap_unknown_prefix": [1, 7], "schemap_unknown_processcontent_child": [1, 7], "schemap_unknown_ref": [1, 7], "schemap_unknown_restriction_child": [1, 7], "schemap_unknown_schemas_child": [1, 7], "schemap_unknown_sequence_child": [1, 7], "schemap_unknown_simplecontent_child": [1, 7], "schemap_unknown_simpletype_child": [1, 7], "schemap_unknown_typ": [1, 7], "schemap_unknown_union_child": [1, 7], "schemap_warn_attr_pointless_proh": [1, 7], "schemap_warn_attr_redecl_proh": [1, 7], "schemap_warn_skip_schema": [1, 7], "schemap_warn_unlocated_schema": [1, 7], "schemap_wildcard_invalid_ns_memb": [1, 7], "schematronv_assert": [1, 7], "schematronv_report": [1, 7], "schemav_attrinvalid": [1, 7], "schemav_attrunknown": [1, 7], "schemav_construct": [1, 7], "schemav_cvc_attribute_1": [1, 7], "schemav_cvc_attribute_2": [1, 7], "schemav_cvc_attribute_3": [1, 7], "schemav_cvc_attribute_4": [1, 7], "schemav_cvc_au": [1, 7], "schemav_cvc_complex_type_1": [1, 7], "schemav_cvc_complex_type_2_1": [1, 7], "schemav_cvc_complex_type_2_2": [1, 7], "schemav_cvc_complex_type_2_3": [1, 7], "schemav_cvc_complex_type_2_4": [1, 7], "schemav_cvc_complex_type_3_1": [1, 7], "schemav_cvc_complex_type_3_2_1": [1, 7], "schemav_cvc_complex_type_3_2_2": [1, 7], "schemav_cvc_complex_type_4": [1, 7], "schemav_cvc_complex_type_5_1": [1, 7], "schemav_cvc_complex_type_5_2": [1, 7], "schemav_cvc_datatype_valid_1_2_1": [1, 7], "schemav_cvc_datatype_valid_1_2_2": [1, 7], "schemav_cvc_datatype_valid_1_2_3": [1, 7], "schemav_cvc_elt_1": [1, 7], "schemav_cvc_elt_2": [1, 7], "schemav_cvc_elt_3_1": [1, 7], "schemav_cvc_elt_3_2_1": [1, 7], "schemav_cvc_elt_3_2_2": [1, 7], "schemav_cvc_elt_4_1": [1, 7], "schemav_cvc_elt_4_2": [1, 7], "schemav_cvc_elt_4_3": [1, 7], "schemav_cvc_elt_5_1_1": [1, 7], "schemav_cvc_elt_5_1_2": [1, 7], "schemav_cvc_elt_5_2_1": [1, 7], "schemav_cvc_elt_5_2_2_1": [1, 7], "schemav_cvc_elt_5_2_2_2_1": [1, 7], "schemav_cvc_elt_5_2_2_2_2": [1, 7], "schemav_cvc_elt_6": [1, 7], "schemav_cvc_elt_7": [1, 7], "schemav_cvc_enumeration_valid": [1, 7], "schemav_cvc_facet_valid": [1, 7], "schemav_cvc_fractiondigits_valid": [1, 7], "schemav_cvc_idc": [1, 7], "schemav_cvc_length_valid": [1, 7], "schemav_cvc_maxexclusive_valid": [1, 7], "schemav_cvc_maxinclusive_valid": [1, 7], "schemav_cvc_maxlength_valid": [1, 7], "schemav_cvc_minexclusive_valid": [1, 7], "schemav_cvc_mininclusive_valid": [1, 7], "schemav_cvc_minlength_valid": [1, 7], "schemav_cvc_pattern_valid": [1, 7], "schemav_cvc_totaldigits_valid": [1, 7], "schemav_cvc_type_1": [1, 7], "schemav_cvc_type_2": [1, 7], "schemav_cvc_type_3_1_1": [1, 7], "schemav_cvc_type_3_1_2": [1, 7], "schemav_cvc_wildcard": [1, 7], "schemav_document_element_miss": [1, 7], "schemav_elemcont": [1, 7], "schemav_element_cont": [1, 7], "schemav_extracont": [1, 7], "schemav_facet": [1, 7], "schemav_havedefault": [1, 7], "schemav_intern": [1, 7], "schemav_invalidattr": [1, 7], "schemav_invalidelem": [1, 7], "schemav_isabstract": [1, 7], "schemav_misc": [1, 7], "schemav_miss": [1, 7], "schemav_norollback": [1, 7], "schemav_noroot": [1, 7], "schemav_notdeterminist": [1, 7], "schemav_notempti": [1, 7], "schemav_notnil": [1, 7], "schemav_notsimpl": [1, 7], "schemav_nottoplevel": [1, 7], "schemav_notyp": [1, 7], "schemav_undeclaredelem": [1, 7], "schemav_valu": [1, 7], "schemav_wrongelem": [1, 7], "tree_invalid_dec": [1, 7], "tree_invalid_hex": [1, 7], "tree_not_utf8": [1, 7], "tree_unterminated_ent": [1, 7], "war_catalog_pi": [1, 7], "war_entity_redefin": [1, 7], "war_lang_valu": [1, 7], "war_ns_column": [1, 7], "war_ns_uri": [1, 7], "war_ns_uri_rel": [1, 7], "war_space_valu": [1, 7], "war_undeclared_ent": [1, 7], "war_unknown_vers": [1, 7], "xinclude_build_fail": [1, 7], "xinclude_deprecated_n": [1, 7], "xinclude_entity_def_mismatch": [1, 7], "xinclude_fallbacks_in_includ": [1, 7], "xinclude_fallback_not_in_includ": [1, 7], "xinclude_fragment_id": [1, 7], "xinclude_href_uri": [1, 7], "xinclude_include_in_includ": [1, 7], "xinclude_invalid_char": [1, 7], "xinclude_multiple_root": [1, 7], "xinclude_no_fallback": [1, 7], "xinclude_no_href": [1, 7], "xinclude_parse_valu": [1, 7], "xinclude_recurs": [1, 7], "xinclude_text_docu": [1, 7], "xinclude_text_frag": [1, 7], "xinclude_unknown_encod": [1, 7], "xinclude_xptr_fail": [1, 7], "xinclude_xptr_result": [1, 7], "xpath_encoding_error": [1, 7], "xpath_expression_ok": [1, 7], "xpath_expr_error": [1, 7], "xpath_invalid_ar": [1, 7], "xpath_invalid_char_error": [1, 7], "xpath_invalid_ctxt_posit": [1, 7], "xpath_invalid_ctxt_s": [1, 7], "xpath_invalid_operand": [1, 7], "xpath_invalid_predicate_error": [1, 7], "xpath_invalid_typ": [1, 7], "xpath_memory_error": [1, 7], "xpath_number_error": [1, 7], "xpath_start_literal_error": [1, 7], "xpath_unclosed_error": [1, 7], "xpath_undef_prefix_error": [1, 7], "xpath_undef_variable_error": [1, 7], "xpath_unfinished_literal_error": [1, 7], "xpath_unknown_func_error": [1, 7], "xpath_variable_ref_error": [1, 7], "xptr_childseq_start": [1, 7], "xptr_eval_fail": [1, 7], "xptr_extra_object": [1, 7], "xptr_resource_error": [1, 7], "xptr_sub_resource_error": [1, 7], "xptr_syntax_error": [1, 7], "xptr_unknown_schem": [1, 7], "read_ev": [1, 7], "log": [1, 7, 8, 19], "receiv": [1, 7, 21], "last_error": [1, 7], "level_map": [1, 7], "localnam": [1, 7, 8, 20, 21], "from_rnc_str": [1, 7], "relaxng_err_attrextran": [1, 7], "relaxng_err_attrnam": [1, 7], "relaxng_err_attrnon": [1, 7], "relaxng_err_attrvalid": [1, 7], "relaxng_err_attrwrongn": [1, 7], "relaxng_err_contentvalid": [1, 7], "relaxng_err_dataelem": [1, 7], "relaxng_err_datatyp": [1, 7], "relaxng_err_dupid": [1, 7], "relaxng_err_elemextran": [1, 7], "relaxng_err_elemnam": [1, 7], "relaxng_err_elemnon": [1, 7], "relaxng_err_elemnotempti": [1, 7], "relaxng_err_elemwrong": [1, 7], "relaxng_err_elemwrongn": [1, 7], "relaxng_err_extracont": [1, 7], "relaxng_err_extradata": [1, 7], "relaxng_err_interextra": [1, 7], "relaxng_err_intern": [1, 7], "relaxng_err_internodata": [1, 7], "relaxng_err_interseq": [1, 7], "relaxng_err_invalidattr": [1, 7], "relaxng_err_lackdata": [1, 7], "relaxng_err_list": [1, 7], "relaxng_err_listelem": [1, 7], "relaxng_err_listempti": [1, 7], "relaxng_err_listextra": [1, 7], "relaxng_err_memori": [1, 7], "relaxng_err_nodefin": [1, 7], "relaxng_err_noelem": [1, 7], "relaxng_err_nogrammar": [1, 7], "relaxng_err_nost": [1, 7], "relaxng_err_notelem": [1, 7], "relaxng_err_textwrong": [1, 7], "relaxng_err_typ": [1, 7], "relaxng_err_typecmp": [1, 7], "relaxng_err_typev": [1, 7], "relaxng_err_valelem": [1, 7], "relaxng_err_valu": [1, 7], "relaxng_ok": [1, 7], "resolve_empti": [1, 7], "resolve_fil": [1, 7], "resolve_filenam": [1, 7], "resolve_str": [1, 7], "appli": [1, 7, 8, 15], "set_global_max_depth": [1, 7], "strparam": [1, 7, 19], "deny_al": [1, 7], "deny_writ": [1, 7], "apply_templ": [1, 7], "execut": [1, 7], "process_children": [1, 7], "has_kei": [1, 7], "iteritem": [1, 7], "iterkei": [1, 7], "itervalu": [1, 7], "filter_domain": [1, 7], "filter_from_error": [1, 7], "filter_from_fat": [1, 7], "filter_from_level": [1, 7], "filter_from_warn": [1, 7], "filter_level": [1, 7], "filter_typ": [1, 7], "capit": [1, 7, 8, 15], "decod": [1, 7, 20], "endswith": [1, 7, 8, 15], "expandtab": [1, 7, 8, 15], "fromhex": [1, 7], "hex": [1, 6, 7], "isalnum": [1, 7, 8, 15], "isalpha": [1, 7, 8, 15], "isascii": [1, 7, 8, 15], "isdigit": [1, 7, 8, 15], "islow": [1, 7, 8, 15], "isspac": [1, 7, 8, 15], "istitl": [1, 7, 8, 15], "isupp": [1, 7, 8, 15], "join": [1, 7, 8, 15], "ljust": [1, 7, 8, 15], "lower": [1, 7, 8, 15], "lstrip": [1, 7, 8, 15], "maketran": [1, 7, 8, 15], "partit": [1, 7, 8, 15], "removeprefix": [1, 7, 8, 15], "removesuffix": [1, 7, 8, 15], "rfind": [1, 7, 8, 15], "rindex": [1, 7, 8, 15], "rjust": [1, 7, 8, 15], "rpartit": [1, 7, 8, 15], "rsplit": [1, 7, 8, 15], "rstrip": [1, 7, 8, 15], "split": [1, 7, 8, 15, 21], "splitlin": [1, 7, 8, 15], "startswith": [1, 7, 8, 15], "swapcas": [1, 7, 8, 15], "translat": [1, 7, 8, 15, 20], "upper": [1, 7, 8, 15], "zfill": [1, 7, 8, 15], "_setroot": [1, 7], "getelementpath": [1, 7], "getpath": [1, 7], "getroot": [1, 7, 8], "write": [1, 4, 7], "write_c14n": [1, 7], "casefold": [1, 7, 8, 15], "format": [1, 7, 8, 15], "format_map": [1, 7, 8, 15], "isdecim": [1, 7, 8, 15], "isidentifi": [1, 7, 8, 15], "isnumer": [1, 7, 8, 15], "isprint": [1, 7, 8, 15], "attrnam": [1, 7], "is_attribut": [1, 7], "is_tail": [1, 7], "is_text": [1, 7], "column": [1, 7, 12], "domain": [1, 7, 19], "domain_nam": [1, 7], "level": [1, 7, 8, 15, 19, 20], "level_nam": [1, 7], "line": [1, 6, 7, 8, 12, 15, 19, 20], "messag": [1, 7, 16, 19], "type_nam": [1, 7], "parsexsl": [1, 7], "write_output": [1, 7], "xslt_profil": [1, 7], "root": [1, 7, 8, 12, 19, 20], "skip_subtre": [1, 7], "_settext": [1, 20], "_setvaluepars": [1, 20], "addattr": [1, 20], "countchildren": [1, 20], "descendantpath": [1, 20], "pyval": [1, 20], "hasattr": [1, 20], "setattr": [1, 20], "regist": [1, 7, 15, 20], "unregist": [1, 20], "stringifi": [1, 20], "type_check": [1, 20], "xmlschematyp": [1, 20], "strlen": [1, 20], "_buildtag": [1, 21], "_get_etre": [1, 21], "charact": [1, 4, 7, 8, 13, 15, 21], "enddocu": [1, 21], "endel": [1, 21], "endelementn": [1, 21], "endprefixmap": [1, 21], "ignorablewhitespac": [1, 21], "setdocumentloc": [1, 21], "skippedent": [1, 21], "startdocu": [1, 21], "startel": [1, 21], "startelementn": [1, 21], "startprefixmap": [1, 21], "sourc": [1, 2, 6, 7, 8, 10, 11, 12, 16, 19, 21], "return": [1, 2, 4, 6, 7, 8, 11, 13, 15, 16, 19, 20, 21], "list": [1, 7, 8, 12, 13, 15, 20], "header": [1, 12, 13], "itself": [1, 7, 8, 13, 15, 19, 20, 21], "libxml2": [1, 7], "libxslt": [1, 7], "need": [1, 7, 8, 13, 15, 20, 21], "compil": [1, 3, 7, 8, 13, 19, 20], "c": [1, 7, 13, 15], "against": [1, 7, 15, 21], "wa": [1, 7, 8, 13, 15, 20, 21], "built": [1, 8, 11, 19], "static": [1, 7, 15], "librari": [1, 7, 21], "limit": [2, 7, 15], "support": [2, 4, 7, 8, 19, 20], "while": [2, 6, 7, 15], "ha": [2, 7, 8, 15, 19, 20, 21], "full": [2, 8], "see": [2, 6, 7, 8, 13, 15, 20, 21], "thi": [2, 4, 6, 7, 8, 11, 13, 15, 19, 20, 21], "provid": [2, 7, 8, 20, 21], "simpler": 2, "pure": [2, 7, 19], "python": [2, 4, 7, 8, 15, 19, 20, 21], "compat": [2, 7, 8, 11, 20], "implement": [2, 7, 8, 11, 13, 15, 19, 20], "simpl": [2, 4, 7, 19], "custom": [2, 7, 8, 19, 20], "except": [2, 6, 7, 8, 11, 15, 16, 21], "note": [2, 6, 7, 8, 11, 13, 15, 16, 20, 21], "tb": [2, 7, 15, 16, 21], "self": [2, 7, 8, 11, 15, 16, 19, 20, 21], "__traceback__": [2, 7, 15, 16, 21], "elem": [2, 3, 7], "loader": 2, "max_depth": [2, 7], "6": [2, 7, 15], "_parent_href": 2, "href": [2, 4, 7, 8, 13, 15], "selector": [3, 12], "pattern": [3, 7, 8, 13, 19], "default": [3, 6, 7, 8, 13, 15, 19, 20, 21], "next": [3, 7, 8, 20], "The": [4, 7, 8, 13, 15, 19, 20, 21], "e": [4, 7, 8, 12, 13, 15, 19, 20], "factori": [4, 7, 8, 13, 20], "gener": [4, 6, 7, 8, 12, 13, 15, 20, 21], "document": [4, 6, 7, 8, 12, 13, 15, 19, 20, 21], "unlik": [4, 7, 8, 15, 20], "ordinari": [4, 7, 8, 20], "allow": [4, 6, 7, 8, 13, 20, 21], "you": [4, 6, 7, 8, 11, 13, 15, 19, 20], "pass": [4, 7, 8, 13, 19, 20], "more": [4, 6, 7, 8, 13, 15], "than": [4, 7, 8, 15], "just": [4, 6, 7, 8, 13, 15, 20, 21], "some": [4, 6, 7, 8, 13, 15, 20], "attribut": [4, 6, 7, 8, 13, 15, 19, 20, 21], "can": [4, 6, 7, 8, 13, 15, 16, 19, 20], "also": [4, 6, 7, 8, 13, 15, 19, 20, 21], "other": [4, 7, 8, 11, 13, 15, 20, 21], "ad": [4, 7, 8, 13, 15, 20], "either": [4, 7, 8, 15, 19, 20, 21], "ar": [4, 6, 7, 8, 11, 13, 15, 19, 20, 21], "right": [4, 7, 8, 15, 20], "spot": 4, "exampl": [4, 6, 7, 8, 15, 19, 20, 21], "from": [4, 6, 7, 8, 11, 12, 13, 14, 15, 19, 20, 21], "import": [4, 6, 7, 8, 12, 15, 19, 20], "et": 4, "subtag": 4, "For": [4, 7, 8, 19, 20], "instead": [4, 6, 7, 8, 15, 20], "here": [4, 7, 8, 15, 19], "somewhat": 4, "larger": 4, "show": [4, 8, 15], "how": [4, 7, 8, 11, 15], "us": [4, 6, 7, 8, 11, 13, 15, 19, 20, 21], "mix": [4, 7, 8, 11], "prepar": 4, "function": [4, 7, 8, 11, 15, 19, 20, 21], "inlin": [4, 12], "nest": [4, 7, 21], "call": [4, 6, 7, 8, 11, 15, 19, 20, 21], "embed": [4, 7, 8, 12, 13, 19], "xhtml": [4, 7, 8, 20], "fragment": [4, 7, 8, 12, 15], "common": [4, 7, 8, 15], "v": [4, 6, 8, 12], "helper": [4, 8, 15, 21], "reserv": [4, 7, 15], "word": [4, 7, 13, 15], "sampl": [4, 12], "hello": [4, 8, 12, 15, 20], "paragraph": [4, 8, 12], "bold": [4, 12, 20], "anoth": [4, 13, 15], "www": [4, 7, 8, 12, 13, 14], "org": [4, 7, 8, 13, 14, 19, 21], "spam": 4, "egg": 4, "And": 4, "final": [4, 7], "an": [4, 6, 7, 8, 11, 13, 15, 19, 20, 21], "print": [4, 7, 8, 12, 15, 20], "prettyprint": 4, "abov": [4, 15], "lt": 4, "amp": 4, "gt": 4, "specif": [4, 7, 8, 13, 15, 20], "my": 4, "n": [4, 7, 8, 11, 13, 15, 20], "test": [4, 6, 7, 13, 15, 19], "xmln": [4, 7, 19], "__pyx_typ": [4, 21], "__pyx_checksum": [4, 21], "__pyx_stat": [4, 21], "doctest": 6, "comparison": [6, 7, 15], "normal": [6, 7, 8, 13, 20, 21], "should": [6, 7, 8, 11, 15, 20, 21], "usedoctest": 6, "within": [6, 7, 8, 15, 20], "one": [6, 7, 8, 13, 15, 20], "To": [6, 7, 8, 15, 19, 20], "directli": [6, 7, 8, 15, 20], "must": [6, 7, 8, 11, 15, 19, 20, 21], "lxmldoctest": 6, "which": [6, 7, 8, 13, 15, 20, 21], "caus": 6, "all": [6, 7, 8, 11, 13, 15, 20, 21], "subsequ": [6, 15], "chang": [6, 7, 8, 12, 15, 19, 20], "wai": [6, 7, 8], "made": [6, 7], "like": [6, 7, 8, 13, 15, 19, 20], "notic": 6, "becaus": [6, 7, 21], "parse_xml": 6, "flag": [6, 7, 8], "forc": [6, 12], "rough": 6, "wildcard": [6, 7, 8, 20], "thing": [6, 8], "whitespac": [6, 7, 8, 15, 21], "ignor": [6, 7, 8, 15, 19, 20, 21], "In": [6, 7, 8, 15, 20], "match": [6, 7, 8, 11, 13, 15, 20, 21], "ani": [6, 7, 8, 11, 13, 15, 20, 21], "trail": [6, 7, 8, 15], "though": [6, 15, 21], "doe": [6, 7, 8, 11, 13, 15, 19, 20, 21], "lead": [6, 7, 8, 15], "mai": [6, 7, 8, 13, 15, 20, 21], "creat": [6, 7, 8, 11, 19, 20], "when": [6, 7, 8, 13, 15, 16, 20, 21], "fail": [6, 7, 8, 19], "reformat": 6, "gotten": 6, "displai": [6, 15], "given": [6, 7, 8, 13, 15, 19, 20], "anyth": [6, 8, 13, 15], "mark": [6, 7], "wasn": 6, "t": [6, 7, 8, 11, 13, 15, 20], "suppos": 6, "similarli": [6, 8, 15], "mean": [6, 7, 15], "its": [6, 7, 8, 11, 15, 19, 20, 21], "disabl": [6, 7, 8, 13, 20], "noparse_markup": 6, "want": [6, 7, 8, 13, 15, 20], "got": 6, "optionflag": 6, "convert": [6, 7, 8, 15, 19, 20], "string": [6, 7, 8, 13, 15, 19, 20, 21], "escap": [6, 7], "ascii": [6, 7, 8, 15, 20], "true": [6, 7, 8, 11, 12, 13, 15, 16, 19, 20, 21], "iff": [6, 20], "actual": [6, 7, 15], "expect": [6, 7], "These": [6, 7], "alwai": [6, 7, 8, 20, 21], "consid": [6, 7, 13, 15, 20], "thei": [6, 7, 8, 11, 13, 15, 20, 21], "ident": [6, 7, 8, 15, 20], "depend": [6, 7, 8, 13, 20, 21], "what": [6, 7, 8, 13, 20], "runner": 6, "sever": [6, 7, 8, 21], "non": [6, 7, 8, 12, 13, 15, 19, 21], "exact": 6, "possibl": [6, 7, 8, 13, 15, 20], "testrunn": 6, "inform": [6, 7, 8, 12, 15, 20, 21], "about": [6, 7, 8, 15], "doc": [6, 7, 8, 13, 15], "el": [6, 7, 8, 13, 15, 16, 20], "describ": [6, 15], "between": [6, 7, 15], "compar": [6, 7, 8, 11, 15, 20], "outputcheck": 6, "dt_self": 6, "old_check": 6, "new_check": 6, "check_func": 6, "clone_func": 6, "del_modul": 6, "kw": [6, 7, 8, 13, 16, 20], "fals": [6, 7, 8, 13, 15, 19, 20], "futur": [6, 7], "If": [6, 7, 8, 11, 13, 15, 19, 20], "otherwis": [6, 7, 8, 15, 20, 21], "insid": [6, 7, 8, 15], "enabl": [6, 7, 8, 20], "checker": 6, "onli": [6, 7, 8, 13, 15, 19, 20, 21], "api": [7, 8, 20], "dure": [7, 21], "serialis": [7, 8], "rais": [7, 8, 11, 15, 16, 19, 20], "inherit": [7, 20], "registri": [7, 8], "syntaxerror": 7, "syntax": 7, "1": [7, 8, 13, 15, 19, 20, 21], "3": [7, 8, 15, 19, 20, 21], "later": [7, 8, 15], "properti": [7, 8, 12, 19, 20, 21], "intern": [7, 8], "schema": [7, 19, 20], "occur": [7, 8, 15, 21], "process": [7, 8, 13, 19, 20, 21], "assertionerror": [7, 19], "addition": [7, 8, 20], "backward": [7, 8, 20], "reason": 7, "plain": [7, 8], "look": [7, 8, 13, 15, 20], "up": [7, 8, 13, 15, 20], "handl": [7, 8, 15, 20], "result": [7, 8, 15, 19, 20], "run": [7, 8, 20], "xsl": [7, 19], "transform": [7, 15], "stylesheet": [7, 8, 13, 19], "node": [7, 8, 20], "over": [7, 8, 12, 20], "ancestor": [7, 8, 20], "parent": [7, 8, 13, 20], "attribute_nam": 7, "class_map": 7, "dictionari": [7, 8, 15, 19, 20], "argument": [7, 8, 12, 15, 19, 20], "dict": [7, 8, 20], "mechan": 7, "miss": 7, "scheme": [7, 8, 15], "event": [7, 21], "2": [7, 8, 15, 19, 20, 21], "0": [7, 8, 13, 15, 19, 20, 21], "configur": [7, 8, 13], "with_com": 7, "strip_text": 7, "befor": [7, 8, 13, 15, 20, 21], "after": [7, 8, 15, 20, 21], "rewrite_prefix": 7, "number": [7, 8, 15, 19, 20], "qname_aware_tag": 7, "awar": [7, 8], "qname_aware_attr": 7, "exclude_attr": 7, "exclude_tag": 7, "ns_stack": 7, "attr": [7, 21], "opaqu": 7, "usual": [7, 13, 20], "unicod": [7, 8, 13, 15, 20], "instanc": [7, 8, 11, 12, 13, 15, 20, 21], "subclass": [7, 8, 13, 19, 20], "overrid": [7, 8, 11, 13, 20], "__init__": [7, 19], "__new__": 7, "absolut": [7, 8, 13, 21], "undefin": [7, 8], "destroi": 7, "persist": 7, "state": 7, "store": [7, 19, 20], "underli": [7, 8], "realli": [7, 8], "initi": [7, 19], "creation": 7, "initialis": [7, 8, 20], "recurs": [7, 8, 20], "superclass": [7, 8, 20], "follow": [7, 8, 15, 19, 20], "sibl": [7, 8, 20], "instruct": [7, 8, 13, 20, 21], "automat": [7, 8, 20, 21], "preced": [7, 8, 15, 19, 20], "keep_tail": [7, 8, 20], "reset": [7, 8, 20], "leav": [7, 8, 20], "untouch": [7, 8, 15, 20], "expr": [7, 8, 13, 20], "css": [7, 8, 20], "express": [7, 8, 13, 15, 19, 20], "children": [7, 8, 20, 21], "equival": [7, 8, 15, 20], "substanti": [7, 8, 20], "speedup": [7, 8, 20], "current": [7, 8, 15, 20], "first": [7, 8, 15, 20], "accept": [7, 8, 11, 13, 15, 20], "usag": [7, 8, 12, 19, 20], "direct": [7, 8, 20], "order": [7, 8, 11, 12, 15, 20, 21], "deprec": [7, 8, 12, 20], "been": [7, 8, 15, 19], "new": [7, 8, 11, 15, 20], "simpli": [7, 8, 20], "sequenc": [7, 8, 15, 20], "subtre": [7, 8, 13, 20], "depth": [7, 8, 20], "restrict": [7, 8, 15, 19, 20], "It": [7, 8, 13, 15, 20], "diverg": [7, 8, 20], "origin": [7, 8, 15, 20, 21], "behaviour": [7, 8, 19, 20], "effici": [7, 8, 20], "requir": [7, 8, 20, 21], "older": [7, 8, 20], "contain": [7, 8, 11, 12, 13, 15, 20, 21], "same": [7, 8, 11, 15, 20, 21], "until": [7, 8, 20, 21], "build": [7, 8, 12, 20, 21], "last": [7, 8, 15, 20, 21], "child": [7, 8, 20], "stop": [7, 8, 15, 20], "part": [7, 8, 13, 15, 20, 21], "both": [7, 8, 15, 20], "empti": [7, 8, 11, 15, 20], "singl": [7, 8, 12, 15, 20, 21], "let": [7, 8, 20], "As": [7, 8, 15, 20], "oppos": [7, 8, 20], "keyword": [7, 8, 15, 19, 20], "descend": [7, 8, 20], "yield": [7, 8, 20], "determin": [7, 8, 15, 20, 21], "forward": [7, 8, 20], "go": [7, 8, 20], "with_tail": [7, 8, 20], "skip": [7, 8, 20, 21], "_tag": [7, 8, 20], "_extra": [7, 8, 20], "associ": [7, 8, 20], "old_el": [7, 8, 20], "new_el": [7, 8, 20], "second": [7, 8, 15, 20], "_path": [7, 8, 20], "smart_str": [7, 8, 20], "_variabl": [7, 8, 20], "context": [7, 8, 13, 15, 19, 20, 21], "unknown": [7, 8, 20], "hold": [7, 8, 20, 21], "regardless": [7, 8, 11, 13, 20], "known": [7, 8, 19, 20], "declar": [7, 8, 20, 21], "effect": [7, 8, 11, 13, 15, 20], "found": [7, 8, 13, 15, 16, 20, 21], "file": [7, 8, 19, 20], "load": [7, 8], "filesystem": 7, "altern": [7, 12, 19], "paramet": [7, 13, 19, 21], "compli": [7, 19], "subset": [7, 21], "extern": [7, 20, 21], "public": [7, 8], "id": [7, 8, 13, 19], "mutabl": 7, "exist": [7, 8, 15, 20], "variabl": [7, 12], "even": [7, 15, 21], "defin": [7, 8, 11, 15, 20], "ye": 7, "truth": 7, "tell": [7, 8], "system": [7, 19], "attribute_default": 7, "dtd_valid": [7, 8], "load_dtd": [7, 8], "no_network": 7, "ns_clean": 7, "recov": 7, "huge_tre": 7, "remove_blank_text": [7, 20], "resolve_ent": 7, "remove_com": 7, "remove_pi": 7, "strip_cdata": 7, "compact": [7, 13], "setup": 7, "detail": [7, 13, 15, 21], "thu": [7, 8, 20], "termin": [7, 8], "remain": [7, 8, 15], "chunk": [7, 8, 15, 21], "interfac": [7, 8, 21], "8": [7, 8, 15, 21], "bit": [7, 8, 13], "although": [7, 8], "long": [7, 8, 12, 13], "entri": [7, 8, 19, 20], "point": [7, 8, 15], "consum": [7, 8], "much": [7, 8, 11], "stream": [7, 8], "each": [7, 8, 13, 15, 21], "finish": [7, 8, 21], "longer": [7, 8, 15, 20], "independ": [7, 8, 12], "concurr": [7, 8], "noth": [7, 8, 15], "local": [7, 8, 12], "special": [7, 8, 15], "notat": [7, 15], "smart": 7, "unless": [7, 8, 15, 20], "_eval_arg": 7, "liter": [7, 20], "fat": 7, "instanti": [7, 20], "By": [7, 15], "modifi": [7, 8, 13, 15], "possibli": [7, 15, 20], "clark": 7, "un": 7, "newli": 7, "user": [7, 12, 15, 20], "latter": 7, "three": [7, 15], "commonli": 7, "hierarchi": 7, "arbitrari": [7, 8, 20], "without": [7, 8, 15, 20], "where": [7, 8, 15, 20, 21], "access": [7, 8, 19, 20], "respect": 7, "inclus": [7, 19], "filter": [7, 19], "them": [7, 8, 13, 15, 20, 21], "out": [7, 8, 15], "boolean": [7, 8, 20], "exclud": 7, "complet": [7, 8, 15, 19], "travers": 7, "ns_element": 7, "movi": 7, "movieel": 7, "explicit": 7, "ns_uri": 7, "retriev": [7, 19, 20], "yet": [7, 8, 20], "g": [7, 8, 12, 15, 19], "know": [7, 8, 20], "pretti": 7, "els": [7, 8, 19], "29": 7, "21": [7, 15], "20": [7, 15], "24": 7, "15": 7, "4": [7, 8, 15, 21], "9": [7, 13, 15], "5": [7, 15, 19], "10": [7, 21], "27": [7, 15], "26": [7, 15], "7": [7, 15], "14": 7, "18": 7, "19": [7, 15], "16": [7, 15], "17": [7, 15], "28": [7, 15, 19], "30": [7, 15], "23": [7, 15], "25": [7, 20], "11": [7, 15], "12": [7, 15], "13": 7, "22": [7, 15], "7000": 7, "1950": 7, "1952": 7, "1953": 7, "1955": 7, "1951": 7, "1954": 7, "1651": 7, "1650": 7, "1653": 7, "1652": 7, "1654": 7, "5012": 7, "5001": 7, "5003": 7, "5007": 7, "5008": 7, "5000": 7, "5005": 7, "5004": 7, "5009": 7, "5010": 7, "5006": 7, "5002": 7, "5037": 7, "5023": 7, "5024": 7, "5022": 7, "5025": 7, "5026": 7, "5034": 7, "5027": 7, "5032": 7, "5033": 7, "5014": 7, "5016": 7, "5028": 7, "5015": 7, "5020": 7, "5013": 7, "5018": 7, "5031": 7, "5030": 7, "5035": 7, "5011": 7, "5017": 7, "5036": 7, "5021": 7, "5029": 7, "5019": 7, "500": 7, "501": 7, "502": 7, "503": 7, "504": 7, "505": 7, "506": 7, "541": 7, "507": 7, "508": 7, "509": 7, "510": 7, "511": 7, "512": 7, "513": 7, "514": 7, "515": 7, "516": 7, "517": 7, "518": 7, "519": 7, "520": 7, "526": 7, "527": 7, "528": 7, "529": 7, "530": 7, "521": 7, "522": 7, "523": 7, "524": 7, "525": 7, "531": 7, "538": 7, "532": 7, "533": 7, "534": 7, "535": 7, "536": 7, "537": 7, "540": 7, "539": 7, "51": 7, "50": 7, "40": [7, 13, 15], "39": 7, "42": 7, "41": 7, "63": 7, "112": 7, "45": 7, "83": 7, "95": 7, "59": 7, "58": 7, "61": 7, "55": 7, "54": 7, "79": 7, "90": 7, "87": 7, "89": 7, "37": 7, "36": 7, "88": 7, "104": 7, "75": [7, 15], "86": 7, "82": 7, "60": 7, "73": 7, "80": 7, "81": 7, "91": 7, "44": 7, "43": 7, "74": 7, "38": [7, 15], "72": 7, "62": 7, "101": 7, "53": 7, "52": 7, "68": 7, "110": 7, "67": 7, "49": 7, "48": 7, "105": 7, "103": 7, "85": 7, "94": 7, "35": [7, 15], "69": 7, "47": 7, "46": 7, "71": 7, "64": 7, "66": 7, "65": 7, "78": 7, "34": [7, 15], "33": 7, "76": 7, "77": 7, "31": [7, 15], "108": 7, "32": 7, "92": 7, "70": 7, "111": 7, "84": 7, "109": 7, "96": 7, "57": 7, "56": 7, "2002": 7, "2001": 7, "2000": 7, "2003": 7, "800": 7, "801": 7, "2022": 7, "2020": 7, "2021": 7, "6003": 7, "6002": 7, "6001": 7, "6000": 7, "6004": 7, "1548": 7, "1501": 7, "1554": 7, "1556": 7, "1502": 7, "1555": 7, "1503": 7, "1504": 7, "1505": 7, "1506": 7, "1507": 7, "1552": 7, "1508": 7, "1509": 7, "1510": 7, "1511": 7, "1512": 7, "1513": 7, "1514": 7, "1515": 7, "1516": 7, "1551": 7, "1517": 7, "1518": 7, "1519": 7, "1520": 7, "1521": 7, "1544": 7, "1553": 7, "1522": 7, "1523": 7, "1524": 7, "1525": 7, "1526": 7, "1527": 7, "1528": 7, "1529": 7, "1530": 7, "1531": 7, "1550": 7, "1532": 7, "1533": 7, "1534": 7, "1535": 7, "1536": 7, "1537": 7, "1538": 7, "1539": 7, "1540": 7, "1541": 7, "1542": 7, "1545": 7, "1549": 7, "1543": 7, "1547": 7, "1500": 7, "1546": 7, "4901": 7, "4900": 7, "203": 7, "205": 7, "204": 7, "202": 7, "201": 7, "200": 7, "1450": 7, "1000": 7, "1002": 7, "1003": 7, "1004": 7, "1005": 7, "1001": 7, "1006": 7, "1007": 7, "1008": 7, "1009": 7, "1011": 7, "1012": 7, "1013": 7, "1014": 7, "1010": 7, "1018": 7, "1017": 7, "1019": 7, "1020": 7, "1015": 7, "1016": 7, "1021": 7, "1022": 7, "1023": 7, "1024": 7, "1025": 7, "1026": 7, "1027": 7, "1028": 7, "1029": 7, "1030": 7, "1031": 7, "1033": 7, "1032": 7, "1034": 7, "1035": 7, "1036": 7, "1037": 7, "1038": 7, "1039": 7, "1040": 7, "1041": 7, "1042": 7, "1043": 7, "1044": 7, "1045": 7, "1046": 7, "1047": 7, "1048": 7, "1049": 7, "1050": 7, "1051": 7, "1052": 7, "1053": 7, "1054": 7, "1055": 7, "1056": 7, "1057": 7, "1058": 7, "1059": 7, "1060": 7, "1061": 7, "1064": 7, "1062": 7, "1063": 7, "1065": 7, "1066": 7, "1067": 7, "1068": 7, "1069": 7, "1070": 7, "1071": 7, "1072": 7, "1073": 7, "1074": 7, "1075": 7, "1076": 7, "1077": 7, "1078": 7, "1079": 7, "1080": 7, "1081": 7, "1082": 7, "1083": 7, "1084": 7, "1085": 7, "1086": 7, "1087": 7, "1088": 7, "1089": 7, "1090": 7, "1091": 7, "1092": 7, "1093": 7, "1094": 7, "1095": 7, "1096": 7, "1097": 7, "1098": 7, "1099": 7, "1100": 7, "1103": 7, "1101": 7, "1102": 7, "1104": 7, "1105": 7, "1106": 7, "1107": 7, "1108": 7, "1109": 7, "1110": 7, "1111": 7, "1112": 7, "1113": 7, "1114": 7, "1115": 7, "1116": 7, "1117": 7, "1118": 7, "1119": 7, "1120": 7, "1121": 7, "1122": 7, "1401": 7, "1400": 7, "1402": 7, "1403": 7, "3087": 7, "1701": 7, "1702": 7, "1703": 7, "3089": 7, "3078": 7, "3079": 7, "3090": 7, "1704": 7, "3091": 7, "3063": 7, "3088": 7, "1800": 7, "3031": 7, "3032": 7, "3011": 7, "3012": 7, "3013": 7, "3014": 7, "3015": 7, "3016": 7, "3017": 7, "3018": 7, "3019": 7, "3020": 7, "3021": 7, "3022": 7, "3023": 7, "3024": 7, "3025": 7, "3027": 7, "3026": 7, "3028": 7, "3029": 7, "3030": 7, "3058": 7, "3059": 7, "3060": 7, "3061": 7, "1782": 7, "1783": 7, "1784": 7, "1785": 7, "1786": 7, "3062": 7, "3080": 7, "1768": 7, "1787": 7, "1788": 7, "1789": 7, "3077": 7, "1790": 7, "1791": 7, "1797": 7, "1798": 7, "1799": 7, "1705": 7, "1755": 7, "1706": 7, "1707": 7, "3045": 7, "3046": 7, "3047": 7, "3048": 7, "3049": 7, "1708": 7, "1709": 7, "1757": 7, "1766": 7, "1710": 7, "1711": 7, "1712": 7, "1713": 7, "1770": 7, "1771": 7, "3069": 7, "1793": 7, "1777": 7, "1778": 7, "1780": 7, "1774": 7, "1714": 7, "1715": 7, "1716": 7, "1717": 7, "1718": 7, "1719": 7, "1720": 7, "1721": 7, "3074": 7, "3075": 7, "1779": 7, "1722": 7, "1759": 7, "1723": 7, "1758": 7, "1724": 7, "3070": 7, "1772": 7, "3056": 7, "3057": 7, "1700": 7, "3042": 7, "3043": 7, "3044": 7, "1775": 7, "1764": 7, "1763": 7, "1762": 7, "1760": 7, "1765": 7, "1761": 7, "1781": 7, "1725": 7, "1756": 7, "1726": 7, "3037": 7, "3036": 7, "3035": 7, "3034": 7, "3033": 7, "1727": 7, "3051": 7, "3052": 7, "3053": 7, "3054": 7, "3055": 7, "3071": 7, "3072": 7, "3073": 7, "3076": 7, "3038": 7, "3039": 7, "3040": 7, "3041": 7, "3082": 7, "3064": 7, "3065": 7, "3066": 7, "3067": 7, "3068": 7, "1795": 7, "1796": 7, "3050": 7, "3006": 7, "3081": 7, "3004": 7, "3005": 7, "3000": 7, "3001": 7, "3002": 7, "3003": 7, "3007": 7, "3008": 7, "3009": 7, "3010": 7, "1776": 7, "1728": 7, "1794": 7, "1729": 7, "1730": 7, "1732": 7, "1733": 7, "1731": 7, "1734": 7, "1735": 7, "1736": 7, "1737": 7, "1738": 7, "1739": 7, "1740": 7, "1741": 7, "1742": 7, "1743": 7, "1769": 7, "1744": 7, "1773": 7, "1745": 7, "1767": 7, "1746": 7, "1747": 7, "1748": 7, "1749": 7, "1750": 7, "1751": 7, "1752": 7, "1753": 7, "1754": 7, "3086": 7, "3085": 7, "3083": 7, "3084": 7, "1792": 7, "4000": [7, 19], "4001": 7, "1821": 7, "1820": 7, "1817": 7, "1861": 7, "1862": 7, "1863": 7, "1864": 7, "1874": 7, "1873": 7, "1841": 7, "1842": 7, "1843": 7, "1844": 7, "1865": 7, "1866": 7, "1867": 7, "1868": 7, "1869": 7, "1870": 7, "1824": 7, "1825": 7, "1826": 7, "1845": 7, "1846": 7, "1847": 7, "1848": 7, "1849": 7, "1850": 7, "1851": 7, "1852": 7, "1853": 7, "1854": 7, "1855": 7, "1856": 7, "1857": 7, "1858": 7, "1859": 7, "1860": 7, "1840": 7, "1829": 7, "1838": 7, "1877": 7, "1830": 7, "1836": 7, "1834": 7, "1832": 7, "1835": 7, "1833": 7, "1831": 7, "1839": 7, "1837": 7, "1875": 7, "1876": 7, "1827": 7, "1828": 7, "1878": 7, "1872": 7, "1810": 7, "1871": 7, "1813": 7, "1823": 7, "1811": 7, "1818": 7, "1814": 7, "1815": 7, "1808": 7, "1879": 7, "1804": 7, "1807": 7, "1801": 7, "1816": 7, "1809": 7, "1812": 7, "1819": 7, "1803": 7, "1806": 7, "1802": 7, "1822": 7, "1805": 7, "1301": 7, "1300": 7, "1303": 7, "1302": 7, "93": 7, "107": 7, "98": 7, "106": 7, "99": 7, "100": 7, "102": 7, "97": 7, "1609": 7, "1617": 7, "1602": 7, "1615": 7, "1616": 7, "1618": 7, "1605": 7, "1614": 7, "1608": 7, "1611": 7, "1604": 7, "1603": 7, "1601": 7, "1600": 7, "1607": 7, "1606": 7, "1610": 7, "1612": 7, "1613": 7, "1220": 7, "1200": 7, "1207": 7, "1212": 7, "1221": 7, "1214": 7, "1213": 7, "1210": 7, "1206": 7, "1211": 7, "1215": 7, "1201": 7, "1203": 7, "1208": 7, "1219": 7, "1205": 7, "1202": 7, "1209": 7, "1204": 7, "1901": 7, "1902": 7, "1903": 7, "1217": 7, "1218": 7, "1216": 7, "1900": 7, "addit": [7, 8, 15, 20], "collect_id": 7, "read": 7, "broken": 7, "well": [7, 8, 15, 19], "capabl": [7, 19, 21], "switch": [7, 19], "off": [7, 19], "avail": [7, 19, 20], "try": [7, 8, 15], "hard": 7, "through": [7, 8, 12, 13, 19, 20], "prevent": [7, 15], "network": 7, "relat": [7, 13, 21], "section": [7, 21], "save": [7, 8], "short": [7, 12], "default_doctyp": 7, "hash": [7, 8, 11], "fast": 7, "secur": 7, "veri": [7, 15, 19], "deep": 7, "affect": 7, "avoid": 7, "share": [7, 15], "thread": 7, "perform": 7, "kwarg": [7, 8, 15, 19], "collect": [7, 8], "block": [7, 8, 15, 16], "sens": 7, "increment": 7, "rel": [7, 8, 13, 15, 20, 21], "pseudo": [7, 8], "conveni": [7, 8, 19], "most": [7, 8], "case": [7, 8, 15, 20, 21], "structur": [7, 8, 13, 15, 19, 20], "pair": [7, 8], "properli": [7, 8, 21], "quot": [7, 8], "guarante": [7, 8, 15, 21], "work": [7, 8, 13, 15], "stai": [7, 8], "logger_nam": 7, "logger": 7, "global": 7, "connect": 7, "stdlib": 7, "constructor": [7, 8, 11, 13], "readili": 7, "critic": 7, "take": [7, 8, 13, 15, 19, 20], "logentri": 7, "log_entri": 7, "format_str": 7, "arg1": 7, "arg2": 7, "appropri": [7, 15, 20], "dummi": [7, 15], "further": 7, "best": 7, "repr": [7, 15], "your": [7, 8], "own": [7, 21], "entir": [7, 13], "mode": [7, 21], "re": [7, 8, 13], "pyclasslookup": 7, "myelementclass": 7, "honkei": 7, "mylookup": 7, "sometag": 7, "someothertag": 7, "deleg": 7, "lightweight": 7, "proxi": 7, "do": [7, 8, 11, 13, 15, 20], "keep": [7, 15], "refer": [7, 8, 19], "onc": [7, 8, 15, 21], "done": [7, 15], "invalid": [7, 16], "cannot": [7, 20, 21], "wrap": [7, 15, 19], "care": 7, "outsid": [7, 8], "featur": [7, 21], "slice": [7, 15], "de": [7, 20, 21], "text_or_uri_or_el": 7, "wrapper": [7, 8], "qualifi": 7, "extract": [7, 15, 19], "tagnam": 7, "wherev": 7, "assign": 7, "help": 7, "languag": [7, 12, 19], "soap": 7, "turn": [7, 13, 15, 19], "relax": 7, "ng": 7, "classmethod": [7, 8, 11], "src": [7, 13, 15], "rnc2rng": 7, "resourc": 7, "third": [7, 15], "resolve_": 7, "f": [7, 8, 15, 20], "open": [7, 8, 15], "especi": 7, "environ": 7, "parsabl": [7, 20], "less": [7, 19], "power": [7, 19], "idea": [7, 19], "put": [7, 19], "ascc": 7, "net": [7, 13, 20], "permit": [7, 19], "rule": [7, 12, 13, 19, 21], "report": [7, 8, 19, 21], "forbidden": [7, 19], "aaa": [7, 19], "bbb": [7, 19], "ccc": [7, 19], "color": [7, 13, 19], "howev": [7, 21], "lack": [7, 8], "stderr": 7, "therefor": 7, "specifi": [7, 8, 15], "element_factori": 7, "comment_factori": 7, "pi_factori": 7, "insert_com": 7, "insert_pi": 7, "callback": 7, "influenc": 7, "flush": 7, "toplevel": 7, "inconsist": 7, "processor": [7, 21], "suppli": [7, 21], "variou": 7, "time": [7, 21], "major": 7, "overhead": 7, "mainli": [7, 8, 15], "request": [7, 8], "inject": 7, "referenc": 7, "redund": 7, "blank": [7, 15, 20], "appear": [7, 15, 20], "harm": 7, "separ": [7, 15], "make": [7, 8, 13, 15, 20], "fix": 7, "alia": 7, "besid": 7, "exslt": 7, "regular": [7, 13, 15], "xslt_input": 7, "access_control": 7, "xsl_tree": 7, "xml_tree": 7, "profile_run": 7, "profil": 7, "_input": 7, "maximum": [7, 15], "engin": [7, 21], "templat": 7, "account": [7, 8], "wide": 7, "per": 7, "strval": 7, "some_strv": 7, "monti": 7, "reus": [7, 20], "result_tre": 7, "str": [7, 15, 20], "write_fil": 7, "create_dir": 7, "read_network": 7, "write_network": 7, "control": [7, 8, 12, 13, 19, 20], "directori": [7, 12], "o": [7, 13], "grant": 7, "deni": 7, "member": [7, 8, 11], "everyth": 7, "output_par": 7, "elements_onli": 7, "were": [7, 8, 15], "consist": 7, "bare": 7, "etc": [7, 8, 12, 13, 15, 20], "safe": [7, 13, 21], "have": [7, 8, 11, 13, 15, 21], "self_nod": 7, "input_nod": 7, "sequence_or_dict": 7, "__contentonlyel": 7, "libxml": 7, "garbag": 7, "shallow": [7, 8], "wors": 7, "kept": 7, "pointer": 7, "dead": 7, "byte": 7, "rest": [7, 15], "width": [7, 13, 15], "fillchar": [7, 15], "length": [7, 15], "pad": [7, 15], "fill": [7, 15], "int": [7, 15, 20], "overlap": [7, 8, 13, 15], "occurr": [7, 8, 13, 15], "subsect": 7, "interpret": [7, 13, 15], "utf": [7, 15], "strict": [7, 8, 15], "codec": [7, 15], "unicodedecodeerror": 7, "register_error": [7, 15], "suffix": [7, 15], "bool": [7, 15, 20], "With": [7, 15, 19], "begin": [7, 8, 15, 21], "tupl": [7, 8, 15, 21], "tabsiz": [7, 15], "tab": [7, 15], "expand": [7, 15, 19, 21], "space": [7, 13, 15], "size": [7, 12, 13, 15], "assum": [7, 15], "lowest": [7, 15], "failur": [7, 8, 15], "hexadecim": 7, "two": [7, 8, 11, 15], "b9": 7, "01ef": 7, "xb9": 7, "x01": 7, "xef": 7, "sep": [7, 15], "bytes_per_sep": 7, "mani": [7, 15], "neg": 7, "left": [7, 15], "xb9x01xef": 7, "b901ef": 7, "01": [7, 8], "ef": 7, "b901": 7, "valueerror": [7, 8, 15, 20], "alphanumer": 7, "least": [7, 15], "alphabet": [7, 15], "digit": [7, 15], "lowercas": [7, 15], "titlecas": [7, 15], "uppercas": [7, 15], "uncas": [7, 15], "ones": [7, 15, 20], "iterable_of_byt": 7, "concaten": [7, 15], "whose": [7, 15], "ab": [7, 15], "pq": [7, 15], "r": [7, 13, 15], "justifi": [7, 15], "omit": 7, "frm": 7, "useabl": 7, "bytearrai": 7, "present": [7, 8, 15], "len": [7, 15, 20], "old": [7, 8, 15], "substr": [7, 15], "highest": [7, 15], "maxsplit": [7, 15], "delimit": [7, 15], "accord": [7, 8], "newlin": 7, "formfe": 7, "vertic": 7, "front": [7, 15], "keepend": [7, 15], "break": [7, 12, 13, 15], "boundari": [7, 15], "vice": 7, "versa": 7, "delet": [7, 8, 12, 15], "256": 7, "numer": [7, 15], "zero": [7, 8, 13, 15], "never": [7, 15, 21], "truncat": [7, 15], "reloc": 7, "elementpath": 7, "along": 7, "immedi": 7, "advantag": 7, "loop": 7, "whether": [7, 13, 15], "succeed": 7, "pretty_print": [7, 8, 12], "xml_declar": 7, "compress": 7, "exclus": 7, "inclusive_ns_prefix": 7, "docstr": 7, "c14n2": 7, "correspond": [7, 8, 13, 20, 21], "gzip": 7, "x": [7, 13, 15], "xsi": [7, 20], "promot": 7, "top": [7, 8, 19], "render": [7, 12, 13], "alreadi": [7, 8, 15], "releas": 7, "There": [7, 21], "due": 7, "nodeset": 7, "float": [7, 15, 20], "_xslt": 7, "_kw": 7, "suitabl": [7, 8, 15, 20], "caseless": [7, 15], "unicodeencodeerror": [7, 15], "xmlcharrefreplac": [7, 15], "substitut": [7, 13, 15], "identifi": [7, 13, 15, 20], "brace": [7, 15], "alpha": [7, 15], "rang": [7, 8, 15], "0000": [7, 15], "007f": [7, 15], "too": [7, 15], "decim": [7, 15], "iskeyword": [7, 15], "printabl": [7, 15], "char": [7, 13, 15], "usabl": [7, 15], "ordin": [7, 15], "integ": [7, 15], "equal": [7, 8, 11, 15], "y": [7, 15], "intention": [7, 15], "natur": [7, 15], "punctuat": [7, 15], "via": [7, 15], "__getitem__": [7, 15], "oper": [7, 15], "lookuperror": [7, 15, 16], "_basepars": 7, "iddict": 7, "mapp": 7, "hand": [7, 19], "id_nam": 7, "immut": [7, 20], "applic": [7, 21], "locat": [7, 15, 21], "detect": 7, "output_fil": 7, "fashion": 7, "those": [7, 15, 21], "impact": 7, "element_or_tre": [7, 20, 21], "walker": 7, "somefil": 7, "xf": 7, "write_declar": 7, "write_doctyp": 7, "generate_some_el": 7, "exit": 7, "manag": 7, "owner": 7, "deliber": 7, "sure": [7, 8, 15], "written": 7, "explicitli": 7, "pend": [7, 15], "serial": [7, 8, 15], "faster": [7, 15], "function_map": 7, "taken": [7, 8, 14, 20], "ns_function": 7, "add2": 7, "add3": 7, "add_thre": 7, "constant": 7, "emb": [7, 13], "_parent": 7, "etree_or_el": 7, "capsul": 7, "unpack": 7, "pycapsul": 7, "No": 7, "xmldoc": 7, "correct": [7, 21], "creator": 7, "correctli": 7, "destructor": 7, "null": [7, 8, 11], "strcmp": 7, "xmlfreedoc": 7, "That": [7, 15], "ownership": 7, "eventu": 7, "modif": [7, 8], "attempt": [7, 13, 21], "transfer": 7, "xml_data": 7, "from_fil": 7, "canon": 7, "tree_or_el": 7, "top_nsmap": 7, "keep_ns_prefix": 7, "cleanup": [7, 13, 15], "move": [7, 8, 15], "bound": [7, 15], "sinc": 7, "sy": 7, "stdout": 7, "debug": [7, 8], "adapt": [7, 21], "higher": 7, "deepli": 7, "protocol": [7, 20], "transpar": 7, "decompress": 7, "whenev": 7, "multi": [7, 8, 12], "pool": 7, "standard": [7, 13, 19, 21], "prefer": 7, "someth": [7, 8], "tool": [7, 8, 13], "reli": 7, "root_el": 7, "simpleattr": 7, "tag_nam": 7, "treat": [7, 15], "some_el": 7, "simpletagnam": 7, "merg": [7, 8, 15], "represent": [7, 8, 15, 20], "py3": 7, "py2": 7, "unencod": 7, "being": [7, 8], "partial": [7, 12], "carri": 7, "necessarili": 7, "suit": 7, "treatment": 7, "continu": 7, "prior": 7, "_has_sneaky_javascript": [8, 13], "_kill_el": [8, 13], "_remove_javascript_link": [8, 13], "_substitute_com": [8, 13], "allow_el": [8, 13], "allow_embedded_url": [8, 13], "allow_follow": [8, 13], "kill_conditional_com": [8, 13], "_tag_link_attr": [8, 13], "add_nofollow": [8, 13], "allow_tag": [8, 13], "annoying_tag": [8, 13], "host_whitelist": [8, 13], "inline_styl": [8, 13], "javascript": [8, 13], "kill_tag": [8, 13], "page_structur": [8, 13], "processing_instruct": [8, 13], "remove_tag": [8, 13], "remove_unknown_tag": [8, 13], "safe_attr": [8, 13], "safe_attrs_onli": [8, 13], "whitelist_tag": [8, 13], "find_longest_match": [8, 15], "get_grouped_opcod": [8, 15], "get_matching_block": [8, 15], "get_opcod": [8, 15], "quick_ratio": [8, 15], "ratio": [8, 15], "real_quick_ratio": [8, 15], "set_seq1": [8, 15], "set_seq2": [8, 15], "set_seq": [8, 15], "threshold": [8, 15], "hide_when_equ": [8, 15], "block_insid": [8, 16], "default_messag": [8, 16], "error_block_class": [8, 16], "error_container_tag": [8, 16], "error_message_class": [8, 16], "insert_befor": [8, 16], "repres": [8, 15, 20], "group": [8, 12, 15], "checkbox": 8, "uncheck": 8, "9223372036854775807": [8, 13], "indexerror": 8, "IN": 8, "place": [8, 13, 15], "ascend": 8, "stabl": 8, "maintain": 8, "individu": 8, "construct": [8, 11, 20], "signatur": [8, 11], "comput": [8, 11, 12, 15], "we": [8, 11, 13, 15], "don": [8, 11, 15, 20], "__hash__": [8, 11], "hashabl": [8, 11], "But": [8, 11], "__eq__": [8, 11], "ought": [8, 11], "so": [8, 11, 13, 15, 21], "freedom": [8, 11], "algorithm": [8, 11], "frozenset": [8, 11, 13], "slow": [8, 11], "absent": [8, 11], "keyerror": [8, 11], "_abc": [8, 11], "_abc_data": [8, 11], "mutableset": [8, 11], "hidden": 8, "larg": [8, 12, 15], "isn": [8, 15], "now": 8, "mutablemap": 8, "d": [8, 15], "k": [8, 15], "view": 8, "h": 8, "world": [8, 12, 15], "previou": [8, 15], "class_nam": [8, 16], "urllib": 8, "urlencod": 8, "uncommon": 8, "wild": 8, "browser": [8, 13], "po": [8, 13], "indic": 8, "often": 8, "sometim": 8, "exactli": 8, "handle_failur": 8, "came": 8, "abort": 8, "link_repl_func": 8, "base_href": 8, "rewrit": 8, "anchor": [8, 12, 13, 15], "mailto": [8, 13], "email": 8, "give": [8, 21], "novalid": 8, "urlpars": 8, "urljoin": 8, "around": [8, 15], "accessor": 8, "mixin": 8, "denot": 8, "radio": 8, "presenc": 8, "field_nam": 8, "won": [8, 13], "similar": [8, 15], "uniqu": 8, "unselect": 8, "xmlsoft": 8, "source_class": 8, "whatev": 8, "repl": [8, 13], "obtain": [8, 13], "leftmost": [8, 13, 15], "endpo": [8, 13], "scan": [8, 13], "typ": 8, "back": 8, "ensure_head_bodi": 8, "create_par": 8, "encapsul": 8, "no_leading_text": 8, "tri": [8, 15, 20], "minim": 8, "web": [8, 13], "temporari": 8, "meant": 8, "filename_or_url": 8, "extra_valu": 8, "open_http": 8, "submit": 8, "urlopen": 8, "geturl": 8, "redirect": 8, "foo": 8, "bar": 8, "respons": [8, 13], "post": [8, 15], "include_meta_content_typ": 8, "equiv": 8, "markup": [8, 15], "helloworld": 8, "w3c": [8, 21], "en": 8, "w3": [8, 14], "html4": 8, "__iter__": 11, "abstract": [11, 19], "functool": 12, "abbrevi": 12, "author": 12, "java": 12, "client": 12, "side": [12, 15], "imag": 12, "bidi": 12, "ride": 12, "quotat": 12, "push": [12, 15], "shorthand": 12, "align": [12, 13], "citat": 12, "definit": [12, 20], "descript": 12, "term": 12, "emphasi": 12, "interact": 12, "subwindow": 12, "window": 12, "subdivis": 12, "horizont": 12, "ital": 12, "ins": [12, 15], "prompt": [12, 13], "enter": 12, "media": [12, 13], "metainform": 12, "choic": 12, "preformat": 12, "program": 12, "statement": 12, "info": 12, "subscript": 12, "superscript": 12, "cell": 12, "footer": 12, "row": [12, 13], "teletyp": 12, "monospac": [12, 13], "underlin": 12, "unord": 12, "unwant": 13, "offend": 13, "onclick": 13, "could": 13, "flash": 13, "aren": 13, "wrong": 13, "annoi": 13, "blink": 13, "marque": 13, "pull": 13, "kill": 13, "whole": 13, "feedpars": 13, "sanitis": 13, "site": 13, "nofollow": 13, "host": [13, 19], "complex": 13, "shown": 13, "might": [13, 15], "intend": 13, "wish": 13, "stuff": 13, "ssion": 13, "typic": [13, 21], "catch": 13, "sneaki": 13, "condit": [13, 15], "decid": 13, "reject": 13, "suppress": 13, "ie": 13, "basic": 13, "doesn": [13, 15], "ll": 13, "layer": 13, "charset": 13, "accesskei": 13, "alt": 13, "axi": 13, "border": 13, "cellpad": 13, "cellspac": 13, "charoff": 13, "colspan": 13, "coord": 13, "datetim": 13, "enctyp": 13, "height": 13, "hreflang": 13, "hspace": 13, "ismap": 13, "lang": 13, "longdesc": 13, "maxlength": 13, "nohref": 13, "noshad": 13, "nowrap": 13, "readonli": 13, "rev": 13, "rowspan": 13, "scope": [13, 21], "shape": 13, "summari": 13, "tabindex": 13, "usemap": 13, "valign": 13, "vspace": 13, "max_width": 13, "break_charact": 13, "link_regex": 13, "avoid_host": 13, "z0": 13, "_": 13, "ignorecas": 13, "9_": 13, "z": 13, "avoid_el": 13, "localhost": 13, "bexampl": 13, "com": 13, "127": 13, "avoid_class": 13, "nolink": 13, "nobreak": 13, "u200b": 13, "8203": 13, "tut": 13, "fi": 13, "jkorpela": 13, "nobr": 13, "discuss": 13, "html401": 14, "commun": 14, "webe": 14, "wiki": 14, "new_html5_el": 14, "html5_tag": 14, "isjunk": 15, "autojunk": 15, "sequencematch": 15, "act": 15, "amidst": 15, "alo": 15, "ahi": 15, "blo": 15, "bhi": 15, "longest": 15, "entireti": 15, "j": 15, "meet": 15, "maxim": 15, "earliest": 15, "abcd": 15, "junk": 15, "Then": [15, 20], "far": 15, "happen": 15, "adjac": 15, "interest": 15, "lambda": 15, "isol": 15, "cluster": 15, "elimin": 15, "pprint": 15, "tripl": 15, "monoton": 15, "increas": 15, "iow": 15, "abxcd": 15, "i1": 15, "i2": 15, "j1": 15, "j2": 15, "likewis": 15, "qabxcd": 15, "abycdf": 15, "cd": 15, "quickli": 15, "beyond": 15, "measur": 15, "total": 15, "m": [15, 20], "expens": 15, "haven": 15, "bcde": 15, "cach": 15, "repeatedli": 15, "pre_tag": 15, "post_tag": 15, "trailing_whitespac": 15, "html_repr": 15, "visibl": 15, "diffabl": 15, "attach": 15, "track": 15, "hi": 15, "marker": 15, "drop": 15, "tok": 15, "combin": 15, "dest": 15, "produc": [15, 21], "include_href": 15, "skip_tag": 15, "outermost": 15, "doclist": 15, "cyfunct": 15, "oldest": 15, "newest": 15, "version1": 15, "version2": 15, "goodby": 15, "utf8": 15, "joe": 15, "tokens_old": 15, "tokens_new": 15, "old_html": 15, "new_html": 15, "preserv": 15, "lose": 15, "dif": 15, "html1_token": 15, "html2_token": 15, "themselv": 15, "unbalanced_end": 15, "pre_delet": 15, "post_delet": 15, "earlier": 15, "unbalanced_start": 15, "implicitli": 15, "onto": 15, "dangl": 15, "throw": 15, "awai": 15, "markup_func": 15, "del_chunk": 15, "ins_chunk": 15, "rid": 15, "skip_out": 15, "stuff_before_del_start": 15, "stuff_inside_del_start_end": 15, "stuff_after_del_end": 15, "balanc": 15, "reorder": 15, "ensur": 15, "incorrect": 15, "guess": [15, 20], "particular": 15, "bad": 15, "confus": 15, "kind": [15, 20], "form_id": 16, "form_index": 16, "error_class": 16, "error_cr": 16, "iso": 19, "skeleton": 19, "include_param": 19, "expand_param": 19, "compile_param": 19, "store_schematron": 19, "store_xslt": 19, "store_report": 19, "phase": 19, "error_find": 19, "svrl": 19, "assert": 19, "step": 19, "expos": 19, "purl": 19, "oclc": 19, "dsdl": 19, "id_only_attribut": 19, "success": 19, "paramsdict": 19, "kwargsdict": 19, "nativ": 19, "typeerror": [19, 20], "mimic": 20, "par": 20, "weight": 20, "tricki": 20, "predefin": 20, "__str__": 20, "c1": 20, "c2": 20, "second_c2": 20, "tree_class": 20, "empty_data_class": 20, "type_class": 20, "stringif": 20, "myintclass": 20, "matter": 20, "fulfil": 20, "str_attr": 20, "real": 20, "_valu": 20, "_pytyp": 20, "_xsi": 20, "_attribut": 20, "among": 20, "py": 20, "redefin": 20, "activ": 20, "ignore_old": 20, "ignore_xsi": 20, "empty_pytyp": 20, "empty_typ": 20, "annotate_xsi": 20, "annotate_pytyp": 20, "fit": 20, "ambigu": 20, "widest": 20, "xsi_nil": 20, "nil": 20, "touch": 20, "unus": 20, "necessari": [20, 21], "interfer": 20, "yourself": 20, "hint": 20, "obj": 20, "new_pars": 20, "attribute_tag": 20, "codespeak": 20, "ignore_pytyp": 20, "fire": 21, "contenthandl": 21, "ns_name_tupl": 21, "notif": 21, "contigu": 21, "come": 21, "invok": 21, "shall": 21, "abandon": 21, "unrecover": 21, "reach": 21, "signal": 21, "ns_name": 21, "recommend": 21, "model": 21, "strongli": 21, "encourag": 21, "documenthandl": 21, "busi": 21, "probabl": 21, "suffici": 21, "invoc": 21, "seen": 21, "dtdhandler": 21, "raw": 21, "reader": 21, "content_handl": 21, "One": 21, "shot": 21}, "objects": {"": [[1, 0, 0, "-", "lxml"]], "lxml": [[2, 0, 0, "-", "ElementInclude"], [3, 0, 0, "-", "_elementpath"], [4, 0, 0, "-", "builder"], [6, 0, 0, "-", "doctestcompare"], [7, 0, 0, "-", "etree"], [1, 4, 1, "", "get_include"], [8, 0, 0, "-", "html"], [19, 0, 0, "-", "isoschematron"], [20, 0, 0, "-", "objectify"], [21, 0, 0, "-", "sax"]], "lxml.ElementInclude": [[2, 1, 1, "", "FatalIncludeError"], [2, 1, 1, "", "LimitedRecursiveIncludeError"], [2, 4, 1, "", "_include"], [2, 4, 1, "", "_lxml_default_loader"], [2, 4, 1, "", "_wrap_et_loader"], [2, 4, 1, "", "default_loader"], [2, 4, 1, "", "include"]], "lxml.ElementInclude.FatalIncludeError": [[2, 2, 1, "", "add_note"], [2, 3, 1, "", "args"], [2, 3, 1, "", "end_lineno"], [2, 3, 1, "", "end_offset"], [2, 3, 1, "", "filename"], [2, 3, 1, "", "lineno"], [2, 3, 1, "", "msg"], [2, 3, 1, "", "offset"], [2, 3, 1, "", "print_file_and_line"], [2, 3, 1, "", "text"], [2, 2, 1, "", "with_traceback"]], "lxml.ElementInclude.LimitedRecursiveIncludeError": [[2, 2, 1, "", "add_note"], [2, 3, 1, "", "args"], [2, 3, 1, "", "end_lineno"], [2, 3, 1, "", "end_offset"], [2, 3, 1, "", "filename"], [2, 3, 1, "", "lineno"], [2, 3, 1, "", "msg"], [2, 3, 1, "", "offset"], [2, 3, 1, "", "print_file_and_line"], [2, 3, 1, "", "text"], [2, 2, 1, "", "with_traceback"]], "lxml._elementpath": [[3, 4, 1, "", "_build_path_iterator"], [3, 4, 1, "", "find"], [3, 4, 1, "", "findall"], [3, 4, 1, "", "findtext"], [3, 4, 1, "", "iterfind"], [3, 4, 1, "", "prepare_child"], [3, 4, 1, "", "prepare_descendant"], [3, 4, 1, "", "prepare_parent"], [3, 4, 1, "", "prepare_predicate"], [3, 4, 1, "", "prepare_self"], [3, 4, 1, "", "prepare_star"], [3, 4, 1, "", "xpath_tokenizer"]], "lxml.builder": [[4, 5, 1, "", "ElementMaker"], [4, 4, 1, "", "__pyx_unpickle_ElementMaker"]], "lxml.builder.ElementMaker": [[4, 3, 1, "", "_makeelement"], [4, 3, 1, "", "_namespace"], [4, 3, 1, "", "_nsmap"], [4, 3, 1, "", "_typemap"]], "lxml.doctestcompare": [[6, 5, 1, "", "LHTMLOutputChecker"], [6, 5, 1, "", "LXMLOutputChecker"], [6, 5, 1, "", "_RestoreChecker"], [6, 4, 1, "", "_find_doctest_frame"], [6, 4, 1, "", "html_fromstring"], [6, 4, 1, "", "install"], [6, 4, 1, "", "norm_whitespace"], [6, 4, 1, "", "strip"], [6, 4, 1, "", "temp_install"]], "lxml.doctestcompare.LHTMLOutputChecker": [[6, 2, 1, "", "_do_a_fancy_diff"], [6, 2, 1, "", "_looks_like_markup"], [6, 2, 1, "", "_toAscii"], [6, 2, 1, "", "check_output"], [6, 2, 1, "", "collect_diff"], [6, 2, 1, "", "collect_diff_end_tag"], [6, 2, 1, "", "collect_diff_tag"], [6, 2, 1, "", "collect_diff_text"], [6, 2, 1, "", "compare_docs"], [6, 3, 1, "", "empty_tags"], [6, 2, 1, "", "format_doc"], [6, 2, 1, "", "format_end_tag"], [6, 2, 1, "", "format_tag"], [6, 2, 1, "", "format_text"], [6, 2, 1, "", "get_default_parser"], [6, 2, 1, "", "get_parser"], [6, 2, 1, "", "html_empty_tag"], [6, 2, 1, "", "output_difference"], [6, 2, 1, "", "tag_compare"], [6, 2, 1, "", "text_compare"]], "lxml.doctestcompare.LXMLOutputChecker": [[6, 2, 1, "", "_do_a_fancy_diff"], [6, 2, 1, "", "_looks_like_markup"], [6, 2, 1, "", "_toAscii"], [6, 2, 1, "", "check_output"], [6, 2, 1, "", "collect_diff"], [6, 2, 1, "", "collect_diff_end_tag"], [6, 2, 1, "", "collect_diff_tag"], [6, 2, 1, "", "collect_diff_text"], [6, 2, 1, "", "compare_docs"], [6, 3, 1, "", "empty_tags"], [6, 2, 1, "", "format_doc"], [6, 2, 1, "", "format_end_tag"], [6, 2, 1, "", "format_tag"], [6, 2, 1, "", "format_text"], [6, 2, 1, "", "get_default_parser"], [6, 2, 1, "", "get_parser"], [6, 2, 1, "", "html_empty_tag"], [6, 2, 1, "", "output_difference"], [6, 2, 1, "", "tag_compare"], [6, 2, 1, "", "text_compare"]], "lxml.doctestcompare._RestoreChecker": [[6, 2, 1, "", "call_super"], [6, 2, 1, "", "install_clone"], [6, 2, 1, "", "install_dt_self"], [6, 2, 1, "", "uninstall_clone"], [6, 2, 1, "", "uninstall_dt_self"], [6, 2, 1, "", "uninstall_module"]], "lxml.etree": [[7, 5, 1, "", "AncestorsIterator"], [7, 5, 1, "", "AttributeBasedElementClassLookup"], [7, 1, 1, "", "C14NError"], [7, 5, 1, "", "C14NWriterTarget"], [7, 5, 1, "", "CDATA"], [7, 4, 1, "", "Comment"], [7, 5, 1, "", "CommentBase"], [7, 5, 1, "", "CustomElementClassLookup"], [7, 5, 1, "", "DTD"], [7, 1, 1, "", "DTDError"], [7, 1, 1, "", "DTDParseError"], [7, 1, 1, "", "DTDValidateError"], [7, 5, 1, "", "DocInfo"], [7, 1, 1, "", "DocumentInvalid"], [7, 5, 1, "", "ETCompatXMLParser"], [7, 5, 1, "", "ETXPath"], [7, 4, 1, "", "Element"], [7, 5, 1, "", "ElementBase"], [7, 5, 1, "", "ElementChildIterator"], [7, 5, 1, "", "ElementClassLookup"], [7, 5, 1, "", "ElementDefaultClassLookup"], [7, 5, 1, "", "ElementDepthFirstIterator"], [7, 5, 1, "", "ElementNamespaceClassLookup"], [7, 5, 1, "", "ElementTextIterator"], [7, 4, 1, "", "ElementTree"], [7, 4, 1, "", "Entity"], [7, 5, 1, "", "EntityBase"], [7, 1, 1, "", "Error"], [7, 5, 1, "", "ErrorDomains"], [7, 5, 1, "", "ErrorLevels"], [7, 5, 1, "", "ErrorTypes"], [7, 4, 1, "", "Extension"], [7, 5, 1, "", "FallbackElementClassLookup"], [7, 4, 1, "", "FunctionNamespace"], [7, 4, 1, "", "HTML"], [7, 5, 1, "", "HTMLParser"], [7, 5, 1, "", "HTMLPullParser"], [7, 1, 1, "", "LxmlError"], [7, 1, 1, "", "LxmlRegistryError"], [7, 1, 1, "", "LxmlSyntaxError"], [7, 1, 1, "", "NamespaceRegistryError"], [7, 4, 1, "", "PI"], [7, 5, 1, "", "PIBase"], [7, 1, 1, "", "ParseError"], [7, 5, 1, "", "ParserBasedElementClassLookup"], [7, 1, 1, "", "ParserError"], [7, 4, 1, "", "ProcessingInstruction"], [7, 5, 1, "", "PyErrorLog"], [7, 5, 1, "", "PythonElementClassLookup"], [7, 5, 1, "", "QName"], [7, 5, 1, "", "RelaxNG"], [7, 1, 1, "", "RelaxNGError"], [7, 5, 1, "", "RelaxNGErrorTypes"], [7, 1, 1, "", "RelaxNGParseError"], [7, 1, 1, "", "RelaxNGValidateError"], [7, 5, 1, "", "Resolver"], [7, 5, 1, "", "Schematron"], [7, 1, 1, "", "SchematronError"], [7, 1, 1, "", "SchematronParseError"], [7, 1, 1, "", "SchematronValidateError"], [7, 1, 1, "", "SerialisationError"], [7, 5, 1, "", "SiblingsIterator"], [7, 4, 1, "", "SubElement"], [7, 5, 1, "", "TreeBuilder"], [7, 5, 1, "", "XInclude"], [7, 1, 1, "", "XIncludeError"], [7, 4, 1, "", "XML"], [7, 4, 1, "", "XMLDTDID"], [7, 4, 1, "", "XMLID"], [7, 5, 1, "", "XMLParser"], [7, 5, 1, "", "XMLPullParser"], [7, 5, 1, "", "XMLSchema"], [7, 1, 1, "", "XMLSchemaError"], [7, 1, 1, "", "XMLSchemaParseError"], [7, 1, 1, "", "XMLSchemaValidateError"], [7, 1, 1, "", "XMLSyntaxAssertionError"], [7, 1, 1, "", "XMLSyntaxError"], [7, 3, 1, "", "XMLTreeBuilder"], [7, 5, 1, "", "XPath"], [7, 5, 1, "", "XPathDocumentEvaluator"], [7, 5, 1, "", "XPathElementEvaluator"], [7, 1, 1, "", "XPathError"], [7, 1, 1, "", "XPathEvalError"], [7, 4, 1, "", "XPathEvaluator"], [7, 1, 1, "", "XPathFunctionError"], [7, 1, 1, "", "XPathResultError"], [7, 1, 1, "", "XPathSyntaxError"], [7, 5, 1, "", "XSLT"], [7, 5, 1, "", "XSLTAccessControl"], [7, 1, 1, "", "XSLTApplyError"], [7, 1, 1, "", "XSLTError"], [7, 5, 1, "", "XSLTExtension"], [7, 1, 1, "", "XSLTExtensionError"], [7, 1, 1, "", "XSLTParseError"], [7, 1, 1, "", "XSLTSaveError"], [7, 5, 1, "", "_Attrib"], [7, 5, 1, "", "_BaseErrorLog"], [7, 5, 1, "", "_Comment"], [7, 5, 1, "", "_Document"], [7, 5, 1, "", "_DomainErrorLog"], [7, 5, 1, "", "_Element"], [7, 5, 1, "", "_ElementIterator"], [7, 5, 1, "", "_ElementMatchIterator"], [7, 5, 1, "", "_ElementStringResult"], [7, 5, 1, "", "_ElementTagMatcher"], [7, 5, 1, "", "_ElementTree"], [7, 5, 1, "", "_ElementUnicodeResult"], [7, 5, 1, "", "_Entity"], [7, 5, 1, "", "_ErrorLog"], [7, 5, 1, "", "_FeedParser"], [7, 5, 1, "", "_IDDict"], [7, 5, 1, "", "_ListErrorLog"], [7, 5, 1, "", "_LogEntry"], [7, 5, 1, "", "_ProcessingInstruction"], [7, 5, 1, "", "_RotatingErrorLog"], [7, 5, 1, "", "_SaxParserTarget"], [7, 1, 1, "", "_TargetParserResult"], [7, 5, 1, "", "_Validator"], [7, 5, 1, "", "_XPathEvaluatorBase"], [7, 5, 1, "", "_XSLTProcessingInstruction"], [7, 5, 1, "", "_XSLTResultTree"], [7, 4, 1, "", "adopt_external_document"], [7, 4, 1, "", "canonicalize"], [7, 4, 1, "", "cleanup_namespaces"], [7, 4, 1, "", "clear_error_log"], [7, 4, 1, "", "dump"], [7, 4, 1, "", "fromstring"], [7, 4, 1, "", "fromstringlist"], [7, 4, 1, "", "get_default_parser"], [7, 5, 1, "", "htmlfile"], [7, 4, 1, "", "indent"], [7, 4, 1, "", "iselement"], [7, 5, 1, "", "iterparse"], [7, 5, 1, "", "iterwalk"], [7, 4, 1, "", "parse"], [7, 4, 1, "", "parseid"], [7, 4, 1, "", "register_namespace"], [7, 4, 1, "", "set_default_parser"], [7, 4, 1, "", "set_element_class_lookup"], [7, 4, 1, "", "strip_attributes"], [7, 4, 1, "", "strip_elements"], [7, 4, 1, "", "strip_tags"], [7, 4, 1, "", "tostring"], [7, 4, 1, "", "tostringlist"], [7, 4, 1, "", "tounicode"], [7, 4, 1, "", "use_global_python_log"], [7, 5, 1, "", "xmlfile"]], "lxml.etree.AttributeBasedElementClassLookup": [[7, 3, 1, "", "fallback"], [7, 2, 1, "", "set_fallback"]], "lxml.etree.C14NError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.C14NWriterTarget": [[7, 2, 1, "", "_iter_namespaces"], [7, 2, 1, "", "close"], [7, 2, 1, "", "comment"], [7, 2, 1, "", "data"], [7, 2, 1, "", "end"], [7, 2, 1, "", "pi"], [7, 2, 1, "", "start"], [7, 2, 1, "", "start_ns"]], "lxml.etree.CommentBase": [[7, 2, 1, "", "_init"], [7, 2, 1, "", "addnext"], [7, 2, 1, "", "addprevious"], [7, 2, 1, "", "append"], [7, 3, 1, "", "attrib"], [7, 3, 1, "", "base"], [7, 2, 1, "", "clear"], [7, 2, 1, "", "cssselect"], [7, 2, 1, "", "extend"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "get"], [7, 2, 1, "", "getchildren"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getnext"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "getprevious"], [7, 2, 1, "", "getroottree"], [7, 2, 1, "", "index"], [7, 2, 1, "", "insert"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterancestors"], [7, 2, 1, "", "iterchildren"], [7, 2, 1, "", "iterdescendants"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "itersiblings"], [7, 2, 1, "", "itertext"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "nsmap"], [7, 3, 1, "", "prefix"], [7, 2, 1, "", "remove"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "set"], [7, 3, 1, "", "sourceline"], [7, 3, 1, "", "tag"], [7, 3, 1, "", "tail"], [7, 3, 1, "", "text"], [7, 2, 1, "", "values"], [7, 2, 1, "", "xpath"]], "lxml.etree.CustomElementClassLookup": [[7, 3, 1, "", "fallback"], [7, 2, 1, "", "lookup"], [7, 2, 1, "", "set_fallback"]], "lxml.etree.DTD": [[7, 2, 1, "", "_append_log_message"], [7, 2, 1, "", "_clear_error_log"], [7, 2, 1, "", "assertValid"], [7, 2, 1, "", "assert_"], [7, 2, 1, "", "elements"], [7, 2, 1, "", "entities"], [7, 3, 1, "", "error_log"], [7, 3, 1, "", "external_id"], [7, 2, 1, "", "iterelements"], [7, 2, 1, "", "iterentities"], [7, 3, 1, "", "name"], [7, 3, 1, "", "system_url"], [7, 2, 1, "", "validate"]], "lxml.etree.DTDError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.DTDParseError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.DTDValidateError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.DocInfo": [[7, 3, 1, "", "URL"], [7, 2, 1, "", "clear"], [7, 3, 1, "", "doctype"], [7, 3, 1, "", "encoding"], [7, 3, 1, "", "externalDTD"], [7, 3, 1, "", "internalDTD"], [7, 3, 1, "", "public_id"], [7, 3, 1, "", "root_name"], [7, 3, 1, "", "standalone"], [7, 3, 1, "", "system_url"], [7, 3, 1, "", "xml_version"]], "lxml.etree.DocumentInvalid": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.ETCompatXMLParser": [[7, 2, 1, "", "close"], [7, 2, 1, "", "copy"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "feed"], [7, 3, 1, "", "feed_error_log"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "resolvers"], [7, 2, 1, "", "setElementClassLookup"], [7, 2, 1, "", "set_element_class_lookup"], [7, 3, 1, "", "target"], [7, 3, 1, "", "version"]], "lxml.etree.ETXPath": [[7, 3, 1, "", "error_log"], [7, 2, 1, "", "evaluate"], [7, 3, 1, "", "path"]], "lxml.etree.ElementBase": [[7, 2, 1, "", "_init"], [7, 2, 1, "", "addnext"], [7, 2, 1, "", "addprevious"], [7, 2, 1, "", "append"], [7, 3, 1, "", "attrib"], [7, 3, 1, "", "base"], [7, 2, 1, "", "clear"], [7, 2, 1, "", "cssselect"], [7, 2, 1, "", "extend"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "get"], [7, 2, 1, "", "getchildren"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getnext"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "getprevious"], [7, 2, 1, "", "getroottree"], [7, 2, 1, "", "index"], [7, 2, 1, "", "insert"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterancestors"], [7, 2, 1, "", "iterchildren"], [7, 2, 1, "", "iterdescendants"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "itersiblings"], [7, 2, 1, "", "itertext"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "nsmap"], [7, 3, 1, "", "prefix"], [7, 2, 1, "", "remove"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "set"], [7, 3, 1, "", "sourceline"], [7, 3, 1, "", "tag"], [7, 3, 1, "", "tail"], [7, 3, 1, "", "text"], [7, 2, 1, "", "values"], [7, 2, 1, "", "xpath"]], "lxml.etree.ElementDefaultClassLookup": [[7, 3, 1, "", "comment_class"], [7, 3, 1, "", "element_class"], [7, 3, 1, "", "entity_class"], [7, 3, 1, "", "pi_class"]], "lxml.etree.ElementNamespaceClassLookup": [[7, 3, 1, "", "fallback"], [7, 2, 1, "", "get_namespace"], [7, 2, 1, "", "set_fallback"]], "lxml.etree.EntityBase": [[7, 2, 1, "", "_init"], [7, 2, 1, "", "addnext"], [7, 2, 1, "", "addprevious"], [7, 2, 1, "", "append"], [7, 3, 1, "", "attrib"], [7, 3, 1, "", "base"], [7, 2, 1, "", "clear"], [7, 2, 1, "", "cssselect"], [7, 2, 1, "", "extend"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "get"], [7, 2, 1, "", "getchildren"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getnext"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "getprevious"], [7, 2, 1, "", "getroottree"], [7, 2, 1, "", "index"], [7, 2, 1, "", "insert"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterancestors"], [7, 2, 1, "", "iterchildren"], [7, 2, 1, "", "iterdescendants"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "itersiblings"], [7, 2, 1, "", "itertext"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "name"], [7, 3, 1, "", "nsmap"], [7, 3, 1, "", "prefix"], [7, 2, 1, "", "remove"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "set"], [7, 3, 1, "", "sourceline"], [7, 3, 1, "", "tag"], [7, 3, 1, "", "tail"], [7, 3, 1, "", "text"], [7, 2, 1, "", "values"], [7, 2, 1, "", "xpath"]], "lxml.etree.Error": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.ErrorDomains": [[7, 3, 1, "", "BUFFER"], [7, 3, 1, "", "C14N"], [7, 3, 1, "", "CATALOG"], [7, 3, 1, "", "CHECK"], [7, 3, 1, "", "DATATYPE"], [7, 3, 1, "", "DTD"], [7, 3, 1, "", "FTP"], [7, 3, 1, "", "HTML"], [7, 3, 1, "", "HTTP"], [7, 3, 1, "", "I18N"], [7, 3, 1, "", "IO"], [7, 3, 1, "", "MEMORY"], [7, 3, 1, "", "MODULE"], [7, 3, 1, "", "NAMESPACE"], [7, 3, 1, "", "NONE"], [7, 3, 1, "", "OUTPUT"], [7, 3, 1, "", "PARSER"], [7, 3, 1, "", "REGEXP"], [7, 3, 1, "", "RELAXNGP"], [7, 3, 1, "", "RELAXNGV"], [7, 3, 1, "", "SCHEMASP"], [7, 3, 1, "", "SCHEMASV"], [7, 3, 1, "", "SCHEMATRONV"], [7, 3, 1, "", "TREE"], [7, 3, 1, "", "URI"], [7, 3, 1, "", "VALID"], [7, 3, 1, "", "WRITER"], [7, 3, 1, "", "XINCLUDE"], [7, 3, 1, "", "XPATH"], [7, 3, 1, "", "XPOINTER"], [7, 3, 1, "", "XSLT"], [7, 2, 1, "", "_getName"], [7, 3, 1, "", "_names"]], "lxml.etree.ErrorLevels": [[7, 3, 1, "", "ERROR"], [7, 3, 1, "", "FATAL"], [7, 3, 1, "", "NONE"], [7, 3, 1, "", "WARNING"], [7, 2, 1, "", "_getName"], [7, 3, 1, "", "_names"]], "lxml.etree.ErrorTypes": [[7, 3, 1, "", "BUF_OVERFLOW"], [7, 3, 1, "", "C14N_CREATE_CTXT"], [7, 3, 1, "", "C14N_CREATE_STACK"], [7, 3, 1, "", "C14N_INVALID_NODE"], [7, 3, 1, "", "C14N_RELATIVE_NAMESPACE"], [7, 3, 1, "", "C14N_REQUIRES_UTF8"], [7, 3, 1, "", "C14N_UNKNOW_NODE"], [7, 3, 1, "", "CATALOG_ENTRY_BROKEN"], [7, 3, 1, "", "CATALOG_MISSING_ATTR"], [7, 3, 1, "", "CATALOG_NOT_CATALOG"], [7, 3, 1, "", "CATALOG_PREFER_VALUE"], [7, 3, 1, "", "CATALOG_RECURSION"], [7, 3, 1, "", "CHECK_ENTITY_TYPE"], [7, 3, 1, "", "CHECK_FOUND_ATTRIBUTE"], [7, 3, 1, "", "CHECK_FOUND_CDATA"], [7, 3, 1, "", "CHECK_FOUND_COMMENT"], [7, 3, 1, "", "CHECK_FOUND_DOCTYPE"], [7, 3, 1, "", "CHECK_FOUND_ELEMENT"], [7, 3, 1, "", "CHECK_FOUND_ENTITY"], [7, 3, 1, "", "CHECK_FOUND_ENTITYREF"], [7, 3, 1, "", "CHECK_FOUND_FRAGMENT"], [7, 3, 1, "", "CHECK_FOUND_NOTATION"], [7, 3, 1, "", "CHECK_FOUND_PI"], [7, 3, 1, "", "CHECK_FOUND_TEXT"], [7, 3, 1, "", "CHECK_NAME_NOT_NULL"], [7, 3, 1, "", "CHECK_NOT_ATTR"], [7, 3, 1, "", "CHECK_NOT_ATTR_DECL"], [7, 3, 1, "", "CHECK_NOT_DTD"], [7, 3, 1, "", "CHECK_NOT_ELEM_DECL"], [7, 3, 1, "", "CHECK_NOT_ENTITY_DECL"], [7, 3, 1, "", "CHECK_NOT_NCNAME"], [7, 3, 1, "", "CHECK_NOT_NS_DECL"], [7, 3, 1, "", "CHECK_NOT_UTF8"], [7, 3, 1, "", "CHECK_NO_DICT"], [7, 3, 1, "", "CHECK_NO_DOC"], [7, 3, 1, "", "CHECK_NO_ELEM"], [7, 3, 1, "", "CHECK_NO_HREF"], [7, 3, 1, "", "CHECK_NO_NAME"], [7, 3, 1, "", "CHECK_NO_NEXT"], [7, 3, 1, "", "CHECK_NO_PARENT"], [7, 3, 1, "", "CHECK_NO_PREV"], [7, 3, 1, "", "CHECK_NS_ANCESTOR"], [7, 3, 1, "", "CHECK_NS_SCOPE"], [7, 3, 1, "", "CHECK_OUTSIDE_DICT"], [7, 3, 1, "", "CHECK_UNKNOWN_NODE"], [7, 3, 1, "", "CHECK_WRONG_DOC"], [7, 3, 1, "", "CHECK_WRONG_NAME"], [7, 3, 1, "", "CHECK_WRONG_NEXT"], [7, 3, 1, "", "CHECK_WRONG_PARENT"], [7, 3, 1, "", "CHECK_WRONG_PREV"], [7, 3, 1, "", "DTD_ATTRIBUTE_DEFAULT"], [7, 3, 1, "", "DTD_ATTRIBUTE_REDEFINED"], [7, 3, 1, "", "DTD_ATTRIBUTE_VALUE"], [7, 3, 1, "", "DTD_CONTENT_ERROR"], [7, 3, 1, "", "DTD_CONTENT_MODEL"], [7, 3, 1, "", "DTD_CONTENT_NOT_DETERMINIST"], [7, 3, 1, "", "DTD_DIFFERENT_PREFIX"], [7, 3, 1, "", "DTD_DUP_TOKEN"], [7, 3, 1, "", "DTD_ELEM_DEFAULT_NAMESPACE"], [7, 3, 1, "", "DTD_ELEM_NAMESPACE"], [7, 3, 1, "", "DTD_ELEM_REDEFINED"], [7, 3, 1, "", "DTD_EMPTY_NOTATION"], [7, 3, 1, "", "DTD_ENTITY_TYPE"], [7, 3, 1, "", "DTD_ID_FIXED"], [7, 3, 1, "", "DTD_ID_REDEFINED"], [7, 3, 1, "", "DTD_ID_SUBSET"], [7, 3, 1, "", "DTD_INVALID_CHILD"], [7, 3, 1, "", "DTD_INVALID_DEFAULT"], [7, 3, 1, "", "DTD_LOAD_ERROR"], [7, 3, 1, "", "DTD_MISSING_ATTRIBUTE"], [7, 3, 1, "", "DTD_MIXED_CORRUPT"], [7, 3, 1, "", "DTD_MULTIPLE_ID"], [7, 3, 1, "", "DTD_NOTATION_REDEFINED"], [7, 3, 1, "", "DTD_NOTATION_VALUE"], [7, 3, 1, "", "DTD_NOT_EMPTY"], [7, 3, 1, "", "DTD_NOT_PCDATA"], [7, 3, 1, "", "DTD_NOT_STANDALONE"], [7, 3, 1, "", "DTD_NO_DOC"], [7, 3, 1, "", "DTD_NO_DTD"], [7, 3, 1, "", "DTD_NO_ELEM_NAME"], [7, 3, 1, "", "DTD_NO_PREFIX"], [7, 3, 1, "", "DTD_NO_ROOT"], [7, 3, 1, "", "DTD_ROOT_NAME"], [7, 3, 1, "", "DTD_STANDALONE_DEFAULTED"], [7, 3, 1, "", "DTD_STANDALONE_WHITE_SPACE"], [7, 3, 1, "", "DTD_UNKNOWN_ATTRIBUTE"], [7, 3, 1, "", "DTD_UNKNOWN_ELEM"], [7, 3, 1, "", "DTD_UNKNOWN_ENTITY"], [7, 3, 1, "", "DTD_UNKNOWN_ID"], [7, 3, 1, "", "DTD_UNKNOWN_NOTATION"], [7, 3, 1, "", "DTD_XMLID_TYPE"], [7, 3, 1, "", "DTD_XMLID_VALUE"], [7, 3, 1, "", "ERR_ATTLIST_NOT_FINISHED"], [7, 3, 1, "", "ERR_ATTLIST_NOT_STARTED"], [7, 3, 1, "", "ERR_ATTRIBUTE_NOT_FINISHED"], [7, 3, 1, "", "ERR_ATTRIBUTE_NOT_STARTED"], [7, 3, 1, "", "ERR_ATTRIBUTE_REDEFINED"], [7, 3, 1, "", "ERR_ATTRIBUTE_WITHOUT_VALUE"], [7, 3, 1, "", "ERR_CDATA_NOT_FINISHED"], [7, 3, 1, "", "ERR_CHARREF_AT_EOF"], [7, 3, 1, "", "ERR_CHARREF_IN_DTD"], [7, 3, 1, "", "ERR_CHARREF_IN_EPILOG"], [7, 3, 1, "", "ERR_CHARREF_IN_PROLOG"], [7, 3, 1, "", "ERR_COMMENT_ABRUPTLY_ENDED"], [7, 3, 1, "", "ERR_COMMENT_NOT_FINISHED"], [7, 3, 1, "", "ERR_CONDSEC_INVALID"], [7, 3, 1, "", "ERR_CONDSEC_INVALID_KEYWORD"], [7, 3, 1, "", "ERR_CONDSEC_NOT_FINISHED"], [7, 3, 1, "", "ERR_CONDSEC_NOT_STARTED"], [7, 3, 1, "", "ERR_DOCTYPE_NOT_FINISHED"], [7, 3, 1, "", "ERR_DOCUMENT_EMPTY"], [7, 3, 1, "", "ERR_DOCUMENT_END"], [7, 3, 1, "", "ERR_DOCUMENT_START"], [7, 3, 1, "", "ERR_ELEMCONTENT_NOT_FINISHED"], [7, 3, 1, "", "ERR_ELEMCONTENT_NOT_STARTED"], [7, 3, 1, "", "ERR_ENCODING_NAME"], [7, 3, 1, "", "ERR_ENTITYREF_AT_EOF"], [7, 3, 1, "", "ERR_ENTITYREF_IN_DTD"], [7, 3, 1, "", "ERR_ENTITYREF_IN_EPILOG"], [7, 3, 1, "", "ERR_ENTITYREF_IN_PROLOG"], [7, 3, 1, "", "ERR_ENTITYREF_NO_NAME"], [7, 3, 1, "", "ERR_ENTITYREF_SEMICOL_MISSING"], [7, 3, 1, "", "ERR_ENTITY_BOUNDARY"], [7, 3, 1, "", "ERR_ENTITY_CHAR_ERROR"], [7, 3, 1, "", "ERR_ENTITY_IS_EXTERNAL"], [7, 3, 1, "", "ERR_ENTITY_IS_PARAMETER"], [7, 3, 1, "", "ERR_ENTITY_LOOP"], [7, 3, 1, "", "ERR_ENTITY_NOT_FINISHED"], [7, 3, 1, "", "ERR_ENTITY_NOT_STARTED"], [7, 3, 1, "", "ERR_ENTITY_PE_INTERNAL"], [7, 3, 1, "", "ERR_ENTITY_PROCESSING"], [7, 3, 1, "", "ERR_EQUAL_REQUIRED"], [7, 3, 1, "", "ERR_EXTRA_CONTENT"], [7, 3, 1, "", "ERR_EXT_ENTITY_STANDALONE"], [7, 3, 1, "", "ERR_EXT_SUBSET_NOT_FINISHED"], [7, 3, 1, "", "ERR_GT_REQUIRED"], [7, 3, 1, "", "ERR_HYPHEN_IN_COMMENT"], [7, 3, 1, "", "ERR_INTERNAL_ERROR"], [7, 3, 1, "", "ERR_INVALID_CHAR"], [7, 3, 1, "", "ERR_INVALID_CHARREF"], [7, 3, 1, "", "ERR_INVALID_DEC_CHARREF"], [7, 3, 1, "", "ERR_INVALID_ENCODING"], [7, 3, 1, "", "ERR_INVALID_HEX_CHARREF"], [7, 3, 1, "", "ERR_INVALID_URI"], [7, 3, 1, "", "ERR_LITERAL_NOT_FINISHED"], [7, 3, 1, "", "ERR_LITERAL_NOT_STARTED"], [7, 3, 1, "", "ERR_LTSLASH_REQUIRED"], [7, 3, 1, "", "ERR_LT_IN_ATTRIBUTE"], [7, 3, 1, "", "ERR_LT_REQUIRED"], [7, 3, 1, "", "ERR_MISPLACED_CDATA_END"], [7, 3, 1, "", "ERR_MISSING_ENCODING"], [7, 3, 1, "", "ERR_MIXED_NOT_FINISHED"], [7, 3, 1, "", "ERR_MIXED_NOT_STARTED"], [7, 3, 1, "", "ERR_NAME_REQUIRED"], [7, 3, 1, "", "ERR_NAME_TOO_LONG"], [7, 3, 1, "", "ERR_NMTOKEN_REQUIRED"], [7, 3, 1, "", "ERR_NOTATION_NOT_FINISHED"], [7, 3, 1, "", "ERR_NOTATION_NOT_STARTED"], [7, 3, 1, "", "ERR_NOTATION_PROCESSING"], [7, 3, 1, "", "ERR_NOT_STANDALONE"], [7, 3, 1, "", "ERR_NOT_WELL_BALANCED"], [7, 3, 1, "", "ERR_NO_DTD"], [7, 3, 1, "", "ERR_NO_MEMORY"], [7, 3, 1, "", "ERR_NS_DECL_ERROR"], [7, 3, 1, "", "ERR_OK"], [7, 3, 1, "", "ERR_PCDATA_REQUIRED"], [7, 3, 1, "", "ERR_PEREF_AT_EOF"], [7, 3, 1, "", "ERR_PEREF_IN_EPILOG"], [7, 3, 1, "", "ERR_PEREF_IN_INT_SUBSET"], [7, 3, 1, "", "ERR_PEREF_IN_PROLOG"], [7, 3, 1, "", "ERR_PEREF_NO_NAME"], [7, 3, 1, "", "ERR_PEREF_SEMICOL_MISSING"], [7, 3, 1, "", "ERR_PI_NOT_FINISHED"], [7, 3, 1, "", "ERR_PI_NOT_STARTED"], [7, 3, 1, "", "ERR_PUBID_REQUIRED"], [7, 3, 1, "", "ERR_RESERVED_XML_NAME"], [7, 3, 1, "", "ERR_SEPARATOR_REQUIRED"], [7, 3, 1, "", "ERR_SPACE_REQUIRED"], [7, 3, 1, "", "ERR_STANDALONE_VALUE"], [7, 3, 1, "", "ERR_STRING_NOT_CLOSED"], [7, 3, 1, "", "ERR_STRING_NOT_STARTED"], [7, 3, 1, "", "ERR_TAG_NAME_MISMATCH"], [7, 3, 1, "", "ERR_TAG_NOT_FINISHED"], [7, 3, 1, "", "ERR_UNDECLARED_ENTITY"], [7, 3, 1, "", "ERR_UNKNOWN_ENCODING"], [7, 3, 1, "", "ERR_UNKNOWN_VERSION"], [7, 3, 1, "", "ERR_UNPARSED_ENTITY"], [7, 3, 1, "", "ERR_UNSUPPORTED_ENCODING"], [7, 3, 1, "", "ERR_URI_FRAGMENT"], [7, 3, 1, "", "ERR_URI_REQUIRED"], [7, 3, 1, "", "ERR_USER_STOP"], [7, 3, 1, "", "ERR_VALUE_REQUIRED"], [7, 3, 1, "", "ERR_VERSION_MISMATCH"], [7, 3, 1, "", "ERR_VERSION_MISSING"], [7, 3, 1, "", "ERR_XMLDECL_NOT_FINISHED"], [7, 3, 1, "", "ERR_XMLDECL_NOT_STARTED"], [7, 3, 1, "", "FTP_ACCNT"], [7, 3, 1, "", "FTP_EPSV_ANSWER"], [7, 3, 1, "", "FTP_PASV_ANSWER"], [7, 3, 1, "", "FTP_URL_SYNTAX"], [7, 3, 1, "", "HTML_STRUCURE_ERROR"], [7, 3, 1, "", "HTML_UNKNOWN_TAG"], [7, 3, 1, "", "HTTP_UNKNOWN_HOST"], [7, 3, 1, "", "HTTP_URL_SYNTAX"], [7, 3, 1, "", "HTTP_USE_IP"], [7, 3, 1, "", "I18N_CONV_FAILED"], [7, 3, 1, "", "I18N_EXCESS_HANDLER"], [7, 3, 1, "", "I18N_NO_HANDLER"], [7, 3, 1, "", "I18N_NO_NAME"], [7, 3, 1, "", "I18N_NO_OUTPUT"], [7, 3, 1, "", "IO_BUFFER_FULL"], [7, 3, 1, "", "IO_EACCES"], [7, 3, 1, "", "IO_EADDRINUSE"], [7, 3, 1, "", "IO_EAFNOSUPPORT"], [7, 3, 1, "", "IO_EAGAIN"], [7, 3, 1, "", "IO_EALREADY"], [7, 3, 1, "", "IO_EBADF"], [7, 3, 1, "", "IO_EBADMSG"], [7, 3, 1, "", "IO_EBUSY"], [7, 3, 1, "", "IO_ECANCELED"], [7, 3, 1, "", "IO_ECHILD"], [7, 3, 1, "", "IO_ECONNREFUSED"], [7, 3, 1, "", "IO_EDEADLK"], [7, 3, 1, "", "IO_EDOM"], [7, 3, 1, "", "IO_EEXIST"], [7, 3, 1, "", "IO_EFAULT"], [7, 3, 1, "", "IO_EFBIG"], [7, 3, 1, "", "IO_EINPROGRESS"], [7, 3, 1, "", "IO_EINTR"], [7, 3, 1, "", "IO_EINVAL"], [7, 3, 1, "", "IO_EIO"], [7, 3, 1, "", "IO_EISCONN"], [7, 3, 1, "", "IO_EISDIR"], [7, 3, 1, "", "IO_EMFILE"], [7, 3, 1, "", "IO_EMLINK"], [7, 3, 1, "", "IO_EMSGSIZE"], [7, 3, 1, "", "IO_ENAMETOOLONG"], [7, 3, 1, "", "IO_ENCODER"], [7, 3, 1, "", "IO_ENETUNREACH"], [7, 3, 1, "", "IO_ENFILE"], [7, 3, 1, "", "IO_ENODEV"], [7, 3, 1, "", "IO_ENOENT"], [7, 3, 1, "", "IO_ENOEXEC"], [7, 3, 1, "", "IO_ENOLCK"], [7, 3, 1, "", "IO_ENOMEM"], [7, 3, 1, "", "IO_ENOSPC"], [7, 3, 1, "", "IO_ENOSYS"], [7, 3, 1, "", "IO_ENOTDIR"], [7, 3, 1, "", "IO_ENOTEMPTY"], [7, 3, 1, "", "IO_ENOTSOCK"], [7, 3, 1, "", "IO_ENOTSUP"], [7, 3, 1, "", "IO_ENOTTY"], [7, 3, 1, "", "IO_ENXIO"], [7, 3, 1, "", "IO_EPERM"], [7, 3, 1, "", "IO_EPIPE"], [7, 3, 1, "", "IO_ERANGE"], [7, 3, 1, "", "IO_EROFS"], [7, 3, 1, "", "IO_ESPIPE"], [7, 3, 1, "", "IO_ESRCH"], [7, 3, 1, "", "IO_ETIMEDOUT"], [7, 3, 1, "", "IO_EXDEV"], [7, 3, 1, "", "IO_FLUSH"], [7, 3, 1, "", "IO_LOAD_ERROR"], [7, 3, 1, "", "IO_NETWORK_ATTEMPT"], [7, 3, 1, "", "IO_NO_INPUT"], [7, 3, 1, "", "IO_UNKNOWN"], [7, 3, 1, "", "IO_WRITE"], [7, 3, 1, "", "MODULE_CLOSE"], [7, 3, 1, "", "MODULE_OPEN"], [7, 3, 1, "", "NS_ERR_ATTRIBUTE_REDEFINED"], [7, 3, 1, "", "NS_ERR_COLON"], [7, 3, 1, "", "NS_ERR_EMPTY"], [7, 3, 1, "", "NS_ERR_QNAME"], [7, 3, 1, "", "NS_ERR_UNDEFINED_NAMESPACE"], [7, 3, 1, "", "NS_ERR_XML_NAMESPACE"], [7, 3, 1, "", "REGEXP_COMPILE_ERROR"], [7, 3, 1, "", "RNGP_ANYNAME_ATTR_ANCESTOR"], [7, 3, 1, "", "RNGP_ATTRIBUTE_CHILDREN"], [7, 3, 1, "", "RNGP_ATTRIBUTE_CONTENT"], [7, 3, 1, "", "RNGP_ATTRIBUTE_EMPTY"], [7, 3, 1, "", "RNGP_ATTRIBUTE_NOOP"], [7, 3, 1, "", "RNGP_ATTR_CONFLICT"], [7, 3, 1, "", "RNGP_CHOICE_CONTENT"], [7, 3, 1, "", "RNGP_CHOICE_EMPTY"], [7, 3, 1, "", "RNGP_CREATE_FAILURE"], [7, 3, 1, "", "RNGP_DATA_CONTENT"], [7, 3, 1, "", "RNGP_DEFINE_CREATE_FAILED"], [7, 3, 1, "", "RNGP_DEFINE_EMPTY"], [7, 3, 1, "", "RNGP_DEFINE_MISSING"], [7, 3, 1, "", "RNGP_DEFINE_NAME_MISSING"], [7, 3, 1, "", "RNGP_DEF_CHOICE_AND_INTERLEAVE"], [7, 3, 1, "", "RNGP_ELEMENT_CONTENT"], [7, 3, 1, "", "RNGP_ELEMENT_EMPTY"], [7, 3, 1, "", "RNGP_ELEMENT_NAME"], [7, 3, 1, "", "RNGP_ELEMENT_NO_CONTENT"], [7, 3, 1, "", "RNGP_ELEM_CONTENT_EMPTY"], [7, 3, 1, "", "RNGP_ELEM_CONTENT_ERROR"], [7, 3, 1, "", "RNGP_ELEM_TEXT_CONFLICT"], [7, 3, 1, "", "RNGP_EMPTY"], [7, 3, 1, "", "RNGP_EMPTY_CONSTRUCT"], [7, 3, 1, "", "RNGP_EMPTY_CONTENT"], [7, 3, 1, "", "RNGP_EMPTY_NOT_EMPTY"], [7, 3, 1, "", "RNGP_ERROR_TYPE_LIB"], [7, 3, 1, "", "RNGP_EXCEPT_EMPTY"], [7, 3, 1, "", "RNGP_EXCEPT_MISSING"], [7, 3, 1, "", "RNGP_EXCEPT_MULTIPLE"], [7, 3, 1, "", "RNGP_EXCEPT_NO_CONTENT"], [7, 3, 1, "", "RNGP_EXTERNALREF_EMTPY"], [7, 3, 1, "", "RNGP_EXTERNALREF_RECURSE"], [7, 3, 1, "", "RNGP_EXTERNAL_REF_FAILURE"], [7, 3, 1, "", "RNGP_FORBIDDEN_ATTRIBUTE"], [7, 3, 1, "", "RNGP_FOREIGN_ELEMENT"], [7, 3, 1, "", "RNGP_GRAMMAR_CONTENT"], [7, 3, 1, "", "RNGP_GRAMMAR_EMPTY"], [7, 3, 1, "", "RNGP_GRAMMAR_MISSING"], [7, 3, 1, "", "RNGP_GRAMMAR_NO_START"], [7, 3, 1, "", "RNGP_GROUP_ATTR_CONFLICT"], [7, 3, 1, "", "RNGP_HREF_ERROR"], [7, 3, 1, "", "RNGP_INCLUDE_EMPTY"], [7, 3, 1, "", "RNGP_INCLUDE_FAILURE"], [7, 3, 1, "", "RNGP_INCLUDE_RECURSE"], [7, 3, 1, "", "RNGP_INTERLEAVE_ADD"], [7, 3, 1, "", "RNGP_INTERLEAVE_CREATE_FAILED"], [7, 3, 1, "", "RNGP_INTERLEAVE_EMPTY"], [7, 3, 1, "", "RNGP_INTERLEAVE_NO_CONTENT"], [7, 3, 1, "", "RNGP_INVALID_DEFINE_NAME"], [7, 3, 1, "", "RNGP_INVALID_URI"], [7, 3, 1, "", "RNGP_INVALID_VALUE"], [7, 3, 1, "", "RNGP_MISSING_HREF"], [7, 3, 1, "", "RNGP_NAME_MISSING"], [7, 3, 1, "", "RNGP_NEED_COMBINE"], [7, 3, 1, "", "RNGP_NOTALLOWED_NOT_EMPTY"], [7, 3, 1, "", "RNGP_NSNAME_ATTR_ANCESTOR"], [7, 3, 1, "", "RNGP_NSNAME_NO_NS"], [7, 3, 1, "", "RNGP_PARAM_FORBIDDEN"], [7, 3, 1, "", "RNGP_PARAM_NAME_MISSING"], [7, 3, 1, "", "RNGP_PARENTREF_CREATE_FAILED"], [7, 3, 1, "", "RNGP_PARENTREF_NAME_INVALID"], [7, 3, 1, "", "RNGP_PARENTREF_NOT_EMPTY"], [7, 3, 1, "", "RNGP_PARENTREF_NO_NAME"], [7, 3, 1, "", "RNGP_PARENTREF_NO_PARENT"], [7, 3, 1, "", "RNGP_PARSE_ERROR"], [7, 3, 1, "", "RNGP_PAT_ANYNAME_EXCEPT_ANYNAME"], [7, 3, 1, "", "RNGP_PAT_ATTR_ATTR"], [7, 3, 1, "", "RNGP_PAT_ATTR_ELEM"], [7, 3, 1, "", "RNGP_PAT_DATA_EXCEPT_ATTR"], [7, 3, 1, "", "RNGP_PAT_DATA_EXCEPT_ELEM"], [7, 3, 1, "", "RNGP_PAT_DATA_EXCEPT_EMPTY"], [7, 3, 1, "", "RNGP_PAT_DATA_EXCEPT_GROUP"], [7, 3, 1, "", "RNGP_PAT_DATA_EXCEPT_INTERLEAVE"], [7, 3, 1, "", "RNGP_PAT_DATA_EXCEPT_LIST"], [7, 3, 1, "", "RNGP_PAT_DATA_EXCEPT_ONEMORE"], [7, 3, 1, "", "RNGP_PAT_DATA_EXCEPT_REF"], [7, 3, 1, "", "RNGP_PAT_DATA_EXCEPT_TEXT"], [7, 3, 1, "", "RNGP_PAT_LIST_ATTR"], [7, 3, 1, "", "RNGP_PAT_LIST_ELEM"], [7, 3, 1, "", "RNGP_PAT_LIST_INTERLEAVE"], [7, 3, 1, "", "RNGP_PAT_LIST_LIST"], [7, 3, 1, "", "RNGP_PAT_LIST_REF"], [7, 3, 1, "", "RNGP_PAT_LIST_TEXT"], [7, 3, 1, "", "RNGP_PAT_NSNAME_EXCEPT_ANYNAME"], [7, 3, 1, "", "RNGP_PAT_NSNAME_EXCEPT_NSNAME"], [7, 3, 1, "", "RNGP_PAT_ONEMORE_GROUP_ATTR"], [7, 3, 1, "", "RNGP_PAT_ONEMORE_INTERLEAVE_ATTR"], [7, 3, 1, "", "RNGP_PAT_START_ATTR"], [7, 3, 1, "", "RNGP_PAT_START_DATA"], [7, 3, 1, "", "RNGP_PAT_START_EMPTY"], [7, 3, 1, "", "RNGP_PAT_START_GROUP"], [7, 3, 1, "", "RNGP_PAT_START_INTERLEAVE"], [7, 3, 1, "", "RNGP_PAT_START_LIST"], [7, 3, 1, "", "RNGP_PAT_START_ONEMORE"], [7, 3, 1, "", "RNGP_PAT_START_TEXT"], [7, 3, 1, "", "RNGP_PAT_START_VALUE"], [7, 3, 1, "", "RNGP_PREFIX_UNDEFINED"], [7, 3, 1, "", "RNGP_REF_CREATE_FAILED"], [7, 3, 1, "", "RNGP_REF_CYCLE"], [7, 3, 1, "", "RNGP_REF_NAME_INVALID"], [7, 3, 1, "", "RNGP_REF_NOT_EMPTY"], [7, 3, 1, "", "RNGP_REF_NO_DEF"], [7, 3, 1, "", "RNGP_REF_NO_NAME"], [7, 3, 1, "", "RNGP_START_CHOICE_AND_INTERLEAVE"], [7, 3, 1, "", "RNGP_START_CONTENT"], [7, 3, 1, "", "RNGP_START_EMPTY"], [7, 3, 1, "", "RNGP_START_MISSING"], [7, 3, 1, "", "RNGP_TEXT_EXPECTED"], [7, 3, 1, "", "RNGP_TEXT_HAS_CHILD"], [7, 3, 1, "", "RNGP_TYPE_MISSING"], [7, 3, 1, "", "RNGP_TYPE_NOT_FOUND"], [7, 3, 1, "", "RNGP_TYPE_VALUE"], [7, 3, 1, "", "RNGP_UNKNOWN_ATTRIBUTE"], [7, 3, 1, "", "RNGP_UNKNOWN_COMBINE"], [7, 3, 1, "", "RNGP_UNKNOWN_CONSTRUCT"], [7, 3, 1, "", "RNGP_UNKNOWN_TYPE_LIB"], [7, 3, 1, "", "RNGP_URI_FRAGMENT"], [7, 3, 1, "", "RNGP_URI_NOT_ABSOLUTE"], [7, 3, 1, "", "RNGP_VALUE_EMPTY"], [7, 3, 1, "", "RNGP_VALUE_NO_CONTENT"], [7, 3, 1, "", "RNGP_XMLNS_NAME"], [7, 3, 1, "", "RNGP_XML_NS"], [7, 3, 1, "", "SAVE_CHAR_INVALID"], [7, 3, 1, "", "SAVE_NOT_UTF8"], [7, 3, 1, "", "SAVE_NO_DOCTYPE"], [7, 3, 1, "", "SAVE_UNKNOWN_ENCODING"], [7, 3, 1, "", "SCHEMAP_AG_PROPS_CORRECT"], [7, 3, 1, "", "SCHEMAP_ATTRFORMDEFAULT_VALUE"], [7, 3, 1, "", "SCHEMAP_ATTRGRP_NONAME_NOREF"], [7, 3, 1, "", "SCHEMAP_ATTR_NONAME_NOREF"], [7, 3, 1, "", "SCHEMAP_AU_PROPS_CORRECT"], [7, 3, 1, "", "SCHEMAP_AU_PROPS_CORRECT_2"], [7, 3, 1, "", "SCHEMAP_A_PROPS_CORRECT_2"], [7, 3, 1, "", "SCHEMAP_A_PROPS_CORRECT_3"], [7, 3, 1, "", "SCHEMAP_COMPLEXTYPE_NONAME_NOREF"], [7, 3, 1, "", "SCHEMAP_COS_ALL_LIMITED"], [7, 3, 1, "", "SCHEMAP_COS_CT_EXTENDS_1_1"], [7, 3, 1, "", "SCHEMAP_COS_CT_EXTENDS_1_2"], [7, 3, 1, "", "SCHEMAP_COS_CT_EXTENDS_1_3"], [7, 3, 1, "", "SCHEMAP_COS_ST_DERIVED_OK_2_1"], [7, 3, 1, "", "SCHEMAP_COS_ST_DERIVED_OK_2_2"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_1_1"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_1_2"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_1_3_1"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_1_3_2"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_2_1"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_2_3_1_1"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_2_3_1_2"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_2_3_2_1"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_2_3_2_2"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_2_3_2_3"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_2_3_2_4"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_2_3_2_5"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_3_1"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_3_3_1"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_3_3_1_2"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_3_3_2_1"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_3_3_2_2"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_3_3_2_3"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_3_3_2_4"], [7, 3, 1, "", "SCHEMAP_COS_ST_RESTRICTS_3_3_2_5"], [7, 3, 1, "", "SCHEMAP_COS_VALID_DEFAULT_1"], [7, 3, 1, "", "SCHEMAP_COS_VALID_DEFAULT_2_1"], [7, 3, 1, "", "SCHEMAP_COS_VALID_DEFAULT_2_2_1"], [7, 3, 1, "", "SCHEMAP_COS_VALID_DEFAULT_2_2_2"], [7, 3, 1, "", "SCHEMAP_CT_PROPS_CORRECT_1"], [7, 3, 1, "", "SCHEMAP_CT_PROPS_CORRECT_2"], [7, 3, 1, "", "SCHEMAP_CT_PROPS_CORRECT_3"], [7, 3, 1, "", "SCHEMAP_CT_PROPS_CORRECT_4"], [7, 3, 1, "", "SCHEMAP_CT_PROPS_CORRECT_5"], [7, 3, 1, "", "SCHEMAP_CVC_SIMPLE_TYPE"], [7, 3, 1, "", "SCHEMAP_C_PROPS_CORRECT"], [7, 3, 1, "", "SCHEMAP_DEF_AND_PREFIX"], [7, 3, 1, "", "SCHEMAP_DERIVATION_OK_RESTRICTION_1"], [7, 3, 1, "", "SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1"], [7, 3, 1, "", "SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2"], [7, 3, 1, "", "SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3"], [7, 3, 1, "", "SCHEMAP_DERIVATION_OK_RESTRICTION_2_2"], [7, 3, 1, "", "SCHEMAP_DERIVATION_OK_RESTRICTION_3"], [7, 3, 1, "", "SCHEMAP_DERIVATION_OK_RESTRICTION_4_1"], [7, 3, 1, "", "SCHEMAP_DERIVATION_OK_RESTRICTION_4_2"], [7, 3, 1, "", "SCHEMAP_DERIVATION_OK_RESTRICTION_4_3"], [7, 3, 1, "", "SCHEMAP_ELEMFORMDEFAULT_VALUE"], [7, 3, 1, "", "SCHEMAP_ELEM_DEFAULT_FIXED"], [7, 3, 1, "", "SCHEMAP_ELEM_NONAME_NOREF"], [7, 3, 1, "", "SCHEMAP_EXTENSION_NO_BASE"], [7, 3, 1, "", "SCHEMAP_E_PROPS_CORRECT_2"], [7, 3, 1, "", "SCHEMAP_E_PROPS_CORRECT_3"], [7, 3, 1, "", "SCHEMAP_E_PROPS_CORRECT_4"], [7, 3, 1, "", "SCHEMAP_E_PROPS_CORRECT_5"], [7, 3, 1, "", "SCHEMAP_E_PROPS_CORRECT_6"], [7, 3, 1, "", "SCHEMAP_FACET_NO_VALUE"], [7, 3, 1, "", "SCHEMAP_FAILED_BUILD_IMPORT"], [7, 3, 1, "", "SCHEMAP_FAILED_LOAD"], [7, 3, 1, "", "SCHEMAP_FAILED_PARSE"], [7, 3, 1, "", "SCHEMAP_GROUP_NONAME_NOREF"], [7, 3, 1, "", "SCHEMAP_IMPORT_NAMESPACE_NOT_URI"], [7, 3, 1, "", "SCHEMAP_IMPORT_REDEFINE_NSNAME"], [7, 3, 1, "", "SCHEMAP_IMPORT_SCHEMA_NOT_URI"], [7, 3, 1, "", "SCHEMAP_INCLUDE_SCHEMA_NOT_URI"], [7, 3, 1, "", "SCHEMAP_INCLUDE_SCHEMA_NO_URI"], [7, 3, 1, "", "SCHEMAP_INTERNAL"], [7, 3, 1, "", "SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE"], [7, 3, 1, "", "SCHEMAP_INVALID_ATTR_COMBINATION"], [7, 3, 1, "", "SCHEMAP_INVALID_ATTR_INLINE_COMBINATION"], [7, 3, 1, "", "SCHEMAP_INVALID_ATTR_NAME"], [7, 3, 1, "", "SCHEMAP_INVALID_ATTR_USE"], [7, 3, 1, "", "SCHEMAP_INVALID_BOOLEAN"], [7, 3, 1, "", "SCHEMAP_INVALID_ENUM"], [7, 3, 1, "", "SCHEMAP_INVALID_FACET"], [7, 3, 1, "", "SCHEMAP_INVALID_FACET_VALUE"], [7, 3, 1, "", "SCHEMAP_INVALID_MAXOCCURS"], [7, 3, 1, "", "SCHEMAP_INVALID_MINOCCURS"], [7, 3, 1, "", "SCHEMAP_INVALID_REF_AND_SUBTYPE"], [7, 3, 1, "", "SCHEMAP_INVALID_WHITE_SPACE"], [7, 3, 1, "", "SCHEMAP_MG_PROPS_CORRECT_1"], [7, 3, 1, "", "SCHEMAP_MG_PROPS_CORRECT_2"], [7, 3, 1, "", "SCHEMAP_MISSING_SIMPLETYPE_CHILD"], [7, 3, 1, "", "SCHEMAP_NOATTR_NOREF"], [7, 3, 1, "", "SCHEMAP_NOROOT"], [7, 3, 1, "", "SCHEMAP_NOTATION_NO_NAME"], [7, 3, 1, "", "SCHEMAP_NOTHING_TO_PARSE"], [7, 3, 1, "", "SCHEMAP_NOTYPE_NOREF"], [7, 3, 1, "", "SCHEMAP_NOT_DETERMINISTIC"], [7, 3, 1, "", "SCHEMAP_NOT_SCHEMA"], [7, 3, 1, "", "SCHEMAP_NO_XMLNS"], [7, 3, 1, "", "SCHEMAP_NO_XSI"], [7, 3, 1, "", "SCHEMAP_PREFIX_UNDEFINED"], [7, 3, 1, "", "SCHEMAP_P_PROPS_CORRECT_1"], [7, 3, 1, "", "SCHEMAP_P_PROPS_CORRECT_2_1"], [7, 3, 1, "", "SCHEMAP_P_PROPS_CORRECT_2_2"], [7, 3, 1, "", "SCHEMAP_RECURSIVE"], [7, 3, 1, "", "SCHEMAP_REDEFINED_ATTR"], [7, 3, 1, "", "SCHEMAP_REDEFINED_ATTRGROUP"], [7, 3, 1, "", "SCHEMAP_REDEFINED_ELEMENT"], [7, 3, 1, "", "SCHEMAP_REDEFINED_GROUP"], [7, 3, 1, "", "SCHEMAP_REDEFINED_NOTATION"], [7, 3, 1, "", "SCHEMAP_REDEFINED_TYPE"], [7, 3, 1, "", "SCHEMAP_REF_AND_CONTENT"], [7, 3, 1, "", "SCHEMAP_REF_AND_SUBTYPE"], [7, 3, 1, "", "SCHEMAP_REGEXP_INVALID"], [7, 3, 1, "", "SCHEMAP_RESTRICTION_NONAME_NOREF"], [7, 3, 1, "", "SCHEMAP_S4S_ATTR_INVALID_VALUE"], [7, 3, 1, "", "SCHEMAP_S4S_ATTR_MISSING"], [7, 3, 1, "", "SCHEMAP_S4S_ATTR_NOT_ALLOWED"], [7, 3, 1, "", "SCHEMAP_S4S_ELEM_MISSING"], [7, 3, 1, "", "SCHEMAP_S4S_ELEM_NOT_ALLOWED"], [7, 3, 1, "", "SCHEMAP_SIMPLETYPE_NONAME"], [7, 3, 1, "", "SCHEMAP_SRC_ATTRIBUTE_1"], [7, 3, 1, "", "SCHEMAP_SRC_ATTRIBUTE_2"], [7, 3, 1, "", "SCHEMAP_SRC_ATTRIBUTE_3_1"], [7, 3, 1, "", "SCHEMAP_SRC_ATTRIBUTE_3_2"], [7, 3, 1, "", "SCHEMAP_SRC_ATTRIBUTE_4"], [7, 3, 1, "", "SCHEMAP_SRC_ATTRIBUTE_GROUP_1"], [7, 3, 1, "", "SCHEMAP_SRC_ATTRIBUTE_GROUP_2"], [7, 3, 1, "", "SCHEMAP_SRC_ATTRIBUTE_GROUP_3"], [7, 3, 1, "", "SCHEMAP_SRC_CT_1"], [7, 3, 1, "", "SCHEMAP_SRC_ELEMENT_1"], [7, 3, 1, "", "SCHEMAP_SRC_ELEMENT_2_1"], [7, 3, 1, "", "SCHEMAP_SRC_ELEMENT_2_2"], [7, 3, 1, "", "SCHEMAP_SRC_ELEMENT_3"], [7, 3, 1, "", "SCHEMAP_SRC_IMPORT"], [7, 3, 1, "", "SCHEMAP_SRC_IMPORT_1_1"], [7, 3, 1, "", "SCHEMAP_SRC_IMPORT_1_2"], [7, 3, 1, "", "SCHEMAP_SRC_IMPORT_2"], [7, 3, 1, "", "SCHEMAP_SRC_IMPORT_2_1"], [7, 3, 1, "", "SCHEMAP_SRC_IMPORT_2_2"], [7, 3, 1, "", "SCHEMAP_SRC_IMPORT_3_1"], [7, 3, 1, "", "SCHEMAP_SRC_IMPORT_3_2"], [7, 3, 1, "", "SCHEMAP_SRC_INCLUDE"], [7, 3, 1, "", "SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE"], [7, 3, 1, "", "SCHEMAP_SRC_REDEFINE"], [7, 3, 1, "", "SCHEMAP_SRC_RESOLVE"], [7, 3, 1, "", "SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE"], [7, 3, 1, "", "SCHEMAP_SRC_SIMPLE_TYPE_1"], [7, 3, 1, "", "SCHEMAP_SRC_SIMPLE_TYPE_2"], [7, 3, 1, "", "SCHEMAP_SRC_SIMPLE_TYPE_3"], [7, 3, 1, "", "SCHEMAP_SRC_SIMPLE_TYPE_4"], [7, 3, 1, "", "SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES"], [7, 3, 1, "", "SCHEMAP_ST_PROPS_CORRECT_1"], [7, 3, 1, "", "SCHEMAP_ST_PROPS_CORRECT_2"], [7, 3, 1, "", "SCHEMAP_ST_PROPS_CORRECT_3"], [7, 3, 1, "", "SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE"], [7, 3, 1, "", "SCHEMAP_TYPE_AND_SUBTYPE"], [7, 3, 1, "", "SCHEMAP_UNION_NOT_EXPRESSIBLE"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_ALL_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_ATTRGRP_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_ATTR_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_BASE_TYPE"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_CHOICE_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_ELEM_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_EXTENSION_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_FACET_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_FACET_TYPE"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_GROUP_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_IMPORT_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_INCLUDE_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_LIST_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_MEMBER_TYPE"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_NOTATION_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_PREFIX"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_REF"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_RESTRICTION_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_SCHEMAS_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_SEQUENCE_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_TYPE"], [7, 3, 1, "", "SCHEMAP_UNKNOWN_UNION_CHILD"], [7, 3, 1, "", "SCHEMAP_WARN_ATTR_POINTLESS_PROH"], [7, 3, 1, "", "SCHEMAP_WARN_ATTR_REDECL_PROH"], [7, 3, 1, "", "SCHEMAP_WARN_SKIP_SCHEMA"], [7, 3, 1, "", "SCHEMAP_WARN_UNLOCATED_SCHEMA"], [7, 3, 1, "", "SCHEMAP_WILDCARD_INVALID_NS_MEMBER"], [7, 3, 1, "", "SCHEMATRONV_ASSERT"], [7, 3, 1, "", "SCHEMATRONV_REPORT"], [7, 3, 1, "", "SCHEMAV_ATTRINVALID"], [7, 3, 1, "", "SCHEMAV_ATTRUNKNOWN"], [7, 3, 1, "", "SCHEMAV_CONSTRUCT"], [7, 3, 1, "", "SCHEMAV_CVC_ATTRIBUTE_1"], [7, 3, 1, "", "SCHEMAV_CVC_ATTRIBUTE_2"], [7, 3, 1, "", "SCHEMAV_CVC_ATTRIBUTE_3"], [7, 3, 1, "", "SCHEMAV_CVC_ATTRIBUTE_4"], [7, 3, 1, "", "SCHEMAV_CVC_AU"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_1"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_2_1"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_2_2"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_2_3"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_2_4"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_3_1"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_3_2_1"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_3_2_2"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_4"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_5_1"], [7, 3, 1, "", "SCHEMAV_CVC_COMPLEX_TYPE_5_2"], [7, 3, 1, "", "SCHEMAV_CVC_DATATYPE_VALID_1_2_1"], [7, 3, 1, "", "SCHEMAV_CVC_DATATYPE_VALID_1_2_2"], [7, 3, 1, "", "SCHEMAV_CVC_DATATYPE_VALID_1_2_3"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_1"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_2"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_3_1"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_3_2_1"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_3_2_2"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_4_1"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_4_2"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_4_3"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_5_1_1"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_5_1_2"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_5_2_1"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_5_2_2_1"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_5_2_2_2_1"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_5_2_2_2_2"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_6"], [7, 3, 1, "", "SCHEMAV_CVC_ELT_7"], [7, 3, 1, "", "SCHEMAV_CVC_ENUMERATION_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_FACET_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_FRACTIONDIGITS_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_IDC"], [7, 3, 1, "", "SCHEMAV_CVC_LENGTH_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_MAXEXCLUSIVE_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_MAXINCLUSIVE_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_MAXLENGTH_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_MINEXCLUSIVE_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_MININCLUSIVE_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_MINLENGTH_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_PATTERN_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_TOTALDIGITS_VALID"], [7, 3, 1, "", "SCHEMAV_CVC_TYPE_1"], [7, 3, 1, "", "SCHEMAV_CVC_TYPE_2"], [7, 3, 1, "", "SCHEMAV_CVC_TYPE_3_1_1"], [7, 3, 1, "", "SCHEMAV_CVC_TYPE_3_1_2"], [7, 3, 1, "", "SCHEMAV_CVC_WILDCARD"], [7, 3, 1, "", "SCHEMAV_DOCUMENT_ELEMENT_MISSING"], [7, 3, 1, "", "SCHEMAV_ELEMCONT"], [7, 3, 1, "", "SCHEMAV_ELEMENT_CONTENT"], [7, 3, 1, "", "SCHEMAV_EXTRACONTENT"], [7, 3, 1, "", "SCHEMAV_FACET"], [7, 3, 1, "", "SCHEMAV_HAVEDEFAULT"], [7, 3, 1, "", "SCHEMAV_INTERNAL"], [7, 3, 1, "", "SCHEMAV_INVALIDATTR"], [7, 3, 1, "", "SCHEMAV_INVALIDELEM"], [7, 3, 1, "", "SCHEMAV_ISABSTRACT"], [7, 3, 1, "", "SCHEMAV_MISC"], [7, 3, 1, "", "SCHEMAV_MISSING"], [7, 3, 1, "", "SCHEMAV_NOROLLBACK"], [7, 3, 1, "", "SCHEMAV_NOROOT"], [7, 3, 1, "", "SCHEMAV_NOTDETERMINIST"], [7, 3, 1, "", "SCHEMAV_NOTEMPTY"], [7, 3, 1, "", "SCHEMAV_NOTNILLABLE"], [7, 3, 1, "", "SCHEMAV_NOTSIMPLE"], [7, 3, 1, "", "SCHEMAV_NOTTOPLEVEL"], [7, 3, 1, "", "SCHEMAV_NOTYPE"], [7, 3, 1, "", "SCHEMAV_UNDECLAREDELEM"], [7, 3, 1, "", "SCHEMAV_VALUE"], [7, 3, 1, "", "SCHEMAV_WRONGELEM"], [7, 3, 1, "", "TREE_INVALID_DEC"], [7, 3, 1, "", "TREE_INVALID_HEX"], [7, 3, 1, "", "TREE_NOT_UTF8"], [7, 3, 1, "", "TREE_UNTERMINATED_ENTITY"], [7, 3, 1, "", "WAR_CATALOG_PI"], [7, 3, 1, "", "WAR_ENTITY_REDEFINED"], [7, 3, 1, "", "WAR_LANG_VALUE"], [7, 3, 1, "", "WAR_NS_COLUMN"], [7, 3, 1, "", "WAR_NS_URI"], [7, 3, 1, "", "WAR_NS_URI_RELATIVE"], [7, 3, 1, "", "WAR_SPACE_VALUE"], [7, 3, 1, "", "WAR_UNDECLARED_ENTITY"], [7, 3, 1, "", "WAR_UNKNOWN_VERSION"], [7, 3, 1, "", "XINCLUDE_BUILD_FAILED"], [7, 3, 1, "", "XINCLUDE_DEPRECATED_NS"], [7, 3, 1, "", "XINCLUDE_ENTITY_DEF_MISMATCH"], [7, 3, 1, "", "XINCLUDE_FALLBACKS_IN_INCLUDE"], [7, 3, 1, "", "XINCLUDE_FALLBACK_NOT_IN_INCLUDE"], [7, 3, 1, "", "XINCLUDE_FRAGMENT_ID"], [7, 3, 1, "", "XINCLUDE_HREF_URI"], [7, 3, 1, "", "XINCLUDE_INCLUDE_IN_INCLUDE"], [7, 3, 1, "", "XINCLUDE_INVALID_CHAR"], [7, 3, 1, "", "XINCLUDE_MULTIPLE_ROOT"], [7, 3, 1, "", "XINCLUDE_NO_FALLBACK"], [7, 3, 1, "", "XINCLUDE_NO_HREF"], [7, 3, 1, "", "XINCLUDE_PARSE_VALUE"], [7, 3, 1, "", "XINCLUDE_RECURSION"], [7, 3, 1, "", "XINCLUDE_TEXT_DOCUMENT"], [7, 3, 1, "", "XINCLUDE_TEXT_FRAGMENT"], [7, 3, 1, "", "XINCLUDE_UNKNOWN_ENCODING"], [7, 3, 1, "", "XINCLUDE_XPTR_FAILED"], [7, 3, 1, "", "XINCLUDE_XPTR_RESULT"], [7, 3, 1, "", "XPATH_ENCODING_ERROR"], [7, 3, 1, "", "XPATH_EXPRESSION_OK"], [7, 3, 1, "", "XPATH_EXPR_ERROR"], [7, 3, 1, "", "XPATH_INVALID_ARITY"], [7, 3, 1, "", "XPATH_INVALID_CHAR_ERROR"], [7, 3, 1, "", "XPATH_INVALID_CTXT_POSITION"], [7, 3, 1, "", "XPATH_INVALID_CTXT_SIZE"], [7, 3, 1, "", "XPATH_INVALID_OPERAND"], [7, 3, 1, "", "XPATH_INVALID_PREDICATE_ERROR"], [7, 3, 1, "", "XPATH_INVALID_TYPE"], [7, 3, 1, "", "XPATH_MEMORY_ERROR"], [7, 3, 1, "", "XPATH_NUMBER_ERROR"], [7, 3, 1, "", "XPATH_START_LITERAL_ERROR"], [7, 3, 1, "", "XPATH_UNCLOSED_ERROR"], [7, 3, 1, "", "XPATH_UNDEF_PREFIX_ERROR"], [7, 3, 1, "", "XPATH_UNDEF_VARIABLE_ERROR"], [7, 3, 1, "", "XPATH_UNFINISHED_LITERAL_ERROR"], [7, 3, 1, "", "XPATH_UNKNOWN_FUNC_ERROR"], [7, 3, 1, "", "XPATH_VARIABLE_REF_ERROR"], [7, 3, 1, "", "XPTR_CHILDSEQ_START"], [7, 3, 1, "", "XPTR_EVAL_FAILED"], [7, 3, 1, "", "XPTR_EXTRA_OBJECTS"], [7, 3, 1, "", "XPTR_RESOURCE_ERROR"], [7, 3, 1, "", "XPTR_SUB_RESOURCE_ERROR"], [7, 3, 1, "", "XPTR_SYNTAX_ERROR"], [7, 3, 1, "", "XPTR_UNKNOWN_SCHEME"], [7, 2, 1, "", "_getName"], [7, 3, 1, "", "_names"]], "lxml.etree.FallbackElementClassLookup": [[7, 3, 1, "", "fallback"], [7, 2, 1, "", "set_fallback"]], "lxml.etree.HTMLParser": [[7, 2, 1, "", "close"], [7, 2, 1, "", "copy"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "feed"], [7, 3, 1, "", "feed_error_log"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "resolvers"], [7, 2, 1, "", "setElementClassLookup"], [7, 2, 1, "", "set_element_class_lookup"], [7, 3, 1, "", "target"], [7, 3, 1, "", "version"]], "lxml.etree.HTMLPullParser": [[7, 2, 1, "", "close"], [7, 2, 1, "", "copy"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "feed"], [7, 3, 1, "", "feed_error_log"], [7, 2, 1, "", "makeelement"], [7, 2, 1, "", "read_events"], [7, 3, 1, "", "resolvers"], [7, 2, 1, "", "setElementClassLookup"], [7, 2, 1, "", "set_element_class_lookup"], [7, 3, 1, "", "target"], [7, 3, 1, "", "version"]], "lxml.etree.LxmlError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.LxmlRegistryError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.LxmlSyntaxError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 3, 1, "", "end_lineno"], [7, 3, 1, "", "end_offset"], [7, 3, 1, "", "filename"], [7, 3, 1, "", "lineno"], [7, 3, 1, "", "msg"], [7, 3, 1, "", "offset"], [7, 3, 1, "", "print_file_and_line"], [7, 3, 1, "", "text"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.NamespaceRegistryError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.PIBase": [[7, 2, 1, "", "_init"], [7, 2, 1, "", "addnext"], [7, 2, 1, "", "addprevious"], [7, 2, 1, "", "append"], [7, 3, 1, "", "attrib"], [7, 3, 1, "", "base"], [7, 2, 1, "", "clear"], [7, 2, 1, "", "cssselect"], [7, 2, 1, "", "extend"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "get"], [7, 2, 1, "", "getchildren"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getnext"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "getprevious"], [7, 2, 1, "", "getroottree"], [7, 2, 1, "", "index"], [7, 2, 1, "", "insert"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterancestors"], [7, 2, 1, "", "iterchildren"], [7, 2, 1, "", "iterdescendants"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "itersiblings"], [7, 2, 1, "", "itertext"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "nsmap"], [7, 3, 1, "", "prefix"], [7, 2, 1, "", "remove"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "set"], [7, 3, 1, "", "sourceline"], [7, 3, 1, "", "tag"], [7, 3, 1, "", "tail"], [7, 3, 1, "", "target"], [7, 3, 1, "", "text"], [7, 2, 1, "", "values"], [7, 2, 1, "", "xpath"]], "lxml.etree.ParseError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 3, 1, "", "end_lineno"], [7, 3, 1, "", "end_offset"], [7, 3, 1, "", "filename"], [7, 3, 1, "", "lineno"], [7, 3, 1, "", "msg"], [7, 3, 1, "", "offset"], [7, 6, 1, "", "position"], [7, 3, 1, "", "print_file_and_line"], [7, 3, 1, "", "text"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.ParserBasedElementClassLookup": [[7, 3, 1, "", "fallback"], [7, 2, 1, "", "set_fallback"]], "lxml.etree.ParserError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.PyErrorLog": [[7, 2, 1, "", "copy"], [7, 3, 1, "", "last_error"], [7, 3, 1, "", "level_map"], [7, 2, 1, "", "log"], [7, 2, 1, "", "receive"]], "lxml.etree.PythonElementClassLookup": [[7, 3, 1, "", "fallback"], [7, 2, 1, "", "lookup"], [7, 2, 1, "", "set_fallback"]], "lxml.etree.QName": [[7, 3, 1, "", "localname"], [7, 3, 1, "", "namespace"], [7, 3, 1, "", "text"]], "lxml.etree.RelaxNG": [[7, 2, 1, "", "_append_log_message"], [7, 2, 1, "", "_clear_error_log"], [7, 2, 1, "", "assertValid"], [7, 2, 1, "", "assert_"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "from_rnc_string"], [7, 2, 1, "", "validate"]], "lxml.etree.RelaxNGError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.RelaxNGErrorTypes": [[7, 3, 1, "", "RELAXNG_ERR_ATTREXTRANS"], [7, 3, 1, "", "RELAXNG_ERR_ATTRNAME"], [7, 3, 1, "", "RELAXNG_ERR_ATTRNONS"], [7, 3, 1, "", "RELAXNG_ERR_ATTRVALID"], [7, 3, 1, "", "RELAXNG_ERR_ATTRWRONGNS"], [7, 3, 1, "", "RELAXNG_ERR_CONTENTVALID"], [7, 3, 1, "", "RELAXNG_ERR_DATAELEM"], [7, 3, 1, "", "RELAXNG_ERR_DATATYPE"], [7, 3, 1, "", "RELAXNG_ERR_DUPID"], [7, 3, 1, "", "RELAXNG_ERR_ELEMEXTRANS"], [7, 3, 1, "", "RELAXNG_ERR_ELEMNAME"], [7, 3, 1, "", "RELAXNG_ERR_ELEMNONS"], [7, 3, 1, "", "RELAXNG_ERR_ELEMNOTEMPTY"], [7, 3, 1, "", "RELAXNG_ERR_ELEMWRONG"], [7, 3, 1, "", "RELAXNG_ERR_ELEMWRONGNS"], [7, 3, 1, "", "RELAXNG_ERR_EXTRACONTENT"], [7, 3, 1, "", "RELAXNG_ERR_EXTRADATA"], [7, 3, 1, "", "RELAXNG_ERR_INTEREXTRA"], [7, 3, 1, "", "RELAXNG_ERR_INTERNAL"], [7, 3, 1, "", "RELAXNG_ERR_INTERNODATA"], [7, 3, 1, "", "RELAXNG_ERR_INTERSEQ"], [7, 3, 1, "", "RELAXNG_ERR_INVALIDATTR"], [7, 3, 1, "", "RELAXNG_ERR_LACKDATA"], [7, 3, 1, "", "RELAXNG_ERR_LIST"], [7, 3, 1, "", "RELAXNG_ERR_LISTELEM"], [7, 3, 1, "", "RELAXNG_ERR_LISTEMPTY"], [7, 3, 1, "", "RELAXNG_ERR_LISTEXTRA"], [7, 3, 1, "", "RELAXNG_ERR_MEMORY"], [7, 3, 1, "", "RELAXNG_ERR_NODEFINE"], [7, 3, 1, "", "RELAXNG_ERR_NOELEM"], [7, 3, 1, "", "RELAXNG_ERR_NOGRAMMAR"], [7, 3, 1, "", "RELAXNG_ERR_NOSTATE"], [7, 3, 1, "", "RELAXNG_ERR_NOTELEM"], [7, 3, 1, "", "RELAXNG_ERR_TEXTWRONG"], [7, 3, 1, "", "RELAXNG_ERR_TYPE"], [7, 3, 1, "", "RELAXNG_ERR_TYPECMP"], [7, 3, 1, "", "RELAXNG_ERR_TYPEVAL"], [7, 3, 1, "", "RELAXNG_ERR_VALELEM"], [7, 3, 1, "", "RELAXNG_ERR_VALUE"], [7, 3, 1, "", "RELAXNG_OK"], [7, 2, 1, "", "_getName"], [7, 3, 1, "", "_names"]], "lxml.etree.RelaxNGParseError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.RelaxNGValidateError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.Resolver": [[7, 2, 1, "", "resolve"], [7, 2, 1, "", "resolve_empty"], [7, 2, 1, "", "resolve_file"], [7, 2, 1, "", "resolve_filename"], [7, 2, 1, "", "resolve_string"]], "lxml.etree.Schematron": [[7, 2, 1, "", "_append_log_message"], [7, 2, 1, "", "_clear_error_log"], [7, 2, 1, "", "assertValid"], [7, 2, 1, "", "assert_"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "validate"]], "lxml.etree.SchematronError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.SchematronParseError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.SchematronValidateError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.SerialisationError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.TreeBuilder": [[7, 2, 1, "", "close"], [7, 2, 1, "", "comment"], [7, 2, 1, "", "data"], [7, 2, 1, "", "end"], [7, 2, 1, "", "pi"], [7, 2, 1, "", "start"]], "lxml.etree.XInclude": [[7, 3, 1, "", "error_log"]], "lxml.etree.XIncludeError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XMLParser": [[7, 2, 1, "", "close"], [7, 2, 1, "", "copy"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "feed"], [7, 3, 1, "", "feed_error_log"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "resolvers"], [7, 2, 1, "", "setElementClassLookup"], [7, 2, 1, "", "set_element_class_lookup"], [7, 3, 1, "", "target"], [7, 3, 1, "", "version"]], "lxml.etree.XMLPullParser": [[7, 2, 1, "", "close"], [7, 2, 1, "", "copy"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "feed"], [7, 3, 1, "", "feed_error_log"], [7, 2, 1, "", "makeelement"], [7, 2, 1, "", "read_events"], [7, 3, 1, "", "resolvers"], [7, 2, 1, "", "setElementClassLookup"], [7, 2, 1, "", "set_element_class_lookup"], [7, 3, 1, "", "target"], [7, 3, 1, "", "version"]], "lxml.etree.XMLSchema": [[7, 2, 1, "", "_append_log_message"], [7, 2, 1, "", "_clear_error_log"], [7, 2, 1, "", "assertValid"], [7, 2, 1, "", "assert_"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "validate"]], "lxml.etree.XMLSchemaError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XMLSchemaParseError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XMLSchemaValidateError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XMLSyntaxAssertionError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 3, 1, "", "end_lineno"], [7, 3, 1, "", "end_offset"], [7, 3, 1, "", "filename"], [7, 3, 1, "", "lineno"], [7, 3, 1, "", "msg"], [7, 3, 1, "", "offset"], [7, 6, 1, "", "position"], [7, 3, 1, "", "print_file_and_line"], [7, 3, 1, "", "text"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XMLSyntaxError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 3, 1, "", "end_lineno"], [7, 3, 1, "", "end_offset"], [7, 3, 1, "", "filename"], [7, 3, 1, "", "lineno"], [7, 3, 1, "", "msg"], [7, 3, 1, "", "offset"], [7, 6, 1, "", "position"], [7, 3, 1, "", "print_file_and_line"], [7, 3, 1, "", "text"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XPath": [[7, 3, 1, "", "error_log"], [7, 2, 1, "", "evaluate"], [7, 3, 1, "", "path"]], "lxml.etree.XPathDocumentEvaluator": [[7, 3, 1, "", "error_log"], [7, 2, 1, "", "evaluate"], [7, 2, 1, "", "register_namespace"], [7, 2, 1, "", "register_namespaces"]], "lxml.etree.XPathElementEvaluator": [[7, 3, 1, "", "error_log"], [7, 2, 1, "", "evaluate"], [7, 2, 1, "", "register_namespace"], [7, 2, 1, "", "register_namespaces"]], "lxml.etree.XPathError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XPathEvalError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XPathFunctionError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XPathResultError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XPathSyntaxError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 3, 1, "", "end_lineno"], [7, 3, 1, "", "end_offset"], [7, 3, 1, "", "filename"], [7, 3, 1, "", "lineno"], [7, 3, 1, "", "msg"], [7, 3, 1, "", "offset"], [7, 3, 1, "", "print_file_and_line"], [7, 3, 1, "", "text"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XSLT": [[7, 2, 1, "", "apply"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "set_global_max_depth"], [7, 2, 1, "", "strparam"], [7, 2, 1, "", "tostring"]], "lxml.etree.XSLTAccessControl": [[7, 3, 1, "", "DENY_ALL"], [7, 3, 1, "", "DENY_WRITE"], [7, 3, 1, "", "options"]], "lxml.etree.XSLTApplyError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XSLTError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XSLTExtension": [[7, 2, 1, "", "apply_templates"], [7, 2, 1, "", "execute"], [7, 2, 1, "", "process_children"]], "lxml.etree.XSLTExtensionError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XSLTParseError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree.XSLTSaveError": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree._Attrib": [[7, 2, 1, "", "clear"], [7, 2, 1, "", "get"], [7, 2, 1, "", "has_key"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iteritems"], [7, 2, 1, "", "iterkeys"], [7, 2, 1, "", "itervalues"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "pop"], [7, 2, 1, "", "update"], [7, 2, 1, "", "values"]], "lxml.etree._BaseErrorLog": [[7, 2, 1, "", "copy"], [7, 3, 1, "", "last_error"], [7, 2, 1, "", "receive"]], "lxml.etree._Comment": [[7, 2, 1, "", "_init"], [7, 2, 1, "", "addnext"], [7, 2, 1, "", "addprevious"], [7, 2, 1, "", "append"], [7, 3, 1, "", "attrib"], [7, 3, 1, "", "base"], [7, 2, 1, "", "clear"], [7, 2, 1, "", "cssselect"], [7, 2, 1, "", "extend"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "get"], [7, 2, 1, "", "getchildren"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getnext"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "getprevious"], [7, 2, 1, "", "getroottree"], [7, 2, 1, "", "index"], [7, 2, 1, "", "insert"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterancestors"], [7, 2, 1, "", "iterchildren"], [7, 2, 1, "", "iterdescendants"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "itersiblings"], [7, 2, 1, "", "itertext"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "nsmap"], [7, 3, 1, "", "prefix"], [7, 2, 1, "", "remove"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "set"], [7, 3, 1, "", "sourceline"], [7, 3, 1, "", "tag"], [7, 3, 1, "", "tail"], [7, 3, 1, "", "text"], [7, 2, 1, "", "values"], [7, 2, 1, "", "xpath"]], "lxml.etree._DomainErrorLog": [[7, 2, 1, "", "clear"], [7, 2, 1, "", "copy"], [7, 2, 1, "", "filter_domains"], [7, 2, 1, "", "filter_from_errors"], [7, 2, 1, "", "filter_from_fatals"], [7, 2, 1, "", "filter_from_level"], [7, 2, 1, "", "filter_from_warnings"], [7, 2, 1, "", "filter_levels"], [7, 2, 1, "", "filter_types"], [7, 3, 1, "", "last_error"], [7, 2, 1, "", "receive"]], "lxml.etree._Element": [[7, 2, 1, "", "_init"], [7, 2, 1, "", "addnext"], [7, 2, 1, "", "addprevious"], [7, 2, 1, "", "append"], [7, 3, 1, "", "attrib"], [7, 3, 1, "", "base"], [7, 2, 1, "", "clear"], [7, 2, 1, "", "cssselect"], [7, 2, 1, "", "extend"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "get"], [7, 2, 1, "", "getchildren"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getnext"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "getprevious"], [7, 2, 1, "", "getroottree"], [7, 2, 1, "", "index"], [7, 2, 1, "", "insert"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterancestors"], [7, 2, 1, "", "iterchildren"], [7, 2, 1, "", "iterdescendants"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "itersiblings"], [7, 2, 1, "", "itertext"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "nsmap"], [7, 3, 1, "", "prefix"], [7, 2, 1, "", "remove"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "set"], [7, 3, 1, "", "sourceline"], [7, 3, 1, "", "tag"], [7, 3, 1, "", "tail"], [7, 3, 1, "", "text"], [7, 2, 1, "", "values"], [7, 2, 1, "", "xpath"]], "lxml.etree._ElementStringResult": [[7, 2, 1, "", "capitalize"], [7, 2, 1, "", "center"], [7, 2, 1, "", "count"], [7, 2, 1, "", "decode"], [7, 2, 1, "", "endswith"], [7, 2, 1, "", "expandtabs"], [7, 2, 1, "", "find"], [7, 2, 1, "", "fromhex"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "hex"], [7, 2, 1, "", "index"], [7, 2, 1, "", "isalnum"], [7, 2, 1, "", "isalpha"], [7, 2, 1, "", "isascii"], [7, 2, 1, "", "isdigit"], [7, 2, 1, "", "islower"], [7, 2, 1, "", "isspace"], [7, 2, 1, "", "istitle"], [7, 2, 1, "", "isupper"], [7, 2, 1, "", "join"], [7, 2, 1, "", "ljust"], [7, 2, 1, "", "lower"], [7, 2, 1, "", "lstrip"], [7, 2, 1, "", "maketrans"], [7, 2, 1, "", "partition"], [7, 2, 1, "", "removeprefix"], [7, 2, 1, "", "removesuffix"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "rfind"], [7, 2, 1, "", "rindex"], [7, 2, 1, "", "rjust"], [7, 2, 1, "", "rpartition"], [7, 2, 1, "", "rsplit"], [7, 2, 1, "", "rstrip"], [7, 2, 1, "", "split"], [7, 2, 1, "", "splitlines"], [7, 2, 1, "", "startswith"], [7, 2, 1, "", "strip"], [7, 2, 1, "", "swapcase"], [7, 2, 1, "", "title"], [7, 2, 1, "", "translate"], [7, 2, 1, "", "upper"], [7, 2, 1, "", "zfill"]], "lxml.etree._ElementTree": [[7, 2, 1, "", "_setroot"], [7, 3, 1, "", "docinfo"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "getelementpath"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getpath"], [7, 2, 1, "", "getroot"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "parse"], [7, 3, 1, "", "parser"], [7, 2, 1, "", "relaxng"], [7, 2, 1, "", "write"], [7, 2, 1, "", "write_c14n"], [7, 2, 1, "", "xinclude"], [7, 2, 1, "", "xmlschema"], [7, 2, 1, "", "xpath"], [7, 2, 1, "", "xslt"]], "lxml.etree._ElementUnicodeResult": [[7, 3, 1, "", "attrname"], [7, 2, 1, "", "capitalize"], [7, 2, 1, "", "casefold"], [7, 2, 1, "", "center"], [7, 2, 1, "", "count"], [7, 2, 1, "", "encode"], [7, 2, 1, "", "endswith"], [7, 2, 1, "", "expandtabs"], [7, 2, 1, "", "find"], [7, 2, 1, "", "format"], [7, 2, 1, "", "format_map"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "index"], [7, 3, 1, "", "is_attribute"], [7, 3, 1, "", "is_tail"], [7, 3, 1, "", "is_text"], [7, 2, 1, "", "isalnum"], [7, 2, 1, "", "isalpha"], [7, 2, 1, "", "isascii"], [7, 2, 1, "", "isdecimal"], [7, 2, 1, "", "isdigit"], [7, 2, 1, "", "isidentifier"], [7, 2, 1, "", "islower"], [7, 2, 1, "", "isnumeric"], [7, 2, 1, "", "isprintable"], [7, 2, 1, "", "isspace"], [7, 2, 1, "", "istitle"], [7, 2, 1, "", "isupper"], [7, 2, 1, "", "join"], [7, 2, 1, "", "ljust"], [7, 2, 1, "", "lower"], [7, 2, 1, "", "lstrip"], [7, 2, 1, "", "maketrans"], [7, 2, 1, "", "partition"], [7, 2, 1, "", "removeprefix"], [7, 2, 1, "", "removesuffix"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "rfind"], [7, 2, 1, "", "rindex"], [7, 2, 1, "", "rjust"], [7, 2, 1, "", "rpartition"], [7, 2, 1, "", "rsplit"], [7, 2, 1, "", "rstrip"], [7, 2, 1, "", "split"], [7, 2, 1, "", "splitlines"], [7, 2, 1, "", "startswith"], [7, 2, 1, "", "strip"], [7, 2, 1, "", "swapcase"], [7, 2, 1, "", "title"], [7, 2, 1, "", "translate"], [7, 2, 1, "", "upper"], [7, 2, 1, "", "zfill"]], "lxml.etree._Entity": [[7, 2, 1, "", "_init"], [7, 2, 1, "", "addnext"], [7, 2, 1, "", "addprevious"], [7, 2, 1, "", "append"], [7, 3, 1, "", "attrib"], [7, 3, 1, "", "base"], [7, 2, 1, "", "clear"], [7, 2, 1, "", "cssselect"], [7, 2, 1, "", "extend"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "get"], [7, 2, 1, "", "getchildren"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getnext"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "getprevious"], [7, 2, 1, "", "getroottree"], [7, 2, 1, "", "index"], [7, 2, 1, "", "insert"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterancestors"], [7, 2, 1, "", "iterchildren"], [7, 2, 1, "", "iterdescendants"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "itersiblings"], [7, 2, 1, "", "itertext"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "name"], [7, 3, 1, "", "nsmap"], [7, 3, 1, "", "prefix"], [7, 2, 1, "", "remove"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "set"], [7, 3, 1, "", "sourceline"], [7, 3, 1, "", "tag"], [7, 3, 1, "", "tail"], [7, 3, 1, "", "text"], [7, 2, 1, "", "values"], [7, 2, 1, "", "xpath"]], "lxml.etree._ErrorLog": [[7, 2, 1, "", "clear"], [7, 2, 1, "", "copy"], [7, 2, 1, "", "filter_domains"], [7, 2, 1, "", "filter_from_errors"], [7, 2, 1, "", "filter_from_fatals"], [7, 2, 1, "", "filter_from_level"], [7, 2, 1, "", "filter_from_warnings"], [7, 2, 1, "", "filter_levels"], [7, 2, 1, "", "filter_types"], [7, 3, 1, "", "last_error"], [7, 2, 1, "", "receive"]], "lxml.etree._FeedParser": [[7, 2, 1, "", "close"], [7, 2, 1, "", "copy"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "feed"], [7, 3, 1, "", "feed_error_log"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "resolvers"], [7, 2, 1, "", "setElementClassLookup"], [7, 2, 1, "", "set_element_class_lookup"], [7, 3, 1, "", "target"], [7, 3, 1, "", "version"]], "lxml.etree._IDDict": [[7, 2, 1, "", "copy"], [7, 2, 1, "", "get"], [7, 2, 1, "", "has_key"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iteritems"], [7, 2, 1, "", "iterkeys"], [7, 2, 1, "", "itervalues"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "values"]], "lxml.etree._ListErrorLog": [[7, 2, 1, "", "copy"], [7, 2, 1, "", "filter_domains"], [7, 2, 1, "", "filter_from_errors"], [7, 2, 1, "", "filter_from_fatals"], [7, 2, 1, "", "filter_from_level"], [7, 2, 1, "", "filter_from_warnings"], [7, 2, 1, "", "filter_levels"], [7, 2, 1, "", "filter_types"], [7, 3, 1, "", "last_error"], [7, 2, 1, "", "receive"]], "lxml.etree._LogEntry": [[7, 3, 1, "", "column"], [7, 3, 1, "", "domain"], [7, 3, 1, "", "domain_name"], [7, 3, 1, "", "filename"], [7, 3, 1, "", "level"], [7, 3, 1, "", "level_name"], [7, 3, 1, "", "line"], [7, 3, 1, "", "message"], [7, 3, 1, "", "path"], [7, 3, 1, "", "type"], [7, 3, 1, "", "type_name"]], "lxml.etree._ProcessingInstruction": [[7, 2, 1, "", "_init"], [7, 2, 1, "", "addnext"], [7, 2, 1, "", "addprevious"], [7, 2, 1, "", "append"], [7, 3, 1, "", "attrib"], [7, 3, 1, "", "base"], [7, 2, 1, "", "clear"], [7, 2, 1, "", "cssselect"], [7, 2, 1, "", "extend"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "get"], [7, 2, 1, "", "getchildren"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getnext"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "getprevious"], [7, 2, 1, "", "getroottree"], [7, 2, 1, "", "index"], [7, 2, 1, "", "insert"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterancestors"], [7, 2, 1, "", "iterchildren"], [7, 2, 1, "", "iterdescendants"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "itersiblings"], [7, 2, 1, "", "itertext"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "nsmap"], [7, 3, 1, "", "prefix"], [7, 2, 1, "", "remove"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "set"], [7, 3, 1, "", "sourceline"], [7, 3, 1, "", "tag"], [7, 3, 1, "", "tail"], [7, 3, 1, "", "target"], [7, 3, 1, "", "text"], [7, 2, 1, "", "values"], [7, 2, 1, "", "xpath"]], "lxml.etree._RotatingErrorLog": [[7, 2, 1, "", "clear"], [7, 2, 1, "", "copy"], [7, 2, 1, "", "filter_domains"], [7, 2, 1, "", "filter_from_errors"], [7, 2, 1, "", "filter_from_fatals"], [7, 2, 1, "", "filter_from_level"], [7, 2, 1, "", "filter_from_warnings"], [7, 2, 1, "", "filter_levels"], [7, 2, 1, "", "filter_types"], [7, 3, 1, "", "last_error"], [7, 2, 1, "", "receive"]], "lxml.etree._TargetParserResult": [[7, 2, 1, "", "add_note"], [7, 3, 1, "", "args"], [7, 2, 1, "", "with_traceback"]], "lxml.etree._Validator": [[7, 2, 1, "", "_append_log_message"], [7, 2, 1, "", "_clear_error_log"], [7, 2, 1, "", "assertValid"], [7, 2, 1, "", "assert_"], [7, 3, 1, "", "error_log"], [7, 2, 1, "", "validate"]], "lxml.etree._XPathEvaluatorBase": [[7, 3, 1, "", "error_log"], [7, 2, 1, "", "evaluate"]], "lxml.etree._XSLTProcessingInstruction": [[7, 2, 1, "", "_init"], [7, 2, 1, "", "addnext"], [7, 2, 1, "", "addprevious"], [7, 2, 1, "", "append"], [7, 3, 1, "", "attrib"], [7, 3, 1, "", "base"], [7, 2, 1, "", "clear"], [7, 2, 1, "", "cssselect"], [7, 2, 1, "", "extend"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "get"], [7, 2, 1, "", "getchildren"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getnext"], [7, 2, 1, "", "getparent"], [7, 2, 1, "", "getprevious"], [7, 2, 1, "", "getroottree"], [7, 2, 1, "", "index"], [7, 2, 1, "", "insert"], [7, 2, 1, "", "items"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterancestors"], [7, 2, 1, "", "iterchildren"], [7, 2, 1, "", "iterdescendants"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "itersiblings"], [7, 2, 1, "", "itertext"], [7, 2, 1, "", "keys"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "nsmap"], [7, 2, 1, "", "parseXSL"], [7, 3, 1, "", "prefix"], [7, 2, 1, "", "remove"], [7, 2, 1, "", "replace"], [7, 2, 1, "", "set"], [7, 3, 1, "", "sourceline"], [7, 3, 1, "", "tag"], [7, 3, 1, "", "tail"], [7, 3, 1, "", "target"], [7, 3, 1, "", "text"], [7, 2, 1, "", "values"], [7, 2, 1, "", "xpath"]], "lxml.etree._XSLTResultTree": [[7, 2, 1, "", "_setroot"], [7, 3, 1, "", "docinfo"], [7, 2, 1, "", "find"], [7, 2, 1, "", "findall"], [7, 2, 1, "", "findtext"], [7, 2, 1, "", "getelementpath"], [7, 2, 1, "", "getiterator"], [7, 2, 1, "", "getpath"], [7, 2, 1, "", "getroot"], [7, 2, 1, "", "iter"], [7, 2, 1, "", "iterfind"], [7, 2, 1, "", "parse"], [7, 3, 1, "", "parser"], [7, 2, 1, "", "relaxng"], [7, 2, 1, "", "write"], [7, 2, 1, "", "write_c14n"], [7, 2, 1, "", "write_output"], [7, 2, 1, "", "xinclude"], [7, 2, 1, "", "xmlschema"], [7, 2, 1, "", "xpath"], [7, 2, 1, "", "xslt"], [7, 3, 1, "", "xslt_profile"]], "lxml.etree.iterparse": [[7, 3, 1, "", "error_log"], [7, 2, 1, "", "makeelement"], [7, 3, 1, "", "resolvers"], [7, 3, 1, "", "root"], [7, 2, 1, "", "set_element_class_lookup"], [7, 3, 1, "", "version"]], "lxml.etree.iterwalk": [[7, 2, 1, "", "skip_subtree"]], "lxml.html": [[8, 5, 1, "", "CheckboxGroup"], [8, 5, 1, "", "CheckboxValues"], [8, 5, 1, "", "Classes"], [8, 4, 1, "", "Element"], [8, 5, 1, "", "FieldsDict"], [8, 5, 1, "", "FormElement"], [8, 5, 1, "", "HTMLParser"], [8, 5, 1, "", "HtmlComment"], [8, 5, 1, "", "HtmlElement"], [8, 5, 1, "", "HtmlElementClassLookup"], [8, 5, 1, "", "HtmlEntity"], [8, 5, 1, "", "HtmlMixin"], [8, 5, 1, "", "HtmlProcessingInstruction"], [8, 5, 1, "", "InputElement"], [8, 5, 1, "", "InputGetter"], [8, 5, 1, "", "InputMixin"], [8, 5, 1, "", "LabelElement"], [8, 5, 1, "", "MultipleSelectOptions"], [8, 5, 1, "", "RadioGroup"], [8, 5, 1, "", "SelectElement"], [8, 5, 1, "", "TextareaElement"], [8, 5, 1, "", "XHTMLParser"], [8, 5, 1, "", "_MethodFunc"], [8, 4, 1, "", "__bytes_replace_meta_content_type"], [8, 4, 1, "", "__fix_docstring"], [8, 4, 1, "", "__str_replace_meta_content_type"], [8, 4, 1, "", "_contains_block_level_tag"], [10, 0, 0, "-", "_diffcommand"], [8, 4, 1, "", "_element_name"], [8, 4, 1, "", "_iter_css_imports"], [8, 4, 1, "", "_iter_css_urls"], [8, 4, 1, "", "_looks_like_full_html_bytes"], [8, 4, 1, "", "_looks_like_full_html_unicode"], [8, 4, 1, "", "_nons"], [8, 4, 1, "", "_parse_meta_refresh_url"], [11, 0, 0, "-", "_setmixin"], [8, 4, 1, "", "_transform_result"], [8, 4, 1, "", "_unquote_match"], [12, 0, 0, "-", "builder"], [13, 0, 0, "-", "clean"], [14, 0, 0, "-", "defs"], [15, 0, 0, "-", "diff"], [8, 4, 1, "", "document_fromstring"], [16, 0, 0, "-", "formfill"], [8, 4, 1, "", "fragment_fromstring"], [8, 4, 1, "", "fragments_fromstring"], [8, 4, 1, "", "fromstring"], [8, 4, 1, "", "html_to_xhtml"], [8, 4, 1, "", "open_http_urllib"], [8, 4, 1, "", "open_in_browser"], [8, 4, 1, "", "parse"], [8, 4, 1, "", "submit_form"], [8, 4, 1, "", "tostring"], [8, 4, 1, "", "xhtml_to_html"]], "lxml.html.CheckboxGroup": [[8, 2, 1, "", "append"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "copy"], [8, 2, 1, "", "count"], [8, 2, 1, "", "extend"], [8, 2, 1, "", "index"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "pop"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "reverse"], [8, 2, 1, "", "sort"], [8, 6, 1, "", "value"], [8, 6, 1, "", "value_options"]], "lxml.html.CheckboxValues": [[8, 3, 1, "", "_abc_impl"], [8, 2, 1, "", "_from_iterable"], [8, 2, 1, "", "_hash"], [8, 2, 1, "", "add"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "copy"], [8, 2, 1, "", "difference"], [8, 2, 1, "", "difference_update"], [8, 2, 1, "", "discard"], [8, 2, 1, "", "intersection"], [8, 2, 1, "", "intersection_update"], [8, 2, 1, "", "isdisjoint"], [8, 2, 1, "", "issubset"], [8, 2, 1, "", "issuperset"], [8, 2, 1, "", "pop"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "symmetric_difference"], [8, 2, 1, "", "symmetric_difference_update"], [8, 2, 1, "", "union"], [8, 2, 1, "", "update"]], "lxml.html.Classes": [[8, 3, 1, "", "_abc_impl"], [8, 2, 1, "", "_from_iterable"], [8, 2, 1, "", "_hash"], [8, 2, 1, "", "add"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "discard"], [8, 2, 1, "", "isdisjoint"], [8, 2, 1, "", "pop"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "toggle"], [8, 2, 1, "", "update"]], "lxml.html.FieldsDict": [[8, 3, 1, "", "_abc_impl"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "get"], [8, 2, 1, "", "items"], [8, 2, 1, "", "keys"], [8, 2, 1, "", "pop"], [8, 2, 1, "", "popitem"], [8, 2, 1, "", "setdefault"], [8, 2, 1, "", "update"], [8, 2, 1, "", "values"]], "lxml.html.FormElement": [[8, 2, 1, "", "_init"], [8, 2, 1, "", "_name"], [8, 6, 1, "", "action"], [8, 2, 1, "", "addnext"], [8, 2, 1, "", "addprevious"], [8, 2, 1, "", "append"], [8, 3, 1, "", "attrib"], [8, 3, 1, "", "base"], [8, 6, 1, "", "base_url"], [8, 6, 1, "", "body"], [8, 6, 1, "", "classes"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "cssselect"], [8, 2, 1, "", "drop_tag"], [8, 2, 1, "", "drop_tree"], [8, 2, 1, "", "extend"], [8, 6, 1, "", "fields"], [8, 2, 1, "", "find"], [8, 2, 1, "", "find_class"], [8, 2, 1, "", "find_rel_links"], [8, 2, 1, "", "findall"], [8, 2, 1, "", "findtext"], [8, 2, 1, "", "form_values"], [8, 6, 1, "", "forms"], [8, 2, 1, "", "get"], [8, 2, 1, "", "get_element_by_id"], [8, 2, 1, "", "getchildren"], [8, 2, 1, "", "getiterator"], [8, 2, 1, "", "getnext"], [8, 2, 1, "", "getparent"], [8, 2, 1, "", "getprevious"], [8, 2, 1, "", "getroottree"], [8, 6, 1, "", "head"], [8, 2, 1, "", "index"], [8, 6, 1, "", "inputs"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "items"], [8, 2, 1, "", "iter"], [8, 2, 1, "", "iterancestors"], [8, 2, 1, "", "iterchildren"], [8, 2, 1, "", "iterdescendants"], [8, 2, 1, "", "iterfind"], [8, 2, 1, "", "iterlinks"], [8, 2, 1, "", "itersiblings"], [8, 2, 1, "", "itertext"], [8, 2, 1, "", "keys"], [8, 6, 1, "", "label"], [8, 2, 1, "", "make_links_absolute"], [8, 2, 1, "", "makeelement"], [8, 6, 1, "", "method"], [8, 3, 1, "", "nsmap"], [8, 3, 1, "", "prefix"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "replace"], [8, 2, 1, "", "resolve_base_href"], [8, 2, 1, "", "rewrite_links"], [8, 2, 1, "", "set"], [8, 3, 1, "", "sourceline"], [8, 3, 1, "", "tag"], [8, 3, 1, "", "tail"], [8, 3, 1, "", "text"], [8, 2, 1, "", "text_content"], [8, 2, 1, "", "values"], [8, 2, 1, "", "xpath"]], "lxml.html.HTMLParser": [[8, 2, 1, "", "close"], [8, 2, 1, "", "copy"], [8, 3, 1, "", "error_log"], [8, 2, 1, "", "feed"], [8, 3, 1, "", "feed_error_log"], [8, 2, 1, "", "makeelement"], [8, 3, 1, "", "resolvers"], [8, 2, 1, "", "setElementClassLookup"], [8, 2, 1, "", "set_element_class_lookup"], [8, 3, 1, "", "target"], [8, 3, 1, "", "version"]], "lxml.html.HtmlComment": [[8, 2, 1, "", "_init"], [8, 2, 1, "", "addnext"], [8, 2, 1, "", "addprevious"], [8, 2, 1, "", "append"], [8, 3, 1, "", "attrib"], [8, 3, 1, "", "base"], [8, 6, 1, "", "base_url"], [8, 6, 1, "", "body"], [8, 6, 1, "", "classes"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "cssselect"], [8, 2, 1, "", "drop_tag"], [8, 2, 1, "", "drop_tree"], [8, 2, 1, "", "extend"], [8, 2, 1, "", "find"], [8, 2, 1, "", "find_class"], [8, 2, 1, "", "find_rel_links"], [8, 2, 1, "", "findall"], [8, 2, 1, "", "findtext"], [8, 6, 1, "", "forms"], [8, 2, 1, "", "get"], [8, 2, 1, "", "get_element_by_id"], [8, 2, 1, "", "getchildren"], [8, 2, 1, "", "getiterator"], [8, 2, 1, "", "getnext"], [8, 2, 1, "", "getparent"], [8, 2, 1, "", "getprevious"], [8, 2, 1, "", "getroottree"], [8, 6, 1, "", "head"], [8, 2, 1, "", "index"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "items"], [8, 2, 1, "", "iter"], [8, 2, 1, "", "iterancestors"], [8, 2, 1, "", "iterchildren"], [8, 2, 1, "", "iterdescendants"], [8, 2, 1, "", "iterfind"], [8, 2, 1, "", "iterlinks"], [8, 2, 1, "", "itersiblings"], [8, 2, 1, "", "itertext"], [8, 2, 1, "", "keys"], [8, 6, 1, "", "label"], [8, 2, 1, "", "make_links_absolute"], [8, 2, 1, "", "makeelement"], [8, 3, 1, "", "nsmap"], [8, 3, 1, "", "prefix"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "replace"], [8, 2, 1, "", "resolve_base_href"], [8, 2, 1, "", "rewrite_links"], [8, 2, 1, "", "set"], [8, 3, 1, "", "sourceline"], [8, 3, 1, "", "tag"], [8, 3, 1, "", "tail"], [8, 3, 1, "", "text"], [8, 2, 1, "", "text_content"], [8, 2, 1, "", "values"], [8, 2, 1, "", "xpath"]], "lxml.html.HtmlElement": [[8, 2, 1, "", "_init"], [8, 2, 1, "", "addnext"], [8, 2, 1, "", "addprevious"], [8, 2, 1, "", "append"], [8, 3, 1, "", "attrib"], [8, 3, 1, "", "base"], [8, 6, 1, "", "base_url"], [8, 6, 1, "", "body"], [8, 6, 1, "", "classes"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "cssselect"], [8, 2, 1, "", "drop_tag"], [8, 2, 1, "", "drop_tree"], [8, 2, 1, "", "extend"], [8, 2, 1, "", "find"], [8, 2, 1, "", "find_class"], [8, 2, 1, "", "find_rel_links"], [8, 2, 1, "", "findall"], [8, 2, 1, "", "findtext"], [8, 6, 1, "", "forms"], [8, 2, 1, "", "get"], [8, 2, 1, "", "get_element_by_id"], [8, 2, 1, "", "getchildren"], [8, 2, 1, "", "getiterator"], [8, 2, 1, "", "getnext"], [8, 2, 1, "", "getparent"], [8, 2, 1, "", "getprevious"], [8, 2, 1, "", "getroottree"], [8, 6, 1, "", "head"], [8, 2, 1, "", "index"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "items"], [8, 2, 1, "", "iter"], [8, 2, 1, "", "iterancestors"], [8, 2, 1, "", "iterchildren"], [8, 2, 1, "", "iterdescendants"], [8, 2, 1, "", "iterfind"], [8, 2, 1, "", "iterlinks"], [8, 2, 1, "", "itersiblings"], [8, 2, 1, "", "itertext"], [8, 2, 1, "", "keys"], [8, 6, 1, "", "label"], [8, 2, 1, "", "make_links_absolute"], [8, 2, 1, "", "makeelement"], [8, 3, 1, "", "nsmap"], [8, 3, 1, "", "prefix"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "replace"], [8, 2, 1, "", "resolve_base_href"], [8, 2, 1, "", "rewrite_links"], [8, 2, 1, "", "set"], [8, 3, 1, "", "sourceline"], [8, 3, 1, "", "tag"], [8, 3, 1, "", "tail"], [8, 3, 1, "", "text"], [8, 2, 1, "", "text_content"], [8, 2, 1, "", "values"], [8, 2, 1, "", "xpath"]], "lxml.html.HtmlElementClassLookup": [[8, 3, 1, "", "_default_element_classes"], [8, 3, 1, "", "fallback"], [8, 2, 1, "", "lookup"], [8, 2, 1, "", "set_fallback"]], "lxml.html.HtmlEntity": [[8, 2, 1, "", "_init"], [8, 2, 1, "", "addnext"], [8, 2, 1, "", "addprevious"], [8, 2, 1, "", "append"], [8, 3, 1, "", "attrib"], [8, 3, 1, "", "base"], [8, 6, 1, "", "base_url"], [8, 6, 1, "", "body"], [8, 6, 1, "", "classes"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "cssselect"], [8, 2, 1, "", "drop_tag"], [8, 2, 1, "", "drop_tree"], [8, 2, 1, "", "extend"], [8, 2, 1, "", "find"], [8, 2, 1, "", "find_class"], [8, 2, 1, "", "find_rel_links"], [8, 2, 1, "", "findall"], [8, 2, 1, "", "findtext"], [8, 6, 1, "", "forms"], [8, 2, 1, "", "get"], [8, 2, 1, "", "get_element_by_id"], [8, 2, 1, "", "getchildren"], [8, 2, 1, "", "getiterator"], [8, 2, 1, "", "getnext"], [8, 2, 1, "", "getparent"], [8, 2, 1, "", "getprevious"], [8, 2, 1, "", "getroottree"], [8, 6, 1, "", "head"], [8, 2, 1, "", "index"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "items"], [8, 2, 1, "", "iter"], [8, 2, 1, "", "iterancestors"], [8, 2, 1, "", "iterchildren"], [8, 2, 1, "", "iterdescendants"], [8, 2, 1, "", "iterfind"], [8, 2, 1, "", "iterlinks"], [8, 2, 1, "", "itersiblings"], [8, 2, 1, "", "itertext"], [8, 2, 1, "", "keys"], [8, 6, 1, "", "label"], [8, 2, 1, "", "make_links_absolute"], [8, 2, 1, "", "makeelement"], [8, 3, 1, "", "name"], [8, 3, 1, "", "nsmap"], [8, 3, 1, "", "prefix"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "replace"], [8, 2, 1, "", "resolve_base_href"], [8, 2, 1, "", "rewrite_links"], [8, 2, 1, "", "set"], [8, 3, 1, "", "sourceline"], [8, 3, 1, "", "tag"], [8, 3, 1, "", "tail"], [8, 3, 1, "", "text"], [8, 2, 1, "", "text_content"], [8, 2, 1, "", "values"], [8, 2, 1, "", "xpath"]], "lxml.html.HtmlMixin": [[8, 6, 1, "", "base_url"], [8, 6, 1, "", "body"], [8, 6, 1, "", "classes"], [8, 2, 1, "", "cssselect"], [8, 2, 1, "", "drop_tag"], [8, 2, 1, "", "drop_tree"], [8, 2, 1, "", "find_class"], [8, 2, 1, "", "find_rel_links"], [8, 6, 1, "", "forms"], [8, 2, 1, "", "get_element_by_id"], [8, 6, 1, "", "head"], [8, 2, 1, "", "iterlinks"], [8, 6, 1, "", "label"], [8, 2, 1, "", "make_links_absolute"], [8, 2, 1, "", "resolve_base_href"], [8, 2, 1, "", "rewrite_links"], [8, 2, 1, "", "set"], [8, 2, 1, "", "text_content"]], "lxml.html.HtmlProcessingInstruction": [[8, 2, 1, "", "_init"], [8, 2, 1, "", "addnext"], [8, 2, 1, "", "addprevious"], [8, 2, 1, "", "append"], [8, 3, 1, "", "attrib"], [8, 3, 1, "", "base"], [8, 6, 1, "", "base_url"], [8, 6, 1, "", "body"], [8, 6, 1, "", "classes"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "cssselect"], [8, 2, 1, "", "drop_tag"], [8, 2, 1, "", "drop_tree"], [8, 2, 1, "", "extend"], [8, 2, 1, "", "find"], [8, 2, 1, "", "find_class"], [8, 2, 1, "", "find_rel_links"], [8, 2, 1, "", "findall"], [8, 2, 1, "", "findtext"], [8, 6, 1, "", "forms"], [8, 2, 1, "", "get"], [8, 2, 1, "", "get_element_by_id"], [8, 2, 1, "", "getchildren"], [8, 2, 1, "", "getiterator"], [8, 2, 1, "", "getnext"], [8, 2, 1, "", "getparent"], [8, 2, 1, "", "getprevious"], [8, 2, 1, "", "getroottree"], [8, 6, 1, "", "head"], [8, 2, 1, "", "index"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "items"], [8, 2, 1, "", "iter"], [8, 2, 1, "", "iterancestors"], [8, 2, 1, "", "iterchildren"], [8, 2, 1, "", "iterdescendants"], [8, 2, 1, "", "iterfind"], [8, 2, 1, "", "iterlinks"], [8, 2, 1, "", "itersiblings"], [8, 2, 1, "", "itertext"], [8, 2, 1, "", "keys"], [8, 6, 1, "", "label"], [8, 2, 1, "", "make_links_absolute"], [8, 2, 1, "", "makeelement"], [8, 3, 1, "", "nsmap"], [8, 3, 1, "", "prefix"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "replace"], [8, 2, 1, "", "resolve_base_href"], [8, 2, 1, "", "rewrite_links"], [8, 2, 1, "", "set"], [8, 3, 1, "", "sourceline"], [8, 3, 1, "", "tag"], [8, 3, 1, "", "tail"], [8, 3, 1, "", "target"], [8, 3, 1, "", "text"], [8, 2, 1, "", "text_content"], [8, 2, 1, "", "values"], [8, 2, 1, "", "xpath"]], "lxml.html.InputElement": [[8, 2, 1, "", "_init"], [8, 2, 1, "", "addnext"], [8, 2, 1, "", "addprevious"], [8, 2, 1, "", "append"], [8, 3, 1, "", "attrib"], [8, 3, 1, "", "base"], [8, 6, 1, "", "base_url"], [8, 6, 1, "", "body"], [8, 6, 1, "", "checkable"], [8, 6, 1, "", "checked"], [8, 6, 1, "", "classes"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "cssselect"], [8, 2, 1, "", "drop_tag"], [8, 2, 1, "", "drop_tree"], [8, 2, 1, "", "extend"], [8, 2, 1, "", "find"], [8, 2, 1, "", "find_class"], [8, 2, 1, "", "find_rel_links"], [8, 2, 1, "", "findall"], [8, 2, 1, "", "findtext"], [8, 6, 1, "", "forms"], [8, 2, 1, "", "get"], [8, 2, 1, "", "get_element_by_id"], [8, 2, 1, "", "getchildren"], [8, 2, 1, "", "getiterator"], [8, 2, 1, "", "getnext"], [8, 2, 1, "", "getparent"], [8, 2, 1, "", "getprevious"], [8, 2, 1, "", "getroottree"], [8, 6, 1, "", "head"], [8, 2, 1, "", "index"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "items"], [8, 2, 1, "", "iter"], [8, 2, 1, "", "iterancestors"], [8, 2, 1, "", "iterchildren"], [8, 2, 1, "", "iterdescendants"], [8, 2, 1, "", "iterfind"], [8, 2, 1, "", "iterlinks"], [8, 2, 1, "", "itersiblings"], [8, 2, 1, "", "itertext"], [8, 2, 1, "", "keys"], [8, 6, 1, "", "label"], [8, 2, 1, "", "make_links_absolute"], [8, 2, 1, "", "makeelement"], [8, 6, 1, "", "name"], [8, 3, 1, "", "nsmap"], [8, 3, 1, "", "prefix"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "replace"], [8, 2, 1, "", "resolve_base_href"], [8, 2, 1, "", "rewrite_links"], [8, 2, 1, "", "set"], [8, 3, 1, "", "sourceline"], [8, 3, 1, "", "tag"], [8, 3, 1, "", "tail"], [8, 3, 1, "", "text"], [8, 2, 1, "", "text_content"], [8, 6, 1, "", "type"], [8, 6, 1, "", "value"], [8, 2, 1, "", "values"], [8, 2, 1, "", "xpath"]], "lxml.html.InputGetter": [[8, 2, 1, "", "items"], [8, 2, 1, "", "keys"]], "lxml.html.InputMixin": [[8, 6, 1, "", "name"]], "lxml.html.LabelElement": [[8, 2, 1, "", "_init"], [8, 2, 1, "", "addnext"], [8, 2, 1, "", "addprevious"], [8, 2, 1, "", "append"], [8, 3, 1, "", "attrib"], [8, 3, 1, "", "base"], [8, 6, 1, "", "base_url"], [8, 6, 1, "", "body"], [8, 6, 1, "", "classes"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "cssselect"], [8, 2, 1, "", "drop_tag"], [8, 2, 1, "", "drop_tree"], [8, 2, 1, "", "extend"], [8, 2, 1, "", "find"], [8, 2, 1, "", "find_class"], [8, 2, 1, "", "find_rel_links"], [8, 2, 1, "", "findall"], [8, 2, 1, "", "findtext"], [8, 6, 1, "", "for_element"], [8, 6, 1, "", "forms"], [8, 2, 1, "", "get"], [8, 2, 1, "", "get_element_by_id"], [8, 2, 1, "", "getchildren"], [8, 2, 1, "", "getiterator"], [8, 2, 1, "", "getnext"], [8, 2, 1, "", "getparent"], [8, 2, 1, "", "getprevious"], [8, 2, 1, "", "getroottree"], [8, 6, 1, "", "head"], [8, 2, 1, "", "index"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "items"], [8, 2, 1, "", "iter"], [8, 2, 1, "", "iterancestors"], [8, 2, 1, "", "iterchildren"], [8, 2, 1, "", "iterdescendants"], [8, 2, 1, "", "iterfind"], [8, 2, 1, "", "iterlinks"], [8, 2, 1, "", "itersiblings"], [8, 2, 1, "", "itertext"], [8, 2, 1, "", "keys"], [8, 6, 1, "", "label"], [8, 2, 1, "", "make_links_absolute"], [8, 2, 1, "", "makeelement"], [8, 3, 1, "", "nsmap"], [8, 3, 1, "", "prefix"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "replace"], [8, 2, 1, "", "resolve_base_href"], [8, 2, 1, "", "rewrite_links"], [8, 2, 1, "", "set"], [8, 3, 1, "", "sourceline"], [8, 3, 1, "", "tag"], [8, 3, 1, "", "tail"], [8, 3, 1, "", "text"], [8, 2, 1, "", "text_content"], [8, 2, 1, "", "values"], [8, 2, 1, "", "xpath"]], "lxml.html.MultipleSelectOptions": [[8, 3, 1, "", "_abc_impl"], [8, 2, 1, "", "_from_iterable"], [8, 2, 1, "", "_hash"], [8, 2, 1, "", "add"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "copy"], [8, 2, 1, "", "difference"], [8, 2, 1, "", "difference_update"], [8, 2, 1, "", "discard"], [8, 2, 1, "", "intersection"], [8, 2, 1, "", "intersection_update"], [8, 2, 1, "", "isdisjoint"], [8, 2, 1, "", "issubset"], [8, 2, 1, "", "issuperset"], [8, 6, 1, "", "options"], [8, 2, 1, "", "pop"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "symmetric_difference"], [8, 2, 1, "", "symmetric_difference_update"], [8, 2, 1, "", "union"], [8, 2, 1, "", "update"]], "lxml.html.RadioGroup": [[8, 2, 1, "", "append"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "copy"], [8, 2, 1, "", "count"], [8, 2, 1, "", "extend"], [8, 2, 1, "", "index"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "pop"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "reverse"], [8, 2, 1, "", "sort"], [8, 6, 1, "", "value"], [8, 6, 1, "", "value_options"]], "lxml.html.SelectElement": [[8, 2, 1, "", "_init"], [8, 2, 1, "", "addnext"], [8, 2, 1, "", "addprevious"], [8, 2, 1, "", "append"], [8, 3, 1, "", "attrib"], [8, 3, 1, "", "base"], [8, 6, 1, "", "base_url"], [8, 6, 1, "", "body"], [8, 6, 1, "", "classes"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "cssselect"], [8, 2, 1, "", "drop_tag"], [8, 2, 1, "", "drop_tree"], [8, 2, 1, "", "extend"], [8, 2, 1, "", "find"], [8, 2, 1, "", "find_class"], [8, 2, 1, "", "find_rel_links"], [8, 2, 1, "", "findall"], [8, 2, 1, "", "findtext"], [8, 6, 1, "", "forms"], [8, 2, 1, "", "get"], [8, 2, 1, "", "get_element_by_id"], [8, 2, 1, "", "getchildren"], [8, 2, 1, "", "getiterator"], [8, 2, 1, "", "getnext"], [8, 2, 1, "", "getparent"], [8, 2, 1, "", "getprevious"], [8, 2, 1, "", "getroottree"], [8, 6, 1, "", "head"], [8, 2, 1, "", "index"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "items"], [8, 2, 1, "", "iter"], [8, 2, 1, "", "iterancestors"], [8, 2, 1, "", "iterchildren"], [8, 2, 1, "", "iterdescendants"], [8, 2, 1, "", "iterfind"], [8, 2, 1, "", "iterlinks"], [8, 2, 1, "", "itersiblings"], [8, 2, 1, "", "itertext"], [8, 2, 1, "", "keys"], [8, 6, 1, "", "label"], [8, 2, 1, "", "make_links_absolute"], [8, 2, 1, "", "makeelement"], [8, 6, 1, "", "multiple"], [8, 6, 1, "", "name"], [8, 3, 1, "", "nsmap"], [8, 3, 1, "", "prefix"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "replace"], [8, 2, 1, "", "resolve_base_href"], [8, 2, 1, "", "rewrite_links"], [8, 2, 1, "", "set"], [8, 3, 1, "", "sourceline"], [8, 3, 1, "", "tag"], [8, 3, 1, "", "tail"], [8, 3, 1, "", "text"], [8, 2, 1, "", "text_content"], [8, 6, 1, "", "value"], [8, 6, 1, "", "value_options"], [8, 2, 1, "", "values"], [8, 2, 1, "", "xpath"]], "lxml.html.TextareaElement": [[8, 2, 1, "", "_init"], [8, 2, 1, "", "addnext"], [8, 2, 1, "", "addprevious"], [8, 2, 1, "", "append"], [8, 3, 1, "", "attrib"], [8, 3, 1, "", "base"], [8, 6, 1, "", "base_url"], [8, 6, 1, "", "body"], [8, 6, 1, "", "classes"], [8, 2, 1, "", "clear"], [8, 2, 1, "", "cssselect"], [8, 2, 1, "", "drop_tag"], [8, 2, 1, "", "drop_tree"], [8, 2, 1, "", "extend"], [8, 2, 1, "", "find"], [8, 2, 1, "", "find_class"], [8, 2, 1, "", "find_rel_links"], [8, 2, 1, "", "findall"], [8, 2, 1, "", "findtext"], [8, 6, 1, "", "forms"], [8, 2, 1, "", "get"], [8, 2, 1, "", "get_element_by_id"], [8, 2, 1, "", "getchildren"], [8, 2, 1, "", "getiterator"], [8, 2, 1, "", "getnext"], [8, 2, 1, "", "getparent"], [8, 2, 1, "", "getprevious"], [8, 2, 1, "", "getroottree"], [8, 6, 1, "", "head"], [8, 2, 1, "", "index"], [8, 2, 1, "", "insert"], [8, 2, 1, "", "items"], [8, 2, 1, "", "iter"], [8, 2, 1, "", "iterancestors"], [8, 2, 1, "", "iterchildren"], [8, 2, 1, "", "iterdescendants"], [8, 2, 1, "", "iterfind"], [8, 2, 1, "", "iterlinks"], [8, 2, 1, "", "itersiblings"], [8, 2, 1, "", "itertext"], [8, 2, 1, "", "keys"], [8, 6, 1, "", "label"], [8, 2, 1, "", "make_links_absolute"], [8, 2, 1, "", "makeelement"], [8, 6, 1, "", "name"], [8, 3, 1, "", "nsmap"], [8, 3, 1, "", "prefix"], [8, 2, 1, "", "remove"], [8, 2, 1, "", "replace"], [8, 2, 1, "", "resolve_base_href"], [8, 2, 1, "", "rewrite_links"], [8, 2, 1, "", "set"], [8, 3, 1, "", "sourceline"], [8, 3, 1, "", "tag"], [8, 3, 1, "", "tail"], [8, 3, 1, "", "text"], [8, 2, 1, "", "text_content"], [8, 6, 1, "", "value"], [8, 2, 1, "", "values"], [8, 2, 1, "", "xpath"]], "lxml.html.XHTMLParser": [[8, 2, 1, "", "close"], [8, 2, 1, "", "copy"], [8, 3, 1, "", "error_log"], [8, 2, 1, "", "feed"], [8, 3, 1, "", "feed_error_log"], [8, 2, 1, "", "makeelement"], [8, 3, 1, "", "resolvers"], [8, 2, 1, "", "setElementClassLookup"], [8, 2, 1, "", "set_element_class_lookup"], [8, 3, 1, "", "target"], [8, 3, 1, "", "version"]], "lxml.html._diffcommand": [[10, 4, 1, "", "annotate"], [10, 4, 1, "", "main"], [10, 4, 1, "", "read_file"], [10, 4, 1, "", "split_body"]], "lxml.html._setmixin": [[11, 5, 1, "", "SetMixin"]], "lxml.html._setmixin.SetMixin": [[11, 3, 1, "", "_abc_impl"], [11, 2, 1, "", "_from_iterable"], [11, 2, 1, "", "_hash"], [11, 2, 1, "", "add"], [11, 2, 1, "", "clear"], [11, 2, 1, "", "copy"], [11, 2, 1, "", "difference"], [11, 2, 1, "", "difference_update"], [11, 2, 1, "", "discard"], [11, 2, 1, "", "intersection"], [11, 2, 1, "", "intersection_update"], [11, 2, 1, "", "isdisjoint"], [11, 2, 1, "", "issubset"], [11, 2, 1, "", "issuperset"], [11, 2, 1, "", "pop"], [11, 2, 1, "", "remove"], [11, 2, 1, "", "symmetric_difference"], [11, 2, 1, "", "symmetric_difference_update"], [11, 2, 1, "", "union"], [11, 2, 1, "", "update"]], "lxml.html.builder": [[12, 7, 1, "", "A"], [12, 7, 1, "", "ABBR"], [12, 7, 1, "", "ACRONYM"], [12, 7, 1, "", "ADDRESS"], [12, 7, 1, "", "APPLET"], [12, 7, 1, "", "AREA"], [12, 7, 1, "", "B"], [12, 7, 1, "", "BASE"], [12, 7, 1, "", "BASEFONT"], [12, 7, 1, "", "BDO"], [12, 7, 1, "", "BIG"], [12, 7, 1, "", "BLOCKQUOTE"], [12, 7, 1, "", "BODY"], [12, 7, 1, "", "BR"], [12, 7, 1, "", "BUTTON"], [12, 7, 1, "", "CAPTION"], [12, 7, 1, "", "CENTER"], [12, 7, 1, "", "CITE"], [12, 4, 1, "", "CLASS"], [12, 7, 1, "", "CODE"], [12, 7, 1, "", "COL"], [12, 7, 1, "", "COLGROUP"], [12, 7, 1, "", "DD"], [12, 7, 1, "", "DEL"], [12, 7, 1, "", "DFN"], [12, 7, 1, "", "DIR"], [12, 7, 1, "", "DIV"], [12, 7, 1, "", "DL"], [12, 7, 1, "", "DT"], [12, 7, 1, "", "EM"], [12, 7, 1, "", "FIELDSET"], [12, 7, 1, "", "FONT"], [12, 4, 1, "", "FOR"], [12, 7, 1, "", "FORM"], [12, 7, 1, "", "FRAME"], [12, 7, 1, "", "FRAMESET"], [12, 7, 1, "", "H1"], [12, 7, 1, "", "H2"], [12, 7, 1, "", "H3"], [12, 7, 1, "", "H4"], [12, 7, 1, "", "H5"], [12, 7, 1, "", "H6"], [12, 7, 1, "", "HEAD"], [12, 7, 1, "", "HR"], [12, 7, 1, "", "HTML"], [12, 7, 1, "", "I"], [12, 7, 1, "", "IFRAME"], [12, 7, 1, "", "IMG"], [12, 7, 1, "", "INPUT"], [12, 7, 1, "", "INS"], [12, 7, 1, "", "ISINDEX"], [12, 7, 1, "", "KBD"], [12, 7, 1, "", "LABEL"], [12, 7, 1, "", "LEGEND"], [12, 7, 1, "", "LI"], [12, 7, 1, "", "LINK"], [12, 7, 1, "", "MAP"], [12, 7, 1, "", "MENU"], [12, 7, 1, "", "META"], [12, 7, 1, "", "NOFRAMES"], [12, 7, 1, "", "NOSCRIPT"], [12, 7, 1, "", "OBJECT"], [12, 7, 1, "", "OL"], [12, 7, 1, "", "OPTGROUP"], [12, 7, 1, "", "OPTION"], [12, 7, 1, "", "P"], [12, 7, 1, "", "PARAM"], [12, 7, 1, "", "PRE"], [12, 7, 1, "", "Q"], [12, 7, 1, "", "S"], [12, 7, 1, "", "SAMP"], [12, 7, 1, "", "SCRIPT"], [12, 7, 1, "", "SELECT"], [12, 7, 1, "", "SMALL"], [12, 7, 1, "", "SPAN"], [12, 7, 1, "", "STRIKE"], [12, 7, 1, "", "STRONG"], [12, 7, 1, "", "STYLE"], [12, 7, 1, "", "SUB"], [12, 7, 1, "", "SUP"], [12, 7, 1, "", "TABLE"], [12, 7, 1, "", "TBODY"], [12, 7, 1, "", "TD"], [12, 7, 1, "", "TEXTAREA"], [12, 7, 1, "", "TFOOT"], [12, 7, 1, "", "TH"], [12, 7, 1, "", "THEAD"], [12, 7, 1, "", "TITLE"], [12, 7, 1, "", "TR"], [12, 7, 1, "", "TT"], [12, 7, 1, "", "U"], [12, 7, 1, "", "UL"], [12, 7, 1, "", "VAR"]], "lxml.html.clean": [[13, 5, 1, "", "Cleaner"], [13, 4, 1, "", "_break_text"], [13, 4, 1, "", "_find_image_dataurls"], [13, 4, 1, "", "_has_javascript_scheme"], [13, 4, 1, "", "_insert_break"], [13, 4, 1, "", "_is_unsafe_image_type"], [13, 4, 1, "", "_link_text"], [13, 4, 1, "", "_looks_like_tag_content"], [13, 4, 1, "", "_possibly_malicious_schemes"], [13, 4, 1, "", "_replace_css_import"], [13, 4, 1, "", "_replace_css_javascript"], [13, 4, 1, "", "_substitute_whitespace"], [13, 4, 1, "", "autolink"], [13, 4, 1, "", "autolink_html"], [13, 4, 1, "", "clean_html"], [13, 4, 1, "", "word_break"], [13, 4, 1, "", "word_break_html"]], "lxml.html.clean.Cleaner": [[13, 2, 1, "", "_has_sneaky_javascript"], [13, 2, 1, "", "_kill_elements"], [13, 2, 1, "", "_remove_javascript_link"], [13, 2, 1, "", "_substitute_comments"], [13, 3, 1, "", "_tag_link_attrs"], [13, 3, 1, "", "add_nofollow"], [13, 2, 1, "", "allow_element"], [13, 2, 1, "", "allow_embedded_url"], [13, 2, 1, "", "allow_follow"], [13, 3, 1, "", "allow_tags"], [13, 3, 1, "", "annoying_tags"], [13, 2, 1, "", "clean_html"], [13, 3, 1, "", "comments"], [13, 3, 1, "", "embedded"], [13, 3, 1, "", "forms"], [13, 3, 1, "", "frames"], [13, 3, 1, "", "host_whitelist"], [13, 3, 1, "", "inline_style"], [13, 3, 1, "", "javascript"], [13, 2, 1, "", "kill_conditional_comments"], [13, 3, 1, "", "kill_tags"], [13, 3, 1, "", "links"], [13, 3, 1, "", "meta"], [13, 3, 1, "", "page_structure"], [13, 3, 1, "", "processing_instructions"], [13, 3, 1, "", "remove_tags"], [13, 3, 1, "", "remove_unknown_tags"], [13, 3, 1, "", "safe_attrs"], [13, 3, 1, "", "safe_attrs_only"], [13, 3, 1, "", "scripts"], [13, 3, 1, "", "style"], [13, 3, 1, "", "whitelist_tags"]], "lxml.html.diff": [[15, 5, 1, "", "DEL_END"], [15, 5, 1, "", "DEL_START"], [15, 5, 1, "", "InsensitiveSequenceMatcher"], [15, 1, 1, "", "NoDeletes"], [15, 4, 1, "", "_contains_block_level_tag"], [15, 4, 1, "", "_fixup_ins_del_tags"], [15, 4, 1, "", "_merge_element_contents"], [15, 4, 1, "", "_move_el_inside_block"], [15, 4, 1, "", "cleanup_delete"], [15, 4, 1, "", "cleanup_html"], [15, 4, 1, "", "compress_merge_back"], [15, 4, 1, "", "compress_tokens"], [15, 4, 1, "", "copy_annotations"], [15, 4, 1, "", "default_markup"], [15, 4, 1, "", "end_tag"], [15, 4, 1, "", "expand_tokens"], [15, 4, 1, "", "fixup_chunks"], [15, 4, 1, "", "fixup_ins_del_tags"], [15, 4, 1, "", "flatten_el"], [15, 5, 1, "", "href_token"], [15, 4, 1, "", "html_annotate"], [15, 4, 1, "", "html_annotate_merge_annotations"], [15, 4, 1, "", "htmldiff"], [15, 4, 1, "", "htmldiff_tokens"], [15, 4, 1, "", "is_end_tag"], [15, 4, 1, "", "is_start_tag"], [15, 4, 1, "", "is_word"], [15, 4, 1, "", "locate_unbalanced_end"], [15, 4, 1, "", "locate_unbalanced_start"], [15, 4, 1, "", "markup_serialize_tokens"], [15, 4, 1, "", "merge_delete"], [15, 4, 1, "", "merge_insert"], [15, 4, 1, "", "parse_html"], [15, 4, 1, "", "serialize_html_fragment"], [15, 4, 1, "", "split_delete"], [15, 4, 1, "", "split_trailing_whitespace"], [15, 4, 1, "", "split_unbalanced"], [15, 4, 1, "", "split_words"], [15, 4, 1, "", "start_tag"], [15, 5, 1, "", "tag_token"], [15, 5, 1, "", "token"], [15, 4, 1, "", "tokenize"], [15, 4, 1, "", "tokenize_annotated"]], "lxml.html.diff.InsensitiveSequenceMatcher": [[15, 2, 1, "", "find_longest_match"], [15, 2, 1, "", "get_grouped_opcodes"], [15, 2, 1, "", "get_matching_blocks"], [15, 2, 1, "", "get_opcodes"], [15, 2, 1, "", "quick_ratio"], [15, 2, 1, "", "ratio"], [15, 2, 1, "", "real_quick_ratio"], [15, 2, 1, "", "set_seq1"], [15, 2, 1, "", "set_seq2"], [15, 2, 1, "", "set_seqs"], [15, 3, 1, "", "threshold"]], "lxml.html.diff.NoDeletes": [[15, 2, 1, "", "add_note"], [15, 3, 1, "", "args"], [15, 2, 1, "", "with_traceback"]], "lxml.html.diff.href_token": [[15, 2, 1, "", "capitalize"], [15, 2, 1, "", "casefold"], [15, 2, 1, "", "center"], [15, 2, 1, "", "count"], [15, 2, 1, "", "encode"], [15, 2, 1, "", "endswith"], [15, 2, 1, "", "expandtabs"], [15, 2, 1, "", "find"], [15, 2, 1, "", "format"], [15, 2, 1, "", "format_map"], [15, 3, 1, "", "hide_when_equal"], [15, 2, 1, "", "html"], [15, 2, 1, "", "index"], [15, 2, 1, "", "isalnum"], [15, 2, 1, "", "isalpha"], [15, 2, 1, "", "isascii"], [15, 2, 1, "", "isdecimal"], [15, 2, 1, "", "isdigit"], [15, 2, 1, "", "isidentifier"], [15, 2, 1, "", "islower"], [15, 2, 1, "", "isnumeric"], [15, 2, 1, "", "isprintable"], [15, 2, 1, "", "isspace"], [15, 2, 1, "", "istitle"], [15, 2, 1, "", "isupper"], [15, 2, 1, "", "join"], [15, 2, 1, "", "ljust"], [15, 2, 1, "", "lower"], [15, 2, 1, "", "lstrip"], [15, 2, 1, "", "maketrans"], [15, 2, 1, "", "partition"], [15, 2, 1, "", "removeprefix"], [15, 2, 1, "", "removesuffix"], [15, 2, 1, "", "replace"], [15, 2, 1, "", "rfind"], [15, 2, 1, "", "rindex"], [15, 2, 1, "", "rjust"], [15, 2, 1, "", "rpartition"], [15, 2, 1, "", "rsplit"], [15, 2, 1, "", "rstrip"], [15, 2, 1, "", "split"], [15, 2, 1, "", "splitlines"], [15, 2, 1, "", "startswith"], [15, 2, 1, "", "strip"], [15, 2, 1, "", "swapcase"], [15, 2, 1, "", "title"], [15, 2, 1, "", "translate"], [15, 2, 1, "", "upper"], [15, 2, 1, "", "zfill"]], "lxml.html.diff.tag_token": [[15, 2, 1, "", "capitalize"], [15, 2, 1, "", "casefold"], [15, 2, 1, "", "center"], [15, 2, 1, "", "count"], [15, 2, 1, "", "encode"], [15, 2, 1, "", "endswith"], [15, 2, 1, "", "expandtabs"], [15, 2, 1, "", "find"], [15, 2, 1, "", "format"], [15, 2, 1, "", "format_map"], [15, 3, 1, "", "hide_when_equal"], [15, 2, 1, "", "html"], [15, 2, 1, "", "index"], [15, 2, 1, "", "isalnum"], [15, 2, 1, "", "isalpha"], [15, 2, 1, "", "isascii"], [15, 2, 1, "", "isdecimal"], [15, 2, 1, "", "isdigit"], [15, 2, 1, "", "isidentifier"], [15, 2, 1, "", "islower"], [15, 2, 1, "", "isnumeric"], [15, 2, 1, "", "isprintable"], [15, 2, 1, "", "isspace"], [15, 2, 1, "", "istitle"], [15, 2, 1, "", "isupper"], [15, 2, 1, "", "join"], [15, 2, 1, "", "ljust"], [15, 2, 1, "", "lower"], [15, 2, 1, "", "lstrip"], [15, 2, 1, "", "maketrans"], [15, 2, 1, "", "partition"], [15, 2, 1, "", "removeprefix"], [15, 2, 1, "", "removesuffix"], [15, 2, 1, "", "replace"], [15, 2, 1, "", "rfind"], [15, 2, 1, "", "rindex"], [15, 2, 1, "", "rjust"], [15, 2, 1, "", "rpartition"], [15, 2, 1, "", "rsplit"], [15, 2, 1, "", "rstrip"], [15, 2, 1, "", "split"], [15, 2, 1, "", "splitlines"], [15, 2, 1, "", "startswith"], [15, 2, 1, "", "strip"], [15, 2, 1, "", "swapcase"], [15, 2, 1, "", "title"], [15, 2, 1, "", "translate"], [15, 2, 1, "", "upper"], [15, 2, 1, "", "zfill"]], "lxml.html.diff.token": [[15, 2, 1, "", "capitalize"], [15, 2, 1, "", "casefold"], [15, 2, 1, "", "center"], [15, 2, 1, "", "count"], [15, 2, 1, "", "encode"], [15, 2, 1, "", "endswith"], [15, 2, 1, "", "expandtabs"], [15, 2, 1, "", "find"], [15, 2, 1, "", "format"], [15, 2, 1, "", "format_map"], [15, 3, 1, "", "hide_when_equal"], [15, 2, 1, "", "html"], [15, 2, 1, "", "index"], [15, 2, 1, "", "isalnum"], [15, 2, 1, "", "isalpha"], [15, 2, 1, "", "isascii"], [15, 2, 1, "", "isdecimal"], [15, 2, 1, "", "isdigit"], [15, 2, 1, "", "isidentifier"], [15, 2, 1, "", "islower"], [15, 2, 1, "", "isnumeric"], [15, 2, 1, "", "isprintable"], [15, 2, 1, "", "isspace"], [15, 2, 1, "", "istitle"], [15, 2, 1, "", "isupper"], [15, 2, 1, "", "join"], [15, 2, 1, "", "ljust"], [15, 2, 1, "", "lower"], [15, 2, 1, "", "lstrip"], [15, 2, 1, "", "maketrans"], [15, 2, 1, "", "partition"], [15, 2, 1, "", "removeprefix"], [15, 2, 1, "", "removesuffix"], [15, 2, 1, "", "replace"], [15, 2, 1, "", "rfind"], [15, 2, 1, "", "rindex"], [15, 2, 1, "", "rjust"], [15, 2, 1, "", "rpartition"], [15, 2, 1, "", "rsplit"], [15, 2, 1, "", "rstrip"], [15, 2, 1, "", "split"], [15, 2, 1, "", "splitlines"], [15, 2, 1, "", "startswith"], [15, 2, 1, "", "strip"], [15, 2, 1, "", "swapcase"], [15, 2, 1, "", "title"], [15, 2, 1, "", "translate"], [15, 2, 1, "", "upper"], [15, 2, 1, "", "zfill"]], "lxml.html.formfill": [[16, 5, 1, "", "DefaultErrorCreator"], [16, 1, 1, "", "FormNotFound"], [16, 4, 1, "", "_add_class"], [16, 4, 1, "", "_check"], [16, 4, 1, "", "_fill_form"], [16, 4, 1, "", "_fill_multiple"], [16, 4, 1, "", "_fill_single"], [16, 4, 1, "", "_find_elements_for_name"], [16, 4, 1, "", "_find_form"], [16, 4, 1, "", "_find_form_ids"], [16, 4, 1, "", "_insert_error"], [16, 4, 1, "", "_select"], [16, 4, 1, "", "_takes_multiple"], [16, 4, 1, "", "fill_form"], [16, 4, 1, "", "fill_form_html"], [16, 4, 1, "", "insert_errors"], [16, 4, 1, "", "insert_errors_html"]], "lxml.html.formfill.DefaultErrorCreator": [[16, 3, 1, "", "block_inside"], [16, 3, 1, "", "default_message"], [16, 3, 1, "", "error_block_class"], [16, 3, 1, "", "error_container_tag"], [16, 3, 1, "", "error_message_class"], [16, 3, 1, "", "insert_before"]], "lxml.html.formfill.FormNotFound": [[16, 2, 1, "", "add_note"], [16, 3, 1, "", "args"], [16, 2, 1, "", "with_traceback"]], "lxml.isoschematron": [[19, 5, 1, "", "Schematron"], [19, 4, 1, "", "_stylesheet_param_dict"], [19, 4, 1, "", "stylesheet_params"]], "lxml.isoschematron.Schematron": [[19, 3, 1, "", "ASSERTS_AND_REPORTS"], [19, 3, 1, "", "ASSERTS_ONLY"], [19, 2, 1, "", "_append_log_message"], [19, 2, 1, "", "_clear_error_log"], [19, 3, 1, "", "_compile"], [19, 3, 1, "", "_domain"], [19, 3, 1, "", "_error_type"], [19, 3, 1, "", "_expand"], [19, 2, 1, "", "_extract"], [19, 3, 1, "", "_extract_rng"], [19, 3, 1, "", "_extract_xsd"], [19, 3, 1, "", "_include"], [19, 3, 1, "", "_level"], [19, 3, 1, "", "_validation_errors"], [19, 2, 1, "", "assertValid"], [19, 2, 1, "", "assert_"], [19, 3, 1, "", "error_log"], [19, 6, 1, "", "schematron"], [19, 2, 1, "", "validate"], [19, 6, 1, "", "validation_report"], [19, 6, 1, "", "validator_xslt"]], "lxml.objectify": [[20, 5, 1, "", "BoolElement"], [20, 4, 1, "", "DataElement"], [20, 4, 1, "", "Element"], [20, 5, 1, "", "ElementMaker"], [20, 5, 1, "", "FloatElement"], [20, 5, 1, "", "IntElement"], [20, 5, 1, "", "LongElement"], [20, 5, 1, "", "NoneElement"], [20, 5, 1, "", "NumberElement"], [20, 5, 1, "", "ObjectPath"], [20, 5, 1, "", "ObjectifiedDataElement"], [20, 5, 1, "", "ObjectifiedElement"], [20, 5, 1, "", "ObjectifyElementClassLookup"], [20, 5, 1, "", "PyType"], [20, 5, 1, "", "StringElement"], [20, 4, 1, "", "XML"], [20, 4, 1, "", "__unpickleElementTree"], [20, 4, 1, "", "annotate"], [20, 4, 1, "", "deannotate"], [20, 4, 1, "", "dump"], [20, 4, 1, "", "enable_recursive_str"], [20, 4, 1, "", "fromstring"], [20, 4, 1, "", "getRegisteredTypes"], [20, 4, 1, "", "makeparser"], [20, 4, 1, "", "parse"], [20, 4, 1, "", "pyannotate"], [20, 4, 1, "", "pytypename"], [20, 4, 1, "", "set_default_parser"], [20, 4, 1, "", "set_pytype_attribute_tag"], [20, 4, 1, "", "xsiannotate"]], "lxml.objectify.BoolElement": [[20, 2, 1, "", "_init"], [20, 2, 1, "", "_setText"], [20, 2, 1, "", "_setValueParser"], [20, 2, 1, "", "addattr"], [20, 2, 1, "", "addnext"], [20, 2, 1, "", "addprevious"], [20, 2, 1, "", "append"], [20, 3, 1, "", "attrib"], [20, 3, 1, "", "base"], [20, 2, 1, "", "clear"], [20, 2, 1, "", "countchildren"], [20, 2, 1, "", "cssselect"], [20, 2, 1, "", "descendantpaths"], [20, 2, 1, "", "extend"], [20, 2, 1, "", "find"], [20, 2, 1, "", "findall"], [20, 2, 1, "", "findtext"], [20, 2, 1, "", "get"], [20, 2, 1, "", "getchildren"], [20, 2, 1, "", "getiterator"], [20, 2, 1, "", "getnext"], [20, 2, 1, "", "getparent"], [20, 2, 1, "", "getprevious"], [20, 2, 1, "", "getroottree"], [20, 2, 1, "", "index"], [20, 2, 1, "", "insert"], [20, 2, 1, "", "items"], [20, 2, 1, "", "iter"], [20, 2, 1, "", "iterancestors"], [20, 2, 1, "", "iterchildren"], [20, 2, 1, "", "iterdescendants"], [20, 2, 1, "", "iterfind"], [20, 2, 1, "", "itersiblings"], [20, 2, 1, "", "itertext"], [20, 2, 1, "", "keys"], [20, 2, 1, "", "makeelement"], [20, 3, 1, "", "nsmap"], [20, 3, 1, "", "prefix"], [20, 3, 1, "", "pyval"], [20, 2, 1, "", "remove"], [20, 2, 1, "", "replace"], [20, 2, 1, "", "set"], [20, 3, 1, "", "sourceline"], [20, 3, 1, "", "tag"], [20, 3, 1, "", "tail"], [20, 3, 1, "", "text"], [20, 2, 1, "", "values"], [20, 2, 1, "", "xpath"]], "lxml.objectify.FloatElement": [[20, 2, 1, "", "_init"], [20, 2, 1, "", "_setText"], [20, 2, 1, "", "_setValueParser"], [20, 2, 1, "", "addattr"], [20, 2, 1, "", "addnext"], [20, 2, 1, "", "addprevious"], [20, 2, 1, "", "append"], [20, 3, 1, "", "attrib"], [20, 3, 1, "", "base"], [20, 2, 1, "", "clear"], [20, 2, 1, "", "countchildren"], [20, 2, 1, "", "cssselect"], [20, 2, 1, "", "descendantpaths"], [20, 2, 1, "", "extend"], [20, 2, 1, "", "find"], [20, 2, 1, "", "findall"], [20, 2, 1, "", "findtext"], [20, 2, 1, "", "get"], [20, 2, 1, "", "getchildren"], [20, 2, 1, "", "getiterator"], [20, 2, 1, "", "getnext"], [20, 2, 1, "", "getparent"], [20, 2, 1, "", "getprevious"], [20, 2, 1, "", "getroottree"], [20, 2, 1, "", "index"], [20, 2, 1, "", "insert"], [20, 2, 1, "", "items"], [20, 2, 1, "", "iter"], [20, 2, 1, "", "iterancestors"], [20, 2, 1, "", "iterchildren"], [20, 2, 1, "", "iterdescendants"], [20, 2, 1, "", "iterfind"], [20, 2, 1, "", "itersiblings"], [20, 2, 1, "", "itertext"], [20, 2, 1, "", "keys"], [20, 2, 1, "", "makeelement"], [20, 3, 1, "", "nsmap"], [20, 3, 1, "", "prefix"], [20, 3, 1, "", "pyval"], [20, 2, 1, "", "remove"], [20, 2, 1, "", "replace"], [20, 2, 1, "", "set"], [20, 3, 1, "", "sourceline"], [20, 3, 1, "", "tag"], [20, 3, 1, "", "tail"], [20, 3, 1, "", "text"], [20, 2, 1, "", "values"], [20, 2, 1, "", "xpath"]], "lxml.objectify.IntElement": [[20, 2, 1, "", "_init"], [20, 2, 1, "", "_setText"], [20, 2, 1, "", "_setValueParser"], [20, 2, 1, "", "addattr"], [20, 2, 1, "", "addnext"], [20, 2, 1, "", "addprevious"], [20, 2, 1, "", "append"], [20, 3, 1, "", "attrib"], [20, 3, 1, "", "base"], [20, 2, 1, "", "clear"], [20, 2, 1, "", "countchildren"], [20, 2, 1, "", "cssselect"], [20, 2, 1, "", "descendantpaths"], [20, 2, 1, "", "extend"], [20, 2, 1, "", "find"], [20, 2, 1, "", "findall"], [20, 2, 1, "", "findtext"], [20, 2, 1, "", "get"], [20, 2, 1, "", "getchildren"], [20, 2, 1, "", "getiterator"], [20, 2, 1, "", "getnext"], [20, 2, 1, "", "getparent"], [20, 2, 1, "", "getprevious"], [20, 2, 1, "", "getroottree"], [20, 2, 1, "", "index"], [20, 2, 1, "", "insert"], [20, 2, 1, "", "items"], [20, 2, 1, "", "iter"], [20, 2, 1, "", "iterancestors"], [20, 2, 1, "", "iterchildren"], [20, 2, 1, "", "iterdescendants"], [20, 2, 1, "", "iterfind"], [20, 2, 1, "", "itersiblings"], [20, 2, 1, "", "itertext"], [20, 2, 1, "", "keys"], [20, 2, 1, "", "makeelement"], [20, 3, 1, "", "nsmap"], [20, 3, 1, "", "prefix"], [20, 3, 1, "", "pyval"], [20, 2, 1, "", "remove"], [20, 2, 1, "", "replace"], [20, 2, 1, "", "set"], [20, 3, 1, "", "sourceline"], [20, 3, 1, "", "tag"], [20, 3, 1, "", "tail"], [20, 3, 1, "", "text"], [20, 2, 1, "", "values"], [20, 2, 1, "", "xpath"]], "lxml.objectify.LongElement": [[20, 2, 1, "", "_init"], [20, 2, 1, "", "_setText"], [20, 2, 1, "", "_setValueParser"], [20, 2, 1, "", "addattr"], [20, 2, 1, "", "addnext"], [20, 2, 1, "", "addprevious"], [20, 2, 1, "", "append"], [20, 3, 1, "", "attrib"], [20, 3, 1, "", "base"], [20, 2, 1, "", "clear"], [20, 2, 1, "", "countchildren"], [20, 2, 1, "", "cssselect"], [20, 2, 1, "", "descendantpaths"], [20, 2, 1, "", "extend"], [20, 2, 1, "", "find"], [20, 2, 1, "", "findall"], [20, 2, 1, "", "findtext"], [20, 2, 1, "", "get"], [20, 2, 1, "", "getchildren"], [20, 2, 1, "", "getiterator"], [20, 2, 1, "", "getnext"], [20, 2, 1, "", "getparent"], [20, 2, 1, "", "getprevious"], [20, 2, 1, "", "getroottree"], [20, 2, 1, "", "index"], [20, 2, 1, "", "insert"], [20, 2, 1, "", "items"], [20, 2, 1, "", "iter"], [20, 2, 1, "", "iterancestors"], [20, 2, 1, "", "iterchildren"], [20, 2, 1, "", "iterdescendants"], [20, 2, 1, "", "iterfind"], [20, 2, 1, "", "itersiblings"], [20, 2, 1, "", "itertext"], [20, 2, 1, "", "keys"], [20, 2, 1, "", "makeelement"], [20, 3, 1, "", "nsmap"], [20, 3, 1, "", "prefix"], [20, 3, 1, "", "pyval"], [20, 2, 1, "", "remove"], [20, 2, 1, "", "replace"], [20, 2, 1, "", "set"], [20, 3, 1, "", "sourceline"], [20, 3, 1, "", "tag"], [20, 3, 1, "", "tail"], [20, 3, 1, "", "text"], [20, 2, 1, "", "values"], [20, 2, 1, "", "xpath"]], "lxml.objectify.NoneElement": [[20, 2, 1, "", "_init"], [20, 2, 1, "", "_setText"], [20, 2, 1, "", "addattr"], [20, 2, 1, "", "addnext"], [20, 2, 1, "", "addprevious"], [20, 2, 1, "", "append"], [20, 3, 1, "", "attrib"], [20, 3, 1, "", "base"], [20, 2, 1, "", "clear"], [20, 2, 1, "", "countchildren"], [20, 2, 1, "", "cssselect"], [20, 2, 1, "", "descendantpaths"], [20, 2, 1, "", "extend"], [20, 2, 1, "", "find"], [20, 2, 1, "", "findall"], [20, 2, 1, "", "findtext"], [20, 2, 1, "", "get"], [20, 2, 1, "", "getchildren"], [20, 2, 1, "", "getiterator"], [20, 2, 1, "", "getnext"], [20, 2, 1, "", "getparent"], [20, 2, 1, "", "getprevious"], [20, 2, 1, "", "getroottree"], [20, 2, 1, "", "index"], [20, 2, 1, "", "insert"], [20, 2, 1, "", "items"], [20, 2, 1, "", "iter"], [20, 2, 1, "", "iterancestors"], [20, 2, 1, "", "iterchildren"], [20, 2, 1, "", "iterdescendants"], [20, 2, 1, "", "iterfind"], [20, 2, 1, "", "itersiblings"], [20, 2, 1, "", "itertext"], [20, 2, 1, "", "keys"], [20, 2, 1, "", "makeelement"], [20, 3, 1, "", "nsmap"], [20, 3, 1, "", "prefix"], [20, 3, 1, "", "pyval"], [20, 2, 1, "", "remove"], [20, 2, 1, "", "replace"], [20, 2, 1, "", "set"], [20, 3, 1, "", "sourceline"], [20, 3, 1, "", "tag"], [20, 3, 1, "", "tail"], [20, 3, 1, "", "text"], [20, 2, 1, "", "values"], [20, 2, 1, "", "xpath"]], "lxml.objectify.NumberElement": [[20, 2, 1, "", "_init"], [20, 2, 1, "", "_setText"], [20, 2, 1, "", "_setValueParser"], [20, 2, 1, "", "addattr"], [20, 2, 1, "", "addnext"], [20, 2, 1, "", "addprevious"], [20, 2, 1, "", "append"], [20, 3, 1, "", "attrib"], [20, 3, 1, "", "base"], [20, 2, 1, "", "clear"], [20, 2, 1, "", "countchildren"], [20, 2, 1, "", "cssselect"], [20, 2, 1, "", "descendantpaths"], [20, 2, 1, "", "extend"], [20, 2, 1, "", "find"], [20, 2, 1, "", "findall"], [20, 2, 1, "", "findtext"], [20, 2, 1, "", "get"], [20, 2, 1, "", "getchildren"], [20, 2, 1, "", "getiterator"], [20, 2, 1, "", "getnext"], [20, 2, 1, "", "getparent"], [20, 2, 1, "", "getprevious"], [20, 2, 1, "", "getroottree"], [20, 2, 1, "", "index"], [20, 2, 1, "", "insert"], [20, 2, 1, "", "items"], [20, 2, 1, "", "iter"], [20, 2, 1, "", "iterancestors"], [20, 2, 1, "", "iterchildren"], [20, 2, 1, "", "iterdescendants"], [20, 2, 1, "", "iterfind"], [20, 2, 1, "", "itersiblings"], [20, 2, 1, "", "itertext"], [20, 2, 1, "", "keys"], [20, 2, 1, "", "makeelement"], [20, 3, 1, "", "nsmap"], [20, 3, 1, "", "prefix"], [20, 3, 1, "", "pyval"], [20, 2, 1, "", "remove"], [20, 2, 1, "", "replace"], [20, 2, 1, "", "set"], [20, 3, 1, "", "sourceline"], [20, 3, 1, "", "tag"], [20, 3, 1, "", "tail"], [20, 3, 1, "", "text"], [20, 2, 1, "", "values"], [20, 2, 1, "", "xpath"]], "lxml.objectify.ObjectPath": [[20, 2, 1, "", "addattr"], [20, 3, 1, "", "find"], [20, 2, 1, "", "hasattr"], [20, 2, 1, "", "setattr"]], "lxml.objectify.ObjectifiedDataElement": [[20, 2, 1, "", "_init"], [20, 2, 1, "", "_setText"], [20, 2, 1, "", "addattr"], [20, 2, 1, "", "addnext"], [20, 2, 1, "", "addprevious"], [20, 2, 1, "", "append"], [20, 3, 1, "", "attrib"], [20, 3, 1, "", "base"], [20, 2, 1, "", "clear"], [20, 2, 1, "", "countchildren"], [20, 2, 1, "", "cssselect"], [20, 2, 1, "", "descendantpaths"], [20, 2, 1, "", "extend"], [20, 2, 1, "", "find"], [20, 2, 1, "", "findall"], [20, 2, 1, "", "findtext"], [20, 2, 1, "", "get"], [20, 2, 1, "", "getchildren"], [20, 2, 1, "", "getiterator"], [20, 2, 1, "", "getnext"], [20, 2, 1, "", "getparent"], [20, 2, 1, "", "getprevious"], [20, 2, 1, "", "getroottree"], [20, 2, 1, "", "index"], [20, 2, 1, "", "insert"], [20, 2, 1, "", "items"], [20, 2, 1, "", "iter"], [20, 2, 1, "", "iterancestors"], [20, 2, 1, "", "iterchildren"], [20, 2, 1, "", "iterdescendants"], [20, 2, 1, "", "iterfind"], [20, 2, 1, "", "itersiblings"], [20, 2, 1, "", "itertext"], [20, 2, 1, "", "keys"], [20, 2, 1, "", "makeelement"], [20, 3, 1, "", "nsmap"], [20, 3, 1, "", "prefix"], [20, 3, 1, "", "pyval"], [20, 2, 1, "", "remove"], [20, 2, 1, "", "replace"], [20, 2, 1, "", "set"], [20, 3, 1, "", "sourceline"], [20, 3, 1, "", "tag"], [20, 3, 1, "", "tail"], [20, 3, 1, "", "text"], [20, 2, 1, "", "values"], [20, 2, 1, "", "xpath"]], "lxml.objectify.ObjectifiedElement": [[20, 2, 1, "", "_init"], [20, 2, 1, "", "addattr"], [20, 2, 1, "", "addnext"], [20, 2, 1, "", "addprevious"], [20, 2, 1, "", "append"], [20, 3, 1, "", "attrib"], [20, 3, 1, "", "base"], [20, 2, 1, "", "clear"], [20, 2, 1, "", "countchildren"], [20, 2, 1, "", "cssselect"], [20, 2, 1, "", "descendantpaths"], [20, 2, 1, "", "extend"], [20, 2, 1, "", "find"], [20, 2, 1, "", "findall"], [20, 2, 1, "", "findtext"], [20, 2, 1, "", "get"], [20, 2, 1, "", "getchildren"], [20, 2, 1, "", "getiterator"], [20, 2, 1, "", "getnext"], [20, 2, 1, "", "getparent"], [20, 2, 1, "", "getprevious"], [20, 2, 1, "", "getroottree"], [20, 2, 1, "", "index"], [20, 2, 1, "", "insert"], [20, 2, 1, "", "items"], [20, 2, 1, "", "iter"], [20, 2, 1, "", "iterancestors"], [20, 2, 1, "", "iterchildren"], [20, 2, 1, "", "iterdescendants"], [20, 2, 1, "", "iterfind"], [20, 2, 1, "", "itersiblings"], [20, 2, 1, "", "itertext"], [20, 2, 1, "", "keys"], [20, 2, 1, "", "makeelement"], [20, 3, 1, "", "nsmap"], [20, 3, 1, "", "prefix"], [20, 2, 1, "", "remove"], [20, 2, 1, "", "replace"], [20, 2, 1, "", "set"], [20, 3, 1, "", "sourceline"], [20, 3, 1, "", "tag"], [20, 3, 1, "", "tail"], [20, 3, 1, "", "text"], [20, 2, 1, "", "values"], [20, 2, 1, "", "xpath"]], "lxml.objectify.PyType": [[20, 3, 1, "", "name"], [20, 2, 1, "", "register"], [20, 3, 1, "", "stringify"], [20, 3, 1, "", "type_check"], [20, 2, 1, "", "unregister"], [20, 3, 1, "", "xmlSchemaTypes"]], "lxml.objectify.StringElement": [[20, 2, 1, "", "_init"], [20, 2, 1, "", "_setText"], [20, 2, 1, "", "addattr"], [20, 2, 1, "", "addnext"], [20, 2, 1, "", "addprevious"], [20, 2, 1, "", "append"], [20, 3, 1, "", "attrib"], [20, 3, 1, "", "base"], [20, 2, 1, "", "clear"], [20, 2, 1, "", "countchildren"], [20, 2, 1, "", "cssselect"], [20, 2, 1, "", "descendantpaths"], [20, 2, 1, "", "extend"], [20, 2, 1, "", "find"], [20, 2, 1, "", "findall"], [20, 2, 1, "", "findtext"], [20, 2, 1, "", "get"], [20, 2, 1, "", "getchildren"], [20, 2, 1, "", "getiterator"], [20, 2, 1, "", "getnext"], [20, 2, 1, "", "getparent"], [20, 2, 1, "", "getprevious"], [20, 2, 1, "", "getroottree"], [20, 2, 1, "", "index"], [20, 2, 1, "", "insert"], [20, 2, 1, "", "items"], [20, 2, 1, "", "iter"], [20, 2, 1, "", "iterancestors"], [20, 2, 1, "", "iterchildren"], [20, 2, 1, "", "iterdescendants"], [20, 2, 1, "", "iterfind"], [20, 2, 1, "", "itersiblings"], [20, 2, 1, "", "itertext"], [20, 2, 1, "", "keys"], [20, 2, 1, "", "makeelement"], [20, 3, 1, "", "nsmap"], [20, 3, 1, "", "prefix"], [20, 3, 1, "", "pyval"], [20, 2, 1, "", "remove"], [20, 2, 1, "", "replace"], [20, 2, 1, "", "set"], [20, 3, 1, "", "sourceline"], [20, 2, 1, "", "strlen"], [20, 3, 1, "", "tag"], [20, 3, 1, "", "tail"], [20, 3, 1, "", "text"], [20, 2, 1, "", "values"], [20, 2, 1, "", "xpath"]], "lxml.sax": [[21, 5, 1, "", "ElementTreeContentHandler"], [21, 5, 1, "", "ElementTreeProducer"], [21, 1, 1, "", "SaxError"], [21, 4, 1, "", "__pyx_unpickle_ElementTreeProducer"], [21, 4, 1, "", "saxify"]], "lxml.sax.ElementTreeContentHandler": [[21, 2, 1, "", "_buildTag"], [21, 2, 1, "", "_get_etree"], [21, 2, 1, "", "characters"], [21, 2, 1, "", "endDocument"], [21, 2, 1, "", "endElement"], [21, 2, 1, "", "endElementNS"], [21, 2, 1, "", "endPrefixMapping"], [21, 6, 1, "", "etree"], [21, 2, 1, "", "ignorableWhitespace"], [21, 2, 1, "", "processingInstruction"], [21, 2, 1, "", "setDocumentLocator"], [21, 2, 1, "", "skippedEntity"], [21, 2, 1, "", "startDocument"], [21, 2, 1, "", "startElement"], [21, 2, 1, "", "startElementNS"], [21, 2, 1, "", "startPrefixMapping"]], "lxml.sax.ElementTreeProducer": [[21, 2, 1, "", "saxify"]], "lxml.sax.SaxError": [[21, 2, 1, "", "add_note"], [21, 3, 1, "", "args"], [21, 2, 1, "", "with_traceback"]]}, "objtypes": {"0": "py:module", "1": "py:exception", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:class", "6": "py:property", "7": "py:data"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "exception", "Python exception"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "class", "Python class"], "6": ["py", "property", "Python property"], "7": ["py", "data", "Python data"]}, "titleterms": {"lxml": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "api": 0, "refer": 0, "indic": 0, "tabl": 0, "packag": [1, 8, 19], "subpackag": 1, "submodul": [1, 8], "modul": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "content": [1, 8, 19], "elementinclud": 2, "_elementpath": 3, "builder": [4, 12], "cssselect": 5, "doctestcompar": 6, "etre": 7, "html": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18], "elementsoup": 9, "_diffcommand": 10, "_setmixin": 11, "clean": 13, "def": 14, "diff": 15, "formfil": 16, "html5parser": 17, "souppars": 18, "isoschematron": 19, "objectifi": 20, "sax": 21}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"lxml API Reference": [[0, "lxml-api-reference"]], "Indices and tables": [[0, "indices-and-tables"]], "lxml package": [[1, "lxml-package"]], "Subpackages": [[1, "subpackages"]], "Submodules": [[1, "submodules"], [8, "submodules"]], "Module contents": [[1, "module-lxml"], [8, "module-lxml.html"], [19, "module-lxml.isoschematron"]], "lxml.ElementInclude module": [[2, "module-lxml.ElementInclude"]], "lxml._elementpath module": [[3, "module-lxml._elementpath"]], "lxml.builder module": [[4, "module-lxml.builder"]], "lxml.cssselect module": [[5, "lxml-cssselect-module"]], "lxml.doctestcompare module": [[6, "module-lxml.doctestcompare"]], "lxml.etree module": [[7, "module-lxml.etree"]], "lxml.html package": [[8, "lxml-html-package"]], "lxml.html.ElementSoup module": [[9, "lxml-html-elementsoup-module"]], "lxml.html._diffcommand module": [[10, "module-lxml.html._diffcommand"]], "lxml.html._setmixin module": [[11, "module-lxml.html._setmixin"]], "lxml.html.builder module": [[12, "module-lxml.html.builder"]], "lxml.html.clean module": [[13, "module-lxml.html.clean"]], "lxml.html.defs module": [[14, "module-lxml.html.defs"]], "lxml.html.diff module": [[15, "module-lxml.html.diff"]], "lxml.html.formfill module": [[16, "module-lxml.html.formfill"]], "lxml.html.html5parser module": [[17, "lxml-html-html5parser-module"]], "lxml.html.soupparser module": [[18, "lxml-html-soupparser-module"]], "lxml.isoschematron package": [[19, "lxml-isoschematron-package"]], "lxml.objectify module": [[20, "module-lxml.objectify"]], "lxml.sax module": [[21, "module-lxml.sax"]]}, "indexentries": {"get_include() (in module lxml)": [[1, "lxml.get_include"]], "lxml": [[1, "module-lxml"]], "module": [[1, "module-lxml"], [2, "module-lxml.ElementInclude"], [3, "module-lxml._elementpath"], [4, "module-lxml.builder"], [6, "module-lxml.doctestcompare"], [7, "module-lxml.etree"], [8, "module-lxml.html"], [10, "module-lxml.html._diffcommand"], [11, "module-lxml.html._setmixin"], [12, "module-lxml.html.builder"], [13, "module-lxml.html.clean"], [14, "module-lxml.html.defs"], [15, "module-lxml.html.diff"], [16, "module-lxml.html.formfill"], [19, "module-lxml.isoschematron"], [20, "module-lxml.objectify"], [21, "module-lxml.sax"]], "fatalincludeerror": [[2, "lxml.ElementInclude.FatalIncludeError"]], "limitedrecursiveincludeerror": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError"]], "_include() (in module lxml.elementinclude)": [[2, "lxml.ElementInclude._include"]], "_lxml_default_loader() (in module lxml.elementinclude)": [[2, "lxml.ElementInclude._lxml_default_loader"]], "_wrap_et_loader() (in module lxml.elementinclude)": [[2, "lxml.ElementInclude._wrap_et_loader"]], "add_note() (lxml.elementinclude.fatalincludeerror method)": [[2, "lxml.ElementInclude.FatalIncludeError.add_note"]], "add_note() (lxml.elementinclude.limitedrecursiveincludeerror method)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.add_note"]], "args (lxml.elementinclude.fatalincludeerror attribute)": [[2, "lxml.ElementInclude.FatalIncludeError.args"]], "args (lxml.elementinclude.limitedrecursiveincludeerror attribute)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.args"]], "default_loader() (in module lxml.elementinclude)": [[2, "lxml.ElementInclude.default_loader"]], "end_lineno (lxml.elementinclude.fatalincludeerror attribute)": [[2, "lxml.ElementInclude.FatalIncludeError.end_lineno"]], "end_lineno (lxml.elementinclude.limitedrecursiveincludeerror attribute)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.end_lineno"]], "end_offset (lxml.elementinclude.fatalincludeerror attribute)": [[2, "lxml.ElementInclude.FatalIncludeError.end_offset"]], "end_offset (lxml.elementinclude.limitedrecursiveincludeerror attribute)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.end_offset"]], "filename (lxml.elementinclude.fatalincludeerror attribute)": [[2, "lxml.ElementInclude.FatalIncludeError.filename"]], "filename (lxml.elementinclude.limitedrecursiveincludeerror attribute)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.filename"]], "include() (in module lxml.elementinclude)": [[2, "lxml.ElementInclude.include"]], "lineno (lxml.elementinclude.fatalincludeerror attribute)": [[2, "lxml.ElementInclude.FatalIncludeError.lineno"]], "lineno (lxml.elementinclude.limitedrecursiveincludeerror attribute)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.lineno"]], "lxml.elementinclude": [[2, "module-lxml.ElementInclude"]], "msg (lxml.elementinclude.fatalincludeerror attribute)": [[2, "lxml.ElementInclude.FatalIncludeError.msg"]], "msg (lxml.elementinclude.limitedrecursiveincludeerror attribute)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.msg"]], "offset (lxml.elementinclude.fatalincludeerror attribute)": [[2, "lxml.ElementInclude.FatalIncludeError.offset"]], "offset (lxml.elementinclude.limitedrecursiveincludeerror attribute)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.offset"]], "print_file_and_line (lxml.elementinclude.fatalincludeerror attribute)": [[2, "lxml.ElementInclude.FatalIncludeError.print_file_and_line"]], "print_file_and_line (lxml.elementinclude.limitedrecursiveincludeerror attribute)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.print_file_and_line"]], "text (lxml.elementinclude.fatalincludeerror attribute)": [[2, "lxml.ElementInclude.FatalIncludeError.text"]], "text (lxml.elementinclude.limitedrecursiveincludeerror attribute)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.text"]], "with_traceback() (lxml.elementinclude.fatalincludeerror method)": [[2, "lxml.ElementInclude.FatalIncludeError.with_traceback"]], "with_traceback() (lxml.elementinclude.limitedrecursiveincludeerror method)": [[2, "lxml.ElementInclude.LimitedRecursiveIncludeError.with_traceback"]], "_build_path_iterator() (in module lxml._elementpath)": [[3, "lxml._elementpath._build_path_iterator"]], "find() (in module lxml._elementpath)": [[3, "lxml._elementpath.find"]], "findall() (in module lxml._elementpath)": [[3, "lxml._elementpath.findall"]], "findtext() (in module lxml._elementpath)": [[3, "lxml._elementpath.findtext"]], "iterfind() (in module lxml._elementpath)": [[3, "lxml._elementpath.iterfind"]], "lxml._elementpath": [[3, "module-lxml._elementpath"]], "prepare_child() (in module lxml._elementpath)": [[3, "lxml._elementpath.prepare_child"]], "prepare_descendant() (in module lxml._elementpath)": [[3, "lxml._elementpath.prepare_descendant"]], "prepare_parent() (in module lxml._elementpath)": [[3, "lxml._elementpath.prepare_parent"]], "prepare_predicate() (in module lxml._elementpath)": [[3, "lxml._elementpath.prepare_predicate"]], "prepare_self() (in module lxml._elementpath)": [[3, "lxml._elementpath.prepare_self"]], "prepare_star() (in module lxml._elementpath)": [[3, "lxml._elementpath.prepare_star"]], "xpath_tokenizer() (in module lxml._elementpath)": [[3, "lxml._elementpath.xpath_tokenizer"]], "elementmaker (class in lxml.builder)": [[4, "lxml.builder.ElementMaker"]], "__pyx_unpickle_elementmaker() (in module lxml.builder)": [[4, "lxml.builder.__pyx_unpickle_ElementMaker"]], "_makeelement (lxml.builder.elementmaker attribute)": [[4, "lxml.builder.ElementMaker._makeelement"]], "_namespace (lxml.builder.elementmaker attribute)": [[4, "lxml.builder.ElementMaker._namespace"]], "_nsmap (lxml.builder.elementmaker attribute)": [[4, "lxml.builder.ElementMaker._nsmap"]], "_typemap (lxml.builder.elementmaker attribute)": [[4, "lxml.builder.ElementMaker._typemap"]], "lxml.builder": [[4, "module-lxml.builder"]], "lhtmloutputchecker (class in lxml.doctestcompare)": [[6, "lxml.doctestcompare.LHTMLOutputChecker"]], "lxmloutputchecker (class in lxml.doctestcompare)": [[6, "lxml.doctestcompare.LXMLOutputChecker"]], "_restorechecker (class in lxml.doctestcompare)": [[6, "lxml.doctestcompare._RestoreChecker"]], "_do_a_fancy_diff() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker._do_a_fancy_diff"]], "_do_a_fancy_diff() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker._do_a_fancy_diff"]], "_find_doctest_frame() (in module lxml.doctestcompare)": [[6, "lxml.doctestcompare._find_doctest_frame"]], "_looks_like_markup() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker._looks_like_markup"]], "_looks_like_markup() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker._looks_like_markup"]], "_toascii() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker._toAscii"]], "_toascii() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker._toAscii"]], "call_super() (lxml.doctestcompare._restorechecker method)": [[6, "lxml.doctestcompare._RestoreChecker.call_super"]], "check_output() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.check_output"]], "check_output() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.check_output"]], "collect_diff() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.collect_diff"]], "collect_diff() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.collect_diff"]], "collect_diff_end_tag() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.collect_diff_end_tag"]], "collect_diff_end_tag() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.collect_diff_end_tag"]], "collect_diff_tag() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.collect_diff_tag"]], "collect_diff_tag() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.collect_diff_tag"]], "collect_diff_text() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.collect_diff_text"]], "collect_diff_text() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.collect_diff_text"]], "compare_docs() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.compare_docs"]], "compare_docs() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.compare_docs"]], "empty_tags (lxml.doctestcompare.lhtmloutputchecker attribute)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.empty_tags"]], "empty_tags (lxml.doctestcompare.lxmloutputchecker attribute)": [[6, "lxml.doctestcompare.LXMLOutputChecker.empty_tags"]], "format_doc() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.format_doc"]], "format_doc() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.format_doc"]], "format_end_tag() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.format_end_tag"]], "format_end_tag() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.format_end_tag"]], "format_tag() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.format_tag"]], "format_tag() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.format_tag"]], "format_text() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.format_text"]], "format_text() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.format_text"]], "get_default_parser() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.get_default_parser"]], "get_default_parser() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.get_default_parser"]], "get_parser() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.get_parser"]], "get_parser() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.get_parser"]], "html_empty_tag() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.html_empty_tag"]], "html_empty_tag() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.html_empty_tag"]], "html_fromstring() (in module lxml.doctestcompare)": [[6, "lxml.doctestcompare.html_fromstring"]], "install() (in module lxml.doctestcompare)": [[6, "lxml.doctestcompare.install"]], "install_clone() (lxml.doctestcompare._restorechecker method)": [[6, "lxml.doctestcompare._RestoreChecker.install_clone"]], "install_dt_self() (lxml.doctestcompare._restorechecker method)": [[6, "lxml.doctestcompare._RestoreChecker.install_dt_self"]], "lxml.doctestcompare": [[6, "module-lxml.doctestcompare"]], "norm_whitespace() (in module lxml.doctestcompare)": [[6, "lxml.doctestcompare.norm_whitespace"]], "output_difference() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.output_difference"]], "output_difference() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.output_difference"]], "strip() (in module lxml.doctestcompare)": [[6, "lxml.doctestcompare.strip"]], "tag_compare() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.tag_compare"]], "tag_compare() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.tag_compare"]], "temp_install() (in module lxml.doctestcompare)": [[6, "lxml.doctestcompare.temp_install"]], "text_compare() (lxml.doctestcompare.lhtmloutputchecker method)": [[6, "lxml.doctestcompare.LHTMLOutputChecker.text_compare"]], "text_compare() (lxml.doctestcompare.lxmloutputchecker method)": [[6, "lxml.doctestcompare.LXMLOutputChecker.text_compare"]], "uninstall_clone() (lxml.doctestcompare._restorechecker method)": [[6, "lxml.doctestcompare._RestoreChecker.uninstall_clone"]], "uninstall_dt_self() (lxml.doctestcompare._restorechecker method)": [[6, "lxml.doctestcompare._RestoreChecker.uninstall_dt_self"]], "uninstall_module() (lxml.doctestcompare._restorechecker method)": [[6, "lxml.doctestcompare._RestoreChecker.uninstall_module"]], "ancestorsiterator (class in lxml.etree)": [[7, "lxml.etree.AncestorsIterator"]], "attributebasedelementclasslookup (class in lxml.etree)": [[7, "lxml.etree.AttributeBasedElementClassLookup"]], "buffer (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.BUFFER"]], "buf_overflow (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.BUF_OVERFLOW"]], "c14n (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.C14N"]], "c14nerror": [[7, "lxml.etree.C14NError"]], "c14nwritertarget (class in lxml.etree)": [[7, "lxml.etree.C14NWriterTarget"]], "c14n_create_ctxt (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.C14N_CREATE_CTXT"]], "c14n_create_stack (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.C14N_CREATE_STACK"]], "c14n_invalid_node (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.C14N_INVALID_NODE"]], "c14n_relative_namespace (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.C14N_RELATIVE_NAMESPACE"]], "c14n_requires_utf8 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.C14N_REQUIRES_UTF8"]], "c14n_unknow_node (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.C14N_UNKNOW_NODE"]], "catalog (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.CATALOG"]], "catalog_entry_broken (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CATALOG_ENTRY_BROKEN"]], "catalog_missing_attr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CATALOG_MISSING_ATTR"]], "catalog_not_catalog (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CATALOG_NOT_CATALOG"]], "catalog_prefer_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CATALOG_PREFER_VALUE"]], "catalog_recursion (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CATALOG_RECURSION"]], "cdata (class in lxml.etree)": [[7, "lxml.etree.CDATA"]], "check (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.CHECK"]], "check_entity_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_ENTITY_TYPE"]], "check_found_attribute (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_ATTRIBUTE"]], "check_found_cdata (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_CDATA"]], "check_found_comment (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_COMMENT"]], "check_found_doctype (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_DOCTYPE"]], "check_found_element (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_ELEMENT"]], "check_found_entity (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_ENTITY"]], "check_found_entityref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_ENTITYREF"]], "check_found_fragment (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_FRAGMENT"]], "check_found_notation (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_NOTATION"]], "check_found_pi (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_PI"]], "check_found_text (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_FOUND_TEXT"]], "check_name_not_null (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NAME_NOT_NULL"]], "check_not_attr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NOT_ATTR"]], "check_not_attr_decl (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NOT_ATTR_DECL"]], "check_not_dtd (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NOT_DTD"]], "check_not_elem_decl (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NOT_ELEM_DECL"]], "check_not_entity_decl (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NOT_ENTITY_DECL"]], "check_not_ncname (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NOT_NCNAME"]], "check_not_ns_decl (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NOT_NS_DECL"]], "check_not_utf8 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NOT_UTF8"]], "check_no_dict (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NO_DICT"]], "check_no_doc (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NO_DOC"]], "check_no_elem (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NO_ELEM"]], "check_no_href (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NO_HREF"]], "check_no_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NO_NAME"]], "check_no_next (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NO_NEXT"]], "check_no_parent (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NO_PARENT"]], "check_no_prev (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NO_PREV"]], "check_ns_ancestor (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NS_ANCESTOR"]], "check_ns_scope (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_NS_SCOPE"]], "check_outside_dict (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_OUTSIDE_DICT"]], "check_unknown_node (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_UNKNOWN_NODE"]], "check_wrong_doc (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_WRONG_DOC"]], "check_wrong_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_WRONG_NAME"]], "check_wrong_next (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_WRONG_NEXT"]], "check_wrong_parent (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_WRONG_PARENT"]], "check_wrong_prev (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.CHECK_WRONG_PREV"]], "comment() (in module lxml.etree)": [[7, "lxml.etree.Comment"]], "commentbase (class in lxml.etree)": [[7, "lxml.etree.CommentBase"]], "customelementclasslookup (class in lxml.etree)": [[7, "lxml.etree.CustomElementClassLookup"]], "datatype (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.DATATYPE"]], "deny_all (lxml.etree.xsltaccesscontrol attribute)": [[7, "lxml.etree.XSLTAccessControl.DENY_ALL"]], "deny_write (lxml.etree.xsltaccesscontrol attribute)": [[7, "lxml.etree.XSLTAccessControl.DENY_WRITE"]], "dtd (class in lxml.etree)": [[7, "lxml.etree.DTD"]], "dtd (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.DTD"]], "dtderror": [[7, "lxml.etree.DTDError"]], "dtdparseerror": [[7, "lxml.etree.DTDParseError"]], "dtdvalidateerror": [[7, "lxml.etree.DTDValidateError"]], "dtd_attribute_default (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ATTRIBUTE_DEFAULT"]], "dtd_attribute_redefined (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ATTRIBUTE_REDEFINED"]], "dtd_attribute_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ATTRIBUTE_VALUE"]], "dtd_content_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_CONTENT_ERROR"]], "dtd_content_model (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_CONTENT_MODEL"]], "dtd_content_not_determinist (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_CONTENT_NOT_DETERMINIST"]], "dtd_different_prefix (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_DIFFERENT_PREFIX"]], "dtd_dup_token (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_DUP_TOKEN"]], "dtd_elem_default_namespace (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ELEM_DEFAULT_NAMESPACE"]], "dtd_elem_namespace (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ELEM_NAMESPACE"]], "dtd_elem_redefined (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ELEM_REDEFINED"]], "dtd_empty_notation (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_EMPTY_NOTATION"]], "dtd_entity_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ENTITY_TYPE"]], "dtd_id_fixed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ID_FIXED"]], "dtd_id_redefined (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ID_REDEFINED"]], "dtd_id_subset (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ID_SUBSET"]], "dtd_invalid_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_INVALID_CHILD"]], "dtd_invalid_default (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_INVALID_DEFAULT"]], "dtd_load_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_LOAD_ERROR"]], "dtd_missing_attribute (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_MISSING_ATTRIBUTE"]], "dtd_mixed_corrupt (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_MIXED_CORRUPT"]], "dtd_multiple_id (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_MULTIPLE_ID"]], "dtd_notation_redefined (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_NOTATION_REDEFINED"]], "dtd_notation_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_NOTATION_VALUE"]], "dtd_not_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_NOT_EMPTY"]], "dtd_not_pcdata (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_NOT_PCDATA"]], "dtd_not_standalone (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_NOT_STANDALONE"]], "dtd_no_doc (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_NO_DOC"]], "dtd_no_dtd (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_NO_DTD"]], "dtd_no_elem_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_NO_ELEM_NAME"]], "dtd_no_prefix (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_NO_PREFIX"]], "dtd_no_root (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_NO_ROOT"]], "dtd_root_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_ROOT_NAME"]], "dtd_standalone_defaulted (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_STANDALONE_DEFAULTED"]], "dtd_standalone_white_space (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_STANDALONE_WHITE_SPACE"]], "dtd_unknown_attribute (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_UNKNOWN_ATTRIBUTE"]], "dtd_unknown_elem (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_UNKNOWN_ELEM"]], "dtd_unknown_entity (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_UNKNOWN_ENTITY"]], "dtd_unknown_id (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_UNKNOWN_ID"]], "dtd_unknown_notation (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_UNKNOWN_NOTATION"]], "dtd_xmlid_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_XMLID_TYPE"]], "dtd_xmlid_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.DTD_XMLID_VALUE"]], "docinfo (class in lxml.etree)": [[7, "lxml.etree.DocInfo"]], "documentinvalid": [[7, "lxml.etree.DocumentInvalid"]], "error (lxml.etree.errorlevels attribute)": [[7, "lxml.etree.ErrorLevels.ERROR"]], "err_attlist_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_FINISHED"]], "err_attlist_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ATTLIST_NOT_STARTED"]], "err_attribute_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_FINISHED"]], "err_attribute_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ATTRIBUTE_NOT_STARTED"]], "err_attribute_redefined (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ATTRIBUTE_REDEFINED"]], "err_attribute_without_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ATTRIBUTE_WITHOUT_VALUE"]], "err_cdata_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_CDATA_NOT_FINISHED"]], "err_charref_at_eof (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_CHARREF_AT_EOF"]], "err_charref_in_dtd (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_CHARREF_IN_DTD"]], "err_charref_in_epilog (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_CHARREF_IN_EPILOG"]], "err_charref_in_prolog (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_CHARREF_IN_PROLOG"]], "err_comment_abruptly_ended (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_COMMENT_ABRUPTLY_ENDED"]], "err_comment_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_COMMENT_NOT_FINISHED"]], "err_condsec_invalid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID"]], "err_condsec_invalid_keyword (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_CONDSEC_INVALID_KEYWORD"]], "err_condsec_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_FINISHED"]], "err_condsec_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_CONDSEC_NOT_STARTED"]], "err_doctype_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_DOCTYPE_NOT_FINISHED"]], "err_document_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_DOCUMENT_EMPTY"]], "err_document_end (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_DOCUMENT_END"]], "err_document_start (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_DOCUMENT_START"]], "err_elemcontent_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_FINISHED"]], "err_elemcontent_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ELEMCONTENT_NOT_STARTED"]], "err_encoding_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENCODING_NAME"]], "err_entityref_at_eof (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITYREF_AT_EOF"]], "err_entityref_in_dtd (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_DTD"]], "err_entityref_in_epilog (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_EPILOG"]], "err_entityref_in_prolog (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITYREF_IN_PROLOG"]], "err_entityref_no_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITYREF_NO_NAME"]], "err_entityref_semicol_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITYREF_SEMICOL_MISSING"]], "err_entity_boundary (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITY_BOUNDARY"]], "err_entity_char_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITY_CHAR_ERROR"]], "err_entity_is_external (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITY_IS_EXTERNAL"]], "err_entity_is_parameter (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITY_IS_PARAMETER"]], "err_entity_loop (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITY_LOOP"]], "err_entity_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITY_NOT_FINISHED"]], "err_entity_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITY_NOT_STARTED"]], "err_entity_pe_internal (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITY_PE_INTERNAL"]], "err_entity_processing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_ENTITY_PROCESSING"]], "err_equal_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_EQUAL_REQUIRED"]], "err_extra_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_EXTRA_CONTENT"]], "err_ext_entity_standalone (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_EXT_ENTITY_STANDALONE"]], "err_ext_subset_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_EXT_SUBSET_NOT_FINISHED"]], "err_gt_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_GT_REQUIRED"]], "err_hyphen_in_comment (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_HYPHEN_IN_COMMENT"]], "err_internal_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_INTERNAL_ERROR"]], "err_invalid_char (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_INVALID_CHAR"]], "err_invalid_charref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_INVALID_CHARREF"]], "err_invalid_dec_charref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_INVALID_DEC_CHARREF"]], "err_invalid_encoding (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_INVALID_ENCODING"]], "err_invalid_hex_charref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_INVALID_HEX_CHARREF"]], "err_invalid_uri (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_INVALID_URI"]], "err_literal_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_LITERAL_NOT_FINISHED"]], "err_literal_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_LITERAL_NOT_STARTED"]], "err_ltslash_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_LTSLASH_REQUIRED"]], "err_lt_in_attribute (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_LT_IN_ATTRIBUTE"]], "err_lt_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_LT_REQUIRED"]], "err_misplaced_cdata_end (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_MISPLACED_CDATA_END"]], "err_missing_encoding (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_MISSING_ENCODING"]], "err_mixed_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_MIXED_NOT_FINISHED"]], "err_mixed_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_MIXED_NOT_STARTED"]], "err_name_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NAME_REQUIRED"]], "err_name_too_long (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NAME_TOO_LONG"]], "err_nmtoken_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NMTOKEN_REQUIRED"]], "err_notation_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NOTATION_NOT_FINISHED"]], "err_notation_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NOTATION_NOT_STARTED"]], "err_notation_processing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NOTATION_PROCESSING"]], "err_not_standalone (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NOT_STANDALONE"]], "err_not_well_balanced (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NOT_WELL_BALANCED"]], "err_no_dtd (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NO_DTD"]], "err_no_memory (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NO_MEMORY"]], "err_ns_decl_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_NS_DECL_ERROR"]], "err_ok (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_OK"]], "err_pcdata_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_PCDATA_REQUIRED"]], "err_peref_at_eof (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_PEREF_AT_EOF"]], "err_peref_in_epilog (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_PEREF_IN_EPILOG"]], "err_peref_in_int_subset (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_PEREF_IN_INT_SUBSET"]], "err_peref_in_prolog (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_PEREF_IN_PROLOG"]], "err_peref_no_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_PEREF_NO_NAME"]], "err_peref_semicol_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_PEREF_SEMICOL_MISSING"]], "err_pi_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_PI_NOT_FINISHED"]], "err_pi_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_PI_NOT_STARTED"]], "err_pubid_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_PUBID_REQUIRED"]], "err_reserved_xml_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_RESERVED_XML_NAME"]], "err_separator_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_SEPARATOR_REQUIRED"]], "err_space_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_SPACE_REQUIRED"]], "err_standalone_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_STANDALONE_VALUE"]], "err_string_not_closed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_STRING_NOT_CLOSED"]], "err_string_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_STRING_NOT_STARTED"]], "err_tag_name_mismatch (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_TAG_NAME_MISMATCH"]], "err_tag_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_TAG_NOT_FINISHED"]], "err_undeclared_entity (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_UNDECLARED_ENTITY"]], "err_unknown_encoding (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_UNKNOWN_ENCODING"]], "err_unknown_version (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_UNKNOWN_VERSION"]], "err_unparsed_entity (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_UNPARSED_ENTITY"]], "err_unsupported_encoding (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_UNSUPPORTED_ENCODING"]], "err_uri_fragment (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_URI_FRAGMENT"]], "err_uri_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_URI_REQUIRED"]], "err_user_stop (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_USER_STOP"]], "err_value_required (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_VALUE_REQUIRED"]], "err_version_mismatch (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_VERSION_MISMATCH"]], "err_version_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_VERSION_MISSING"]], "err_xmldecl_not_finished (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_FINISHED"]], "err_xmldecl_not_started (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.ERR_XMLDECL_NOT_STARTED"]], "etcompatxmlparser (class in lxml.etree)": [[7, "lxml.etree.ETCompatXMLParser"]], "etxpath (class in lxml.etree)": [[7, "lxml.etree.ETXPath"]], "element() (in module lxml.etree)": [[7, "lxml.etree.Element"]], "elementbase (class in lxml.etree)": [[7, "lxml.etree.ElementBase"]], "elementchilditerator (class in lxml.etree)": [[7, "lxml.etree.ElementChildIterator"]], "elementclasslookup (class in lxml.etree)": [[7, "lxml.etree.ElementClassLookup"]], "elementdefaultclasslookup (class in lxml.etree)": [[7, "lxml.etree.ElementDefaultClassLookup"]], "elementdepthfirstiterator (class in lxml.etree)": [[7, "lxml.etree.ElementDepthFirstIterator"]], "elementnamespaceclasslookup (class in lxml.etree)": [[7, "lxml.etree.ElementNamespaceClassLookup"]], "elementtextiterator (class in lxml.etree)": [[7, "lxml.etree.ElementTextIterator"]], "elementtree() (in module lxml.etree)": [[7, "lxml.etree.ElementTree"]], "entity() (in module lxml.etree)": [[7, "lxml.etree.Entity"]], "entitybase (class in lxml.etree)": [[7, "lxml.etree.EntityBase"]], "error": [[7, "lxml.etree.Error"]], "errordomains (class in lxml.etree)": [[7, "lxml.etree.ErrorDomains"]], "errorlevels (class in lxml.etree)": [[7, "lxml.etree.ErrorLevels"]], "errortypes (class in lxml.etree)": [[7, "lxml.etree.ErrorTypes"]], "extension() (in module lxml.etree)": [[7, "lxml.etree.Extension"]], "fatal (lxml.etree.errorlevels attribute)": [[7, "lxml.etree.ErrorLevels.FATAL"]], "ftp (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.FTP"]], "ftp_accnt (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.FTP_ACCNT"]], "ftp_epsv_answer (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.FTP_EPSV_ANSWER"]], "ftp_pasv_answer (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.FTP_PASV_ANSWER"]], "ftp_url_syntax (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.FTP_URL_SYNTAX"]], "fallbackelementclasslookup (class in lxml.etree)": [[7, "lxml.etree.FallbackElementClassLookup"]], "functionnamespace() (in module lxml.etree)": [[7, "lxml.etree.FunctionNamespace"]], "html (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.HTML"]], "html() (in module lxml.etree)": [[7, "lxml.etree.HTML"]], "htmlparser (class in lxml.etree)": [[7, "lxml.etree.HTMLParser"]], "htmlpullparser (class in lxml.etree)": [[7, "lxml.etree.HTMLPullParser"]], "html_strucure_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.HTML_STRUCURE_ERROR"]], "html_unknown_tag (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.HTML_UNKNOWN_TAG"]], "http (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.HTTP"]], "http_unknown_host (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.HTTP_UNKNOWN_HOST"]], "http_url_syntax (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.HTTP_URL_SYNTAX"]], "http_use_ip (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.HTTP_USE_IP"]], "i18n (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.I18N"]], "i18n_conv_failed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.I18N_CONV_FAILED"]], "i18n_excess_handler (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.I18N_EXCESS_HANDLER"]], "i18n_no_handler (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.I18N_NO_HANDLER"]], "i18n_no_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.I18N_NO_NAME"]], "i18n_no_output (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.I18N_NO_OUTPUT"]], "io (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.IO"]], "io_buffer_full (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_BUFFER_FULL"]], "io_eacces (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EACCES"]], "io_eaddrinuse (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EADDRINUSE"]], "io_eafnosupport (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EAFNOSUPPORT"]], "io_eagain (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EAGAIN"]], "io_ealready (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EALREADY"]], "io_ebadf (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EBADF"]], "io_ebadmsg (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EBADMSG"]], "io_ebusy (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EBUSY"]], "io_ecanceled (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ECANCELED"]], "io_echild (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ECHILD"]], "io_econnrefused (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ECONNREFUSED"]], "io_edeadlk (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EDEADLK"]], "io_edom (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EDOM"]], "io_eexist (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EEXIST"]], "io_efault (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EFAULT"]], "io_efbig (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EFBIG"]], "io_einprogress (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EINPROGRESS"]], "io_eintr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EINTR"]], "io_einval (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EINVAL"]], "io_eio (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EIO"]], "io_eisconn (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EISCONN"]], "io_eisdir (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EISDIR"]], "io_emfile (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EMFILE"]], "io_emlink (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EMLINK"]], "io_emsgsize (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EMSGSIZE"]], "io_enametoolong (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENAMETOOLONG"]], "io_encoder (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENCODER"]], "io_enetunreach (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENETUNREACH"]], "io_enfile (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENFILE"]], "io_enodev (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENODEV"]], "io_enoent (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOENT"]], "io_enoexec (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOEXEC"]], "io_enolck (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOLCK"]], "io_enomem (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOMEM"]], "io_enospc (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOSPC"]], "io_enosys (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOSYS"]], "io_enotdir (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOTDIR"]], "io_enotempty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOTEMPTY"]], "io_enotsock (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOTSOCK"]], "io_enotsup (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOTSUP"]], "io_enotty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENOTTY"]], "io_enxio (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ENXIO"]], "io_eperm (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EPERM"]], "io_epipe (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EPIPE"]], "io_erange (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ERANGE"]], "io_erofs (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EROFS"]], "io_espipe (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ESPIPE"]], "io_esrch (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ESRCH"]], "io_etimedout (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_ETIMEDOUT"]], "io_exdev (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_EXDEV"]], "io_flush (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_FLUSH"]], "io_load_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_LOAD_ERROR"]], "io_network_attempt (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_NETWORK_ATTEMPT"]], "io_no_input (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_NO_INPUT"]], "io_unknown (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_UNKNOWN"]], "io_write (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.IO_WRITE"]], "lxmlerror": [[7, "lxml.etree.LxmlError"]], "lxmlregistryerror": [[7, "lxml.etree.LxmlRegistryError"]], "lxmlsyntaxerror": [[7, "lxml.etree.LxmlSyntaxError"]], "memory (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.MEMORY"]], "module (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.MODULE"]], "module_close (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.MODULE_CLOSE"]], "module_open (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.MODULE_OPEN"]], "namespace (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.NAMESPACE"]], "none (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.NONE"]], "none (lxml.etree.errorlevels attribute)": [[7, "lxml.etree.ErrorLevels.NONE"]], "ns_err_attribute_redefined (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.NS_ERR_ATTRIBUTE_REDEFINED"]], "ns_err_colon (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.NS_ERR_COLON"]], "ns_err_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.NS_ERR_EMPTY"]], "ns_err_qname (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.NS_ERR_QNAME"]], "ns_err_undefined_namespace (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.NS_ERR_UNDEFINED_NAMESPACE"]], "ns_err_xml_namespace (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.NS_ERR_XML_NAMESPACE"]], "namespaceregistryerror": [[7, "lxml.etree.NamespaceRegistryError"]], "output (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.OUTPUT"]], "parser (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.PARSER"]], "pi() (in module lxml.etree)": [[7, "lxml.etree.PI"]], "pibase (class in lxml.etree)": [[7, "lxml.etree.PIBase"]], "parseerror": [[7, "lxml.etree.ParseError"]], "parserbasedelementclasslookup (class in lxml.etree)": [[7, "lxml.etree.ParserBasedElementClassLookup"]], "parsererror": [[7, "lxml.etree.ParserError"]], "processinginstruction() (in module lxml.etree)": [[7, "lxml.etree.ProcessingInstruction"]], "pyerrorlog (class in lxml.etree)": [[7, "lxml.etree.PyErrorLog"]], "pythonelementclasslookup (class in lxml.etree)": [[7, "lxml.etree.PythonElementClassLookup"]], "qname (class in lxml.etree)": [[7, "lxml.etree.QName"]], "regexp (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.REGEXP"]], "regexp_compile_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.REGEXP_COMPILE_ERROR"]], "relaxngp (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.RELAXNGP"]], "relaxngv (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.RELAXNGV"]], "relaxng_err_attrextrans (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTREXTRANS"]], "relaxng_err_attrname (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNAME"]], "relaxng_err_attrnons (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRNONS"]], "relaxng_err_attrvalid (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRVALID"]], "relaxng_err_attrwrongns (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ATTRWRONGNS"]], "relaxng_err_contentvalid (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_CONTENTVALID"]], "relaxng_err_dataelem (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATAELEM"]], "relaxng_err_datatype (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DATATYPE"]], "relaxng_err_dupid (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_DUPID"]], "relaxng_err_elemextrans (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMEXTRANS"]], "relaxng_err_elemname (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNAME"]], "relaxng_err_elemnons (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNONS"]], "relaxng_err_elemnotempty (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMNOTEMPTY"]], "relaxng_err_elemwrong (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONG"]], "relaxng_err_elemwrongns (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_ELEMWRONGNS"]], "relaxng_err_extracontent (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRACONTENT"]], "relaxng_err_extradata (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_EXTRADATA"]], "relaxng_err_interextra (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTEREXTRA"]], "relaxng_err_internal (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNAL"]], "relaxng_err_internodata (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERNODATA"]], "relaxng_err_interseq (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INTERSEQ"]], "relaxng_err_invalidattr (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_INVALIDATTR"]], "relaxng_err_lackdata (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LACKDATA"]], "relaxng_err_list (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LIST"]], "relaxng_err_listelem (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTELEM"]], "relaxng_err_listempty (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEMPTY"]], "relaxng_err_listextra (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_LISTEXTRA"]], "relaxng_err_memory (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_MEMORY"]], "relaxng_err_nodefine (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NODEFINE"]], "relaxng_err_noelem (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOELEM"]], "relaxng_err_nogrammar (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOGRAMMAR"]], "relaxng_err_nostate (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOSTATE"]], "relaxng_err_notelem (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_NOTELEM"]], "relaxng_err_textwrong (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TEXTWRONG"]], "relaxng_err_type (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPE"]], "relaxng_err_typecmp (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPECMP"]], "relaxng_err_typeval (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_TYPEVAL"]], "relaxng_err_valelem (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALELEM"]], "relaxng_err_value (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_ERR_VALUE"]], "relaxng_ok (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes.RELAXNG_OK"]], "rngp_anyname_attr_ancestor (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ANYNAME_ATTR_ANCESTOR"]], "rngp_attribute_children (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CHILDREN"]], "rngp_attribute_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_CONTENT"]], "rngp_attribute_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_EMPTY"]], "rngp_attribute_noop (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ATTRIBUTE_NOOP"]], "rngp_attr_conflict (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ATTR_CONFLICT"]], "rngp_choice_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_CHOICE_CONTENT"]], "rngp_choice_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_CHOICE_EMPTY"]], "rngp_create_failure (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_CREATE_FAILURE"]], "rngp_data_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_DATA_CONTENT"]], "rngp_define_create_failed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_DEFINE_CREATE_FAILED"]], "rngp_define_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_DEFINE_EMPTY"]], "rngp_define_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_DEFINE_MISSING"]], "rngp_define_name_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_DEFINE_NAME_MISSING"]], "rngp_def_choice_and_interleave (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_DEF_CHOICE_AND_INTERLEAVE"]], "rngp_element_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ELEMENT_CONTENT"]], "rngp_element_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ELEMENT_EMPTY"]], "rngp_element_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ELEMENT_NAME"]], "rngp_element_no_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ELEMENT_NO_CONTENT"]], "rngp_elem_content_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_EMPTY"]], "rngp_elem_content_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ELEM_CONTENT_ERROR"]], "rngp_elem_text_conflict (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ELEM_TEXT_CONFLICT"]], "rngp_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EMPTY"]], "rngp_empty_construct (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EMPTY_CONSTRUCT"]], "rngp_empty_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EMPTY_CONTENT"]], "rngp_empty_not_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EMPTY_NOT_EMPTY"]], "rngp_error_type_lib (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_ERROR_TYPE_LIB"]], "rngp_except_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EXCEPT_EMPTY"]], "rngp_except_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EXCEPT_MISSING"]], "rngp_except_multiple (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EXCEPT_MULTIPLE"]], "rngp_except_no_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EXCEPT_NO_CONTENT"]], "rngp_externalref_emtpy (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EXTERNALREF_EMTPY"]], "rngp_externalref_recurse (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EXTERNALREF_RECURSE"]], "rngp_external_ref_failure (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_EXTERNAL_REF_FAILURE"]], "rngp_forbidden_attribute (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_FORBIDDEN_ATTRIBUTE"]], "rngp_foreign_element (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_FOREIGN_ELEMENT"]], "rngp_grammar_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_GRAMMAR_CONTENT"]], "rngp_grammar_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_GRAMMAR_EMPTY"]], "rngp_grammar_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_GRAMMAR_MISSING"]], "rngp_grammar_no_start (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_GRAMMAR_NO_START"]], "rngp_group_attr_conflict (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_GROUP_ATTR_CONFLICT"]], "rngp_href_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_HREF_ERROR"]], "rngp_include_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_INCLUDE_EMPTY"]], "rngp_include_failure (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_INCLUDE_FAILURE"]], "rngp_include_recurse (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_INCLUDE_RECURSE"]], "rngp_interleave_add (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_INTERLEAVE_ADD"]], "rngp_interleave_create_failed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_INTERLEAVE_CREATE_FAILED"]], "rngp_interleave_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_INTERLEAVE_EMPTY"]], "rngp_interleave_no_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_INTERLEAVE_NO_CONTENT"]], "rngp_invalid_define_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_INVALID_DEFINE_NAME"]], "rngp_invalid_uri (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_INVALID_URI"]], "rngp_invalid_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_INVALID_VALUE"]], "rngp_missing_href (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_MISSING_HREF"]], "rngp_name_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_NAME_MISSING"]], "rngp_need_combine (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_NEED_COMBINE"]], "rngp_notallowed_not_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_NOTALLOWED_NOT_EMPTY"]], "rngp_nsname_attr_ancestor (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_NSNAME_ATTR_ANCESTOR"]], "rngp_nsname_no_ns (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_NSNAME_NO_NS"]], "rngp_param_forbidden (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PARAM_FORBIDDEN"]], "rngp_param_name_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PARAM_NAME_MISSING"]], "rngp_parentref_create_failed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PARENTREF_CREATE_FAILED"]], "rngp_parentref_name_invalid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PARENTREF_NAME_INVALID"]], "rngp_parentref_not_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PARENTREF_NOT_EMPTY"]], "rngp_parentref_no_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_NAME"]], "rngp_parentref_no_parent (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PARENTREF_NO_PARENT"]], "rngp_parse_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PARSE_ERROR"]], "rngp_pat_anyname_except_anyname (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_ANYNAME_EXCEPT_ANYNAME"]], "rngp_pat_attr_attr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ATTR"]], "rngp_pat_attr_elem (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_ATTR_ELEM"]], "rngp_pat_data_except_attr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ATTR"]], "rngp_pat_data_except_elem (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ELEM"]], "rngp_pat_data_except_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_EMPTY"]], "rngp_pat_data_except_group (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_GROUP"]], "rngp_pat_data_except_interleave (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_INTERLEAVE"]], "rngp_pat_data_except_list (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_LIST"]], "rngp_pat_data_except_onemore (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_ONEMORE"]], "rngp_pat_data_except_ref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_REF"]], "rngp_pat_data_except_text (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_DATA_EXCEPT_TEXT"]], "rngp_pat_list_attr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_LIST_ATTR"]], "rngp_pat_list_elem (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_LIST_ELEM"]], "rngp_pat_list_interleave (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_LIST_INTERLEAVE"]], "rngp_pat_list_list (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_LIST_LIST"]], "rngp_pat_list_ref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_LIST_REF"]], "rngp_pat_list_text (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_LIST_TEXT"]], "rngp_pat_nsname_except_anyname (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_ANYNAME"]], "rngp_pat_nsname_except_nsname (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_NSNAME_EXCEPT_NSNAME"]], "rngp_pat_onemore_group_attr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_GROUP_ATTR"]], "rngp_pat_onemore_interleave_attr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_ONEMORE_INTERLEAVE_ATTR"]], "rngp_pat_start_attr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_START_ATTR"]], "rngp_pat_start_data (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_START_DATA"]], "rngp_pat_start_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_START_EMPTY"]], "rngp_pat_start_group (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_START_GROUP"]], "rngp_pat_start_interleave (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_START_INTERLEAVE"]], "rngp_pat_start_list (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_START_LIST"]], "rngp_pat_start_onemore (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_START_ONEMORE"]], "rngp_pat_start_text (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_START_TEXT"]], "rngp_pat_start_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PAT_START_VALUE"]], "rngp_prefix_undefined (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_PREFIX_UNDEFINED"]], "rngp_ref_create_failed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_REF_CREATE_FAILED"]], "rngp_ref_cycle (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_REF_CYCLE"]], "rngp_ref_name_invalid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_REF_NAME_INVALID"]], "rngp_ref_not_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_REF_NOT_EMPTY"]], "rngp_ref_no_def (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_REF_NO_DEF"]], "rngp_ref_no_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_REF_NO_NAME"]], "rngp_start_choice_and_interleave (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_START_CHOICE_AND_INTERLEAVE"]], "rngp_start_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_START_CONTENT"]], "rngp_start_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_START_EMPTY"]], "rngp_start_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_START_MISSING"]], "rngp_text_expected (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_TEXT_EXPECTED"]], "rngp_text_has_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_TEXT_HAS_CHILD"]], "rngp_type_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_TYPE_MISSING"]], "rngp_type_not_found (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_TYPE_NOT_FOUND"]], "rngp_type_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_TYPE_VALUE"]], "rngp_unknown_attribute (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_UNKNOWN_ATTRIBUTE"]], "rngp_unknown_combine (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_UNKNOWN_COMBINE"]], "rngp_unknown_construct (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_UNKNOWN_CONSTRUCT"]], "rngp_unknown_type_lib (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_UNKNOWN_TYPE_LIB"]], "rngp_uri_fragment (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_URI_FRAGMENT"]], "rngp_uri_not_absolute (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_URI_NOT_ABSOLUTE"]], "rngp_value_empty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_VALUE_EMPTY"]], "rngp_value_no_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_VALUE_NO_CONTENT"]], "rngp_xmlns_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_XMLNS_NAME"]], "rngp_xml_ns (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.RNGP_XML_NS"]], "relaxng (class in lxml.etree)": [[7, "lxml.etree.RelaxNG"]], "relaxngerror": [[7, "lxml.etree.RelaxNGError"]], "relaxngerrortypes (class in lxml.etree)": [[7, "lxml.etree.RelaxNGErrorTypes"]], "relaxngparseerror": [[7, "lxml.etree.RelaxNGParseError"]], "relaxngvalidateerror": [[7, "lxml.etree.RelaxNGValidateError"]], "resolver (class in lxml.etree)": [[7, "lxml.etree.Resolver"]], "save_char_invalid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SAVE_CHAR_INVALID"]], "save_not_utf8 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SAVE_NOT_UTF8"]], "save_no_doctype (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SAVE_NO_DOCTYPE"]], "save_unknown_encoding (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SAVE_UNKNOWN_ENCODING"]], "schemap_ag_props_correct (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_AG_PROPS_CORRECT"]], "schemap_attrformdefault_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_ATTRFORMDEFAULT_VALUE"]], "schemap_attrgrp_noname_noref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_ATTRGRP_NONAME_NOREF"]], "schemap_attr_noname_noref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_ATTR_NONAME_NOREF"]], "schemap_au_props_correct (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT"]], "schemap_au_props_correct_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_AU_PROPS_CORRECT_2"]], "schemap_a_props_correct_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_2"]], "schemap_a_props_correct_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_A_PROPS_CORRECT_3"]], "schemap_complextype_noname_noref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COMPLEXTYPE_NONAME_NOREF"]], "schemap_cos_all_limited (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ALL_LIMITED"]], "schemap_cos_ct_extends_1_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_1"]], "schemap_cos_ct_extends_1_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_2"]], "schemap_cos_ct_extends_1_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_CT_EXTENDS_1_3"]], "schemap_cos_st_derived_ok_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_1"]], "schemap_cos_st_derived_ok_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_DERIVED_OK_2_2"]], "schemap_cos_st_restricts_1_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_1"]], "schemap_cos_st_restricts_1_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_2"]], "schemap_cos_st_restricts_1_3_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_1"]], "schemap_cos_st_restricts_1_3_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_1_3_2"]], "schemap_cos_st_restricts_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_1"]], "schemap_cos_st_restricts_2_3_1_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_1"]], "schemap_cos_st_restricts_2_3_1_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_1_2"]], "schemap_cos_st_restricts_2_3_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_1"]], "schemap_cos_st_restricts_2_3_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_2"]], "schemap_cos_st_restricts_2_3_2_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_3"]], "schemap_cos_st_restricts_2_3_2_4 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_4"]], "schemap_cos_st_restricts_2_3_2_5 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_2_3_2_5"]], "schemap_cos_st_restricts_3_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_1"]], "schemap_cos_st_restricts_3_3_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1"]], "schemap_cos_st_restricts_3_3_1_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_1_2"]], "schemap_cos_st_restricts_3_3_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_1"]], "schemap_cos_st_restricts_3_3_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_2"]], "schemap_cos_st_restricts_3_3_2_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_3"]], "schemap_cos_st_restricts_3_3_2_4 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_4"]], "schemap_cos_st_restricts_3_3_2_5 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_ST_RESTRICTS_3_3_2_5"]], "schemap_cos_valid_default_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_1"]], "schemap_cos_valid_default_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_1"]], "schemap_cos_valid_default_2_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_1"]], "schemap_cos_valid_default_2_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_COS_VALID_DEFAULT_2_2_2"]], "schemap_ct_props_correct_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_1"]], "schemap_ct_props_correct_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_2"]], "schemap_ct_props_correct_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_3"]], "schemap_ct_props_correct_4 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_4"]], "schemap_ct_props_correct_5 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_CT_PROPS_CORRECT_5"]], "schemap_cvc_simple_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_CVC_SIMPLE_TYPE"]], "schemap_c_props_correct (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_C_PROPS_CORRECT"]], "schemap_def_and_prefix (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_DEF_AND_PREFIX"]], "schemap_derivation_ok_restriction_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_1"]], "schemap_derivation_ok_restriction_2_1_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1"]], "schemap_derivation_ok_restriction_2_1_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2"]], "schemap_derivation_ok_restriction_2_1_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3"]], "schemap_derivation_ok_restriction_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_2_2"]], "schemap_derivation_ok_restriction_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_3"]], "schemap_derivation_ok_restriction_4_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_1"]], "schemap_derivation_ok_restriction_4_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_2"]], "schemap_derivation_ok_restriction_4_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_DERIVATION_OK_RESTRICTION_4_3"]], "schemap_elemformdefault_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_ELEMFORMDEFAULT_VALUE"]], "schemap_elem_default_fixed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_ELEM_DEFAULT_FIXED"]], "schemap_elem_noname_noref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_ELEM_NONAME_NOREF"]], "schemap_extension_no_base (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_EXTENSION_NO_BASE"]], "schemap_e_props_correct_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_2"]], "schemap_e_props_correct_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_3"]], "schemap_e_props_correct_4 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_4"]], "schemap_e_props_correct_5 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_5"]], "schemap_e_props_correct_6 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_E_PROPS_CORRECT_6"]], "schemap_facet_no_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_FACET_NO_VALUE"]], "schemap_failed_build_import (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_FAILED_BUILD_IMPORT"]], "schemap_failed_load (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_FAILED_LOAD"]], "schemap_failed_parse (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_FAILED_PARSE"]], "schemap_group_noname_noref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_GROUP_NONAME_NOREF"]], "schemap_import_namespace_not_uri (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_IMPORT_NAMESPACE_NOT_URI"]], "schemap_import_redefine_nsname (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_IMPORT_REDEFINE_NSNAME"]], "schemap_import_schema_not_uri (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_IMPORT_SCHEMA_NOT_URI"]], "schemap_include_schema_not_uri (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NOT_URI"]], "schemap_include_schema_no_uri (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INCLUDE_SCHEMA_NO_URI"]], "schemap_internal (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INTERNAL"]], "schemap_intersection_not_expressible (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE"]], "schemap_invalid_attr_combination (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_COMBINATION"]], "schemap_invalid_attr_inline_combination (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_INLINE_COMBINATION"]], "schemap_invalid_attr_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_NAME"]], "schemap_invalid_attr_use (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_ATTR_USE"]], "schemap_invalid_boolean (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_BOOLEAN"]], "schemap_invalid_enum (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_ENUM"]], "schemap_invalid_facet (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET"]], "schemap_invalid_facet_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_FACET_VALUE"]], "schemap_invalid_maxoccurs (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_MAXOCCURS"]], "schemap_invalid_minoccurs (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_MINOCCURS"]], "schemap_invalid_ref_and_subtype (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_REF_AND_SUBTYPE"]], "schemap_invalid_white_space (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_INVALID_WHITE_SPACE"]], "schemap_mg_props_correct_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_1"]], "schemap_mg_props_correct_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_MG_PROPS_CORRECT_2"]], "schemap_missing_simpletype_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_MISSING_SIMPLETYPE_CHILD"]], "schemap_noattr_noref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_NOATTR_NOREF"]], "schemap_noroot (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_NOROOT"]], "schemap_notation_no_name (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_NOTATION_NO_NAME"]], "schemap_nothing_to_parse (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_NOTHING_TO_PARSE"]], "schemap_notype_noref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_NOTYPE_NOREF"]], "schemap_not_deterministic (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_NOT_DETERMINISTIC"]], "schemap_not_schema (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_NOT_SCHEMA"]], "schemap_no_xmlns (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_NO_XMLNS"]], "schemap_no_xsi (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_NO_XSI"]], "schemap_prefix_undefined (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_PREFIX_UNDEFINED"]], "schemap_p_props_correct_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_1"]], "schemap_p_props_correct_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_1"]], "schemap_p_props_correct_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_P_PROPS_CORRECT_2_2"]], "schemap_recursive (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_RECURSIVE"]], "schemap_redefined_attr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTR"]], "schemap_redefined_attrgroup (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ATTRGROUP"]], "schemap_redefined_element (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_ELEMENT"]], "schemap_redefined_group (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_GROUP"]], "schemap_redefined_notation (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_NOTATION"]], "schemap_redefined_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_REDEFINED_TYPE"]], "schemap_ref_and_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_REF_AND_CONTENT"]], "schemap_ref_and_subtype (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_REF_AND_SUBTYPE"]], "schemap_regexp_invalid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_REGEXP_INVALID"]], "schemap_restriction_noname_noref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_RESTRICTION_NONAME_NOREF"]], "schemap_s4s_attr_invalid_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_INVALID_VALUE"]], "schemap_s4s_attr_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_MISSING"]], "schemap_s4s_attr_not_allowed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_S4S_ATTR_NOT_ALLOWED"]], "schemap_s4s_elem_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_MISSING"]], "schemap_s4s_elem_not_allowed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_S4S_ELEM_NOT_ALLOWED"]], "schemap_simpletype_noname (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SIMPLETYPE_NONAME"]], "schemap_src_attribute_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_1"]], "schemap_src_attribute_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_2"]], "schemap_src_attribute_3_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_1"]], "schemap_src_attribute_3_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_3_2"]], "schemap_src_attribute_4 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_4"]], "schemap_src_attribute_group_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_1"]], "schemap_src_attribute_group_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_2"]], "schemap_src_attribute_group_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ATTRIBUTE_GROUP_3"]], "schemap_src_ct_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_CT_1"]], "schemap_src_element_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_1"]], "schemap_src_element_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_1"]], "schemap_src_element_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_2_2"]], "schemap_src_element_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_ELEMENT_3"]], "schemap_src_import (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT"]], "schemap_src_import_1_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_1"]], "schemap_src_import_1_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_1_2"]], "schemap_src_import_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2"]], "schemap_src_import_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_1"]], "schemap_src_import_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_2_2"]], "schemap_src_import_3_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_1"]], "schemap_src_import_3_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_IMPORT_3_2"]], "schemap_src_include (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_INCLUDE"]], "schemap_src_list_itemtype_or_simpletype (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE"]], "schemap_src_redefine (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_REDEFINE"]], "schemap_src_resolve (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_RESOLVE"]], "schemap_src_restriction_base_or_simpletype (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE"]], "schemap_src_simple_type_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_1"]], "schemap_src_simple_type_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_2"]], "schemap_src_simple_type_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_3"]], "schemap_src_simple_type_4 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_SIMPLE_TYPE_4"]], "schemap_src_union_membertypes_or_simpletypes (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES"]], "schemap_st_props_correct_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_1"]], "schemap_st_props_correct_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_2"]], "schemap_st_props_correct_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_ST_PROPS_CORRECT_3"]], "schemap_supernumerous_list_item_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE"]], "schemap_type_and_subtype (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_TYPE_AND_SUBTYPE"]], "schemap_union_not_expressible (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNION_NOT_EXPRESSIBLE"]], "schemap_unknown_all_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ALL_CHILD"]], "schemap_unknown_anyattribute_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD"]], "schemap_unknown_attrgrp_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRGRP_CHILD"]], "schemap_unknown_attribute_group (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP"]], "schemap_unknown_attr_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ATTR_CHILD"]], "schemap_unknown_base_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_BASE_TYPE"]], "schemap_unknown_choice_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_CHOICE_CHILD"]], "schemap_unknown_complexcontent_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD"]], "schemap_unknown_complextype_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD"]], "schemap_unknown_elem_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_ELEM_CHILD"]], "schemap_unknown_extension_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_EXTENSION_CHILD"]], "schemap_unknown_facet_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_CHILD"]], "schemap_unknown_facet_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_FACET_TYPE"]], "schemap_unknown_group_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_GROUP_CHILD"]], "schemap_unknown_import_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_IMPORT_CHILD"]], "schemap_unknown_include_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_INCLUDE_CHILD"]], "schemap_unknown_list_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_LIST_CHILD"]], "schemap_unknown_member_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_MEMBER_TYPE"]], "schemap_unknown_notation_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_NOTATION_CHILD"]], "schemap_unknown_prefix (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PREFIX"]], "schemap_unknown_processcontent_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD"]], "schemap_unknown_ref (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_REF"]], "schemap_unknown_restriction_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_RESTRICTION_CHILD"]], "schemap_unknown_schemas_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SCHEMAS_CHILD"]], "schemap_unknown_sequence_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SEQUENCE_CHILD"]], "schemap_unknown_simplecontent_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD"]], "schemap_unknown_simpletype_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD"]], "schemap_unknown_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_TYPE"]], "schemap_unknown_union_child (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_UNKNOWN_UNION_CHILD"]], "schemap_warn_attr_pointless_proh (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_POINTLESS_PROH"]], "schemap_warn_attr_redecl_proh (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_WARN_ATTR_REDECL_PROH"]], "schemap_warn_skip_schema (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_WARN_SKIP_SCHEMA"]], "schemap_warn_unlocated_schema (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_WARN_UNLOCATED_SCHEMA"]], "schemap_wildcard_invalid_ns_member (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAP_WILDCARD_INVALID_NS_MEMBER"]], "schemasp (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.SCHEMASP"]], "schemasv (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.SCHEMASV"]], "schematronv (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.SCHEMATRONV"]], "schematronv_assert (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMATRONV_ASSERT"]], "schematronv_report (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMATRONV_REPORT"]], "schemav_attrinvalid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_ATTRINVALID"]], "schemav_attrunknown (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_ATTRUNKNOWN"]], "schemav_construct (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CONSTRUCT"]], "schemav_cvc_attribute_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_1"]], "schemav_cvc_attribute_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_2"]], "schemav_cvc_attribute_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_3"]], "schemav_cvc_attribute_4 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ATTRIBUTE_4"]], "schemav_cvc_au (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_AU"]], "schemav_cvc_complex_type_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_1"]], "schemav_cvc_complex_type_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_1"]], "schemav_cvc_complex_type_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_2"]], "schemav_cvc_complex_type_2_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_3"]], "schemav_cvc_complex_type_2_4 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_2_4"]], "schemav_cvc_complex_type_3_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_1"]], "schemav_cvc_complex_type_3_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_1"]], "schemav_cvc_complex_type_3_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_3_2_2"]], "schemav_cvc_complex_type_4 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_4"]], "schemav_cvc_complex_type_5_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_1"]], "schemav_cvc_complex_type_5_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_COMPLEX_TYPE_5_2"]], "schemav_cvc_datatype_valid_1_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_1"]], "schemav_cvc_datatype_valid_1_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_2"]], "schemav_cvc_datatype_valid_1_2_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_DATATYPE_VALID_1_2_3"]], "schemav_cvc_elt_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_1"]], "schemav_cvc_elt_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_2"]], "schemav_cvc_elt_3_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_1"]], "schemav_cvc_elt_3_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_1"]], "schemav_cvc_elt_3_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_3_2_2"]], "schemav_cvc_elt_4_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_1"]], "schemav_cvc_elt_4_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_2"]], "schemav_cvc_elt_4_3 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_4_3"]], "schemav_cvc_elt_5_1_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_1"]], "schemav_cvc_elt_5_1_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_1_2"]], "schemav_cvc_elt_5_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_1"]], "schemav_cvc_elt_5_2_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_1"]], "schemav_cvc_elt_5_2_2_2_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_1"]], "schemav_cvc_elt_5_2_2_2_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_5_2_2_2_2"]], "schemav_cvc_elt_6 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_6"]], "schemav_cvc_elt_7 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ELT_7"]], "schemav_cvc_enumeration_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_ENUMERATION_VALID"]], "schemav_cvc_facet_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_FACET_VALID"]], "schemav_cvc_fractiondigits_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_FRACTIONDIGITS_VALID"]], "schemav_cvc_idc (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_IDC"]], "schemav_cvc_length_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_LENGTH_VALID"]], "schemav_cvc_maxexclusive_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXEXCLUSIVE_VALID"]], "schemav_cvc_maxinclusive_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXINCLUSIVE_VALID"]], "schemav_cvc_maxlength_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_MAXLENGTH_VALID"]], "schemav_cvc_minexclusive_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_MINEXCLUSIVE_VALID"]], "schemav_cvc_mininclusive_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_MININCLUSIVE_VALID"]], "schemav_cvc_minlength_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_MINLENGTH_VALID"]], "schemav_cvc_pattern_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_PATTERN_VALID"]], "schemav_cvc_totaldigits_valid (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_TOTALDIGITS_VALID"]], "schemav_cvc_type_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_1"]], "schemav_cvc_type_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_2"]], "schemav_cvc_type_3_1_1 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_1"]], "schemav_cvc_type_3_1_2 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_TYPE_3_1_2"]], "schemav_cvc_wildcard (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_CVC_WILDCARD"]], "schemav_document_element_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_DOCUMENT_ELEMENT_MISSING"]], "schemav_elemcont (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_ELEMCONT"]], "schemav_element_content (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_ELEMENT_CONTENT"]], "schemav_extracontent (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_EXTRACONTENT"]], "schemav_facet (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_FACET"]], "schemav_havedefault (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_HAVEDEFAULT"]], "schemav_internal (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_INTERNAL"]], "schemav_invalidattr (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_INVALIDATTR"]], "schemav_invalidelem (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_INVALIDELEM"]], "schemav_isabstract (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_ISABSTRACT"]], "schemav_misc (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_MISC"]], "schemav_missing (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_MISSING"]], "schemav_norollback (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_NOROLLBACK"]], "schemav_noroot (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_NOROOT"]], "schemav_notdeterminist (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_NOTDETERMINIST"]], "schemav_notempty (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_NOTEMPTY"]], "schemav_notnillable (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_NOTNILLABLE"]], "schemav_notsimple (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_NOTSIMPLE"]], "schemav_nottoplevel (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_NOTTOPLEVEL"]], "schemav_notype (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_NOTYPE"]], "schemav_undeclaredelem (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_UNDECLAREDELEM"]], "schemav_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_VALUE"]], "schemav_wrongelem (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.SCHEMAV_WRONGELEM"]], "schematron (class in lxml.etree)": [[7, "lxml.etree.Schematron"]], "schematronerror": [[7, "lxml.etree.SchematronError"]], "schematronparseerror": [[7, "lxml.etree.SchematronParseError"]], "schematronvalidateerror": [[7, "lxml.etree.SchematronValidateError"]], "serialisationerror": [[7, "lxml.etree.SerialisationError"]], "siblingsiterator (class in lxml.etree)": [[7, "lxml.etree.SiblingsIterator"]], "subelement() (in module lxml.etree)": [[7, "lxml.etree.SubElement"]], "tree (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.TREE"]], "tree_invalid_dec (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.TREE_INVALID_DEC"]], "tree_invalid_hex (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.TREE_INVALID_HEX"]], "tree_not_utf8 (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.TREE_NOT_UTF8"]], "tree_unterminated_entity (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.TREE_UNTERMINATED_ENTITY"]], "treebuilder (class in lxml.etree)": [[7, "lxml.etree.TreeBuilder"]], "uri (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.URI"]], "url (lxml.etree.docinfo attribute)": [[7, "lxml.etree.DocInfo.URL"]], "valid (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.VALID"]], "warning (lxml.etree.errorlevels attribute)": [[7, "lxml.etree.ErrorLevels.WARNING"]], "war_catalog_pi (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.WAR_CATALOG_PI"]], "war_entity_redefined (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.WAR_ENTITY_REDEFINED"]], "war_lang_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.WAR_LANG_VALUE"]], "war_ns_column (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.WAR_NS_COLUMN"]], "war_ns_uri (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.WAR_NS_URI"]], "war_ns_uri_relative (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.WAR_NS_URI_RELATIVE"]], "war_space_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.WAR_SPACE_VALUE"]], "war_undeclared_entity (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.WAR_UNDECLARED_ENTITY"]], "war_unknown_version (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.WAR_UNKNOWN_VERSION"]], "writer (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.WRITER"]], "xinclude (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.XINCLUDE"]], "xinclude_build_failed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_BUILD_FAILED"]], "xinclude_deprecated_ns (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_DEPRECATED_NS"]], "xinclude_entity_def_mismatch (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_ENTITY_DEF_MISMATCH"]], "xinclude_fallbacks_in_include (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_FALLBACKS_IN_INCLUDE"]], "xinclude_fallback_not_in_include (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_FALLBACK_NOT_IN_INCLUDE"]], "xinclude_fragment_id (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_FRAGMENT_ID"]], "xinclude_href_uri (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_HREF_URI"]], "xinclude_include_in_include (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_INCLUDE_IN_INCLUDE"]], "xinclude_invalid_char (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_INVALID_CHAR"]], "xinclude_multiple_root (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_MULTIPLE_ROOT"]], "xinclude_no_fallback (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_NO_FALLBACK"]], "xinclude_no_href (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_NO_HREF"]], "xinclude_parse_value (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_PARSE_VALUE"]], "xinclude_recursion (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_RECURSION"]], "xinclude_text_document (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_TEXT_DOCUMENT"]], "xinclude_text_fragment (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_TEXT_FRAGMENT"]], "xinclude_unknown_encoding (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_UNKNOWN_ENCODING"]], "xinclude_xptr_failed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_XPTR_FAILED"]], "xinclude_xptr_result (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XINCLUDE_XPTR_RESULT"]], "xinclude (class in lxml.etree)": [[7, "lxml.etree.XInclude"]], "xincludeerror": [[7, "lxml.etree.XIncludeError"]], "xml() (in module lxml.etree)": [[7, "lxml.etree.XML"]], "xmldtdid() (in module lxml.etree)": [[7, "lxml.etree.XMLDTDID"]], "xmlid() (in module lxml.etree)": [[7, "lxml.etree.XMLID"]], "xmlparser (class in lxml.etree)": [[7, "lxml.etree.XMLParser"]], "xmlpullparser (class in lxml.etree)": [[7, "lxml.etree.XMLPullParser"]], "xmlschema (class in lxml.etree)": [[7, "lxml.etree.XMLSchema"]], "xmlschemaerror": [[7, "lxml.etree.XMLSchemaError"]], "xmlschemaparseerror": [[7, "lxml.etree.XMLSchemaParseError"]], "xmlschemavalidateerror": [[7, "lxml.etree.XMLSchemaValidateError"]], "xmlsyntaxassertionerror": [[7, "lxml.etree.XMLSyntaxAssertionError"]], "xmlsyntaxerror": [[7, "lxml.etree.XMLSyntaxError"]], "xmltreebuilder (in module lxml.etree)": [[7, "lxml.etree.XMLTreeBuilder"]], "xpath (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.XPATH"]], "xpath_encoding_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_ENCODING_ERROR"]], "xpath_expression_ok (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_EXPRESSION_OK"]], "xpath_expr_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_EXPR_ERROR"]], "xpath_invalid_arity (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_INVALID_ARITY"]], "xpath_invalid_char_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_INVALID_CHAR_ERROR"]], "xpath_invalid_ctxt_position (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_POSITION"]], "xpath_invalid_ctxt_size (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_INVALID_CTXT_SIZE"]], "xpath_invalid_operand (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_INVALID_OPERAND"]], "xpath_invalid_predicate_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_INVALID_PREDICATE_ERROR"]], "xpath_invalid_type (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_INVALID_TYPE"]], "xpath_memory_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_MEMORY_ERROR"]], "xpath_number_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_NUMBER_ERROR"]], "xpath_start_literal_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_START_LITERAL_ERROR"]], "xpath_unclosed_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_UNCLOSED_ERROR"]], "xpath_undef_prefix_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_UNDEF_PREFIX_ERROR"]], "xpath_undef_variable_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_UNDEF_VARIABLE_ERROR"]], "xpath_unfinished_literal_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_UNFINISHED_LITERAL_ERROR"]], "xpath_unknown_func_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_UNKNOWN_FUNC_ERROR"]], "xpath_variable_ref_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPATH_VARIABLE_REF_ERROR"]], "xpointer (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.XPOINTER"]], "xptr_childseq_start (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPTR_CHILDSEQ_START"]], "xptr_eval_failed (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPTR_EVAL_FAILED"]], "xptr_extra_objects (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPTR_EXTRA_OBJECTS"]], "xptr_resource_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPTR_RESOURCE_ERROR"]], "xptr_sub_resource_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPTR_SUB_RESOURCE_ERROR"]], "xptr_syntax_error (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPTR_SYNTAX_ERROR"]], "xptr_unknown_scheme (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes.XPTR_UNKNOWN_SCHEME"]], "xpath (class in lxml.etree)": [[7, "lxml.etree.XPath"]], "xpathdocumentevaluator (class in lxml.etree)": [[7, "lxml.etree.XPathDocumentEvaluator"]], "xpathelementevaluator (class in lxml.etree)": [[7, "lxml.etree.XPathElementEvaluator"]], "xpatherror": [[7, "lxml.etree.XPathError"]], "xpathevalerror": [[7, "lxml.etree.XPathEvalError"]], "xpathevaluator() (in module lxml.etree)": [[7, "lxml.etree.XPathEvaluator"]], "xpathfunctionerror": [[7, "lxml.etree.XPathFunctionError"]], "xpathresulterror": [[7, "lxml.etree.XPathResultError"]], "xpathsyntaxerror": [[7, "lxml.etree.XPathSyntaxError"]], "xslt (class in lxml.etree)": [[7, "lxml.etree.XSLT"]], "xslt (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains.XSLT"]], "xsltaccesscontrol (class in lxml.etree)": [[7, "lxml.etree.XSLTAccessControl"]], "xsltapplyerror": [[7, "lxml.etree.XSLTApplyError"]], "xslterror": [[7, "lxml.etree.XSLTError"]], "xsltextension (class in lxml.etree)": [[7, "lxml.etree.XSLTExtension"]], "xsltextensionerror": [[7, "lxml.etree.XSLTExtensionError"]], "xsltparseerror": [[7, "lxml.etree.XSLTParseError"]], "xsltsaveerror": [[7, "lxml.etree.XSLTSaveError"]], "_attrib (class in lxml.etree)": [[7, "lxml.etree._Attrib"]], "_baseerrorlog (class in lxml.etree)": [[7, "lxml.etree._BaseErrorLog"]], "_comment (class in lxml.etree)": [[7, "lxml.etree._Comment"]], "_document (class in lxml.etree)": [[7, "lxml.etree._Document"]], "_domainerrorlog (class in lxml.etree)": [[7, "lxml.etree._DomainErrorLog"]], "_element (class in lxml.etree)": [[7, "lxml.etree._Element"]], "_elementiterator (class in lxml.etree)": [[7, "lxml.etree._ElementIterator"]], "_elementmatchiterator (class in lxml.etree)": [[7, "lxml.etree._ElementMatchIterator"]], "_elementstringresult (class in lxml.etree)": [[7, "lxml.etree._ElementStringResult"]], "_elementtagmatcher (class in lxml.etree)": [[7, "lxml.etree._ElementTagMatcher"]], "_elementtree (class in lxml.etree)": [[7, "lxml.etree._ElementTree"]], "_elementunicoderesult (class in lxml.etree)": [[7, "lxml.etree._ElementUnicodeResult"]], "_entity (class in lxml.etree)": [[7, "lxml.etree._Entity"]], "_errorlog (class in lxml.etree)": [[7, "lxml.etree._ErrorLog"]], "_feedparser (class in lxml.etree)": [[7, "lxml.etree._FeedParser"]], "_iddict (class in lxml.etree)": [[7, "lxml.etree._IDDict"]], "_listerrorlog (class in lxml.etree)": [[7, "lxml.etree._ListErrorLog"]], "_logentry (class in lxml.etree)": [[7, "lxml.etree._LogEntry"]], "_processinginstruction (class in lxml.etree)": [[7, "lxml.etree._ProcessingInstruction"]], "_rotatingerrorlog (class in lxml.etree)": [[7, "lxml.etree._RotatingErrorLog"]], "_saxparsertarget (class in lxml.etree)": [[7, "lxml.etree._SaxParserTarget"]], "_targetparserresult": [[7, "lxml.etree._TargetParserResult"]], "_validator (class in lxml.etree)": [[7, "lxml.etree._Validator"]], "_xpathevaluatorbase (class in lxml.etree)": [[7, "lxml.etree._XPathEvaluatorBase"]], "_xsltprocessinginstruction (class in lxml.etree)": [[7, "lxml.etree._XSLTProcessingInstruction"]], "_xsltresulttree (class in lxml.etree)": [[7, "lxml.etree._XSLTResultTree"]], "_append_log_message() (lxml.etree.dtd method)": [[7, "lxml.etree.DTD._append_log_message"]], "_append_log_message() (lxml.etree.relaxng method)": [[7, "lxml.etree.RelaxNG._append_log_message"]], "_append_log_message() (lxml.etree.schematron method)": [[7, "lxml.etree.Schematron._append_log_message"]], "_append_log_message() (lxml.etree.xmlschema method)": [[7, "lxml.etree.XMLSchema._append_log_message"]], "_append_log_message() (lxml.etree._validator method)": [[7, "lxml.etree._Validator._append_log_message"]], "_clear_error_log() (lxml.etree.dtd method)": [[7, "lxml.etree.DTD._clear_error_log"]], "_clear_error_log() (lxml.etree.relaxng method)": [[7, "lxml.etree.RelaxNG._clear_error_log"]], "_clear_error_log() (lxml.etree.schematron method)": [[7, "lxml.etree.Schematron._clear_error_log"]], "_clear_error_log() (lxml.etree.xmlschema method)": [[7, "lxml.etree.XMLSchema._clear_error_log"]], "_clear_error_log() (lxml.etree._validator method)": [[7, "lxml.etree._Validator._clear_error_log"]], "_getname() (lxml.etree.errordomains method)": [[7, "lxml.etree.ErrorDomains._getName"]], "_getname() (lxml.etree.errorlevels method)": [[7, "lxml.etree.ErrorLevels._getName"]], "_getname() (lxml.etree.errortypes method)": [[7, "lxml.etree.ErrorTypes._getName"]], "_getname() (lxml.etree.relaxngerrortypes method)": [[7, "lxml.etree.RelaxNGErrorTypes._getName"]], "_init() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase._init"]], "_init() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase._init"]], "_init() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase._init"]], "_init() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase._init"]], "_init() (lxml.etree._comment method)": [[7, "lxml.etree._Comment._init"]], "_init() (lxml.etree._element method)": [[7, "lxml.etree._Element._init"]], "_init() (lxml.etree._entity method)": [[7, "lxml.etree._Entity._init"]], "_init() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction._init"]], "_init() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction._init"]], "_iter_namespaces() (lxml.etree.c14nwritertarget method)": [[7, "lxml.etree.C14NWriterTarget._iter_namespaces"]], "_names (lxml.etree.errordomains attribute)": [[7, "lxml.etree.ErrorDomains._names"]], "_names (lxml.etree.errorlevels attribute)": [[7, "lxml.etree.ErrorLevels._names"]], "_names (lxml.etree.errortypes attribute)": [[7, "lxml.etree.ErrorTypes._names"]], "_names (lxml.etree.relaxngerrortypes attribute)": [[7, "lxml.etree.RelaxNGErrorTypes._names"]], "_setroot() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree._setroot"]], "_setroot() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree._setroot"]], "add_note() (lxml.etree.c14nerror method)": [[7, "lxml.etree.C14NError.add_note"]], "add_note() (lxml.etree.dtderror method)": [[7, "lxml.etree.DTDError.add_note"]], "add_note() (lxml.etree.dtdparseerror method)": [[7, "lxml.etree.DTDParseError.add_note"]], "add_note() (lxml.etree.dtdvalidateerror method)": [[7, "lxml.etree.DTDValidateError.add_note"]], "add_note() (lxml.etree.documentinvalid method)": [[7, "lxml.etree.DocumentInvalid.add_note"]], "add_note() (lxml.etree.error method)": [[7, "lxml.etree.Error.add_note"]], "add_note() (lxml.etree.lxmlerror method)": [[7, "lxml.etree.LxmlError.add_note"]], "add_note() (lxml.etree.lxmlregistryerror method)": [[7, "lxml.etree.LxmlRegistryError.add_note"]], "add_note() (lxml.etree.lxmlsyntaxerror method)": [[7, "lxml.etree.LxmlSyntaxError.add_note"]], "add_note() (lxml.etree.namespaceregistryerror method)": [[7, "lxml.etree.NamespaceRegistryError.add_note"]], "add_note() (lxml.etree.parseerror method)": [[7, "lxml.etree.ParseError.add_note"]], "add_note() (lxml.etree.parsererror method)": [[7, "lxml.etree.ParserError.add_note"]], "add_note() (lxml.etree.relaxngerror method)": [[7, "lxml.etree.RelaxNGError.add_note"]], "add_note() (lxml.etree.relaxngparseerror method)": [[7, "lxml.etree.RelaxNGParseError.add_note"]], "add_note() (lxml.etree.relaxngvalidateerror method)": [[7, "lxml.etree.RelaxNGValidateError.add_note"]], "add_note() (lxml.etree.schematronerror method)": [[7, "lxml.etree.SchematronError.add_note"]], "add_note() (lxml.etree.schematronparseerror method)": [[7, "lxml.etree.SchematronParseError.add_note"]], "add_note() (lxml.etree.schematronvalidateerror method)": [[7, "lxml.etree.SchematronValidateError.add_note"]], "add_note() (lxml.etree.serialisationerror method)": [[7, "lxml.etree.SerialisationError.add_note"]], "add_note() (lxml.etree.xincludeerror method)": [[7, "lxml.etree.XIncludeError.add_note"]], "add_note() (lxml.etree.xmlschemaerror method)": [[7, "lxml.etree.XMLSchemaError.add_note"]], "add_note() (lxml.etree.xmlschemaparseerror method)": [[7, "lxml.etree.XMLSchemaParseError.add_note"]], "add_note() (lxml.etree.xmlschemavalidateerror method)": [[7, "lxml.etree.XMLSchemaValidateError.add_note"]], "add_note() (lxml.etree.xmlsyntaxassertionerror method)": [[7, "lxml.etree.XMLSyntaxAssertionError.add_note"]], "add_note() (lxml.etree.xmlsyntaxerror method)": [[7, "lxml.etree.XMLSyntaxError.add_note"]], "add_note() (lxml.etree.xpatherror method)": [[7, "lxml.etree.XPathError.add_note"]], "add_note() (lxml.etree.xpathevalerror method)": [[7, "lxml.etree.XPathEvalError.add_note"]], "add_note() (lxml.etree.xpathfunctionerror method)": [[7, "lxml.etree.XPathFunctionError.add_note"]], "add_note() (lxml.etree.xpathresulterror method)": [[7, "lxml.etree.XPathResultError.add_note"]], "add_note() (lxml.etree.xpathsyntaxerror method)": [[7, "lxml.etree.XPathSyntaxError.add_note"]], "add_note() (lxml.etree.xsltapplyerror method)": [[7, "lxml.etree.XSLTApplyError.add_note"]], "add_note() (lxml.etree.xslterror method)": [[7, "lxml.etree.XSLTError.add_note"]], "add_note() (lxml.etree.xsltextensionerror method)": [[7, "lxml.etree.XSLTExtensionError.add_note"]], "add_note() (lxml.etree.xsltparseerror method)": [[7, "lxml.etree.XSLTParseError.add_note"]], "add_note() (lxml.etree.xsltsaveerror method)": [[7, "lxml.etree.XSLTSaveError.add_note"]], "add_note() (lxml.etree._targetparserresult method)": [[7, "lxml.etree._TargetParserResult.add_note"]], "addnext() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.addnext"]], "addnext() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.addnext"]], "addnext() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.addnext"]], "addnext() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.addnext"]], "addnext() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.addnext"]], "addnext() (lxml.etree._element method)": [[7, "lxml.etree._Element.addnext"]], "addnext() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.addnext"]], "addnext() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.addnext"]], "addnext() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.addnext"]], "addprevious() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.addprevious"]], "addprevious() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.addprevious"]], "addprevious() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.addprevious"]], "addprevious() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.addprevious"]], "addprevious() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.addprevious"]], "addprevious() (lxml.etree._element method)": [[7, "lxml.etree._Element.addprevious"]], "addprevious() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.addprevious"]], "addprevious() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.addprevious"]], "addprevious() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.addprevious"]], "adopt_external_document() (in module lxml.etree)": [[7, "lxml.etree.adopt_external_document"]], "append() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.append"]], "append() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.append"]], "append() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.append"]], "append() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.append"]], "append() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.append"]], "append() (lxml.etree._element method)": [[7, "lxml.etree._Element.append"]], "append() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.append"]], "append() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.append"]], "append() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.append"]], "apply() (lxml.etree.xslt method)": [[7, "lxml.etree.XSLT.apply"]], "apply_templates() (lxml.etree.xsltextension method)": [[7, "lxml.etree.XSLTExtension.apply_templates"]], "args (lxml.etree.c14nerror attribute)": [[7, "lxml.etree.C14NError.args"]], "args (lxml.etree.dtderror attribute)": [[7, "lxml.etree.DTDError.args"]], "args (lxml.etree.dtdparseerror attribute)": [[7, "lxml.etree.DTDParseError.args"]], "args (lxml.etree.dtdvalidateerror attribute)": [[7, "lxml.etree.DTDValidateError.args"]], "args (lxml.etree.documentinvalid attribute)": [[7, "lxml.etree.DocumentInvalid.args"]], "args (lxml.etree.error attribute)": [[7, "lxml.etree.Error.args"]], "args (lxml.etree.lxmlerror attribute)": [[7, "lxml.etree.LxmlError.args"]], "args (lxml.etree.lxmlregistryerror attribute)": [[7, "lxml.etree.LxmlRegistryError.args"]], "args (lxml.etree.lxmlsyntaxerror attribute)": [[7, "lxml.etree.LxmlSyntaxError.args"]], "args (lxml.etree.namespaceregistryerror attribute)": [[7, "lxml.etree.NamespaceRegistryError.args"]], "args (lxml.etree.parseerror attribute)": [[7, "lxml.etree.ParseError.args"]], "args (lxml.etree.parsererror attribute)": [[7, "lxml.etree.ParserError.args"]], "args (lxml.etree.relaxngerror attribute)": [[7, "lxml.etree.RelaxNGError.args"]], "args (lxml.etree.relaxngparseerror attribute)": [[7, "lxml.etree.RelaxNGParseError.args"]], "args (lxml.etree.relaxngvalidateerror attribute)": [[7, "lxml.etree.RelaxNGValidateError.args"]], "args (lxml.etree.schematronerror attribute)": [[7, "lxml.etree.SchematronError.args"]], "args (lxml.etree.schematronparseerror attribute)": [[7, "lxml.etree.SchematronParseError.args"]], "args (lxml.etree.schematronvalidateerror attribute)": [[7, "lxml.etree.SchematronValidateError.args"]], "args (lxml.etree.serialisationerror attribute)": [[7, "lxml.etree.SerialisationError.args"]], "args (lxml.etree.xincludeerror attribute)": [[7, "lxml.etree.XIncludeError.args"]], "args (lxml.etree.xmlschemaerror attribute)": [[7, "lxml.etree.XMLSchemaError.args"]], "args (lxml.etree.xmlschemaparseerror attribute)": [[7, "lxml.etree.XMLSchemaParseError.args"]], "args (lxml.etree.xmlschemavalidateerror attribute)": [[7, "lxml.etree.XMLSchemaValidateError.args"]], "args (lxml.etree.xmlsyntaxassertionerror attribute)": [[7, "lxml.etree.XMLSyntaxAssertionError.args"]], "args (lxml.etree.xmlsyntaxerror attribute)": [[7, "lxml.etree.XMLSyntaxError.args"]], "args (lxml.etree.xpatherror attribute)": [[7, "lxml.etree.XPathError.args"]], "args (lxml.etree.xpathevalerror attribute)": [[7, "lxml.etree.XPathEvalError.args"]], "args (lxml.etree.xpathfunctionerror attribute)": [[7, "lxml.etree.XPathFunctionError.args"]], "args (lxml.etree.xpathresulterror attribute)": [[7, "lxml.etree.XPathResultError.args"]], "args (lxml.etree.xpathsyntaxerror attribute)": [[7, "lxml.etree.XPathSyntaxError.args"]], "args (lxml.etree.xsltapplyerror attribute)": [[7, "lxml.etree.XSLTApplyError.args"]], "args (lxml.etree.xslterror attribute)": [[7, "lxml.etree.XSLTError.args"]], "args (lxml.etree.xsltextensionerror attribute)": [[7, "lxml.etree.XSLTExtensionError.args"]], "args (lxml.etree.xsltparseerror attribute)": [[7, "lxml.etree.XSLTParseError.args"]], "args (lxml.etree.xsltsaveerror attribute)": [[7, "lxml.etree.XSLTSaveError.args"]], "args (lxml.etree._targetparserresult attribute)": [[7, "lxml.etree._TargetParserResult.args"]], "assertvalid() (lxml.etree.dtd method)": [[7, "lxml.etree.DTD.assertValid"]], "assertvalid() (lxml.etree.relaxng method)": [[7, "lxml.etree.RelaxNG.assertValid"]], "assertvalid() (lxml.etree.schematron method)": [[7, "lxml.etree.Schematron.assertValid"]], "assertvalid() (lxml.etree.xmlschema method)": [[7, "lxml.etree.XMLSchema.assertValid"]], "assertvalid() (lxml.etree._validator method)": [[7, "lxml.etree._Validator.assertValid"]], "assert_() (lxml.etree.dtd method)": [[7, "lxml.etree.DTD.assert_"]], "assert_() (lxml.etree.relaxng method)": [[7, "lxml.etree.RelaxNG.assert_"]], "assert_() (lxml.etree.schematron method)": [[7, "lxml.etree.Schematron.assert_"]], "assert_() (lxml.etree.xmlschema method)": [[7, "lxml.etree.XMLSchema.assert_"]], "assert_() (lxml.etree._validator method)": [[7, "lxml.etree._Validator.assert_"]], "attrib (lxml.etree.commentbase attribute)": [[7, "lxml.etree.CommentBase.attrib"]], "attrib (lxml.etree.elementbase attribute)": [[7, "lxml.etree.ElementBase.attrib"]], "attrib (lxml.etree.entitybase attribute)": [[7, "lxml.etree.EntityBase.attrib"]], "attrib (lxml.etree.pibase attribute)": [[7, "lxml.etree.PIBase.attrib"]], "attrib (lxml.etree._comment attribute)": [[7, "lxml.etree._Comment.attrib"]], "attrib (lxml.etree._element attribute)": [[7, "lxml.etree._Element.attrib"]], "attrib (lxml.etree._entity attribute)": [[7, "lxml.etree._Entity.attrib"]], "attrib (lxml.etree._processinginstruction attribute)": [[7, "lxml.etree._ProcessingInstruction.attrib"]], "attrib (lxml.etree._xsltprocessinginstruction attribute)": [[7, "lxml.etree._XSLTProcessingInstruction.attrib"]], "attrname (lxml.etree._elementunicoderesult attribute)": [[7, "lxml.etree._ElementUnicodeResult.attrname"]], "base (lxml.etree.commentbase attribute)": [[7, "lxml.etree.CommentBase.base"]], "base (lxml.etree.elementbase attribute)": [[7, "lxml.etree.ElementBase.base"]], "base (lxml.etree.entitybase attribute)": [[7, "lxml.etree.EntityBase.base"]], "base (lxml.etree.pibase attribute)": [[7, "lxml.etree.PIBase.base"]], "base (lxml.etree._comment attribute)": [[7, "lxml.etree._Comment.base"]], "base (lxml.etree._element attribute)": [[7, "lxml.etree._Element.base"]], "base (lxml.etree._entity attribute)": [[7, "lxml.etree._Entity.base"]], "base (lxml.etree._processinginstruction attribute)": [[7, "lxml.etree._ProcessingInstruction.base"]], "base (lxml.etree._xsltprocessinginstruction attribute)": [[7, "lxml.etree._XSLTProcessingInstruction.base"]], "canonicalize() (in module lxml.etree)": [[7, "lxml.etree.canonicalize"]], "capitalize() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.capitalize"]], "capitalize() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.capitalize"]], "casefold() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.casefold"]], "center() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.center"]], "center() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.center"]], "cleanup_namespaces() (in module lxml.etree)": [[7, "lxml.etree.cleanup_namespaces"]], "clear() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.clear"]], "clear() (lxml.etree.docinfo method)": [[7, "lxml.etree.DocInfo.clear"]], "clear() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.clear"]], "clear() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.clear"]], "clear() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.clear"]], "clear() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.clear"]], "clear() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.clear"]], "clear() (lxml.etree._domainerrorlog method)": [[7, "lxml.etree._DomainErrorLog.clear"]], "clear() (lxml.etree._element method)": [[7, "lxml.etree._Element.clear"]], "clear() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.clear"]], "clear() (lxml.etree._errorlog method)": [[7, "lxml.etree._ErrorLog.clear"]], "clear() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.clear"]], "clear() (lxml.etree._rotatingerrorlog method)": [[7, "lxml.etree._RotatingErrorLog.clear"]], "clear() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.clear"]], "clear_error_log() (in module lxml.etree)": [[7, "lxml.etree.clear_error_log"]], "close() (lxml.etree.c14nwritertarget method)": [[7, "lxml.etree.C14NWriterTarget.close"]], "close() (lxml.etree.etcompatxmlparser method)": [[7, "lxml.etree.ETCompatXMLParser.close"]], "close() (lxml.etree.htmlparser method)": [[7, "lxml.etree.HTMLParser.close"]], "close() (lxml.etree.htmlpullparser method)": [[7, "lxml.etree.HTMLPullParser.close"]], "close() (lxml.etree.treebuilder method)": [[7, "lxml.etree.TreeBuilder.close"]], "close() (lxml.etree.xmlparser method)": [[7, "lxml.etree.XMLParser.close"]], "close() (lxml.etree.xmlpullparser method)": [[7, "lxml.etree.XMLPullParser.close"]], "close() (lxml.etree._feedparser method)": [[7, "lxml.etree._FeedParser.close"]], "column (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.column"]], "comment() (lxml.etree.c14nwritertarget method)": [[7, "lxml.etree.C14NWriterTarget.comment"]], "comment() (lxml.etree.treebuilder method)": [[7, "lxml.etree.TreeBuilder.comment"]], "comment_class (lxml.etree.elementdefaultclasslookup attribute)": [[7, "lxml.etree.ElementDefaultClassLookup.comment_class"]], "copy() (lxml.etree.etcompatxmlparser method)": [[7, "lxml.etree.ETCompatXMLParser.copy"]], "copy() (lxml.etree.htmlparser method)": [[7, "lxml.etree.HTMLParser.copy"]], "copy() (lxml.etree.htmlpullparser method)": [[7, "lxml.etree.HTMLPullParser.copy"]], "copy() (lxml.etree.pyerrorlog method)": [[7, "lxml.etree.PyErrorLog.copy"]], "copy() (lxml.etree.xmlparser method)": [[7, "lxml.etree.XMLParser.copy"]], "copy() (lxml.etree.xmlpullparser method)": [[7, "lxml.etree.XMLPullParser.copy"]], "copy() (lxml.etree._baseerrorlog method)": [[7, "lxml.etree._BaseErrorLog.copy"]], "copy() (lxml.etree._domainerrorlog method)": [[7, "lxml.etree._DomainErrorLog.copy"]], "copy() (lxml.etree._errorlog method)": [[7, "lxml.etree._ErrorLog.copy"]], "copy() (lxml.etree._feedparser method)": [[7, "lxml.etree._FeedParser.copy"]], "copy() (lxml.etree._iddict method)": [[7, "lxml.etree._IDDict.copy"]], "copy() (lxml.etree._listerrorlog method)": [[7, "lxml.etree._ListErrorLog.copy"]], "copy() (lxml.etree._rotatingerrorlog method)": [[7, "lxml.etree._RotatingErrorLog.copy"]], "count() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.count"]], "count() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.count"]], "cssselect() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.cssselect"]], "cssselect() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.cssselect"]], "cssselect() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.cssselect"]], "cssselect() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.cssselect"]], "cssselect() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.cssselect"]], "cssselect() (lxml.etree._element method)": [[7, "lxml.etree._Element.cssselect"]], "cssselect() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.cssselect"]], "cssselect() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.cssselect"]], "cssselect() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.cssselect"]], "data() (lxml.etree.c14nwritertarget method)": [[7, "lxml.etree.C14NWriterTarget.data"]], "data() (lxml.etree.treebuilder method)": [[7, "lxml.etree.TreeBuilder.data"]], "decode() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.decode"]], "docinfo (lxml.etree._elementtree attribute)": [[7, "lxml.etree._ElementTree.docinfo"]], "docinfo (lxml.etree._xsltresulttree attribute)": [[7, "lxml.etree._XSLTResultTree.docinfo"]], "doctype (lxml.etree.docinfo attribute)": [[7, "lxml.etree.DocInfo.doctype"]], "domain (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.domain"]], "domain_name (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.domain_name"]], "dump() (in module lxml.etree)": [[7, "lxml.etree.dump"]], "element_class (lxml.etree.elementdefaultclasslookup attribute)": [[7, "lxml.etree.ElementDefaultClassLookup.element_class"]], "elements() (lxml.etree.dtd method)": [[7, "lxml.etree.DTD.elements"]], "encode() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.encode"]], "encoding (lxml.etree.docinfo attribute)": [[7, "lxml.etree.DocInfo.encoding"]], "end() (lxml.etree.c14nwritertarget method)": [[7, "lxml.etree.C14NWriterTarget.end"]], "end() (lxml.etree.treebuilder method)": [[7, "lxml.etree.TreeBuilder.end"]], "end_lineno (lxml.etree.lxmlsyntaxerror attribute)": [[7, "lxml.etree.LxmlSyntaxError.end_lineno"]], "end_lineno (lxml.etree.parseerror attribute)": [[7, "lxml.etree.ParseError.end_lineno"]], "end_lineno (lxml.etree.xmlsyntaxassertionerror attribute)": [[7, "lxml.etree.XMLSyntaxAssertionError.end_lineno"]], "end_lineno (lxml.etree.xmlsyntaxerror attribute)": [[7, "lxml.etree.XMLSyntaxError.end_lineno"]], "end_lineno (lxml.etree.xpathsyntaxerror attribute)": [[7, "lxml.etree.XPathSyntaxError.end_lineno"]], "end_offset (lxml.etree.lxmlsyntaxerror attribute)": [[7, "lxml.etree.LxmlSyntaxError.end_offset"]], "end_offset (lxml.etree.parseerror attribute)": [[7, "lxml.etree.ParseError.end_offset"]], "end_offset (lxml.etree.xmlsyntaxassertionerror attribute)": [[7, "lxml.etree.XMLSyntaxAssertionError.end_offset"]], "end_offset (lxml.etree.xmlsyntaxerror attribute)": [[7, "lxml.etree.XMLSyntaxError.end_offset"]], "end_offset (lxml.etree.xpathsyntaxerror attribute)": [[7, "lxml.etree.XPathSyntaxError.end_offset"]], "endswith() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.endswith"]], "endswith() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.endswith"]], "entities() (lxml.etree.dtd method)": [[7, "lxml.etree.DTD.entities"]], "entity_class (lxml.etree.elementdefaultclasslookup attribute)": [[7, "lxml.etree.ElementDefaultClassLookup.entity_class"]], "error_log (lxml.etree.dtd attribute)": [[7, "lxml.etree.DTD.error_log"]], "error_log (lxml.etree.etcompatxmlparser attribute)": [[7, "lxml.etree.ETCompatXMLParser.error_log"]], "error_log (lxml.etree.etxpath attribute)": [[7, "lxml.etree.ETXPath.error_log"]], "error_log (lxml.etree.htmlparser attribute)": [[7, "lxml.etree.HTMLParser.error_log"]], "error_log (lxml.etree.htmlpullparser attribute)": [[7, "lxml.etree.HTMLPullParser.error_log"]], "error_log (lxml.etree.relaxng attribute)": [[7, "lxml.etree.RelaxNG.error_log"]], "error_log (lxml.etree.schematron attribute)": [[7, "lxml.etree.Schematron.error_log"]], "error_log (lxml.etree.xinclude attribute)": [[7, "lxml.etree.XInclude.error_log"]], "error_log (lxml.etree.xmlparser attribute)": [[7, "lxml.etree.XMLParser.error_log"]], "error_log (lxml.etree.xmlpullparser attribute)": [[7, "lxml.etree.XMLPullParser.error_log"]], "error_log (lxml.etree.xmlschema attribute)": [[7, "lxml.etree.XMLSchema.error_log"]], "error_log (lxml.etree.xpath attribute)": [[7, "lxml.etree.XPath.error_log"]], "error_log (lxml.etree.xpathdocumentevaluator attribute)": [[7, "lxml.etree.XPathDocumentEvaluator.error_log"]], "error_log (lxml.etree.xpathelementevaluator attribute)": [[7, "lxml.etree.XPathElementEvaluator.error_log"]], "error_log (lxml.etree.xslt attribute)": [[7, "lxml.etree.XSLT.error_log"]], "error_log (lxml.etree._feedparser attribute)": [[7, "lxml.etree._FeedParser.error_log"]], "error_log (lxml.etree._validator attribute)": [[7, "lxml.etree._Validator.error_log"]], "error_log (lxml.etree._xpathevaluatorbase attribute)": [[7, "lxml.etree._XPathEvaluatorBase.error_log"]], "error_log (lxml.etree.iterparse attribute)": [[7, "lxml.etree.iterparse.error_log"]], "evaluate() (lxml.etree.etxpath method)": [[7, "lxml.etree.ETXPath.evaluate"]], "evaluate() (lxml.etree.xpath method)": [[7, "lxml.etree.XPath.evaluate"]], "evaluate() (lxml.etree.xpathdocumentevaluator method)": [[7, "lxml.etree.XPathDocumentEvaluator.evaluate"]], "evaluate() (lxml.etree.xpathelementevaluator method)": [[7, "lxml.etree.XPathElementEvaluator.evaluate"]], "evaluate() (lxml.etree._xpathevaluatorbase method)": [[7, "lxml.etree._XPathEvaluatorBase.evaluate"]], "execute() (lxml.etree.xsltextension method)": [[7, "lxml.etree.XSLTExtension.execute"]], "expandtabs() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.expandtabs"]], "expandtabs() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.expandtabs"]], "extend() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.extend"]], "extend() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.extend"]], "extend() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.extend"]], "extend() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.extend"]], "extend() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.extend"]], "extend() (lxml.etree._element method)": [[7, "lxml.etree._Element.extend"]], "extend() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.extend"]], "extend() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.extend"]], "extend() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.extend"]], "externaldtd (lxml.etree.docinfo attribute)": [[7, "lxml.etree.DocInfo.externalDTD"]], "external_id (lxml.etree.dtd attribute)": [[7, "lxml.etree.DTD.external_id"]], "fallback (lxml.etree.attributebasedelementclasslookup attribute)": [[7, "lxml.etree.AttributeBasedElementClassLookup.fallback"]], "fallback (lxml.etree.customelementclasslookup attribute)": [[7, "lxml.etree.CustomElementClassLookup.fallback"]], "fallback (lxml.etree.elementnamespaceclasslookup attribute)": [[7, "lxml.etree.ElementNamespaceClassLookup.fallback"]], "fallback (lxml.etree.fallbackelementclasslookup attribute)": [[7, "lxml.etree.FallbackElementClassLookup.fallback"]], "fallback (lxml.etree.parserbasedelementclasslookup attribute)": [[7, "lxml.etree.ParserBasedElementClassLookup.fallback"]], "fallback (lxml.etree.pythonelementclasslookup attribute)": [[7, "lxml.etree.PythonElementClassLookup.fallback"]], "feed() (lxml.etree.etcompatxmlparser method)": [[7, "lxml.etree.ETCompatXMLParser.feed"]], "feed() (lxml.etree.htmlparser method)": [[7, "lxml.etree.HTMLParser.feed"]], "feed() (lxml.etree.htmlpullparser method)": [[7, "lxml.etree.HTMLPullParser.feed"]], "feed() (lxml.etree.xmlparser method)": [[7, "lxml.etree.XMLParser.feed"]], "feed() (lxml.etree.xmlpullparser method)": [[7, "lxml.etree.XMLPullParser.feed"]], "feed() (lxml.etree._feedparser method)": [[7, "lxml.etree._FeedParser.feed"]], "feed_error_log (lxml.etree.etcompatxmlparser attribute)": [[7, "lxml.etree.ETCompatXMLParser.feed_error_log"]], "feed_error_log (lxml.etree.htmlparser attribute)": [[7, "lxml.etree.HTMLParser.feed_error_log"]], "feed_error_log (lxml.etree.htmlpullparser attribute)": [[7, "lxml.etree.HTMLPullParser.feed_error_log"]], "feed_error_log (lxml.etree.xmlparser attribute)": [[7, "lxml.etree.XMLParser.feed_error_log"]], "feed_error_log (lxml.etree.xmlpullparser attribute)": [[7, "lxml.etree.XMLPullParser.feed_error_log"]], "feed_error_log (lxml.etree._feedparser attribute)": [[7, "lxml.etree._FeedParser.feed_error_log"]], "filename (lxml.etree.lxmlsyntaxerror attribute)": [[7, "lxml.etree.LxmlSyntaxError.filename"]], "filename (lxml.etree.parseerror attribute)": [[7, "lxml.etree.ParseError.filename"]], "filename (lxml.etree.xmlsyntaxassertionerror attribute)": [[7, "lxml.etree.XMLSyntaxAssertionError.filename"]], "filename (lxml.etree.xmlsyntaxerror attribute)": [[7, "lxml.etree.XMLSyntaxError.filename"]], "filename (lxml.etree.xpathsyntaxerror attribute)": [[7, "lxml.etree.XPathSyntaxError.filename"]], "filename (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.filename"]], "filter_domains() (lxml.etree._domainerrorlog method)": [[7, "lxml.etree._DomainErrorLog.filter_domains"]], "filter_domains() (lxml.etree._errorlog method)": [[7, "lxml.etree._ErrorLog.filter_domains"]], "filter_domains() (lxml.etree._listerrorlog method)": [[7, "lxml.etree._ListErrorLog.filter_domains"]], "filter_domains() (lxml.etree._rotatingerrorlog method)": [[7, "lxml.etree._RotatingErrorLog.filter_domains"]], "filter_from_errors() (lxml.etree._domainerrorlog method)": [[7, "lxml.etree._DomainErrorLog.filter_from_errors"]], "filter_from_errors() (lxml.etree._errorlog method)": [[7, "lxml.etree._ErrorLog.filter_from_errors"]], "filter_from_errors() (lxml.etree._listerrorlog method)": [[7, "lxml.etree._ListErrorLog.filter_from_errors"]], "filter_from_errors() (lxml.etree._rotatingerrorlog method)": [[7, "lxml.etree._RotatingErrorLog.filter_from_errors"]], "filter_from_fatals() (lxml.etree._domainerrorlog method)": [[7, "lxml.etree._DomainErrorLog.filter_from_fatals"]], "filter_from_fatals() (lxml.etree._errorlog method)": [[7, "lxml.etree._ErrorLog.filter_from_fatals"]], "filter_from_fatals() (lxml.etree._listerrorlog method)": [[7, "lxml.etree._ListErrorLog.filter_from_fatals"]], "filter_from_fatals() (lxml.etree._rotatingerrorlog method)": [[7, "lxml.etree._RotatingErrorLog.filter_from_fatals"]], "filter_from_level() (lxml.etree._domainerrorlog method)": [[7, "lxml.etree._DomainErrorLog.filter_from_level"]], "filter_from_level() (lxml.etree._errorlog method)": [[7, "lxml.etree._ErrorLog.filter_from_level"]], "filter_from_level() (lxml.etree._listerrorlog method)": [[7, "lxml.etree._ListErrorLog.filter_from_level"]], "filter_from_level() (lxml.etree._rotatingerrorlog method)": [[7, "lxml.etree._RotatingErrorLog.filter_from_level"]], "filter_from_warnings() (lxml.etree._domainerrorlog method)": [[7, "lxml.etree._DomainErrorLog.filter_from_warnings"]], "filter_from_warnings() (lxml.etree._errorlog method)": [[7, "lxml.etree._ErrorLog.filter_from_warnings"]], "filter_from_warnings() (lxml.etree._listerrorlog method)": [[7, "lxml.etree._ListErrorLog.filter_from_warnings"]], "filter_from_warnings() (lxml.etree._rotatingerrorlog method)": [[7, "lxml.etree._RotatingErrorLog.filter_from_warnings"]], "filter_levels() (lxml.etree._domainerrorlog method)": [[7, "lxml.etree._DomainErrorLog.filter_levels"]], "filter_levels() (lxml.etree._errorlog method)": [[7, "lxml.etree._ErrorLog.filter_levels"]], "filter_levels() (lxml.etree._listerrorlog method)": [[7, "lxml.etree._ListErrorLog.filter_levels"]], "filter_levels() (lxml.etree._rotatingerrorlog method)": [[7, "lxml.etree._RotatingErrorLog.filter_levels"]], "filter_types() (lxml.etree._domainerrorlog method)": [[7, "lxml.etree._DomainErrorLog.filter_types"]], "filter_types() (lxml.etree._errorlog method)": [[7, "lxml.etree._ErrorLog.filter_types"]], "filter_types() (lxml.etree._listerrorlog method)": [[7, "lxml.etree._ListErrorLog.filter_types"]], "filter_types() (lxml.etree._rotatingerrorlog method)": [[7, "lxml.etree._RotatingErrorLog.filter_types"]], "find() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.find"]], "find() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.find"]], "find() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.find"]], "find() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.find"]], "find() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.find"]], "find() (lxml.etree._element method)": [[7, "lxml.etree._Element.find"]], "find() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.find"]], "find() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.find"]], "find() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.find"]], "find() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.find"]], "find() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.find"]], "find() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.find"]], "find() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.find"]], "findall() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.findall"]], "findall() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.findall"]], "findall() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.findall"]], "findall() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.findall"]], "findall() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.findall"]], "findall() (lxml.etree._element method)": [[7, "lxml.etree._Element.findall"]], "findall() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.findall"]], "findall() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.findall"]], "findall() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.findall"]], "findall() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.findall"]], "findall() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.findall"]], "findtext() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.findtext"]], "findtext() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.findtext"]], "findtext() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.findtext"]], "findtext() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.findtext"]], "findtext() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.findtext"]], "findtext() (lxml.etree._element method)": [[7, "lxml.etree._Element.findtext"]], "findtext() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.findtext"]], "findtext() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.findtext"]], "findtext() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.findtext"]], "findtext() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.findtext"]], "findtext() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.findtext"]], "format() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.format"]], "format_map() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.format_map"]], "from_rnc_string() (lxml.etree.relaxng class method)": [[7, "lxml.etree.RelaxNG.from_rnc_string"]], "fromhex() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.fromhex"]], "fromstring() (in module lxml.etree)": [[7, "lxml.etree.fromstring"]], "fromstringlist() (in module lxml.etree)": [[7, "lxml.etree.fromstringlist"]], "get() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.get"]], "get() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.get"]], "get() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.get"]], "get() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.get"]], "get() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.get"]], "get() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.get"]], "get() (lxml.etree._element method)": [[7, "lxml.etree._Element.get"]], "get() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.get"]], "get() (lxml.etree._iddict method)": [[7, "lxml.etree._IDDict.get"]], "get() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.get"]], "get() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.get"]], "get_default_parser() (in module lxml.etree)": [[7, "lxml.etree.get_default_parser"]], "get_namespace() (lxml.etree.elementnamespaceclasslookup method)": [[7, "lxml.etree.ElementNamespaceClassLookup.get_namespace"]], "getchildren() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.getchildren"]], "getchildren() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.getchildren"]], "getchildren() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.getchildren"]], "getchildren() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.getchildren"]], "getchildren() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.getchildren"]], "getchildren() (lxml.etree._element method)": [[7, "lxml.etree._Element.getchildren"]], "getchildren() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.getchildren"]], "getchildren() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.getchildren"]], "getchildren() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.getchildren"]], "getelementpath() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.getelementpath"]], "getelementpath() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.getelementpath"]], "getiterator() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.getiterator"]], "getiterator() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.getiterator"]], "getiterator() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.getiterator"]], "getiterator() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.getiterator"]], "getiterator() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.getiterator"]], "getiterator() (lxml.etree._element method)": [[7, "lxml.etree._Element.getiterator"]], "getiterator() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.getiterator"]], "getiterator() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.getiterator"]], "getiterator() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.getiterator"]], "getiterator() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.getiterator"]], "getiterator() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.getiterator"]], "getnext() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.getnext"]], "getnext() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.getnext"]], "getnext() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.getnext"]], "getnext() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.getnext"]], "getnext() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.getnext"]], "getnext() (lxml.etree._element method)": [[7, "lxml.etree._Element.getnext"]], "getnext() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.getnext"]], "getnext() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.getnext"]], "getnext() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.getnext"]], "getparent() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.getparent"]], "getparent() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.getparent"]], "getparent() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.getparent"]], "getparent() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.getparent"]], "getparent() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.getparent"]], "getparent() (lxml.etree._element method)": [[7, "lxml.etree._Element.getparent"]], "getparent() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.getparent"]], "getparent() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.getparent"]], "getparent() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.getparent"]], "getparent() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.getparent"]], "getparent() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.getparent"]], "getpath() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.getpath"]], "getpath() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.getpath"]], "getprevious() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.getprevious"]], "getprevious() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.getprevious"]], "getprevious() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.getprevious"]], "getprevious() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.getprevious"]], "getprevious() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.getprevious"]], "getprevious() (lxml.etree._element method)": [[7, "lxml.etree._Element.getprevious"]], "getprevious() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.getprevious"]], "getprevious() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.getprevious"]], "getprevious() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.getprevious"]], "getroot() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.getroot"]], "getroot() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.getroot"]], "getroottree() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.getroottree"]], "getroottree() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.getroottree"]], "getroottree() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.getroottree"]], "getroottree() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.getroottree"]], "getroottree() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.getroottree"]], "getroottree() (lxml.etree._element method)": [[7, "lxml.etree._Element.getroottree"]], "getroottree() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.getroottree"]], "getroottree() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.getroottree"]], "getroottree() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.getroottree"]], "has_key() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.has_key"]], "has_key() (lxml.etree._iddict method)": [[7, "lxml.etree._IDDict.has_key"]], "hex() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.hex"]], "htmlfile (class in lxml.etree)": [[7, "lxml.etree.htmlfile"]], "indent() (in module lxml.etree)": [[7, "lxml.etree.indent"]], "index() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.index"]], "index() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.index"]], "index() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.index"]], "index() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.index"]], "index() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.index"]], "index() (lxml.etree._element method)": [[7, "lxml.etree._Element.index"]], "index() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.index"]], "index() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.index"]], "index() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.index"]], "index() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.index"]], "index() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.index"]], "insert() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.insert"]], "insert() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.insert"]], "insert() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.insert"]], "insert() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.insert"]], "insert() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.insert"]], "insert() (lxml.etree._element method)": [[7, "lxml.etree._Element.insert"]], "insert() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.insert"]], "insert() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.insert"]], "insert() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.insert"]], "internaldtd (lxml.etree.docinfo attribute)": [[7, "lxml.etree.DocInfo.internalDTD"]], "is_attribute (lxml.etree._elementunicoderesult attribute)": [[7, "lxml.etree._ElementUnicodeResult.is_attribute"]], "is_tail (lxml.etree._elementunicoderesult attribute)": [[7, "lxml.etree._ElementUnicodeResult.is_tail"]], "is_text (lxml.etree._elementunicoderesult attribute)": [[7, "lxml.etree._ElementUnicodeResult.is_text"]], "isalnum() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.isalnum"]], "isalnum() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.isalnum"]], "isalpha() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.isalpha"]], "isalpha() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.isalpha"]], "isascii() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.isascii"]], "isascii() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.isascii"]], "isdecimal() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.isdecimal"]], "isdigit() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.isdigit"]], "isdigit() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.isdigit"]], "iselement() (in module lxml.etree)": [[7, "lxml.etree.iselement"]], "isidentifier() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.isidentifier"]], "islower() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.islower"]], "islower() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.islower"]], "isnumeric() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.isnumeric"]], "isprintable() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.isprintable"]], "isspace() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.isspace"]], "isspace() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.isspace"]], "istitle() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.istitle"]], "istitle() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.istitle"]], "isupper() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.isupper"]], "isupper() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.isupper"]], "items() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.items"]], "items() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.items"]], "items() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.items"]], "items() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.items"]], "items() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.items"]], "items() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.items"]], "items() (lxml.etree._element method)": [[7, "lxml.etree._Element.items"]], "items() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.items"]], "items() (lxml.etree._iddict method)": [[7, "lxml.etree._IDDict.items"]], "items() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.items"]], "items() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.items"]], "iter() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.iter"]], "iter() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.iter"]], "iter() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.iter"]], "iter() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.iter"]], "iter() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.iter"]], "iter() (lxml.etree._element method)": [[7, "lxml.etree._Element.iter"]], "iter() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.iter"]], "iter() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.iter"]], "iter() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.iter"]], "iter() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.iter"]], "iter() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.iter"]], "iterancestors() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.iterancestors"]], "iterancestors() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.iterancestors"]], "iterancestors() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.iterancestors"]], "iterancestors() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.iterancestors"]], "iterancestors() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.iterancestors"]], "iterancestors() (lxml.etree._element method)": [[7, "lxml.etree._Element.iterancestors"]], "iterancestors() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.iterancestors"]], "iterancestors() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.iterancestors"]], "iterancestors() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.iterancestors"]], "iterchildren() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.iterchildren"]], "iterchildren() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.iterchildren"]], "iterchildren() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.iterchildren"]], "iterchildren() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.iterchildren"]], "iterchildren() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.iterchildren"]], "iterchildren() (lxml.etree._element method)": [[7, "lxml.etree._Element.iterchildren"]], "iterchildren() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.iterchildren"]], "iterchildren() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.iterchildren"]], "iterchildren() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.iterchildren"]], "iterdescendants() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.iterdescendants"]], "iterdescendants() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.iterdescendants"]], "iterdescendants() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.iterdescendants"]], "iterdescendants() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.iterdescendants"]], "iterdescendants() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.iterdescendants"]], "iterdescendants() (lxml.etree._element method)": [[7, "lxml.etree._Element.iterdescendants"]], "iterdescendants() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.iterdescendants"]], "iterdescendants() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.iterdescendants"]], "iterdescendants() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.iterdescendants"]], "iterelements() (lxml.etree.dtd method)": [[7, "lxml.etree.DTD.iterelements"]], "iterentities() (lxml.etree.dtd method)": [[7, "lxml.etree.DTD.iterentities"]], "iterfind() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.iterfind"]], "iterfind() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.iterfind"]], "iterfind() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.iterfind"]], "iterfind() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.iterfind"]], "iterfind() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.iterfind"]], "iterfind() (lxml.etree._element method)": [[7, "lxml.etree._Element.iterfind"]], "iterfind() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.iterfind"]], "iterfind() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.iterfind"]], "iterfind() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.iterfind"]], "iterfind() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.iterfind"]], "iterfind() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.iterfind"]], "iteritems() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.iteritems"]], "iteritems() (lxml.etree._iddict method)": [[7, "lxml.etree._IDDict.iteritems"]], "iterkeys() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.iterkeys"]], "iterkeys() (lxml.etree._iddict method)": [[7, "lxml.etree._IDDict.iterkeys"]], "iterparse (class in lxml.etree)": [[7, "lxml.etree.iterparse"]], "itersiblings() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.itersiblings"]], "itersiblings() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.itersiblings"]], "itersiblings() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.itersiblings"]], "itersiblings() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.itersiblings"]], "itersiblings() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.itersiblings"]], "itersiblings() (lxml.etree._element method)": [[7, "lxml.etree._Element.itersiblings"]], "itersiblings() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.itersiblings"]], "itersiblings() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.itersiblings"]], "itersiblings() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.itersiblings"]], "itertext() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.itertext"]], "itertext() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.itertext"]], "itertext() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.itertext"]], "itertext() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.itertext"]], "itertext() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.itertext"]], "itertext() (lxml.etree._element method)": [[7, "lxml.etree._Element.itertext"]], "itertext() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.itertext"]], "itertext() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.itertext"]], "itertext() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.itertext"]], "itervalues() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.itervalues"]], "itervalues() (lxml.etree._iddict method)": [[7, "lxml.etree._IDDict.itervalues"]], "iterwalk (class in lxml.etree)": [[7, "lxml.etree.iterwalk"]], "join() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.join"]], "join() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.join"]], "keys() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.keys"]], "keys() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.keys"]], "keys() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.keys"]], "keys() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.keys"]], "keys() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.keys"]], "keys() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.keys"]], "keys() (lxml.etree._element method)": [[7, "lxml.etree._Element.keys"]], "keys() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.keys"]], "keys() (lxml.etree._iddict method)": [[7, "lxml.etree._IDDict.keys"]], "keys() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.keys"]], "keys() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.keys"]], "last_error (lxml.etree.pyerrorlog attribute)": [[7, "lxml.etree.PyErrorLog.last_error"]], "last_error (lxml.etree._baseerrorlog attribute)": [[7, "lxml.etree._BaseErrorLog.last_error"]], "last_error (lxml.etree._domainerrorlog attribute)": [[7, "lxml.etree._DomainErrorLog.last_error"]], "last_error (lxml.etree._errorlog attribute)": [[7, "lxml.etree._ErrorLog.last_error"]], "last_error (lxml.etree._listerrorlog attribute)": [[7, "lxml.etree._ListErrorLog.last_error"]], "last_error (lxml.etree._rotatingerrorlog attribute)": [[7, "lxml.etree._RotatingErrorLog.last_error"]], "level (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.level"]], "level_map (lxml.etree.pyerrorlog attribute)": [[7, "lxml.etree.PyErrorLog.level_map"]], "level_name (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.level_name"]], "line (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.line"]], "lineno (lxml.etree.lxmlsyntaxerror attribute)": [[7, "lxml.etree.LxmlSyntaxError.lineno"]], "lineno (lxml.etree.parseerror attribute)": [[7, "lxml.etree.ParseError.lineno"]], "lineno (lxml.etree.xmlsyntaxassertionerror attribute)": [[7, "lxml.etree.XMLSyntaxAssertionError.lineno"]], "lineno (lxml.etree.xmlsyntaxerror attribute)": [[7, "lxml.etree.XMLSyntaxError.lineno"]], "lineno (lxml.etree.xpathsyntaxerror attribute)": [[7, "lxml.etree.XPathSyntaxError.lineno"]], "ljust() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.ljust"]], "ljust() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.ljust"]], "localname (lxml.etree.qname attribute)": [[7, "lxml.etree.QName.localname"]], "log() (lxml.etree.pyerrorlog method)": [[7, "lxml.etree.PyErrorLog.log"]], "lookup() (lxml.etree.customelementclasslookup method)": [[7, "lxml.etree.CustomElementClassLookup.lookup"]], "lookup() (lxml.etree.pythonelementclasslookup method)": [[7, "lxml.etree.PythonElementClassLookup.lookup"]], "lower() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.lower"]], "lower() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.lower"]], "lstrip() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.lstrip"]], "lstrip() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.lstrip"]], "lxml.etree": [[7, "module-lxml.etree"]], "makeelement() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.makeelement"]], "makeelement() (lxml.etree.etcompatxmlparser method)": [[7, "lxml.etree.ETCompatXMLParser.makeelement"]], "makeelement() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.makeelement"]], "makeelement() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.makeelement"]], "makeelement() (lxml.etree.htmlparser method)": [[7, "lxml.etree.HTMLParser.makeelement"]], "makeelement() (lxml.etree.htmlpullparser method)": [[7, "lxml.etree.HTMLPullParser.makeelement"]], "makeelement() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.makeelement"]], "makeelement() (lxml.etree.xmlparser method)": [[7, "lxml.etree.XMLParser.makeelement"]], "makeelement() (lxml.etree.xmlpullparser method)": [[7, "lxml.etree.XMLPullParser.makeelement"]], "makeelement() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.makeelement"]], "makeelement() (lxml.etree._element method)": [[7, "lxml.etree._Element.makeelement"]], "makeelement() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.makeelement"]], "makeelement() (lxml.etree._feedparser method)": [[7, "lxml.etree._FeedParser.makeelement"]], "makeelement() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.makeelement"]], "makeelement() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.makeelement"]], "makeelement() (lxml.etree.iterparse method)": [[7, "lxml.etree.iterparse.makeelement"]], "maketrans() (lxml.etree._elementstringresult static method)": [[7, "lxml.etree._ElementStringResult.maketrans"]], "maketrans() (lxml.etree._elementunicoderesult static method)": [[7, "lxml.etree._ElementUnicodeResult.maketrans"]], "message (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.message"]], "msg (lxml.etree.lxmlsyntaxerror attribute)": [[7, "lxml.etree.LxmlSyntaxError.msg"]], "msg (lxml.etree.parseerror attribute)": [[7, "lxml.etree.ParseError.msg"]], "msg (lxml.etree.xmlsyntaxassertionerror attribute)": [[7, "lxml.etree.XMLSyntaxAssertionError.msg"]], "msg (lxml.etree.xmlsyntaxerror attribute)": [[7, "lxml.etree.XMLSyntaxError.msg"]], "msg (lxml.etree.xpathsyntaxerror attribute)": [[7, "lxml.etree.XPathSyntaxError.msg"]], "name (lxml.etree.dtd attribute)": [[7, "lxml.etree.DTD.name"]], "name (lxml.etree.entitybase attribute)": [[7, "lxml.etree.EntityBase.name"]], "name (lxml.etree._entity attribute)": [[7, "lxml.etree._Entity.name"]], "namespace (lxml.etree.qname attribute)": [[7, "lxml.etree.QName.namespace"]], "nsmap (lxml.etree.commentbase attribute)": [[7, "lxml.etree.CommentBase.nsmap"]], "nsmap (lxml.etree.elementbase attribute)": [[7, "lxml.etree.ElementBase.nsmap"]], "nsmap (lxml.etree.entitybase attribute)": [[7, "lxml.etree.EntityBase.nsmap"]], "nsmap (lxml.etree.pibase attribute)": [[7, "lxml.etree.PIBase.nsmap"]], "nsmap (lxml.etree._comment attribute)": [[7, "lxml.etree._Comment.nsmap"]], "nsmap (lxml.etree._element attribute)": [[7, "lxml.etree._Element.nsmap"]], "nsmap (lxml.etree._entity attribute)": [[7, "lxml.etree._Entity.nsmap"]], "nsmap (lxml.etree._processinginstruction attribute)": [[7, "lxml.etree._ProcessingInstruction.nsmap"]], "nsmap (lxml.etree._xsltprocessinginstruction attribute)": [[7, "lxml.etree._XSLTProcessingInstruction.nsmap"]], "offset (lxml.etree.lxmlsyntaxerror attribute)": [[7, "lxml.etree.LxmlSyntaxError.offset"]], "offset (lxml.etree.parseerror attribute)": [[7, "lxml.etree.ParseError.offset"]], "offset (lxml.etree.xmlsyntaxassertionerror attribute)": [[7, "lxml.etree.XMLSyntaxAssertionError.offset"]], "offset (lxml.etree.xmlsyntaxerror attribute)": [[7, "lxml.etree.XMLSyntaxError.offset"]], "offset (lxml.etree.xpathsyntaxerror attribute)": [[7, "lxml.etree.XPathSyntaxError.offset"]], "options (lxml.etree.xsltaccesscontrol attribute)": [[7, "lxml.etree.XSLTAccessControl.options"]], "parse() (in module lxml.etree)": [[7, "lxml.etree.parse"]], "parse() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.parse"]], "parse() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.parse"]], "parsexsl() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.parseXSL"]], "parseid() (in module lxml.etree)": [[7, "lxml.etree.parseid"]], "parser (lxml.etree._elementtree attribute)": [[7, "lxml.etree._ElementTree.parser"]], "parser (lxml.etree._xsltresulttree attribute)": [[7, "lxml.etree._XSLTResultTree.parser"]], "partition() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.partition"]], "partition() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.partition"]], "path (lxml.etree.etxpath attribute)": [[7, "lxml.etree.ETXPath.path"]], "path (lxml.etree.xpath attribute)": [[7, "lxml.etree.XPath.path"]], "path (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.path"]], "pi() (lxml.etree.c14nwritertarget method)": [[7, "lxml.etree.C14NWriterTarget.pi"]], "pi() (lxml.etree.treebuilder method)": [[7, "lxml.etree.TreeBuilder.pi"]], "pi_class (lxml.etree.elementdefaultclasslookup attribute)": [[7, "lxml.etree.ElementDefaultClassLookup.pi_class"]], "pop() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.pop"]], "position (lxml.etree.parseerror property)": [[7, "lxml.etree.ParseError.position"]], "position (lxml.etree.xmlsyntaxassertionerror property)": [[7, "lxml.etree.XMLSyntaxAssertionError.position"]], "position (lxml.etree.xmlsyntaxerror property)": [[7, "lxml.etree.XMLSyntaxError.position"]], "prefix (lxml.etree.commentbase attribute)": [[7, "lxml.etree.CommentBase.prefix"]], "prefix (lxml.etree.elementbase attribute)": [[7, "lxml.etree.ElementBase.prefix"]], "prefix (lxml.etree.entitybase attribute)": [[7, "lxml.etree.EntityBase.prefix"]], "prefix (lxml.etree.pibase attribute)": [[7, "lxml.etree.PIBase.prefix"]], "prefix (lxml.etree._comment attribute)": [[7, "lxml.etree._Comment.prefix"]], "prefix (lxml.etree._element attribute)": [[7, "lxml.etree._Element.prefix"]], "prefix (lxml.etree._entity attribute)": [[7, "lxml.etree._Entity.prefix"]], "prefix (lxml.etree._processinginstruction attribute)": [[7, "lxml.etree._ProcessingInstruction.prefix"]], "prefix (lxml.etree._xsltprocessinginstruction attribute)": [[7, "lxml.etree._XSLTProcessingInstruction.prefix"]], "print_file_and_line (lxml.etree.lxmlsyntaxerror attribute)": [[7, "lxml.etree.LxmlSyntaxError.print_file_and_line"]], "print_file_and_line (lxml.etree.parseerror attribute)": [[7, "lxml.etree.ParseError.print_file_and_line"]], "print_file_and_line (lxml.etree.xmlsyntaxassertionerror attribute)": [[7, "lxml.etree.XMLSyntaxAssertionError.print_file_and_line"]], "print_file_and_line (lxml.etree.xmlsyntaxerror attribute)": [[7, "lxml.etree.XMLSyntaxError.print_file_and_line"]], "print_file_and_line (lxml.etree.xpathsyntaxerror attribute)": [[7, "lxml.etree.XPathSyntaxError.print_file_and_line"]], "process_children() (lxml.etree.xsltextension method)": [[7, "lxml.etree.XSLTExtension.process_children"]], "public_id (lxml.etree.docinfo attribute)": [[7, "lxml.etree.DocInfo.public_id"]], "read_events() (lxml.etree.htmlpullparser method)": [[7, "lxml.etree.HTMLPullParser.read_events"]], "read_events() (lxml.etree.xmlpullparser method)": [[7, "lxml.etree.XMLPullParser.read_events"]], "receive() (lxml.etree.pyerrorlog method)": [[7, "lxml.etree.PyErrorLog.receive"]], "receive() (lxml.etree._baseerrorlog method)": [[7, "lxml.etree._BaseErrorLog.receive"]], "receive() (lxml.etree._domainerrorlog method)": [[7, "lxml.etree._DomainErrorLog.receive"]], "receive() (lxml.etree._errorlog method)": [[7, "lxml.etree._ErrorLog.receive"]], "receive() (lxml.etree._listerrorlog method)": [[7, "lxml.etree._ListErrorLog.receive"]], "receive() (lxml.etree._rotatingerrorlog method)": [[7, "lxml.etree._RotatingErrorLog.receive"]], "register_namespace() (in module lxml.etree)": [[7, "lxml.etree.register_namespace"]], "register_namespace() (lxml.etree.xpathdocumentevaluator method)": [[7, "lxml.etree.XPathDocumentEvaluator.register_namespace"]], "register_namespace() (lxml.etree.xpathelementevaluator method)": [[7, "lxml.etree.XPathElementEvaluator.register_namespace"]], "register_namespaces() (lxml.etree.xpathdocumentevaluator method)": [[7, "lxml.etree.XPathDocumentEvaluator.register_namespaces"]], "register_namespaces() (lxml.etree.xpathelementevaluator method)": [[7, "lxml.etree.XPathElementEvaluator.register_namespaces"]], "relaxng() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.relaxng"]], "relaxng() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.relaxng"]], "remove() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.remove"]], "remove() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.remove"]], "remove() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.remove"]], "remove() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.remove"]], "remove() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.remove"]], "remove() (lxml.etree._element method)": [[7, "lxml.etree._Element.remove"]], "remove() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.remove"]], "remove() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.remove"]], "remove() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.remove"]], "removeprefix() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.removeprefix"]], "removeprefix() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.removeprefix"]], "removesuffix() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.removesuffix"]], "removesuffix() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.removesuffix"]], "replace() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.replace"]], "replace() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.replace"]], "replace() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.replace"]], "replace() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.replace"]], "replace() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.replace"]], "replace() (lxml.etree._element method)": [[7, "lxml.etree._Element.replace"]], "replace() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.replace"]], "replace() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.replace"]], "replace() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.replace"]], "replace() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.replace"]], "replace() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.replace"]], "resolve() (lxml.etree.resolver method)": [[7, "lxml.etree.Resolver.resolve"]], "resolve_empty() (lxml.etree.resolver method)": [[7, "lxml.etree.Resolver.resolve_empty"]], "resolve_file() (lxml.etree.resolver method)": [[7, "lxml.etree.Resolver.resolve_file"]], "resolve_filename() (lxml.etree.resolver method)": [[7, "lxml.etree.Resolver.resolve_filename"]], "resolve_string() (lxml.etree.resolver method)": [[7, "lxml.etree.Resolver.resolve_string"]], "resolvers (lxml.etree.etcompatxmlparser attribute)": [[7, "lxml.etree.ETCompatXMLParser.resolvers"]], "resolvers (lxml.etree.htmlparser attribute)": [[7, "lxml.etree.HTMLParser.resolvers"]], "resolvers (lxml.etree.htmlpullparser attribute)": [[7, "lxml.etree.HTMLPullParser.resolvers"]], "resolvers (lxml.etree.xmlparser attribute)": [[7, "lxml.etree.XMLParser.resolvers"]], "resolvers (lxml.etree.xmlpullparser attribute)": [[7, "lxml.etree.XMLPullParser.resolvers"]], "resolvers (lxml.etree._feedparser attribute)": [[7, "lxml.etree._FeedParser.resolvers"]], "resolvers (lxml.etree.iterparse attribute)": [[7, "lxml.etree.iterparse.resolvers"]], "rfind() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.rfind"]], "rfind() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.rfind"]], "rindex() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.rindex"]], "rindex() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.rindex"]], "rjust() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.rjust"]], "rjust() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.rjust"]], "root (lxml.etree.iterparse attribute)": [[7, "lxml.etree.iterparse.root"]], "root_name (lxml.etree.docinfo attribute)": [[7, "lxml.etree.DocInfo.root_name"]], "rpartition() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.rpartition"]], "rpartition() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.rpartition"]], "rsplit() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.rsplit"]], "rsplit() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.rsplit"]], "rstrip() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.rstrip"]], "rstrip() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.rstrip"]], "set() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.set"]], "set() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.set"]], "set() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.set"]], "set() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.set"]], "set() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.set"]], "set() (lxml.etree._element method)": [[7, "lxml.etree._Element.set"]], "set() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.set"]], "set() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.set"]], "set() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.set"]], "setelementclasslookup() (lxml.etree.etcompatxmlparser method)": [[7, "lxml.etree.ETCompatXMLParser.setElementClassLookup"]], "setelementclasslookup() (lxml.etree.htmlparser method)": [[7, "lxml.etree.HTMLParser.setElementClassLookup"]], "setelementclasslookup() (lxml.etree.htmlpullparser method)": [[7, "lxml.etree.HTMLPullParser.setElementClassLookup"]], "setelementclasslookup() (lxml.etree.xmlparser method)": [[7, "lxml.etree.XMLParser.setElementClassLookup"]], "setelementclasslookup() (lxml.etree.xmlpullparser method)": [[7, "lxml.etree.XMLPullParser.setElementClassLookup"]], "setelementclasslookup() (lxml.etree._feedparser method)": [[7, "lxml.etree._FeedParser.setElementClassLookup"]], "set_default_parser() (in module lxml.etree)": [[7, "lxml.etree.set_default_parser"]], "set_element_class_lookup() (in module lxml.etree)": [[7, "lxml.etree.set_element_class_lookup"]], "set_element_class_lookup() (lxml.etree.etcompatxmlparser method)": [[7, "lxml.etree.ETCompatXMLParser.set_element_class_lookup"]], "set_element_class_lookup() (lxml.etree.htmlparser method)": [[7, "lxml.etree.HTMLParser.set_element_class_lookup"]], "set_element_class_lookup() (lxml.etree.htmlpullparser method)": [[7, "lxml.etree.HTMLPullParser.set_element_class_lookup"]], "set_element_class_lookup() (lxml.etree.xmlparser method)": [[7, "lxml.etree.XMLParser.set_element_class_lookup"]], "set_element_class_lookup() (lxml.etree.xmlpullparser method)": [[7, "lxml.etree.XMLPullParser.set_element_class_lookup"]], "set_element_class_lookup() (lxml.etree._feedparser method)": [[7, "lxml.etree._FeedParser.set_element_class_lookup"]], "set_element_class_lookup() (lxml.etree.iterparse method)": [[7, "lxml.etree.iterparse.set_element_class_lookup"]], "set_fallback() (lxml.etree.attributebasedelementclasslookup method)": [[7, "lxml.etree.AttributeBasedElementClassLookup.set_fallback"]], "set_fallback() (lxml.etree.customelementclasslookup method)": [[7, "lxml.etree.CustomElementClassLookup.set_fallback"]], "set_fallback() (lxml.etree.elementnamespaceclasslookup method)": [[7, "lxml.etree.ElementNamespaceClassLookup.set_fallback"]], "set_fallback() (lxml.etree.fallbackelementclasslookup method)": [[7, "lxml.etree.FallbackElementClassLookup.set_fallback"]], "set_fallback() (lxml.etree.parserbasedelementclasslookup method)": [[7, "lxml.etree.ParserBasedElementClassLookup.set_fallback"]], "set_fallback() (lxml.etree.pythonelementclasslookup method)": [[7, "lxml.etree.PythonElementClassLookup.set_fallback"]], "set_global_max_depth() (lxml.etree.xslt static method)": [[7, "lxml.etree.XSLT.set_global_max_depth"]], "skip_subtree() (lxml.etree.iterwalk method)": [[7, "lxml.etree.iterwalk.skip_subtree"]], "sourceline (lxml.etree.commentbase attribute)": [[7, "lxml.etree.CommentBase.sourceline"]], "sourceline (lxml.etree.elementbase attribute)": [[7, "lxml.etree.ElementBase.sourceline"]], "sourceline (lxml.etree.entitybase attribute)": [[7, "lxml.etree.EntityBase.sourceline"]], "sourceline (lxml.etree.pibase attribute)": [[7, "lxml.etree.PIBase.sourceline"]], "sourceline (lxml.etree._comment attribute)": [[7, "lxml.etree._Comment.sourceline"]], "sourceline (lxml.etree._element attribute)": [[7, "lxml.etree._Element.sourceline"]], "sourceline (lxml.etree._entity attribute)": [[7, "lxml.etree._Entity.sourceline"]], "sourceline (lxml.etree._processinginstruction attribute)": [[7, "lxml.etree._ProcessingInstruction.sourceline"]], "sourceline (lxml.etree._xsltprocessinginstruction attribute)": [[7, "lxml.etree._XSLTProcessingInstruction.sourceline"]], "split() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.split"]], "split() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.split"]], "splitlines() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.splitlines"]], "splitlines() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.splitlines"]], "standalone (lxml.etree.docinfo attribute)": [[7, "lxml.etree.DocInfo.standalone"]], "start() (lxml.etree.c14nwritertarget method)": [[7, "lxml.etree.C14NWriterTarget.start"]], "start() (lxml.etree.treebuilder method)": [[7, "lxml.etree.TreeBuilder.start"]], "start_ns() (lxml.etree.c14nwritertarget method)": [[7, "lxml.etree.C14NWriterTarget.start_ns"]], "startswith() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.startswith"]], "startswith() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.startswith"]], "strip() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.strip"]], "strip() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.strip"]], "strip_attributes() (in module lxml.etree)": [[7, "lxml.etree.strip_attributes"]], "strip_elements() (in module lxml.etree)": [[7, "lxml.etree.strip_elements"]], "strip_tags() (in module lxml.etree)": [[7, "lxml.etree.strip_tags"]], "strparam() (lxml.etree.xslt static method)": [[7, "lxml.etree.XSLT.strparam"]], "swapcase() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.swapcase"]], "swapcase() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.swapcase"]], "system_url (lxml.etree.dtd attribute)": [[7, "lxml.etree.DTD.system_url"]], "system_url (lxml.etree.docinfo attribute)": [[7, "lxml.etree.DocInfo.system_url"]], "tag (lxml.etree.commentbase attribute)": [[7, "lxml.etree.CommentBase.tag"]], "tag (lxml.etree.elementbase attribute)": [[7, "lxml.etree.ElementBase.tag"]], "tag (lxml.etree.entitybase attribute)": [[7, "lxml.etree.EntityBase.tag"]], "tag (lxml.etree.pibase attribute)": [[7, "lxml.etree.PIBase.tag"]], "tag (lxml.etree._comment attribute)": [[7, "lxml.etree._Comment.tag"]], "tag (lxml.etree._element attribute)": [[7, "lxml.etree._Element.tag"]], "tag (lxml.etree._entity attribute)": [[7, "lxml.etree._Entity.tag"]], "tag (lxml.etree._processinginstruction attribute)": [[7, "lxml.etree._ProcessingInstruction.tag"]], "tag (lxml.etree._xsltprocessinginstruction attribute)": [[7, "lxml.etree._XSLTProcessingInstruction.tag"]], "tail (lxml.etree.commentbase attribute)": [[7, "lxml.etree.CommentBase.tail"]], "tail (lxml.etree.elementbase attribute)": [[7, "lxml.etree.ElementBase.tail"]], "tail (lxml.etree.entitybase attribute)": [[7, "lxml.etree.EntityBase.tail"]], "tail (lxml.etree.pibase attribute)": [[7, "lxml.etree.PIBase.tail"]], "tail (lxml.etree._comment attribute)": [[7, "lxml.etree._Comment.tail"]], "tail (lxml.etree._element attribute)": [[7, "lxml.etree._Element.tail"]], "tail (lxml.etree._entity attribute)": [[7, "lxml.etree._Entity.tail"]], "tail (lxml.etree._processinginstruction attribute)": [[7, "lxml.etree._ProcessingInstruction.tail"]], "tail (lxml.etree._xsltprocessinginstruction attribute)": [[7, "lxml.etree._XSLTProcessingInstruction.tail"]], "target (lxml.etree.etcompatxmlparser attribute)": [[7, "lxml.etree.ETCompatXMLParser.target"]], "target (lxml.etree.htmlparser attribute)": [[7, "lxml.etree.HTMLParser.target"]], "target (lxml.etree.htmlpullparser attribute)": [[7, "lxml.etree.HTMLPullParser.target"]], "target (lxml.etree.pibase attribute)": [[7, "lxml.etree.PIBase.target"]], "target (lxml.etree.xmlparser attribute)": [[7, "lxml.etree.XMLParser.target"]], "target (lxml.etree.xmlpullparser attribute)": [[7, "lxml.etree.XMLPullParser.target"]], "target (lxml.etree._feedparser attribute)": [[7, "lxml.etree._FeedParser.target"]], "target (lxml.etree._processinginstruction attribute)": [[7, "lxml.etree._ProcessingInstruction.target"]], "target (lxml.etree._xsltprocessinginstruction attribute)": [[7, "lxml.etree._XSLTProcessingInstruction.target"]], "text (lxml.etree.commentbase attribute)": [[7, "lxml.etree.CommentBase.text"]], "text (lxml.etree.elementbase attribute)": [[7, "lxml.etree.ElementBase.text"]], "text (lxml.etree.entitybase attribute)": [[7, "lxml.etree.EntityBase.text"]], "text (lxml.etree.lxmlsyntaxerror attribute)": [[7, "lxml.etree.LxmlSyntaxError.text"]], "text (lxml.etree.pibase attribute)": [[7, "lxml.etree.PIBase.text"]], "text (lxml.etree.parseerror attribute)": [[7, "lxml.etree.ParseError.text"]], "text (lxml.etree.qname attribute)": [[7, "lxml.etree.QName.text"]], "text (lxml.etree.xmlsyntaxassertionerror attribute)": [[7, "lxml.etree.XMLSyntaxAssertionError.text"]], "text (lxml.etree.xmlsyntaxerror attribute)": [[7, "lxml.etree.XMLSyntaxError.text"]], "text (lxml.etree.xpathsyntaxerror attribute)": [[7, "lxml.etree.XPathSyntaxError.text"]], "text (lxml.etree._comment attribute)": [[7, "lxml.etree._Comment.text"]], "text (lxml.etree._element attribute)": [[7, "lxml.etree._Element.text"]], "text (lxml.etree._entity attribute)": [[7, "lxml.etree._Entity.text"]], "text (lxml.etree._processinginstruction attribute)": [[7, "lxml.etree._ProcessingInstruction.text"]], "text (lxml.etree._xsltprocessinginstruction attribute)": [[7, "lxml.etree._XSLTProcessingInstruction.text"]], "title() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.title"]], "title() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.title"]], "tostring() (in module lxml.etree)": [[7, "lxml.etree.tostring"]], "tostring() (lxml.etree.xslt method)": [[7, "lxml.etree.XSLT.tostring"]], "tostringlist() (in module lxml.etree)": [[7, "lxml.etree.tostringlist"]], "tounicode() (in module lxml.etree)": [[7, "lxml.etree.tounicode"]], "translate() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.translate"]], "translate() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.translate"]], "type (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.type"]], "type_name (lxml.etree._logentry attribute)": [[7, "lxml.etree._LogEntry.type_name"]], "update() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.update"]], "upper() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.upper"]], "upper() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.upper"]], "use_global_python_log() (in module lxml.etree)": [[7, "lxml.etree.use_global_python_log"]], "validate() (lxml.etree.dtd method)": [[7, "lxml.etree.DTD.validate"]], "validate() (lxml.etree.relaxng method)": [[7, "lxml.etree.RelaxNG.validate"]], "validate() (lxml.etree.schematron method)": [[7, "lxml.etree.Schematron.validate"]], "validate() (lxml.etree.xmlschema method)": [[7, "lxml.etree.XMLSchema.validate"]], "validate() (lxml.etree._validator method)": [[7, "lxml.etree._Validator.validate"]], "values() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.values"]], "values() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.values"]], "values() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.values"]], "values() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.values"]], "values() (lxml.etree._attrib method)": [[7, "lxml.etree._Attrib.values"]], "values() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.values"]], "values() (lxml.etree._element method)": [[7, "lxml.etree._Element.values"]], "values() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.values"]], "values() (lxml.etree._iddict method)": [[7, "lxml.etree._IDDict.values"]], "values() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.values"]], "values() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.values"]], "version (lxml.etree.etcompatxmlparser attribute)": [[7, "lxml.etree.ETCompatXMLParser.version"]], "version (lxml.etree.htmlparser attribute)": [[7, "lxml.etree.HTMLParser.version"]], "version (lxml.etree.htmlpullparser attribute)": [[7, "lxml.etree.HTMLPullParser.version"]], "version (lxml.etree.xmlparser attribute)": [[7, "lxml.etree.XMLParser.version"]], "version (lxml.etree.xmlpullparser attribute)": [[7, "lxml.etree.XMLPullParser.version"]], "version (lxml.etree._feedparser attribute)": [[7, "lxml.etree._FeedParser.version"]], "version (lxml.etree.iterparse attribute)": [[7, "lxml.etree.iterparse.version"]], "with_traceback() (lxml.etree.c14nerror method)": [[7, "lxml.etree.C14NError.with_traceback"]], "with_traceback() (lxml.etree.dtderror method)": [[7, "lxml.etree.DTDError.with_traceback"]], "with_traceback() (lxml.etree.dtdparseerror method)": [[7, "lxml.etree.DTDParseError.with_traceback"]], "with_traceback() (lxml.etree.dtdvalidateerror method)": [[7, "lxml.etree.DTDValidateError.with_traceback"]], "with_traceback() (lxml.etree.documentinvalid method)": [[7, "lxml.etree.DocumentInvalid.with_traceback"]], "with_traceback() (lxml.etree.error method)": [[7, "lxml.etree.Error.with_traceback"]], "with_traceback() (lxml.etree.lxmlerror method)": [[7, "lxml.etree.LxmlError.with_traceback"]], "with_traceback() (lxml.etree.lxmlregistryerror method)": [[7, "lxml.etree.LxmlRegistryError.with_traceback"]], "with_traceback() (lxml.etree.lxmlsyntaxerror method)": [[7, "lxml.etree.LxmlSyntaxError.with_traceback"]], "with_traceback() (lxml.etree.namespaceregistryerror method)": [[7, "lxml.etree.NamespaceRegistryError.with_traceback"]], "with_traceback() (lxml.etree.parseerror method)": [[7, "lxml.etree.ParseError.with_traceback"]], "with_traceback() (lxml.etree.parsererror method)": [[7, "lxml.etree.ParserError.with_traceback"]], "with_traceback() (lxml.etree.relaxngerror method)": [[7, "lxml.etree.RelaxNGError.with_traceback"]], "with_traceback() (lxml.etree.relaxngparseerror method)": [[7, "lxml.etree.RelaxNGParseError.with_traceback"]], "with_traceback() (lxml.etree.relaxngvalidateerror method)": [[7, "lxml.etree.RelaxNGValidateError.with_traceback"]], "with_traceback() (lxml.etree.schematronerror method)": [[7, "lxml.etree.SchematronError.with_traceback"]], "with_traceback() (lxml.etree.schematronparseerror method)": [[7, "lxml.etree.SchematronParseError.with_traceback"]], "with_traceback() (lxml.etree.schematronvalidateerror method)": [[7, "lxml.etree.SchematronValidateError.with_traceback"]], "with_traceback() (lxml.etree.serialisationerror method)": [[7, "lxml.etree.SerialisationError.with_traceback"]], "with_traceback() (lxml.etree.xincludeerror method)": [[7, "lxml.etree.XIncludeError.with_traceback"]], "with_traceback() (lxml.etree.xmlschemaerror method)": [[7, "lxml.etree.XMLSchemaError.with_traceback"]], "with_traceback() (lxml.etree.xmlschemaparseerror method)": [[7, "lxml.etree.XMLSchemaParseError.with_traceback"]], "with_traceback() (lxml.etree.xmlschemavalidateerror method)": [[7, "lxml.etree.XMLSchemaValidateError.with_traceback"]], "with_traceback() (lxml.etree.xmlsyntaxassertionerror method)": [[7, "lxml.etree.XMLSyntaxAssertionError.with_traceback"]], "with_traceback() (lxml.etree.xmlsyntaxerror method)": [[7, "lxml.etree.XMLSyntaxError.with_traceback"]], "with_traceback() (lxml.etree.xpatherror method)": [[7, "lxml.etree.XPathError.with_traceback"]], "with_traceback() (lxml.etree.xpathevalerror method)": [[7, "lxml.etree.XPathEvalError.with_traceback"]], "with_traceback() (lxml.etree.xpathfunctionerror method)": [[7, "lxml.etree.XPathFunctionError.with_traceback"]], "with_traceback() (lxml.etree.xpathresulterror method)": [[7, "lxml.etree.XPathResultError.with_traceback"]], "with_traceback() (lxml.etree.xpathsyntaxerror method)": [[7, "lxml.etree.XPathSyntaxError.with_traceback"]], "with_traceback() (lxml.etree.xsltapplyerror method)": [[7, "lxml.etree.XSLTApplyError.with_traceback"]], "with_traceback() (lxml.etree.xslterror method)": [[7, "lxml.etree.XSLTError.with_traceback"]], "with_traceback() (lxml.etree.xsltextensionerror method)": [[7, "lxml.etree.XSLTExtensionError.with_traceback"]], "with_traceback() (lxml.etree.xsltparseerror method)": [[7, "lxml.etree.XSLTParseError.with_traceback"]], "with_traceback() (lxml.etree.xsltsaveerror method)": [[7, "lxml.etree.XSLTSaveError.with_traceback"]], "with_traceback() (lxml.etree._targetparserresult method)": [[7, "lxml.etree._TargetParserResult.with_traceback"]], "write() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.write"]], "write() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.write"]], "write_c14n() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.write_c14n"]], "write_c14n() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.write_c14n"]], "write_output() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.write_output"]], "xinclude() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.xinclude"]], "xinclude() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.xinclude"]], "xml_version (lxml.etree.docinfo attribute)": [[7, "lxml.etree.DocInfo.xml_version"]], "xmlfile (class in lxml.etree)": [[7, "lxml.etree.xmlfile"]], "xmlschema() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.xmlschema"]], "xmlschema() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.xmlschema"]], "xpath() (lxml.etree.commentbase method)": [[7, "lxml.etree.CommentBase.xpath"]], "xpath() (lxml.etree.elementbase method)": [[7, "lxml.etree.ElementBase.xpath"]], "xpath() (lxml.etree.entitybase method)": [[7, "lxml.etree.EntityBase.xpath"]], "xpath() (lxml.etree.pibase method)": [[7, "lxml.etree.PIBase.xpath"]], "xpath() (lxml.etree._comment method)": [[7, "lxml.etree._Comment.xpath"]], "xpath() (lxml.etree._element method)": [[7, "lxml.etree._Element.xpath"]], "xpath() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.xpath"]], "xpath() (lxml.etree._entity method)": [[7, "lxml.etree._Entity.xpath"]], "xpath() (lxml.etree._processinginstruction method)": [[7, "lxml.etree._ProcessingInstruction.xpath"]], "xpath() (lxml.etree._xsltprocessinginstruction method)": [[7, "lxml.etree._XSLTProcessingInstruction.xpath"]], "xpath() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.xpath"]], "xslt() (lxml.etree._elementtree method)": [[7, "lxml.etree._ElementTree.xslt"]], "xslt() (lxml.etree._xsltresulttree method)": [[7, "lxml.etree._XSLTResultTree.xslt"]], "xslt_profile (lxml.etree._xsltresulttree attribute)": [[7, "lxml.etree._XSLTResultTree.xslt_profile"]], "zfill() (lxml.etree._elementstringresult method)": [[7, "lxml.etree._ElementStringResult.zfill"]], "zfill() (lxml.etree._elementunicoderesult method)": [[7, "lxml.etree._ElementUnicodeResult.zfill"]], "checkboxgroup (class in lxml.html)": [[8, "lxml.html.CheckboxGroup"]], "checkboxvalues (class in lxml.html)": [[8, "lxml.html.CheckboxValues"]], "classes (class in lxml.html)": [[8, "lxml.html.Classes"]], "element() (in module lxml.html)": [[8, "lxml.html.Element"]], "fieldsdict (class in lxml.html)": [[8, "lxml.html.FieldsDict"]], "formelement (class in lxml.html)": [[8, "lxml.html.FormElement"]], "htmlparser (class in lxml.html)": [[8, "lxml.html.HTMLParser"]], "htmlcomment (class in lxml.html)": [[8, "lxml.html.HtmlComment"]], "htmlelement (class in lxml.html)": [[8, "lxml.html.HtmlElement"]], "htmlelementclasslookup (class in lxml.html)": [[8, "lxml.html.HtmlElementClassLookup"]], "htmlentity (class in lxml.html)": [[8, "lxml.html.HtmlEntity"]], "htmlmixin (class in lxml.html)": [[8, "lxml.html.HtmlMixin"]], "htmlprocessinginstruction (class in lxml.html)": [[8, "lxml.html.HtmlProcessingInstruction"]], "inputelement (class in lxml.html)": [[8, "lxml.html.InputElement"]], "inputgetter (class in lxml.html)": [[8, "lxml.html.InputGetter"]], "inputmixin (class in lxml.html)": [[8, "lxml.html.InputMixin"]], "labelelement (class in lxml.html)": [[8, "lxml.html.LabelElement"]], "multipleselectoptions (class in lxml.html)": [[8, "lxml.html.MultipleSelectOptions"]], "radiogroup (class in lxml.html)": [[8, "lxml.html.RadioGroup"]], "selectelement (class in lxml.html)": [[8, "lxml.html.SelectElement"]], "textareaelement (class in lxml.html)": [[8, "lxml.html.TextareaElement"]], "xhtmlparser (class in lxml.html)": [[8, "lxml.html.XHTMLParser"]], "_methodfunc (class in lxml.html)": [[8, "lxml.html._MethodFunc"]], "__bytes_replace_meta_content_type() (in module lxml.html)": [[8, "lxml.html.__bytes_replace_meta_content_type"]], "__fix_docstring() (in module lxml.html)": [[8, "lxml.html.__fix_docstring"]], "__str_replace_meta_content_type() (in module lxml.html)": [[8, "lxml.html.__str_replace_meta_content_type"]], "_abc_impl (lxml.html.checkboxvalues attribute)": [[8, "lxml.html.CheckboxValues._abc_impl"]], "_abc_impl (lxml.html.classes attribute)": [[8, "lxml.html.Classes._abc_impl"]], "_abc_impl (lxml.html.fieldsdict attribute)": [[8, "lxml.html.FieldsDict._abc_impl"]], "_abc_impl (lxml.html.multipleselectoptions attribute)": [[8, "lxml.html.MultipleSelectOptions._abc_impl"]], "_contains_block_level_tag() (in module lxml.html)": [[8, "lxml.html._contains_block_level_tag"]], "_default_element_classes (lxml.html.htmlelementclasslookup attribute)": [[8, "lxml.html.HtmlElementClassLookup._default_element_classes"]], "_element_name() (in module lxml.html)": [[8, "lxml.html._element_name"]], "_from_iterable() (lxml.html.checkboxvalues class method)": [[8, "lxml.html.CheckboxValues._from_iterable"]], "_from_iterable() (lxml.html.classes class method)": [[8, "lxml.html.Classes._from_iterable"]], "_from_iterable() (lxml.html.multipleselectoptions class method)": [[8, "lxml.html.MultipleSelectOptions._from_iterable"]], "_hash() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues._hash"]], "_hash() (lxml.html.classes method)": [[8, "lxml.html.Classes._hash"]], "_hash() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions._hash"]], "_init() (lxml.html.formelement method)": [[8, "lxml.html.FormElement._init"]], "_init() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment._init"]], "_init() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement._init"]], "_init() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity._init"]], "_init() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction._init"]], "_init() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement._init"]], "_init() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement._init"]], "_init() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement._init"]], "_init() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement._init"]], "_iter_css_imports() (in module lxml.html)": [[8, "lxml.html._iter_css_imports"]], "_iter_css_urls() (in module lxml.html)": [[8, "lxml.html._iter_css_urls"]], "_looks_like_full_html_bytes() (in module lxml.html)": [[8, "lxml.html._looks_like_full_html_bytes"]], "_looks_like_full_html_unicode() (in module lxml.html)": [[8, "lxml.html._looks_like_full_html_unicode"]], "_name() (lxml.html.formelement method)": [[8, "lxml.html.FormElement._name"]], "_nons() (in module lxml.html)": [[8, "lxml.html._nons"]], "_parse_meta_refresh_url() (in module lxml.html)": [[8, "lxml.html._parse_meta_refresh_url"]], "_transform_result() (in module lxml.html)": [[8, "lxml.html._transform_result"]], "_unquote_match() (in module lxml.html)": [[8, "lxml.html._unquote_match"]], "action (lxml.html.formelement property)": [[8, "lxml.html.FormElement.action"]], "add() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.add"]], "add() (lxml.html.classes method)": [[8, "lxml.html.Classes.add"]], "add() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.add"]], "addnext() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.addnext"]], "addnext() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.addnext"]], "addnext() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.addnext"]], "addnext() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.addnext"]], "addnext() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.addnext"]], "addnext() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.addnext"]], "addnext() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.addnext"]], "addnext() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.addnext"]], "addnext() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.addnext"]], "addprevious() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.addprevious"]], "addprevious() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.addprevious"]], "addprevious() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.addprevious"]], "addprevious() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.addprevious"]], "addprevious() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.addprevious"]], "addprevious() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.addprevious"]], "addprevious() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.addprevious"]], "addprevious() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.addprevious"]], "addprevious() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.addprevious"]], "append() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.append"]], "append() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.append"]], "append() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.append"]], "append() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.append"]], "append() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.append"]], "append() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.append"]], "append() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.append"]], "append() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.append"]], "append() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.append"]], "append() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.append"]], "append() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.append"]], "attrib (lxml.html.formelement attribute)": [[8, "lxml.html.FormElement.attrib"]], "attrib (lxml.html.htmlcomment attribute)": [[8, "lxml.html.HtmlComment.attrib"]], "attrib (lxml.html.htmlelement attribute)": [[8, "lxml.html.HtmlElement.attrib"]], "attrib (lxml.html.htmlentity attribute)": [[8, "lxml.html.HtmlEntity.attrib"]], "attrib (lxml.html.htmlprocessinginstruction attribute)": [[8, "lxml.html.HtmlProcessingInstruction.attrib"]], "attrib (lxml.html.inputelement attribute)": [[8, "lxml.html.InputElement.attrib"]], "attrib (lxml.html.labelelement attribute)": [[8, "lxml.html.LabelElement.attrib"]], "attrib (lxml.html.selectelement attribute)": [[8, "lxml.html.SelectElement.attrib"]], "attrib (lxml.html.textareaelement attribute)": [[8, "lxml.html.TextareaElement.attrib"]], "base (lxml.html.formelement attribute)": [[8, "lxml.html.FormElement.base"]], "base (lxml.html.htmlcomment attribute)": [[8, "lxml.html.HtmlComment.base"]], "base (lxml.html.htmlelement attribute)": [[8, "lxml.html.HtmlElement.base"]], "base (lxml.html.htmlentity attribute)": [[8, "lxml.html.HtmlEntity.base"]], "base (lxml.html.htmlprocessinginstruction attribute)": [[8, "lxml.html.HtmlProcessingInstruction.base"]], "base (lxml.html.inputelement attribute)": [[8, "lxml.html.InputElement.base"]], "base (lxml.html.labelelement attribute)": [[8, "lxml.html.LabelElement.base"]], "base (lxml.html.selectelement attribute)": [[8, "lxml.html.SelectElement.base"]], "base (lxml.html.textareaelement attribute)": [[8, "lxml.html.TextareaElement.base"]], "base_url (lxml.html.formelement property)": [[8, "lxml.html.FormElement.base_url"]], "base_url (lxml.html.htmlcomment property)": [[8, "lxml.html.HtmlComment.base_url"]], "base_url (lxml.html.htmlelement property)": [[8, "lxml.html.HtmlElement.base_url"]], "base_url (lxml.html.htmlentity property)": [[8, "lxml.html.HtmlEntity.base_url"]], "base_url (lxml.html.htmlmixin property)": [[8, "lxml.html.HtmlMixin.base_url"]], "base_url (lxml.html.htmlprocessinginstruction property)": [[8, "lxml.html.HtmlProcessingInstruction.base_url"]], "base_url (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.base_url"]], "base_url (lxml.html.labelelement property)": [[8, "lxml.html.LabelElement.base_url"]], "base_url (lxml.html.selectelement property)": [[8, "lxml.html.SelectElement.base_url"]], "base_url (lxml.html.textareaelement property)": [[8, "lxml.html.TextareaElement.base_url"]], "body (lxml.html.formelement property)": [[8, "lxml.html.FormElement.body"]], "body (lxml.html.htmlcomment property)": [[8, "lxml.html.HtmlComment.body"]], "body (lxml.html.htmlelement property)": [[8, "lxml.html.HtmlElement.body"]], "body (lxml.html.htmlentity property)": [[8, "lxml.html.HtmlEntity.body"]], "body (lxml.html.htmlmixin property)": [[8, "lxml.html.HtmlMixin.body"]], "body (lxml.html.htmlprocessinginstruction property)": [[8, "lxml.html.HtmlProcessingInstruction.body"]], "body (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.body"]], "body (lxml.html.labelelement property)": [[8, "lxml.html.LabelElement.body"]], "body (lxml.html.selectelement property)": [[8, "lxml.html.SelectElement.body"]], "body (lxml.html.textareaelement property)": [[8, "lxml.html.TextareaElement.body"]], "checkable (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.checkable"]], "checked (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.checked"]], "classes (lxml.html.formelement property)": [[8, "lxml.html.FormElement.classes"]], "classes (lxml.html.htmlcomment property)": [[8, "lxml.html.HtmlComment.classes"]], "classes (lxml.html.htmlelement property)": [[8, "lxml.html.HtmlElement.classes"]], "classes (lxml.html.htmlentity property)": [[8, "lxml.html.HtmlEntity.classes"]], "classes (lxml.html.htmlmixin property)": [[8, "lxml.html.HtmlMixin.classes"]], "classes (lxml.html.htmlprocessinginstruction property)": [[8, "lxml.html.HtmlProcessingInstruction.classes"]], "classes (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.classes"]], "classes (lxml.html.labelelement property)": [[8, "lxml.html.LabelElement.classes"]], "classes (lxml.html.selectelement property)": [[8, "lxml.html.SelectElement.classes"]], "classes (lxml.html.textareaelement property)": [[8, "lxml.html.TextareaElement.classes"]], "clear() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.clear"]], "clear() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.clear"]], "clear() (lxml.html.classes method)": [[8, "lxml.html.Classes.clear"]], "clear() (lxml.html.fieldsdict method)": [[8, "lxml.html.FieldsDict.clear"]], "clear() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.clear"]], "clear() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.clear"]], "clear() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.clear"]], "clear() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.clear"]], "clear() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.clear"]], "clear() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.clear"]], "clear() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.clear"]], "clear() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.clear"]], "clear() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.clear"]], "clear() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.clear"]], "clear() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.clear"]], "close() (lxml.html.htmlparser method)": [[8, "lxml.html.HTMLParser.close"]], "close() (lxml.html.xhtmlparser method)": [[8, "lxml.html.XHTMLParser.close"]], "copy() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.copy"]], "copy() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.copy"]], "copy() (lxml.html.htmlparser method)": [[8, "lxml.html.HTMLParser.copy"]], "copy() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.copy"]], "copy() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.copy"]], "copy() (lxml.html.xhtmlparser method)": [[8, "lxml.html.XHTMLParser.copy"]], "count() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.count"]], "count() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.count"]], "cssselect() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.cssselect"]], "cssselect() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.cssselect"]], "cssselect() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.cssselect"]], "cssselect() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.cssselect"]], "cssselect() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.cssselect"]], "cssselect() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.cssselect"]], "cssselect() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.cssselect"]], "cssselect() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.cssselect"]], "cssselect() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.cssselect"]], "cssselect() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.cssselect"]], "difference() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.difference"]], "difference() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.difference"]], "difference_update() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.difference_update"]], "difference_update() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.difference_update"]], "discard() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.discard"]], "discard() (lxml.html.classes method)": [[8, "lxml.html.Classes.discard"]], "discard() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.discard"]], "document_fromstring() (in module lxml.html)": [[8, "lxml.html.document_fromstring"]], "drop_tag() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.drop_tag"]], "drop_tag() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.drop_tag"]], "drop_tag() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.drop_tag"]], "drop_tag() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.drop_tag"]], "drop_tag() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.drop_tag"]], "drop_tag() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.drop_tag"]], "drop_tag() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.drop_tag"]], "drop_tag() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.drop_tag"]], "drop_tag() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.drop_tag"]], "drop_tag() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.drop_tag"]], "drop_tree() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.drop_tree"]], "drop_tree() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.drop_tree"]], "drop_tree() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.drop_tree"]], "drop_tree() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.drop_tree"]], "drop_tree() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.drop_tree"]], "drop_tree() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.drop_tree"]], "drop_tree() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.drop_tree"]], "drop_tree() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.drop_tree"]], "drop_tree() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.drop_tree"]], "drop_tree() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.drop_tree"]], "error_log (lxml.html.htmlparser attribute)": [[8, "lxml.html.HTMLParser.error_log"]], "error_log (lxml.html.xhtmlparser attribute)": [[8, "lxml.html.XHTMLParser.error_log"]], "extend() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.extend"]], "extend() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.extend"]], "extend() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.extend"]], "extend() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.extend"]], "extend() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.extend"]], "extend() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.extend"]], "extend() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.extend"]], "extend() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.extend"]], "extend() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.extend"]], "extend() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.extend"]], "extend() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.extend"]], "fallback (lxml.html.htmlelementclasslookup attribute)": [[8, "lxml.html.HtmlElementClassLookup.fallback"]], "feed() (lxml.html.htmlparser method)": [[8, "lxml.html.HTMLParser.feed"]], "feed() (lxml.html.xhtmlparser method)": [[8, "lxml.html.XHTMLParser.feed"]], "feed_error_log (lxml.html.htmlparser attribute)": [[8, "lxml.html.HTMLParser.feed_error_log"]], "feed_error_log (lxml.html.xhtmlparser attribute)": [[8, "lxml.html.XHTMLParser.feed_error_log"]], "fields (lxml.html.formelement property)": [[8, "lxml.html.FormElement.fields"]], "find() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.find"]], "find() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.find"]], "find() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.find"]], "find() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.find"]], "find() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.find"]], "find() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.find"]], "find() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.find"]], "find() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.find"]], "find() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.find"]], "find_class() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.find_class"]], "find_class() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.find_class"]], "find_class() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.find_class"]], "find_class() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.find_class"]], "find_class() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.find_class"]], "find_class() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.find_class"]], "find_class() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.find_class"]], "find_class() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.find_class"]], "find_class() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.find_class"]], "find_class() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.find_class"]], "find_rel_links() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.find_rel_links"]], "find_rel_links() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.find_rel_links"]], "find_rel_links() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.find_rel_links"]], "find_rel_links() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.find_rel_links"]], "find_rel_links() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.find_rel_links"]], "find_rel_links() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.find_rel_links"]], "find_rel_links() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.find_rel_links"]], "find_rel_links() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.find_rel_links"]], "find_rel_links() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.find_rel_links"]], "find_rel_links() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.find_rel_links"]], "findall() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.findall"]], "findall() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.findall"]], "findall() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.findall"]], "findall() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.findall"]], "findall() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.findall"]], "findall() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.findall"]], "findall() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.findall"]], "findall() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.findall"]], "findall() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.findall"]], "findtext() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.findtext"]], "findtext() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.findtext"]], "findtext() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.findtext"]], "findtext() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.findtext"]], "findtext() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.findtext"]], "findtext() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.findtext"]], "findtext() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.findtext"]], "findtext() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.findtext"]], "findtext() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.findtext"]], "for_element (lxml.html.labelelement property)": [[8, "lxml.html.LabelElement.for_element"]], "form_values() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.form_values"]], "forms (lxml.html.formelement property)": [[8, "lxml.html.FormElement.forms"]], "forms (lxml.html.htmlcomment property)": [[8, "lxml.html.HtmlComment.forms"]], "forms (lxml.html.htmlelement property)": [[8, "lxml.html.HtmlElement.forms"]], "forms (lxml.html.htmlentity property)": [[8, "lxml.html.HtmlEntity.forms"]], "forms (lxml.html.htmlmixin property)": [[8, "lxml.html.HtmlMixin.forms"]], "forms (lxml.html.htmlprocessinginstruction property)": [[8, "lxml.html.HtmlProcessingInstruction.forms"]], "forms (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.forms"]], "forms (lxml.html.labelelement property)": [[8, "lxml.html.LabelElement.forms"]], "forms (lxml.html.selectelement property)": [[8, "lxml.html.SelectElement.forms"]], "forms (lxml.html.textareaelement property)": [[8, "lxml.html.TextareaElement.forms"]], "fragment_fromstring() (in module lxml.html)": [[8, "lxml.html.fragment_fromstring"]], "fragments_fromstring() (in module lxml.html)": [[8, "lxml.html.fragments_fromstring"]], "fromstring() (in module lxml.html)": [[8, "lxml.html.fromstring"]], "get() (lxml.html.fieldsdict method)": [[8, "lxml.html.FieldsDict.get"]], "get() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.get"]], "get() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.get"]], "get() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.get"]], "get() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.get"]], "get() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.get"]], "get() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.get"]], "get() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.get"]], "get() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.get"]], "get() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.get"]], "get_element_by_id() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.get_element_by_id"]], "get_element_by_id() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.get_element_by_id"]], "get_element_by_id() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.get_element_by_id"]], "get_element_by_id() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.get_element_by_id"]], "get_element_by_id() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.get_element_by_id"]], "get_element_by_id() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.get_element_by_id"]], "get_element_by_id() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.get_element_by_id"]], "get_element_by_id() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.get_element_by_id"]], "get_element_by_id() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.get_element_by_id"]], "get_element_by_id() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.get_element_by_id"]], "getchildren() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.getchildren"]], "getchildren() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.getchildren"]], "getchildren() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.getchildren"]], "getchildren() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.getchildren"]], "getchildren() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.getchildren"]], "getchildren() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.getchildren"]], "getchildren() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.getchildren"]], "getchildren() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.getchildren"]], "getchildren() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.getchildren"]], "getiterator() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.getiterator"]], "getiterator() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.getiterator"]], "getiterator() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.getiterator"]], "getiterator() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.getiterator"]], "getiterator() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.getiterator"]], "getiterator() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.getiterator"]], "getiterator() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.getiterator"]], "getiterator() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.getiterator"]], "getiterator() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.getiterator"]], "getnext() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.getnext"]], "getnext() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.getnext"]], "getnext() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.getnext"]], "getnext() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.getnext"]], "getnext() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.getnext"]], "getnext() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.getnext"]], "getnext() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.getnext"]], "getnext() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.getnext"]], "getnext() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.getnext"]], "getparent() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.getparent"]], "getparent() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.getparent"]], "getparent() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.getparent"]], "getparent() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.getparent"]], "getparent() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.getparent"]], "getparent() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.getparent"]], "getparent() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.getparent"]], "getparent() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.getparent"]], "getparent() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.getparent"]], "getprevious() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.getprevious"]], "getprevious() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.getprevious"]], "getprevious() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.getprevious"]], "getprevious() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.getprevious"]], "getprevious() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.getprevious"]], "getprevious() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.getprevious"]], "getprevious() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.getprevious"]], "getprevious() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.getprevious"]], "getprevious() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.getprevious"]], "getroottree() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.getroottree"]], "getroottree() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.getroottree"]], "getroottree() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.getroottree"]], "getroottree() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.getroottree"]], "getroottree() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.getroottree"]], "getroottree() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.getroottree"]], "getroottree() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.getroottree"]], "getroottree() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.getroottree"]], "getroottree() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.getroottree"]], "head (lxml.html.formelement property)": [[8, "lxml.html.FormElement.head"]], "head (lxml.html.htmlcomment property)": [[8, "lxml.html.HtmlComment.head"]], "head (lxml.html.htmlelement property)": [[8, "lxml.html.HtmlElement.head"]], "head (lxml.html.htmlentity property)": [[8, "lxml.html.HtmlEntity.head"]], "head (lxml.html.htmlmixin property)": [[8, "lxml.html.HtmlMixin.head"]], "head (lxml.html.htmlprocessinginstruction property)": [[8, "lxml.html.HtmlProcessingInstruction.head"]], "head (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.head"]], "head (lxml.html.labelelement property)": [[8, "lxml.html.LabelElement.head"]], "head (lxml.html.selectelement property)": [[8, "lxml.html.SelectElement.head"]], "head (lxml.html.textareaelement property)": [[8, "lxml.html.TextareaElement.head"]], "html_to_xhtml() (in module lxml.html)": [[8, "lxml.html.html_to_xhtml"]], "index() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.index"]], "index() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.index"]], "index() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.index"]], "index() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.index"]], "index() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.index"]], "index() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.index"]], "index() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.index"]], "index() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.index"]], "index() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.index"]], "index() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.index"]], "index() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.index"]], "inputs (lxml.html.formelement property)": [[8, "lxml.html.FormElement.inputs"]], "insert() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.insert"]], "insert() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.insert"]], "insert() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.insert"]], "insert() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.insert"]], "insert() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.insert"]], "insert() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.insert"]], "insert() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.insert"]], "insert() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.insert"]], "insert() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.insert"]], "insert() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.insert"]], "insert() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.insert"]], "intersection() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.intersection"]], "intersection() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.intersection"]], "intersection_update() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.intersection_update"]], "intersection_update() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.intersection_update"]], "isdisjoint() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.isdisjoint"]], "isdisjoint() (lxml.html.classes method)": [[8, "lxml.html.Classes.isdisjoint"]], "isdisjoint() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.isdisjoint"]], "issubset() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.issubset"]], "issubset() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.issubset"]], "issuperset() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.issuperset"]], "issuperset() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.issuperset"]], "items() (lxml.html.fieldsdict method)": [[8, "lxml.html.FieldsDict.items"]], "items() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.items"]], "items() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.items"]], "items() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.items"]], "items() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.items"]], "items() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.items"]], "items() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.items"]], "items() (lxml.html.inputgetter method)": [[8, "lxml.html.InputGetter.items"]], "items() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.items"]], "items() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.items"]], "items() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.items"]], "iter() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.iter"]], "iter() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.iter"]], "iter() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.iter"]], "iter() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.iter"]], "iter() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.iter"]], "iter() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.iter"]], "iter() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.iter"]], "iter() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.iter"]], "iter() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.iter"]], "iterancestors() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.iterancestors"]], "iterancestors() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.iterancestors"]], "iterancestors() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.iterancestors"]], "iterancestors() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.iterancestors"]], "iterancestors() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.iterancestors"]], "iterancestors() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.iterancestors"]], "iterancestors() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.iterancestors"]], "iterancestors() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.iterancestors"]], "iterancestors() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.iterancestors"]], "iterchildren() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.iterchildren"]], "iterchildren() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.iterchildren"]], "iterchildren() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.iterchildren"]], "iterchildren() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.iterchildren"]], "iterchildren() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.iterchildren"]], "iterchildren() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.iterchildren"]], "iterchildren() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.iterchildren"]], "iterchildren() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.iterchildren"]], "iterchildren() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.iterchildren"]], "iterdescendants() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.iterdescendants"]], "iterdescendants() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.iterdescendants"]], "iterdescendants() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.iterdescendants"]], "iterdescendants() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.iterdescendants"]], "iterdescendants() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.iterdescendants"]], "iterdescendants() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.iterdescendants"]], "iterdescendants() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.iterdescendants"]], "iterdescendants() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.iterdescendants"]], "iterdescendants() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.iterdescendants"]], "iterfind() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.iterfind"]], "iterfind() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.iterfind"]], "iterfind() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.iterfind"]], "iterfind() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.iterfind"]], "iterfind() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.iterfind"]], "iterfind() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.iterfind"]], "iterfind() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.iterfind"]], "iterfind() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.iterfind"]], "iterfind() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.iterfind"]], "iterlinks() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.iterlinks"]], "iterlinks() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.iterlinks"]], "iterlinks() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.iterlinks"]], "iterlinks() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.iterlinks"]], "iterlinks() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.iterlinks"]], "iterlinks() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.iterlinks"]], "iterlinks() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.iterlinks"]], "iterlinks() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.iterlinks"]], "iterlinks() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.iterlinks"]], "iterlinks() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.iterlinks"]], "itersiblings() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.itersiblings"]], "itersiblings() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.itersiblings"]], "itersiblings() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.itersiblings"]], "itersiblings() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.itersiblings"]], "itersiblings() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.itersiblings"]], "itersiblings() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.itersiblings"]], "itersiblings() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.itersiblings"]], "itersiblings() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.itersiblings"]], "itersiblings() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.itersiblings"]], "itertext() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.itertext"]], "itertext() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.itertext"]], "itertext() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.itertext"]], "itertext() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.itertext"]], "itertext() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.itertext"]], "itertext() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.itertext"]], "itertext() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.itertext"]], "itertext() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.itertext"]], "itertext() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.itertext"]], "keys() (lxml.html.fieldsdict method)": [[8, "lxml.html.FieldsDict.keys"]], "keys() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.keys"]], "keys() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.keys"]], "keys() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.keys"]], "keys() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.keys"]], "keys() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.keys"]], "keys() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.keys"]], "keys() (lxml.html.inputgetter method)": [[8, "lxml.html.InputGetter.keys"]], "keys() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.keys"]], "keys() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.keys"]], "keys() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.keys"]], "label (lxml.html.formelement property)": [[8, "lxml.html.FormElement.label"]], "label (lxml.html.htmlcomment property)": [[8, "lxml.html.HtmlComment.label"]], "label (lxml.html.htmlelement property)": [[8, "lxml.html.HtmlElement.label"]], "label (lxml.html.htmlentity property)": [[8, "lxml.html.HtmlEntity.label"]], "label (lxml.html.htmlmixin property)": [[8, "lxml.html.HtmlMixin.label"]], "label (lxml.html.htmlprocessinginstruction property)": [[8, "lxml.html.HtmlProcessingInstruction.label"]], "label (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.label"]], "label (lxml.html.labelelement property)": [[8, "lxml.html.LabelElement.label"]], "label (lxml.html.selectelement property)": [[8, "lxml.html.SelectElement.label"]], "label (lxml.html.textareaelement property)": [[8, "lxml.html.TextareaElement.label"]], "lookup() (lxml.html.htmlelementclasslookup method)": [[8, "lxml.html.HtmlElementClassLookup.lookup"]], "lxml.html": [[8, "module-lxml.html"]], "make_links_absolute() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.make_links_absolute"]], "make_links_absolute() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.make_links_absolute"]], "make_links_absolute() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.make_links_absolute"]], "make_links_absolute() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.make_links_absolute"]], "make_links_absolute() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.make_links_absolute"]], "make_links_absolute() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.make_links_absolute"]], "make_links_absolute() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.make_links_absolute"]], "make_links_absolute() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.make_links_absolute"]], "make_links_absolute() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.make_links_absolute"]], "make_links_absolute() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.make_links_absolute"]], "makeelement() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.makeelement"]], "makeelement() (lxml.html.htmlparser method)": [[8, "lxml.html.HTMLParser.makeelement"]], "makeelement() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.makeelement"]], "makeelement() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.makeelement"]], "makeelement() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.makeelement"]], "makeelement() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.makeelement"]], "makeelement() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.makeelement"]], "makeelement() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.makeelement"]], "makeelement() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.makeelement"]], "makeelement() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.makeelement"]], "makeelement() (lxml.html.xhtmlparser method)": [[8, "lxml.html.XHTMLParser.makeelement"]], "method (lxml.html.formelement property)": [[8, "lxml.html.FormElement.method"]], "multiple (lxml.html.selectelement property)": [[8, "lxml.html.SelectElement.multiple"]], "name (lxml.html.htmlentity attribute)": [[8, "lxml.html.HtmlEntity.name"]], "name (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.name"]], "name (lxml.html.inputmixin property)": [[8, "lxml.html.InputMixin.name"]], "name (lxml.html.selectelement property)": [[8, "lxml.html.SelectElement.name"]], "name (lxml.html.textareaelement property)": [[8, "lxml.html.TextareaElement.name"]], "nsmap (lxml.html.formelement attribute)": [[8, "lxml.html.FormElement.nsmap"]], "nsmap (lxml.html.htmlcomment attribute)": [[8, "lxml.html.HtmlComment.nsmap"]], "nsmap (lxml.html.htmlelement attribute)": [[8, "lxml.html.HtmlElement.nsmap"]], "nsmap (lxml.html.htmlentity attribute)": [[8, "lxml.html.HtmlEntity.nsmap"]], "nsmap (lxml.html.htmlprocessinginstruction attribute)": [[8, "lxml.html.HtmlProcessingInstruction.nsmap"]], "nsmap (lxml.html.inputelement attribute)": [[8, "lxml.html.InputElement.nsmap"]], "nsmap (lxml.html.labelelement attribute)": [[8, "lxml.html.LabelElement.nsmap"]], "nsmap (lxml.html.selectelement attribute)": [[8, "lxml.html.SelectElement.nsmap"]], "nsmap (lxml.html.textareaelement attribute)": [[8, "lxml.html.TextareaElement.nsmap"]], "open_http_urllib() (in module lxml.html)": [[8, "lxml.html.open_http_urllib"]], "open_in_browser() (in module lxml.html)": [[8, "lxml.html.open_in_browser"]], "options (lxml.html.multipleselectoptions property)": [[8, "lxml.html.MultipleSelectOptions.options"]], "parse() (in module lxml.html)": [[8, "lxml.html.parse"]], "pop() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.pop"]], "pop() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.pop"]], "pop() (lxml.html.classes method)": [[8, "lxml.html.Classes.pop"]], "pop() (lxml.html.fieldsdict method)": [[8, "lxml.html.FieldsDict.pop"]], "pop() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.pop"]], "pop() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.pop"]], "popitem() (lxml.html.fieldsdict method)": [[8, "lxml.html.FieldsDict.popitem"]], "prefix (lxml.html.formelement attribute)": [[8, "lxml.html.FormElement.prefix"]], "prefix (lxml.html.htmlcomment attribute)": [[8, "lxml.html.HtmlComment.prefix"]], "prefix (lxml.html.htmlelement attribute)": [[8, "lxml.html.HtmlElement.prefix"]], "prefix (lxml.html.htmlentity attribute)": [[8, "lxml.html.HtmlEntity.prefix"]], "prefix (lxml.html.htmlprocessinginstruction attribute)": [[8, "lxml.html.HtmlProcessingInstruction.prefix"]], "prefix (lxml.html.inputelement attribute)": [[8, "lxml.html.InputElement.prefix"]], "prefix (lxml.html.labelelement attribute)": [[8, "lxml.html.LabelElement.prefix"]], "prefix (lxml.html.selectelement attribute)": [[8, "lxml.html.SelectElement.prefix"]], "prefix (lxml.html.textareaelement attribute)": [[8, "lxml.html.TextareaElement.prefix"]], "remove() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.remove"]], "remove() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.remove"]], "remove() (lxml.html.classes method)": [[8, "lxml.html.Classes.remove"]], "remove() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.remove"]], "remove() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.remove"]], "remove() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.remove"]], "remove() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.remove"]], "remove() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.remove"]], "remove() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.remove"]], "remove() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.remove"]], "remove() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.remove"]], "remove() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.remove"]], "remove() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.remove"]], "remove() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.remove"]], "replace() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.replace"]], "replace() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.replace"]], "replace() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.replace"]], "replace() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.replace"]], "replace() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.replace"]], "replace() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.replace"]], "replace() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.replace"]], "replace() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.replace"]], "replace() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.replace"]], "resolve_base_href() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.resolve_base_href"]], "resolve_base_href() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.resolve_base_href"]], "resolve_base_href() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.resolve_base_href"]], "resolve_base_href() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.resolve_base_href"]], "resolve_base_href() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.resolve_base_href"]], "resolve_base_href() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.resolve_base_href"]], "resolve_base_href() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.resolve_base_href"]], "resolve_base_href() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.resolve_base_href"]], "resolve_base_href() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.resolve_base_href"]], "resolve_base_href() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.resolve_base_href"]], "resolvers (lxml.html.htmlparser attribute)": [[8, "lxml.html.HTMLParser.resolvers"]], "resolvers (lxml.html.xhtmlparser attribute)": [[8, "lxml.html.XHTMLParser.resolvers"]], "reverse() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.reverse"]], "reverse() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.reverse"]], "rewrite_links() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.rewrite_links"]], "rewrite_links() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.rewrite_links"]], "rewrite_links() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.rewrite_links"]], "rewrite_links() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.rewrite_links"]], "rewrite_links() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.rewrite_links"]], "rewrite_links() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.rewrite_links"]], "rewrite_links() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.rewrite_links"]], "rewrite_links() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.rewrite_links"]], "rewrite_links() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.rewrite_links"]], "rewrite_links() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.rewrite_links"]], "set() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.set"]], "set() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.set"]], "set() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.set"]], "set() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.set"]], "set() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.set"]], "set() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.set"]], "set() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.set"]], "set() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.set"]], "set() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.set"]], "set() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.set"]], "setelementclasslookup() (lxml.html.htmlparser method)": [[8, "lxml.html.HTMLParser.setElementClassLookup"]], "setelementclasslookup() (lxml.html.xhtmlparser method)": [[8, "lxml.html.XHTMLParser.setElementClassLookup"]], "set_element_class_lookup() (lxml.html.htmlparser method)": [[8, "lxml.html.HTMLParser.set_element_class_lookup"]], "set_element_class_lookup() (lxml.html.xhtmlparser method)": [[8, "lxml.html.XHTMLParser.set_element_class_lookup"]], "set_fallback() (lxml.html.htmlelementclasslookup method)": [[8, "lxml.html.HtmlElementClassLookup.set_fallback"]], "setdefault() (lxml.html.fieldsdict method)": [[8, "lxml.html.FieldsDict.setdefault"]], "sort() (lxml.html.checkboxgroup method)": [[8, "lxml.html.CheckboxGroup.sort"]], "sort() (lxml.html.radiogroup method)": [[8, "lxml.html.RadioGroup.sort"]], "sourceline (lxml.html.formelement attribute)": [[8, "lxml.html.FormElement.sourceline"]], "sourceline (lxml.html.htmlcomment attribute)": [[8, "lxml.html.HtmlComment.sourceline"]], "sourceline (lxml.html.htmlelement attribute)": [[8, "lxml.html.HtmlElement.sourceline"]], "sourceline (lxml.html.htmlentity attribute)": [[8, "lxml.html.HtmlEntity.sourceline"]], "sourceline (lxml.html.htmlprocessinginstruction attribute)": [[8, "lxml.html.HtmlProcessingInstruction.sourceline"]], "sourceline (lxml.html.inputelement attribute)": [[8, "lxml.html.InputElement.sourceline"]], "sourceline (lxml.html.labelelement attribute)": [[8, "lxml.html.LabelElement.sourceline"]], "sourceline (lxml.html.selectelement attribute)": [[8, "lxml.html.SelectElement.sourceline"]], "sourceline (lxml.html.textareaelement attribute)": [[8, "lxml.html.TextareaElement.sourceline"]], "submit_form() (in module lxml.html)": [[8, "lxml.html.submit_form"]], "symmetric_difference() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.symmetric_difference"]], "symmetric_difference() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.symmetric_difference"]], "symmetric_difference_update() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.symmetric_difference_update"]], "symmetric_difference_update() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.symmetric_difference_update"]], "tag (lxml.html.formelement attribute)": [[8, "lxml.html.FormElement.tag"]], "tag (lxml.html.htmlcomment attribute)": [[8, "lxml.html.HtmlComment.tag"]], "tag (lxml.html.htmlelement attribute)": [[8, "lxml.html.HtmlElement.tag"]], "tag (lxml.html.htmlentity attribute)": [[8, "lxml.html.HtmlEntity.tag"]], "tag (lxml.html.htmlprocessinginstruction attribute)": [[8, "lxml.html.HtmlProcessingInstruction.tag"]], "tag (lxml.html.inputelement attribute)": [[8, "lxml.html.InputElement.tag"]], "tag (lxml.html.labelelement attribute)": [[8, "lxml.html.LabelElement.tag"]], "tag (lxml.html.selectelement attribute)": [[8, "lxml.html.SelectElement.tag"]], "tag (lxml.html.textareaelement attribute)": [[8, "lxml.html.TextareaElement.tag"]], "tail (lxml.html.formelement attribute)": [[8, "lxml.html.FormElement.tail"]], "tail (lxml.html.htmlcomment attribute)": [[8, "lxml.html.HtmlComment.tail"]], "tail (lxml.html.htmlelement attribute)": [[8, "lxml.html.HtmlElement.tail"]], "tail (lxml.html.htmlentity attribute)": [[8, "lxml.html.HtmlEntity.tail"]], "tail (lxml.html.htmlprocessinginstruction attribute)": [[8, "lxml.html.HtmlProcessingInstruction.tail"]], "tail (lxml.html.inputelement attribute)": [[8, "lxml.html.InputElement.tail"]], "tail (lxml.html.labelelement attribute)": [[8, "lxml.html.LabelElement.tail"]], "tail (lxml.html.selectelement attribute)": [[8, "lxml.html.SelectElement.tail"]], "tail (lxml.html.textareaelement attribute)": [[8, "lxml.html.TextareaElement.tail"]], "target (lxml.html.htmlparser attribute)": [[8, "lxml.html.HTMLParser.target"]], "target (lxml.html.htmlprocessinginstruction attribute)": [[8, "lxml.html.HtmlProcessingInstruction.target"]], "target (lxml.html.xhtmlparser attribute)": [[8, "lxml.html.XHTMLParser.target"]], "text (lxml.html.formelement attribute)": [[8, "lxml.html.FormElement.text"]], "text (lxml.html.htmlcomment attribute)": [[8, "lxml.html.HtmlComment.text"]], "text (lxml.html.htmlelement attribute)": [[8, "lxml.html.HtmlElement.text"]], "text (lxml.html.htmlentity attribute)": [[8, "lxml.html.HtmlEntity.text"]], "text (lxml.html.htmlprocessinginstruction attribute)": [[8, "lxml.html.HtmlProcessingInstruction.text"]], "text (lxml.html.inputelement attribute)": [[8, "lxml.html.InputElement.text"]], "text (lxml.html.labelelement attribute)": [[8, "lxml.html.LabelElement.text"]], "text (lxml.html.selectelement attribute)": [[8, "lxml.html.SelectElement.text"]], "text (lxml.html.textareaelement attribute)": [[8, "lxml.html.TextareaElement.text"]], "text_content() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.text_content"]], "text_content() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.text_content"]], "text_content() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.text_content"]], "text_content() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.text_content"]], "text_content() (lxml.html.htmlmixin method)": [[8, "lxml.html.HtmlMixin.text_content"]], "text_content() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.text_content"]], "text_content() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.text_content"]], "text_content() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.text_content"]], "text_content() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.text_content"]], "text_content() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.text_content"]], "toggle() (lxml.html.classes method)": [[8, "lxml.html.Classes.toggle"]], "tostring() (in module lxml.html)": [[8, "lxml.html.tostring"]], "type (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.type"]], "union() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.union"]], "union() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.union"]], "update() (lxml.html.checkboxvalues method)": [[8, "lxml.html.CheckboxValues.update"]], "update() (lxml.html.classes method)": [[8, "lxml.html.Classes.update"]], "update() (lxml.html.fieldsdict method)": [[8, "lxml.html.FieldsDict.update"]], "update() (lxml.html.multipleselectoptions method)": [[8, "lxml.html.MultipleSelectOptions.update"]], "value (lxml.html.checkboxgroup property)": [[8, "lxml.html.CheckboxGroup.value"]], "value (lxml.html.inputelement property)": [[8, "lxml.html.InputElement.value"]], "value (lxml.html.radiogroup property)": [[8, "lxml.html.RadioGroup.value"]], "value (lxml.html.selectelement property)": [[8, "lxml.html.SelectElement.value"]], "value (lxml.html.textareaelement property)": [[8, "lxml.html.TextareaElement.value"]], "value_options (lxml.html.checkboxgroup property)": [[8, "lxml.html.CheckboxGroup.value_options"]], "value_options (lxml.html.radiogroup property)": [[8, "lxml.html.RadioGroup.value_options"]], "value_options (lxml.html.selectelement property)": [[8, "lxml.html.SelectElement.value_options"]], "values() (lxml.html.fieldsdict method)": [[8, "lxml.html.FieldsDict.values"]], "values() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.values"]], "values() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.values"]], "values() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.values"]], "values() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.values"]], "values() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.values"]], "values() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.values"]], "values() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.values"]], "values() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.values"]], "values() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.values"]], "version (lxml.html.htmlparser attribute)": [[8, "lxml.html.HTMLParser.version"]], "version (lxml.html.xhtmlparser attribute)": [[8, "lxml.html.XHTMLParser.version"]], "xhtml_to_html() (in module lxml.html)": [[8, "lxml.html.xhtml_to_html"]], "xpath() (lxml.html.formelement method)": [[8, "lxml.html.FormElement.xpath"]], "xpath() (lxml.html.htmlcomment method)": [[8, "lxml.html.HtmlComment.xpath"]], "xpath() (lxml.html.htmlelement method)": [[8, "lxml.html.HtmlElement.xpath"]], "xpath() (lxml.html.htmlentity method)": [[8, "lxml.html.HtmlEntity.xpath"]], "xpath() (lxml.html.htmlprocessinginstruction method)": [[8, "lxml.html.HtmlProcessingInstruction.xpath"]], "xpath() (lxml.html.inputelement method)": [[8, "lxml.html.InputElement.xpath"]], "xpath() (lxml.html.labelelement method)": [[8, "lxml.html.LabelElement.xpath"]], "xpath() (lxml.html.selectelement method)": [[8, "lxml.html.SelectElement.xpath"]], "xpath() (lxml.html.textareaelement method)": [[8, "lxml.html.TextareaElement.xpath"]], "annotate() (in module lxml.html._diffcommand)": [[10, "lxml.html._diffcommand.annotate"]], "lxml.html._diffcommand": [[10, "module-lxml.html._diffcommand"]], "main() (in module lxml.html._diffcommand)": [[10, "lxml.html._diffcommand.main"]], "read_file() (in module lxml.html._diffcommand)": [[10, "lxml.html._diffcommand.read_file"]], "split_body() (in module lxml.html._diffcommand)": [[10, "lxml.html._diffcommand.split_body"]], "setmixin (class in lxml.html._setmixin)": [[11, "lxml.html._setmixin.SetMixin"]], "_abc_impl (lxml.html._setmixin.setmixin attribute)": [[11, "lxml.html._setmixin.SetMixin._abc_impl"]], "_from_iterable() (lxml.html._setmixin.setmixin class method)": [[11, "lxml.html._setmixin.SetMixin._from_iterable"]], "_hash() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin._hash"]], "add() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.add"]], "clear() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.clear"]], "copy() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.copy"]], "difference() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.difference"]], "difference_update() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.difference_update"]], "discard() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.discard"]], "intersection() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.intersection"]], "intersection_update() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.intersection_update"]], "isdisjoint() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.isdisjoint"]], "issubset() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.issubset"]], "issuperset() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.issuperset"]], "lxml.html._setmixin": [[11, "module-lxml.html._setmixin"]], "pop() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.pop"]], "remove() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.remove"]], "symmetric_difference() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.symmetric_difference"]], "symmetric_difference_update() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.symmetric_difference_update"]], "union() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.union"]], "update() (lxml.html._setmixin.setmixin method)": [[11, "lxml.html._setmixin.SetMixin.update"]], "a (in module lxml.html.builder)": [[12, "lxml.html.builder.A"]], "abbr (in module lxml.html.builder)": [[12, "lxml.html.builder.ABBR"]], "acronym (in module lxml.html.builder)": [[12, "lxml.html.builder.ACRONYM"]], "address (in module lxml.html.builder)": [[12, "lxml.html.builder.ADDRESS"]], "applet (in module lxml.html.builder)": [[12, "lxml.html.builder.APPLET"]], "area (in module lxml.html.builder)": [[12, "lxml.html.builder.AREA"]], "b (in module lxml.html.builder)": [[12, "lxml.html.builder.B"]], "base (in module lxml.html.builder)": [[12, "lxml.html.builder.BASE"]], "basefont (in module lxml.html.builder)": [[12, "lxml.html.builder.BASEFONT"]], "bdo (in module lxml.html.builder)": [[12, "lxml.html.builder.BDO"]], "big (in module lxml.html.builder)": [[12, "lxml.html.builder.BIG"]], "blockquote (in module lxml.html.builder)": [[12, "lxml.html.builder.BLOCKQUOTE"]], "body (in module lxml.html.builder)": [[12, "lxml.html.builder.BODY"]], "br (in module lxml.html.builder)": [[12, "lxml.html.builder.BR"]], "button (in module lxml.html.builder)": [[12, "lxml.html.builder.BUTTON"]], "caption (in module lxml.html.builder)": [[12, "lxml.html.builder.CAPTION"]], "center (in module lxml.html.builder)": [[12, "lxml.html.builder.CENTER"]], "cite (in module lxml.html.builder)": [[12, "lxml.html.builder.CITE"]], "class() (in module lxml.html.builder)": [[12, "lxml.html.builder.CLASS"]], "code (in module lxml.html.builder)": [[12, "lxml.html.builder.CODE"]], "col (in module lxml.html.builder)": [[12, "lxml.html.builder.COL"]], "colgroup (in module lxml.html.builder)": [[12, "lxml.html.builder.COLGROUP"]], "dd (in module lxml.html.builder)": [[12, "lxml.html.builder.DD"]], "del (in module lxml.html.builder)": [[12, "lxml.html.builder.DEL"]], "dfn (in module lxml.html.builder)": [[12, "lxml.html.builder.DFN"]], "dir (in module lxml.html.builder)": [[12, "lxml.html.builder.DIR"]], "div (in module lxml.html.builder)": [[12, "lxml.html.builder.DIV"]], "dl (in module lxml.html.builder)": [[12, "lxml.html.builder.DL"]], "dt (in module lxml.html.builder)": [[12, "lxml.html.builder.DT"]], "em (in module lxml.html.builder)": [[12, "lxml.html.builder.EM"]], "fieldset (in module lxml.html.builder)": [[12, "lxml.html.builder.FIELDSET"]], "font (in module lxml.html.builder)": [[12, "lxml.html.builder.FONT"]], "for() (in module lxml.html.builder)": [[12, "lxml.html.builder.FOR"]], "form (in module lxml.html.builder)": [[12, "lxml.html.builder.FORM"]], "frame (in module lxml.html.builder)": [[12, "lxml.html.builder.FRAME"]], "frameset (in module lxml.html.builder)": [[12, "lxml.html.builder.FRAMESET"]], "h1 (in module lxml.html.builder)": [[12, "lxml.html.builder.H1"]], "h2 (in module lxml.html.builder)": [[12, "lxml.html.builder.H2"]], "h3 (in module lxml.html.builder)": [[12, "lxml.html.builder.H3"]], "h4 (in module lxml.html.builder)": [[12, "lxml.html.builder.H4"]], "h5 (in module lxml.html.builder)": [[12, "lxml.html.builder.H5"]], "h6 (in module lxml.html.builder)": [[12, "lxml.html.builder.H6"]], "head (in module lxml.html.builder)": [[12, "lxml.html.builder.HEAD"]], "hr (in module lxml.html.builder)": [[12, "lxml.html.builder.HR"]], "html (in module lxml.html.builder)": [[12, "lxml.html.builder.HTML"]], "i (in module lxml.html.builder)": [[12, "lxml.html.builder.I"]], "iframe (in module lxml.html.builder)": [[12, "lxml.html.builder.IFRAME"]], "img (in module lxml.html.builder)": [[12, "lxml.html.builder.IMG"]], "input (in module lxml.html.builder)": [[12, "lxml.html.builder.INPUT"]], "ins (in module lxml.html.builder)": [[12, "lxml.html.builder.INS"]], "isindex (in module lxml.html.builder)": [[12, "lxml.html.builder.ISINDEX"]], "kbd (in module lxml.html.builder)": [[12, "lxml.html.builder.KBD"]], "label (in module lxml.html.builder)": [[12, "lxml.html.builder.LABEL"]], "legend (in module lxml.html.builder)": [[12, "lxml.html.builder.LEGEND"]], "li (in module lxml.html.builder)": [[12, "lxml.html.builder.LI"]], "link (in module lxml.html.builder)": [[12, "lxml.html.builder.LINK"]], "map (in module lxml.html.builder)": [[12, "lxml.html.builder.MAP"]], "menu (in module lxml.html.builder)": [[12, "lxml.html.builder.MENU"]], "meta (in module lxml.html.builder)": [[12, "lxml.html.builder.META"]], "noframes (in module lxml.html.builder)": [[12, "lxml.html.builder.NOFRAMES"]], "noscript (in module lxml.html.builder)": [[12, "lxml.html.builder.NOSCRIPT"]], "object (in module lxml.html.builder)": [[12, "lxml.html.builder.OBJECT"]], "ol (in module lxml.html.builder)": [[12, "lxml.html.builder.OL"]], "optgroup (in module lxml.html.builder)": [[12, "lxml.html.builder.OPTGROUP"]], "option (in module lxml.html.builder)": [[12, "lxml.html.builder.OPTION"]], "p (in module lxml.html.builder)": [[12, "lxml.html.builder.P"]], "param (in module lxml.html.builder)": [[12, "lxml.html.builder.PARAM"]], "pre (in module lxml.html.builder)": [[12, "lxml.html.builder.PRE"]], "q (in module lxml.html.builder)": [[12, "lxml.html.builder.Q"]], "s (in module lxml.html.builder)": [[12, "lxml.html.builder.S"]], "samp (in module lxml.html.builder)": [[12, "lxml.html.builder.SAMP"]], "script (in module lxml.html.builder)": [[12, "lxml.html.builder.SCRIPT"]], "select (in module lxml.html.builder)": [[12, "lxml.html.builder.SELECT"]], "small (in module lxml.html.builder)": [[12, "lxml.html.builder.SMALL"]], "span (in module lxml.html.builder)": [[12, "lxml.html.builder.SPAN"]], "strike (in module lxml.html.builder)": [[12, "lxml.html.builder.STRIKE"]], "strong (in module lxml.html.builder)": [[12, "lxml.html.builder.STRONG"]], "style (in module lxml.html.builder)": [[12, "lxml.html.builder.STYLE"]], "sub (in module lxml.html.builder)": [[12, "lxml.html.builder.SUB"]], "sup (in module lxml.html.builder)": [[12, "lxml.html.builder.SUP"]], "table (in module lxml.html.builder)": [[12, "lxml.html.builder.TABLE"]], "tbody (in module lxml.html.builder)": [[12, "lxml.html.builder.TBODY"]], "td (in module lxml.html.builder)": [[12, "lxml.html.builder.TD"]], "textarea (in module lxml.html.builder)": [[12, "lxml.html.builder.TEXTAREA"]], "tfoot (in module lxml.html.builder)": [[12, "lxml.html.builder.TFOOT"]], "th (in module lxml.html.builder)": [[12, "lxml.html.builder.TH"]], "thead (in module lxml.html.builder)": [[12, "lxml.html.builder.THEAD"]], "title (in module lxml.html.builder)": [[12, "lxml.html.builder.TITLE"]], "tr (in module lxml.html.builder)": [[12, "lxml.html.builder.TR"]], "tt (in module lxml.html.builder)": [[12, "lxml.html.builder.TT"]], "u (in module lxml.html.builder)": [[12, "lxml.html.builder.U"]], "ul (in module lxml.html.builder)": [[12, "lxml.html.builder.UL"]], "var (in module lxml.html.builder)": [[12, "lxml.html.builder.VAR"]], "lxml.html.builder": [[12, "module-lxml.html.builder"]], "cleaner (class in lxml.html.clean)": [[13, "lxml.html.clean.Cleaner"]], "_break_text() (in module lxml.html.clean)": [[13, "lxml.html.clean._break_text"]], "_find_image_dataurls() (in module lxml.html.clean)": [[13, "lxml.html.clean._find_image_dataurls"]], "_has_javascript_scheme() (in module lxml.html.clean)": [[13, "lxml.html.clean._has_javascript_scheme"]], "_has_sneaky_javascript() (lxml.html.clean.cleaner method)": [[13, "lxml.html.clean.Cleaner._has_sneaky_javascript"]], "_insert_break() (in module lxml.html.clean)": [[13, "lxml.html.clean._insert_break"]], "_is_unsafe_image_type() (in module lxml.html.clean)": [[13, "lxml.html.clean._is_unsafe_image_type"]], "_kill_elements() (lxml.html.clean.cleaner method)": [[13, "lxml.html.clean.Cleaner._kill_elements"]], "_link_text() (in module lxml.html.clean)": [[13, "lxml.html.clean._link_text"]], "_looks_like_tag_content() (in module lxml.html.clean)": [[13, "lxml.html.clean._looks_like_tag_content"]], "_possibly_malicious_schemes() (in module lxml.html.clean)": [[13, "lxml.html.clean._possibly_malicious_schemes"]], "_remove_javascript_link() (lxml.html.clean.cleaner method)": [[13, "lxml.html.clean.Cleaner._remove_javascript_link"]], "_replace_css_import() (in module lxml.html.clean)": [[13, "lxml.html.clean._replace_css_import"]], "_replace_css_javascript() (in module lxml.html.clean)": [[13, "lxml.html.clean._replace_css_javascript"]], "_substitute_comments() (lxml.html.clean.cleaner method)": [[13, "lxml.html.clean.Cleaner._substitute_comments"]], "_substitute_whitespace() (in module lxml.html.clean)": [[13, "lxml.html.clean._substitute_whitespace"]], "_tag_link_attrs (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner._tag_link_attrs"]], "add_nofollow (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.add_nofollow"]], "allow_element() (lxml.html.clean.cleaner method)": [[13, "lxml.html.clean.Cleaner.allow_element"]], "allow_embedded_url() (lxml.html.clean.cleaner method)": [[13, "lxml.html.clean.Cleaner.allow_embedded_url"]], "allow_follow() (lxml.html.clean.cleaner method)": [[13, "lxml.html.clean.Cleaner.allow_follow"]], "allow_tags (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.allow_tags"]], "annoying_tags (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.annoying_tags"]], "autolink() (in module lxml.html.clean)": [[13, "lxml.html.clean.autolink"]], "autolink_html() (in module lxml.html.clean)": [[13, "lxml.html.clean.autolink_html"]], "clean_html() (in module lxml.html.clean)": [[13, "lxml.html.clean.clean_html"]], "clean_html() (lxml.html.clean.cleaner method)": [[13, "lxml.html.clean.Cleaner.clean_html"]], "comments (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.comments"]], "embedded (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.embedded"]], "forms (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.forms"]], "frames (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.frames"]], "host_whitelist (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.host_whitelist"]], "inline_style (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.inline_style"]], "javascript (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.javascript"]], "kill_conditional_comments() (lxml.html.clean.cleaner method)": [[13, "lxml.html.clean.Cleaner.kill_conditional_comments"]], "kill_tags (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.kill_tags"]], "links (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.links"]], "lxml.html.clean": [[13, "module-lxml.html.clean"]], "meta (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.meta"]], "page_structure (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.page_structure"]], "processing_instructions (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.processing_instructions"]], "remove_tags (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.remove_tags"]], "remove_unknown_tags (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.remove_unknown_tags"]], "safe_attrs (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.safe_attrs"]], "safe_attrs_only (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.safe_attrs_only"]], "scripts (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.scripts"]], "style (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.style"]], "whitelist_tags (lxml.html.clean.cleaner attribute)": [[13, "lxml.html.clean.Cleaner.whitelist_tags"]], "word_break() (in module lxml.html.clean)": [[13, "lxml.html.clean.word_break"]], "word_break_html() (in module lxml.html.clean)": [[13, "lxml.html.clean.word_break_html"]], "lxml.html.defs": [[14, "module-lxml.html.defs"]], "del_end (class in lxml.html.diff)": [[15, "lxml.html.diff.DEL_END"]], "del_start (class in lxml.html.diff)": [[15, "lxml.html.diff.DEL_START"]], "insensitivesequencematcher (class in lxml.html.diff)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher"]], "nodeletes": [[15, "lxml.html.diff.NoDeletes"]], "_contains_block_level_tag() (in module lxml.html.diff)": [[15, "lxml.html.diff._contains_block_level_tag"]], "_fixup_ins_del_tags() (in module lxml.html.diff)": [[15, "lxml.html.diff._fixup_ins_del_tags"]], "_merge_element_contents() (in module lxml.html.diff)": [[15, "lxml.html.diff._merge_element_contents"]], "_move_el_inside_block() (in module lxml.html.diff)": [[15, "lxml.html.diff._move_el_inside_block"]], "add_note() (lxml.html.diff.nodeletes method)": [[15, "lxml.html.diff.NoDeletes.add_note"]], "args (lxml.html.diff.nodeletes attribute)": [[15, "lxml.html.diff.NoDeletes.args"]], "capitalize() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.capitalize"]], "capitalize() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.capitalize"]], "capitalize() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.capitalize"]], "casefold() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.casefold"]], "casefold() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.casefold"]], "casefold() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.casefold"]], "center() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.center"]], "center() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.center"]], "center() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.center"]], "cleanup_delete() (in module lxml.html.diff)": [[15, "lxml.html.diff.cleanup_delete"]], "cleanup_html() (in module lxml.html.diff)": [[15, "lxml.html.diff.cleanup_html"]], "compress_merge_back() (in module lxml.html.diff)": [[15, "lxml.html.diff.compress_merge_back"]], "compress_tokens() (in module lxml.html.diff)": [[15, "lxml.html.diff.compress_tokens"]], "copy_annotations() (in module lxml.html.diff)": [[15, "lxml.html.diff.copy_annotations"]], "count() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.count"]], "count() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.count"]], "count() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.count"]], "default_markup() (in module lxml.html.diff)": [[15, "lxml.html.diff.default_markup"]], "encode() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.encode"]], "encode() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.encode"]], "encode() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.encode"]], "end_tag() (in module lxml.html.diff)": [[15, "lxml.html.diff.end_tag"]], "endswith() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.endswith"]], "endswith() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.endswith"]], "endswith() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.endswith"]], "expand_tokens() (in module lxml.html.diff)": [[15, "lxml.html.diff.expand_tokens"]], "expandtabs() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.expandtabs"]], "expandtabs() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.expandtabs"]], "expandtabs() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.expandtabs"]], "find() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.find"]], "find() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.find"]], "find() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.find"]], "find_longest_match() (lxml.html.diff.insensitivesequencematcher method)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.find_longest_match"]], "fixup_chunks() (in module lxml.html.diff)": [[15, "lxml.html.diff.fixup_chunks"]], "fixup_ins_del_tags() (in module lxml.html.diff)": [[15, "lxml.html.diff.fixup_ins_del_tags"]], "flatten_el() (in module lxml.html.diff)": [[15, "lxml.html.diff.flatten_el"]], "format() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.format"]], "format() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.format"]], "format() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.format"]], "format_map() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.format_map"]], "format_map() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.format_map"]], "format_map() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.format_map"]], "get_grouped_opcodes() (lxml.html.diff.insensitivesequencematcher method)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.get_grouped_opcodes"]], "get_matching_blocks() (lxml.html.diff.insensitivesequencematcher method)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.get_matching_blocks"]], "get_opcodes() (lxml.html.diff.insensitivesequencematcher method)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.get_opcodes"]], "hide_when_equal (lxml.html.diff.href_token attribute)": [[15, "lxml.html.diff.href_token.hide_when_equal"]], "hide_when_equal (lxml.html.diff.tag_token attribute)": [[15, "lxml.html.diff.tag_token.hide_when_equal"]], "hide_when_equal (lxml.html.diff.token attribute)": [[15, "lxml.html.diff.token.hide_when_equal"]], "href_token (class in lxml.html.diff)": [[15, "lxml.html.diff.href_token"]], "html() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.html"]], "html() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.html"]], "html() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.html"]], "html_annotate() (in module lxml.html.diff)": [[15, "lxml.html.diff.html_annotate"]], "html_annotate_merge_annotations() (in module lxml.html.diff)": [[15, "lxml.html.diff.html_annotate_merge_annotations"]], "htmldiff() (in module lxml.html.diff)": [[15, "lxml.html.diff.htmldiff"]], "htmldiff_tokens() (in module lxml.html.diff)": [[15, "lxml.html.diff.htmldiff_tokens"]], "index() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.index"]], "index() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.index"]], "index() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.index"]], "is_end_tag() (in module lxml.html.diff)": [[15, "lxml.html.diff.is_end_tag"]], "is_start_tag() (in module lxml.html.diff)": [[15, "lxml.html.diff.is_start_tag"]], "is_word() (in module lxml.html.diff)": [[15, "lxml.html.diff.is_word"]], "isalnum() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.isalnum"]], "isalnum() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.isalnum"]], "isalnum() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.isalnum"]], "isalpha() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.isalpha"]], "isalpha() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.isalpha"]], "isalpha() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.isalpha"]], "isascii() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.isascii"]], "isascii() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.isascii"]], "isascii() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.isascii"]], "isdecimal() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.isdecimal"]], "isdecimal() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.isdecimal"]], "isdecimal() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.isdecimal"]], "isdigit() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.isdigit"]], "isdigit() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.isdigit"]], "isdigit() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.isdigit"]], "isidentifier() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.isidentifier"]], "isidentifier() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.isidentifier"]], "isidentifier() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.isidentifier"]], "islower() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.islower"]], "islower() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.islower"]], "islower() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.islower"]], "isnumeric() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.isnumeric"]], "isnumeric() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.isnumeric"]], "isnumeric() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.isnumeric"]], "isprintable() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.isprintable"]], "isprintable() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.isprintable"]], "isprintable() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.isprintable"]], "isspace() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.isspace"]], "isspace() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.isspace"]], "isspace() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.isspace"]], "istitle() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.istitle"]], "istitle() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.istitle"]], "istitle() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.istitle"]], "isupper() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.isupper"]], "isupper() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.isupper"]], "isupper() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.isupper"]], "join() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.join"]], "join() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.join"]], "join() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.join"]], "ljust() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.ljust"]], "ljust() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.ljust"]], "ljust() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.ljust"]], "locate_unbalanced_end() (in module lxml.html.diff)": [[15, "lxml.html.diff.locate_unbalanced_end"]], "locate_unbalanced_start() (in module lxml.html.diff)": [[15, "lxml.html.diff.locate_unbalanced_start"]], "lower() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.lower"]], "lower() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.lower"]], "lower() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.lower"]], "lstrip() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.lstrip"]], "lstrip() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.lstrip"]], "lstrip() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.lstrip"]], "lxml.html.diff": [[15, "module-lxml.html.diff"]], "maketrans() (lxml.html.diff.href_token static method)": [[15, "lxml.html.diff.href_token.maketrans"]], "maketrans() (lxml.html.diff.tag_token static method)": [[15, "lxml.html.diff.tag_token.maketrans"]], "maketrans() (lxml.html.diff.token static method)": [[15, "lxml.html.diff.token.maketrans"]], "markup_serialize_tokens() (in module lxml.html.diff)": [[15, "lxml.html.diff.markup_serialize_tokens"]], "merge_delete() (in module lxml.html.diff)": [[15, "lxml.html.diff.merge_delete"]], "merge_insert() (in module lxml.html.diff)": [[15, "lxml.html.diff.merge_insert"]], "parse_html() (in module lxml.html.diff)": [[15, "lxml.html.diff.parse_html"]], "partition() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.partition"]], "partition() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.partition"]], "partition() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.partition"]], "quick_ratio() (lxml.html.diff.insensitivesequencematcher method)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.quick_ratio"]], "ratio() (lxml.html.diff.insensitivesequencematcher method)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.ratio"]], "real_quick_ratio() (lxml.html.diff.insensitivesequencematcher method)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.real_quick_ratio"]], "removeprefix() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.removeprefix"]], "removeprefix() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.removeprefix"]], "removeprefix() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.removeprefix"]], "removesuffix() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.removesuffix"]], "removesuffix() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.removesuffix"]], "removesuffix() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.removesuffix"]], "replace() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.replace"]], "replace() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.replace"]], "replace() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.replace"]], "rfind() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.rfind"]], "rfind() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.rfind"]], "rfind() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.rfind"]], "rindex() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.rindex"]], "rindex() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.rindex"]], "rindex() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.rindex"]], "rjust() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.rjust"]], "rjust() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.rjust"]], "rjust() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.rjust"]], "rpartition() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.rpartition"]], "rpartition() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.rpartition"]], "rpartition() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.rpartition"]], "rsplit() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.rsplit"]], "rsplit() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.rsplit"]], "rsplit() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.rsplit"]], "rstrip() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.rstrip"]], "rstrip() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.rstrip"]], "rstrip() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.rstrip"]], "serialize_html_fragment() (in module lxml.html.diff)": [[15, "lxml.html.diff.serialize_html_fragment"]], "set_seq1() (lxml.html.diff.insensitivesequencematcher method)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.set_seq1"]], "set_seq2() (lxml.html.diff.insensitivesequencematcher method)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.set_seq2"]], "set_seqs() (lxml.html.diff.insensitivesequencematcher method)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.set_seqs"]], "split() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.split"]], "split() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.split"]], "split() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.split"]], "split_delete() (in module lxml.html.diff)": [[15, "lxml.html.diff.split_delete"]], "split_trailing_whitespace() (in module lxml.html.diff)": [[15, "lxml.html.diff.split_trailing_whitespace"]], "split_unbalanced() (in module lxml.html.diff)": [[15, "lxml.html.diff.split_unbalanced"]], "split_words() (in module lxml.html.diff)": [[15, "lxml.html.diff.split_words"]], "splitlines() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.splitlines"]], "splitlines() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.splitlines"]], "splitlines() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.splitlines"]], "start_tag() (in module lxml.html.diff)": [[15, "lxml.html.diff.start_tag"]], "startswith() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.startswith"]], "startswith() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.startswith"]], "startswith() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.startswith"]], "strip() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.strip"]], "strip() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.strip"]], "strip() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.strip"]], "swapcase() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.swapcase"]], "swapcase() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.swapcase"]], "swapcase() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.swapcase"]], "tag_token (class in lxml.html.diff)": [[15, "lxml.html.diff.tag_token"]], "threshold (lxml.html.diff.insensitivesequencematcher attribute)": [[15, "lxml.html.diff.InsensitiveSequenceMatcher.threshold"]], "title() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.title"]], "title() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.title"]], "title() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.title"]], "token (class in lxml.html.diff)": [[15, "lxml.html.diff.token"]], "tokenize() (in module lxml.html.diff)": [[15, "lxml.html.diff.tokenize"]], "tokenize_annotated() (in module lxml.html.diff)": [[15, "lxml.html.diff.tokenize_annotated"]], "translate() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.translate"]], "translate() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.translate"]], "translate() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.translate"]], "upper() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.upper"]], "upper() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.upper"]], "upper() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.upper"]], "with_traceback() (lxml.html.diff.nodeletes method)": [[15, "lxml.html.diff.NoDeletes.with_traceback"]], "zfill() (lxml.html.diff.href_token method)": [[15, "lxml.html.diff.href_token.zfill"]], "zfill() (lxml.html.diff.tag_token method)": [[15, "lxml.html.diff.tag_token.zfill"]], "zfill() (lxml.html.diff.token method)": [[15, "lxml.html.diff.token.zfill"]], "defaulterrorcreator (class in lxml.html.formfill)": [[16, "lxml.html.formfill.DefaultErrorCreator"]], "formnotfound": [[16, "lxml.html.formfill.FormNotFound"]], "_add_class() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._add_class"]], "_check() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._check"]], "_fill_form() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._fill_form"]], "_fill_multiple() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._fill_multiple"]], "_fill_single() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._fill_single"]], "_find_elements_for_name() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._find_elements_for_name"]], "_find_form() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._find_form"]], "_find_form_ids() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._find_form_ids"]], "_insert_error() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._insert_error"]], "_select() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._select"]], "_takes_multiple() (in module lxml.html.formfill)": [[16, "lxml.html.formfill._takes_multiple"]], "add_note() (lxml.html.formfill.formnotfound method)": [[16, "lxml.html.formfill.FormNotFound.add_note"]], "args (lxml.html.formfill.formnotfound attribute)": [[16, "lxml.html.formfill.FormNotFound.args"]], "block_inside (lxml.html.formfill.defaulterrorcreator attribute)": [[16, "lxml.html.formfill.DefaultErrorCreator.block_inside"]], "default_message (lxml.html.formfill.defaulterrorcreator attribute)": [[16, "lxml.html.formfill.DefaultErrorCreator.default_message"]], "error_block_class (lxml.html.formfill.defaulterrorcreator attribute)": [[16, "lxml.html.formfill.DefaultErrorCreator.error_block_class"]], "error_container_tag (lxml.html.formfill.defaulterrorcreator attribute)": [[16, "lxml.html.formfill.DefaultErrorCreator.error_container_tag"]], "error_message_class (lxml.html.formfill.defaulterrorcreator attribute)": [[16, "lxml.html.formfill.DefaultErrorCreator.error_message_class"]], "fill_form() (in module lxml.html.formfill)": [[16, "lxml.html.formfill.fill_form"]], "fill_form_html() (in module lxml.html.formfill)": [[16, "lxml.html.formfill.fill_form_html"]], "insert_before (lxml.html.formfill.defaulterrorcreator attribute)": [[16, "lxml.html.formfill.DefaultErrorCreator.insert_before"]], "insert_errors() (in module lxml.html.formfill)": [[16, "lxml.html.formfill.insert_errors"]], "insert_errors_html() (in module lxml.html.formfill)": [[16, "lxml.html.formfill.insert_errors_html"]], "lxml.html.formfill": [[16, "module-lxml.html.formfill"]], "with_traceback() (lxml.html.formfill.formnotfound method)": [[16, "lxml.html.formfill.FormNotFound.with_traceback"]], "asserts_and_reports (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron.ASSERTS_AND_REPORTS"]], "asserts_only (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron.ASSERTS_ONLY"]], "schematron (class in lxml.isoschematron)": [[19, "lxml.isoschematron.Schematron"]], "_append_log_message() (lxml.isoschematron.schematron method)": [[19, "lxml.isoschematron.Schematron._append_log_message"]], "_clear_error_log() (lxml.isoschematron.schematron method)": [[19, "lxml.isoschematron.Schematron._clear_error_log"]], "_compile (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron._compile"]], "_domain (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron._domain"]], "_error_type (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron._error_type"]], "_expand (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron._expand"]], "_extract() (lxml.isoschematron.schematron method)": [[19, "lxml.isoschematron.Schematron._extract"]], "_extract_rng (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron._extract_rng"]], "_extract_xsd (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron._extract_xsd"]], "_include (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron._include"]], "_level (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron._level"]], "_stylesheet_param_dict() (in module lxml.isoschematron)": [[19, "lxml.isoschematron._stylesheet_param_dict"]], "_validation_errors (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron._validation_errors"]], "assertvalid() (lxml.isoschematron.schematron method)": [[19, "lxml.isoschematron.Schematron.assertValid"]], "assert_() (lxml.isoschematron.schematron method)": [[19, "lxml.isoschematron.Schematron.assert_"]], "error_log (lxml.isoschematron.schematron attribute)": [[19, "lxml.isoschematron.Schematron.error_log"]], "lxml.isoschematron": [[19, "module-lxml.isoschematron"]], "schematron (lxml.isoschematron.schematron property)": [[19, "lxml.isoschematron.Schematron.schematron"]], "stylesheet_params() (in module lxml.isoschematron)": [[19, "lxml.isoschematron.stylesheet_params"]], "validate() (lxml.isoschematron.schematron method)": [[19, "lxml.isoschematron.Schematron.validate"]], "validation_report (lxml.isoschematron.schematron property)": [[19, "lxml.isoschematron.Schematron.validation_report"]], "validator_xslt (lxml.isoschematron.schematron property)": [[19, "lxml.isoschematron.Schematron.validator_xslt"]], "boolelement (class in lxml.objectify)": [[20, "lxml.objectify.BoolElement"]], "dataelement() (in module lxml.objectify)": [[20, "lxml.objectify.DataElement"]], "element() (in module lxml.objectify)": [[20, "lxml.objectify.Element"]], "elementmaker (class in lxml.objectify)": [[20, "lxml.objectify.ElementMaker"]], "floatelement (class in lxml.objectify)": [[20, "lxml.objectify.FloatElement"]], "intelement (class in lxml.objectify)": [[20, "lxml.objectify.IntElement"]], "longelement (class in lxml.objectify)": [[20, "lxml.objectify.LongElement"]], "noneelement (class in lxml.objectify)": [[20, "lxml.objectify.NoneElement"]], "numberelement (class in lxml.objectify)": [[20, "lxml.objectify.NumberElement"]], "objectpath (class in lxml.objectify)": [[20, "lxml.objectify.ObjectPath"]], "objectifieddataelement (class in lxml.objectify)": [[20, "lxml.objectify.ObjectifiedDataElement"]], "objectifiedelement (class in lxml.objectify)": [[20, "lxml.objectify.ObjectifiedElement"]], "objectifyelementclasslookup (class in lxml.objectify)": [[20, "lxml.objectify.ObjectifyElementClassLookup"]], "pytype (class in lxml.objectify)": [[20, "lxml.objectify.PyType"]], "stringelement (class in lxml.objectify)": [[20, "lxml.objectify.StringElement"]], "xml() (in module lxml.objectify)": [[20, "lxml.objectify.XML"]], "__unpickleelementtree() (in module lxml.objectify)": [[20, "lxml.objectify.__unpickleElementTree"]], "_init() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement._init"]], "_init() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement._init"]], "_init() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement._init"]], "_init() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement._init"]], "_init() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement._init"]], "_init() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement._init"]], "_init() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement._init"]], "_init() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement._init"]], "_init() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement._init"]], "_settext() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement._setText"]], "_settext() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement._setText"]], "_settext() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement._setText"]], "_settext() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement._setText"]], "_settext() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement._setText"]], "_settext() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement._setText"]], "_settext() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement._setText"]], "_settext() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement._setText"]], "_setvalueparser() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement._setValueParser"]], "_setvalueparser() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement._setValueParser"]], "_setvalueparser() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement._setValueParser"]], "_setvalueparser() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement._setValueParser"]], "_setvalueparser() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement._setValueParser"]], "addattr() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.addattr"]], "addattr() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.addattr"]], "addattr() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.addattr"]], "addattr() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.addattr"]], "addattr() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.addattr"]], "addattr() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.addattr"]], "addattr() (lxml.objectify.objectpath method)": [[20, "lxml.objectify.ObjectPath.addattr"]], "addattr() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.addattr"]], "addattr() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.addattr"]], "addattr() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.addattr"]], "addnext() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.addnext"]], "addnext() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.addnext"]], "addnext() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.addnext"]], "addnext() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.addnext"]], "addnext() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.addnext"]], "addnext() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.addnext"]], "addnext() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.addnext"]], "addnext() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.addnext"]], "addnext() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.addnext"]], "addprevious() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.addprevious"]], "addprevious() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.addprevious"]], "addprevious() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.addprevious"]], "addprevious() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.addprevious"]], "addprevious() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.addprevious"]], "addprevious() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.addprevious"]], "addprevious() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.addprevious"]], "addprevious() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.addprevious"]], "addprevious() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.addprevious"]], "annotate() (in module lxml.objectify)": [[20, "lxml.objectify.annotate"]], "append() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.append"]], "append() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.append"]], "append() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.append"]], "append() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.append"]], "append() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.append"]], "append() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.append"]], "append() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.append"]], "append() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.append"]], "append() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.append"]], "attrib (lxml.objectify.boolelement attribute)": [[20, "lxml.objectify.BoolElement.attrib"]], "attrib (lxml.objectify.floatelement attribute)": [[20, "lxml.objectify.FloatElement.attrib"]], "attrib (lxml.objectify.intelement attribute)": [[20, "lxml.objectify.IntElement.attrib"]], "attrib (lxml.objectify.longelement attribute)": [[20, "lxml.objectify.LongElement.attrib"]], "attrib (lxml.objectify.noneelement attribute)": [[20, "lxml.objectify.NoneElement.attrib"]], "attrib (lxml.objectify.numberelement attribute)": [[20, "lxml.objectify.NumberElement.attrib"]], "attrib (lxml.objectify.objectifieddataelement attribute)": [[20, "lxml.objectify.ObjectifiedDataElement.attrib"]], "attrib (lxml.objectify.objectifiedelement attribute)": [[20, "lxml.objectify.ObjectifiedElement.attrib"]], "attrib (lxml.objectify.stringelement attribute)": [[20, "lxml.objectify.StringElement.attrib"]], "base (lxml.objectify.boolelement attribute)": [[20, "lxml.objectify.BoolElement.base"]], "base (lxml.objectify.floatelement attribute)": [[20, "lxml.objectify.FloatElement.base"]], "base (lxml.objectify.intelement attribute)": [[20, "lxml.objectify.IntElement.base"]], "base (lxml.objectify.longelement attribute)": [[20, "lxml.objectify.LongElement.base"]], "base (lxml.objectify.noneelement attribute)": [[20, "lxml.objectify.NoneElement.base"]], "base (lxml.objectify.numberelement attribute)": [[20, "lxml.objectify.NumberElement.base"]], "base (lxml.objectify.objectifieddataelement attribute)": [[20, "lxml.objectify.ObjectifiedDataElement.base"]], "base (lxml.objectify.objectifiedelement attribute)": [[20, "lxml.objectify.ObjectifiedElement.base"]], "base (lxml.objectify.stringelement attribute)": [[20, "lxml.objectify.StringElement.base"]], "clear() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.clear"]], "clear() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.clear"]], "clear() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.clear"]], "clear() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.clear"]], "clear() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.clear"]], "clear() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.clear"]], "clear() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.clear"]], "clear() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.clear"]], "clear() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.clear"]], "countchildren() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.countchildren"]], "countchildren() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.countchildren"]], "countchildren() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.countchildren"]], "countchildren() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.countchildren"]], "countchildren() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.countchildren"]], "countchildren() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.countchildren"]], "countchildren() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.countchildren"]], "countchildren() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.countchildren"]], "countchildren() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.countchildren"]], "cssselect() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.cssselect"]], "cssselect() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.cssselect"]], "cssselect() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.cssselect"]], "cssselect() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.cssselect"]], "cssselect() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.cssselect"]], "cssselect() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.cssselect"]], "cssselect() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.cssselect"]], "cssselect() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.cssselect"]], "cssselect() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.cssselect"]], "deannotate() (in module lxml.objectify)": [[20, "lxml.objectify.deannotate"]], "descendantpaths() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.descendantpaths"]], "descendantpaths() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.descendantpaths"]], "descendantpaths() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.descendantpaths"]], "descendantpaths() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.descendantpaths"]], "descendantpaths() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.descendantpaths"]], "descendantpaths() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.descendantpaths"]], "descendantpaths() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.descendantpaths"]], "descendantpaths() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.descendantpaths"]], "descendantpaths() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.descendantpaths"]], "dump() (in module lxml.objectify)": [[20, "lxml.objectify.dump"]], "enable_recursive_str() (in module lxml.objectify)": [[20, "lxml.objectify.enable_recursive_str"]], "extend() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.extend"]], "extend() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.extend"]], "extend() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.extend"]], "extend() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.extend"]], "extend() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.extend"]], "extend() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.extend"]], "extend() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.extend"]], "extend() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.extend"]], "extend() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.extend"]], "find (lxml.objectify.objectpath attribute)": [[20, "lxml.objectify.ObjectPath.find"]], "find() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.find"]], "find() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.find"]], "find() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.find"]], "find() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.find"]], "find() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.find"]], "find() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.find"]], "find() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.find"]], "find() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.find"]], "find() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.find"]], "findall() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.findall"]], "findall() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.findall"]], "findall() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.findall"]], "findall() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.findall"]], "findall() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.findall"]], "findall() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.findall"]], "findall() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.findall"]], "findall() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.findall"]], "findall() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.findall"]], "findtext() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.findtext"]], "findtext() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.findtext"]], "findtext() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.findtext"]], "findtext() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.findtext"]], "findtext() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.findtext"]], "findtext() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.findtext"]], "findtext() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.findtext"]], "findtext() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.findtext"]], "findtext() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.findtext"]], "fromstring() (in module lxml.objectify)": [[20, "lxml.objectify.fromstring"]], "get() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.get"]], "get() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.get"]], "get() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.get"]], "get() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.get"]], "get() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.get"]], "get() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.get"]], "get() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.get"]], "get() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.get"]], "get() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.get"]], "getregisteredtypes() (in module lxml.objectify)": [[20, "lxml.objectify.getRegisteredTypes"]], "getchildren() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.getchildren"]], "getchildren() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.getchildren"]], "getchildren() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.getchildren"]], "getchildren() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.getchildren"]], "getchildren() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.getchildren"]], "getchildren() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.getchildren"]], "getchildren() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.getchildren"]], "getchildren() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.getchildren"]], "getchildren() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.getchildren"]], "getiterator() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.getiterator"]], "getiterator() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.getiterator"]], "getiterator() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.getiterator"]], "getiterator() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.getiterator"]], "getiterator() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.getiterator"]], "getiterator() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.getiterator"]], "getiterator() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.getiterator"]], "getiterator() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.getiterator"]], "getiterator() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.getiterator"]], "getnext() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.getnext"]], "getnext() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.getnext"]], "getnext() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.getnext"]], "getnext() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.getnext"]], "getnext() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.getnext"]], "getnext() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.getnext"]], "getnext() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.getnext"]], "getnext() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.getnext"]], "getnext() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.getnext"]], "getparent() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.getparent"]], "getparent() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.getparent"]], "getparent() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.getparent"]], "getparent() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.getparent"]], "getparent() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.getparent"]], "getparent() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.getparent"]], "getparent() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.getparent"]], "getparent() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.getparent"]], "getparent() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.getparent"]], "getprevious() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.getprevious"]], "getprevious() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.getprevious"]], "getprevious() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.getprevious"]], "getprevious() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.getprevious"]], "getprevious() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.getprevious"]], "getprevious() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.getprevious"]], "getprevious() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.getprevious"]], "getprevious() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.getprevious"]], "getprevious() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.getprevious"]], "getroottree() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.getroottree"]], "getroottree() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.getroottree"]], "getroottree() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.getroottree"]], "getroottree() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.getroottree"]], "getroottree() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.getroottree"]], "getroottree() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.getroottree"]], "getroottree() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.getroottree"]], "getroottree() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.getroottree"]], "getroottree() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.getroottree"]], "hasattr() (lxml.objectify.objectpath method)": [[20, "lxml.objectify.ObjectPath.hasattr"]], "index() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.index"]], "index() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.index"]], "index() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.index"]], "index() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.index"]], "index() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.index"]], "index() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.index"]], "index() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.index"]], "index() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.index"]], "index() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.index"]], "insert() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.insert"]], "insert() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.insert"]], "insert() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.insert"]], "insert() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.insert"]], "insert() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.insert"]], "insert() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.insert"]], "insert() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.insert"]], "insert() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.insert"]], "insert() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.insert"]], "items() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.items"]], "items() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.items"]], "items() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.items"]], "items() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.items"]], "items() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.items"]], "items() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.items"]], "items() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.items"]], "items() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.items"]], "items() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.items"]], "iter() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.iter"]], "iter() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.iter"]], "iter() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.iter"]], "iter() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.iter"]], "iter() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.iter"]], "iter() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.iter"]], "iter() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.iter"]], "iter() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.iter"]], "iter() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.iter"]], "iterancestors() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.iterancestors"]], "iterancestors() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.iterancestors"]], "iterancestors() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.iterancestors"]], "iterancestors() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.iterancestors"]], "iterancestors() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.iterancestors"]], "iterancestors() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.iterancestors"]], "iterancestors() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.iterancestors"]], "iterancestors() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.iterancestors"]], "iterancestors() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.iterancestors"]], "iterchildren() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.iterchildren"]], "iterchildren() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.iterchildren"]], "iterchildren() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.iterchildren"]], "iterchildren() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.iterchildren"]], "iterchildren() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.iterchildren"]], "iterchildren() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.iterchildren"]], "iterchildren() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.iterchildren"]], "iterchildren() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.iterchildren"]], "iterchildren() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.iterchildren"]], "iterdescendants() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.iterdescendants"]], "iterdescendants() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.iterdescendants"]], "iterdescendants() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.iterdescendants"]], "iterdescendants() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.iterdescendants"]], "iterdescendants() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.iterdescendants"]], "iterdescendants() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.iterdescendants"]], "iterdescendants() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.iterdescendants"]], "iterdescendants() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.iterdescendants"]], "iterdescendants() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.iterdescendants"]], "iterfind() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.iterfind"]], "iterfind() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.iterfind"]], "iterfind() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.iterfind"]], "iterfind() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.iterfind"]], "iterfind() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.iterfind"]], "iterfind() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.iterfind"]], "iterfind() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.iterfind"]], "iterfind() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.iterfind"]], "iterfind() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.iterfind"]], "itersiblings() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.itersiblings"]], "itersiblings() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.itersiblings"]], "itersiblings() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.itersiblings"]], "itersiblings() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.itersiblings"]], "itersiblings() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.itersiblings"]], "itersiblings() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.itersiblings"]], "itersiblings() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.itersiblings"]], "itersiblings() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.itersiblings"]], "itersiblings() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.itersiblings"]], "itertext() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.itertext"]], "itertext() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.itertext"]], "itertext() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.itertext"]], "itertext() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.itertext"]], "itertext() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.itertext"]], "itertext() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.itertext"]], "itertext() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.itertext"]], "itertext() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.itertext"]], "itertext() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.itertext"]], "keys() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.keys"]], "keys() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.keys"]], "keys() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.keys"]], "keys() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.keys"]], "keys() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.keys"]], "keys() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.keys"]], "keys() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.keys"]], "keys() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.keys"]], "keys() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.keys"]], "lxml.objectify": [[20, "module-lxml.objectify"]], "makeelement() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.makeelement"]], "makeelement() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.makeelement"]], "makeelement() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.makeelement"]], "makeelement() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.makeelement"]], "makeelement() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.makeelement"]], "makeelement() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.makeelement"]], "makeelement() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.makeelement"]], "makeelement() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.makeelement"]], "makeelement() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.makeelement"]], "makeparser() (in module lxml.objectify)": [[20, "lxml.objectify.makeparser"]], "name (lxml.objectify.pytype attribute)": [[20, "lxml.objectify.PyType.name"]], "nsmap (lxml.objectify.boolelement attribute)": [[20, "lxml.objectify.BoolElement.nsmap"]], "nsmap (lxml.objectify.floatelement attribute)": [[20, "lxml.objectify.FloatElement.nsmap"]], "nsmap (lxml.objectify.intelement attribute)": [[20, "lxml.objectify.IntElement.nsmap"]], "nsmap (lxml.objectify.longelement attribute)": [[20, "lxml.objectify.LongElement.nsmap"]], "nsmap (lxml.objectify.noneelement attribute)": [[20, "lxml.objectify.NoneElement.nsmap"]], "nsmap (lxml.objectify.numberelement attribute)": [[20, "lxml.objectify.NumberElement.nsmap"]], "nsmap (lxml.objectify.objectifieddataelement attribute)": [[20, "lxml.objectify.ObjectifiedDataElement.nsmap"]], "nsmap (lxml.objectify.objectifiedelement attribute)": [[20, "lxml.objectify.ObjectifiedElement.nsmap"]], "nsmap (lxml.objectify.stringelement attribute)": [[20, "lxml.objectify.StringElement.nsmap"]], "parse() (in module lxml.objectify)": [[20, "lxml.objectify.parse"]], "prefix (lxml.objectify.boolelement attribute)": [[20, "lxml.objectify.BoolElement.prefix"]], "prefix (lxml.objectify.floatelement attribute)": [[20, "lxml.objectify.FloatElement.prefix"]], "prefix (lxml.objectify.intelement attribute)": [[20, "lxml.objectify.IntElement.prefix"]], "prefix (lxml.objectify.longelement attribute)": [[20, "lxml.objectify.LongElement.prefix"]], "prefix (lxml.objectify.noneelement attribute)": [[20, "lxml.objectify.NoneElement.prefix"]], "prefix (lxml.objectify.numberelement attribute)": [[20, "lxml.objectify.NumberElement.prefix"]], "prefix (lxml.objectify.objectifieddataelement attribute)": [[20, "lxml.objectify.ObjectifiedDataElement.prefix"]], "prefix (lxml.objectify.objectifiedelement attribute)": [[20, "lxml.objectify.ObjectifiedElement.prefix"]], "prefix (lxml.objectify.stringelement attribute)": [[20, "lxml.objectify.StringElement.prefix"]], "pyannotate() (in module lxml.objectify)": [[20, "lxml.objectify.pyannotate"]], "pytypename() (in module lxml.objectify)": [[20, "lxml.objectify.pytypename"]], "pyval (lxml.objectify.boolelement attribute)": [[20, "lxml.objectify.BoolElement.pyval"]], "pyval (lxml.objectify.floatelement attribute)": [[20, "lxml.objectify.FloatElement.pyval"]], "pyval (lxml.objectify.intelement attribute)": [[20, "lxml.objectify.IntElement.pyval"]], "pyval (lxml.objectify.longelement attribute)": [[20, "lxml.objectify.LongElement.pyval"]], "pyval (lxml.objectify.noneelement attribute)": [[20, "lxml.objectify.NoneElement.pyval"]], "pyval (lxml.objectify.numberelement attribute)": [[20, "lxml.objectify.NumberElement.pyval"]], "pyval (lxml.objectify.objectifieddataelement attribute)": [[20, "lxml.objectify.ObjectifiedDataElement.pyval"]], "pyval (lxml.objectify.stringelement attribute)": [[20, "lxml.objectify.StringElement.pyval"]], "register() (lxml.objectify.pytype method)": [[20, "lxml.objectify.PyType.register"]], "remove() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.remove"]], "remove() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.remove"]], "remove() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.remove"]], "remove() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.remove"]], "remove() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.remove"]], "remove() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.remove"]], "remove() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.remove"]], "remove() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.remove"]], "remove() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.remove"]], "replace() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.replace"]], "replace() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.replace"]], "replace() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.replace"]], "replace() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.replace"]], "replace() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.replace"]], "replace() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.replace"]], "replace() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.replace"]], "replace() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.replace"]], "replace() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.replace"]], "set() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.set"]], "set() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.set"]], "set() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.set"]], "set() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.set"]], "set() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.set"]], "set() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.set"]], "set() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.set"]], "set() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.set"]], "set() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.set"]], "set_default_parser() (in module lxml.objectify)": [[20, "lxml.objectify.set_default_parser"]], "set_pytype_attribute_tag() (in module lxml.objectify)": [[20, "lxml.objectify.set_pytype_attribute_tag"]], "setattr() (lxml.objectify.objectpath method)": [[20, "lxml.objectify.ObjectPath.setattr"]], "sourceline (lxml.objectify.boolelement attribute)": [[20, "lxml.objectify.BoolElement.sourceline"]], "sourceline (lxml.objectify.floatelement attribute)": [[20, "lxml.objectify.FloatElement.sourceline"]], "sourceline (lxml.objectify.intelement attribute)": [[20, "lxml.objectify.IntElement.sourceline"]], "sourceline (lxml.objectify.longelement attribute)": [[20, "lxml.objectify.LongElement.sourceline"]], "sourceline (lxml.objectify.noneelement attribute)": [[20, "lxml.objectify.NoneElement.sourceline"]], "sourceline (lxml.objectify.numberelement attribute)": [[20, "lxml.objectify.NumberElement.sourceline"]], "sourceline (lxml.objectify.objectifieddataelement attribute)": [[20, "lxml.objectify.ObjectifiedDataElement.sourceline"]], "sourceline (lxml.objectify.objectifiedelement attribute)": [[20, "lxml.objectify.ObjectifiedElement.sourceline"]], "sourceline (lxml.objectify.stringelement attribute)": [[20, "lxml.objectify.StringElement.sourceline"]], "stringify (lxml.objectify.pytype attribute)": [[20, "lxml.objectify.PyType.stringify"]], "strlen() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.strlen"]], "tag (lxml.objectify.boolelement attribute)": [[20, "lxml.objectify.BoolElement.tag"]], "tag (lxml.objectify.floatelement attribute)": [[20, "lxml.objectify.FloatElement.tag"]], "tag (lxml.objectify.intelement attribute)": [[20, "lxml.objectify.IntElement.tag"]], "tag (lxml.objectify.longelement attribute)": [[20, "lxml.objectify.LongElement.tag"]], "tag (lxml.objectify.noneelement attribute)": [[20, "lxml.objectify.NoneElement.tag"]], "tag (lxml.objectify.numberelement attribute)": [[20, "lxml.objectify.NumberElement.tag"]], "tag (lxml.objectify.objectifieddataelement attribute)": [[20, "lxml.objectify.ObjectifiedDataElement.tag"]], "tag (lxml.objectify.objectifiedelement attribute)": [[20, "lxml.objectify.ObjectifiedElement.tag"]], "tag (lxml.objectify.stringelement attribute)": [[20, "lxml.objectify.StringElement.tag"]], "tail (lxml.objectify.boolelement attribute)": [[20, "lxml.objectify.BoolElement.tail"]], "tail (lxml.objectify.floatelement attribute)": [[20, "lxml.objectify.FloatElement.tail"]], "tail (lxml.objectify.intelement attribute)": [[20, "lxml.objectify.IntElement.tail"]], "tail (lxml.objectify.longelement attribute)": [[20, "lxml.objectify.LongElement.tail"]], "tail (lxml.objectify.noneelement attribute)": [[20, "lxml.objectify.NoneElement.tail"]], "tail (lxml.objectify.numberelement attribute)": [[20, "lxml.objectify.NumberElement.tail"]], "tail (lxml.objectify.objectifieddataelement attribute)": [[20, "lxml.objectify.ObjectifiedDataElement.tail"]], "tail (lxml.objectify.objectifiedelement attribute)": [[20, "lxml.objectify.ObjectifiedElement.tail"]], "tail (lxml.objectify.stringelement attribute)": [[20, "lxml.objectify.StringElement.tail"]], "text (lxml.objectify.boolelement attribute)": [[20, "lxml.objectify.BoolElement.text"]], "text (lxml.objectify.floatelement attribute)": [[20, "lxml.objectify.FloatElement.text"]], "text (lxml.objectify.intelement attribute)": [[20, "lxml.objectify.IntElement.text"]], "text (lxml.objectify.longelement attribute)": [[20, "lxml.objectify.LongElement.text"]], "text (lxml.objectify.noneelement attribute)": [[20, "lxml.objectify.NoneElement.text"]], "text (lxml.objectify.numberelement attribute)": [[20, "lxml.objectify.NumberElement.text"]], "text (lxml.objectify.objectifieddataelement attribute)": [[20, "lxml.objectify.ObjectifiedDataElement.text"]], "text (lxml.objectify.objectifiedelement attribute)": [[20, "lxml.objectify.ObjectifiedElement.text"]], "text (lxml.objectify.stringelement attribute)": [[20, "lxml.objectify.StringElement.text"]], "type_check (lxml.objectify.pytype attribute)": [[20, "lxml.objectify.PyType.type_check"]], "unregister() (lxml.objectify.pytype method)": [[20, "lxml.objectify.PyType.unregister"]], "values() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.values"]], "values() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.values"]], "values() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.values"]], "values() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.values"]], "values() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.values"]], "values() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.values"]], "values() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.values"]], "values() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.values"]], "values() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.values"]], "xmlschematypes (lxml.objectify.pytype attribute)": [[20, "lxml.objectify.PyType.xmlSchemaTypes"]], "xpath() (lxml.objectify.boolelement method)": [[20, "lxml.objectify.BoolElement.xpath"]], "xpath() (lxml.objectify.floatelement method)": [[20, "lxml.objectify.FloatElement.xpath"]], "xpath() (lxml.objectify.intelement method)": [[20, "lxml.objectify.IntElement.xpath"]], "xpath() (lxml.objectify.longelement method)": [[20, "lxml.objectify.LongElement.xpath"]], "xpath() (lxml.objectify.noneelement method)": [[20, "lxml.objectify.NoneElement.xpath"]], "xpath() (lxml.objectify.numberelement method)": [[20, "lxml.objectify.NumberElement.xpath"]], "xpath() (lxml.objectify.objectifieddataelement method)": [[20, "lxml.objectify.ObjectifiedDataElement.xpath"]], "xpath() (lxml.objectify.objectifiedelement method)": [[20, "lxml.objectify.ObjectifiedElement.xpath"]], "xpath() (lxml.objectify.stringelement method)": [[20, "lxml.objectify.StringElement.xpath"]], "xsiannotate() (in module lxml.objectify)": [[20, "lxml.objectify.xsiannotate"]], "elementtreecontenthandler (class in lxml.sax)": [[21, "lxml.sax.ElementTreeContentHandler"]], "elementtreeproducer (class in lxml.sax)": [[21, "lxml.sax.ElementTreeProducer"]], "saxerror": [[21, "lxml.sax.SaxError"]], "__pyx_unpickle_elementtreeproducer() (in module lxml.sax)": [[21, "lxml.sax.__pyx_unpickle_ElementTreeProducer"]], "_buildtag() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler._buildTag"]], "_get_etree() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler._get_etree"]], "add_note() (lxml.sax.saxerror method)": [[21, "lxml.sax.SaxError.add_note"]], "args (lxml.sax.saxerror attribute)": [[21, "lxml.sax.SaxError.args"]], "characters() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.characters"]], "enddocument() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.endDocument"]], "endelement() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.endElement"]], "endelementns() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.endElementNS"]], "endprefixmapping() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.endPrefixMapping"]], "etree (lxml.sax.elementtreecontenthandler property)": [[21, "lxml.sax.ElementTreeContentHandler.etree"]], "ignorablewhitespace() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.ignorableWhitespace"]], "lxml.sax": [[21, "module-lxml.sax"]], "processinginstruction() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.processingInstruction"]], "saxify() (in module lxml.sax)": [[21, "lxml.sax.saxify"]], "saxify() (lxml.sax.elementtreeproducer method)": [[21, "lxml.sax.ElementTreeProducer.saxify"]], "setdocumentlocator() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.setDocumentLocator"]], "skippedentity() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.skippedEntity"]], "startdocument() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.startDocument"]], "startelement() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.startElement"]], "startelementns() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.startElementNS"]], "startprefixmapping() (lxml.sax.elementtreecontenthandler method)": [[21, "lxml.sax.ElementTreeContentHandler.startPrefixMapping"]], "with_traceback() (lxml.sax.saxerror method)": [[21, "lxml.sax.SaxError.with_traceback"]]}})
\ No newline at end of file
index 032578bee467be8e2700d8829c9e50b19faace6b..9f8a5a032cbc8fcee2c50ded3bc07539e06d805e 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <p>To build lxml from source, you need libxml2 and libxslt properly
 installed, <em>including the header files</em>.  These are likely shipped in
@@ -33,14 +33,14 @@ you must install before trying to build lxml.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#cython" id="id2">Cython</a></li>
-<li><a class="reference internal" href="#github-git-and-hg" id="id3">Github, git and hg</a></li>
-<li><a class="reference internal" href="#building-the-sources" id="id4">Building the sources</a></li>
-<li><a class="reference internal" href="#running-the-tests-and-reporting-errors" id="id5">Running the tests and reporting errors</a></li>
-<li><a class="reference internal" href="#building-an-egg-or-wheel" id="id6">Building an egg or wheel</a></li>
-<li><a class="reference internal" href="#building-lxml-on-macos-x" id="id7">Building lxml on MacOS-X</a></li>
-<li><a class="reference internal" href="#static-linking-on-windows" id="id8">Static linking on Windows</a></li>
-<li><a class="reference internal" href="#building-debian-packages-from-svn-sources" id="id9">Building Debian packages from SVN sources</a></li>
+<li><a class="reference internal" href="#cython" id="toc-entry-1">Cython</a></li>
+<li><a class="reference internal" href="#github-git-and-hg" id="toc-entry-2">Github, git and hg</a></li>
+<li><a class="reference internal" href="#building-the-sources" id="toc-entry-3">Building the sources</a></li>
+<li><a class="reference internal" href="#running-the-tests-and-reporting-errors" id="toc-entry-4">Running the tests and reporting errors</a></li>
+<li><a class="reference internal" href="#building-an-egg-or-wheel" id="toc-entry-5">Building an egg or wheel</a></li>
+<li><a class="reference internal" href="#building-lxml-on-macos-x" id="toc-entry-6">Building lxml on MacOS-X</a></li>
+<li><a class="reference internal" href="#static-linking-on-windows" id="toc-entry-7">Static linking on Windows</a></li>
+<li><a class="reference internal" href="#building-debian-packages-from-svn-sources" id="toc-entry-8">Building Debian packages from SVN sources</a></li>
 </ul>
 </div>
 <div class="section" id="cython">
@@ -316,7 +316,7 @@ installed using <tt class="docutils literal">dpkg <span class="pre">-i</span></t
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index e3f602b764938cc8cf52c74587ecf23ed525fbe8..4e8c43a6ee4cf7cc5c96f46744a88ba4b907ee64 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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,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="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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <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,
@@ -34,9 +34,9 @@ c-importable by extension modules implemented in <a class="reference external" h
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#passing-generated-trees-through-python" id="id1">Passing generated trees through Python</a></li>
-<li><a class="reference internal" href="#writing-external-modules-in-cython" id="id2">Writing external modules in Cython</a></li>
-<li><a class="reference internal" href="#writing-external-modules-in-c" id="id3">Writing external modules in C</a></li>
+<li><a class="reference internal" href="#passing-generated-trees-through-python" id="toc-entry-1">Passing generated trees through Python</a></li>
+<li><a class="reference internal" href="#writing-external-modules-in-cython" id="toc-entry-2">Writing external modules in Cython</a></li>
+<li><a class="reference internal" href="#writing-external-modules-in-c" id="toc-entry-3">Writing external modules in C</a></li>
 </ul>
 </div>
 <div class="section" id="passing-generated-trees-through-python">
@@ -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><span class="w"></span>
+<div class="syntax"><pre><span></span><span class="cm">/* My C extension */</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">/* common includes */</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"Python.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"stdio.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"string.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"stdarg.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/xmlversion.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/encoding.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/hash.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/tree.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/xmlIO.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/xmlsave.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/globals.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"libxml/xmlstring.h"</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">/* lxml.etree specific includes */</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"lxml-version.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"etree_defs.h"</span>
+<span class="cp">#include</span><span class="w"> </span><span class="cpf">"etree.h"</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>
+<span class="cm">/* setup code */</span>
+<span class="n">import_lxml__etree</span><span class="p">()</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: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
diff --git a/doc/html/changes-4.9.1.html b/doc/html/changes-4.9.1.html
deleted file mode 100644 (file)
index 59f8e6b..0000000
+++ /dev/null
@@ -1,3829 +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.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.9.1 (2022-07-01)</h1>
-<div class="section" id="bugs-fixed">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>A crash was resolved when using <tt class="docutils literal">iterwalk()</tt> (or <tt class="docutils literal">canonicalize()</tt>)
-after parsing certain incorrect input.  Note that <tt class="docutils literal">iterwalk()</tt> can crash
-on <em>valid</em> input parsed with the same parser <em>after</em> failing to parse the
-incorrect input.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id2">
-<h1>4.9.0 (2022-06-01)</h1>
-<div class="section" id="id3">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/341">GH#341</a>: The mixin inheritance order in <tt class="docutils literal">lxml.html</tt> was corrected.
-Patch by xmo-odoo.</li>
-</ul>
-</div>
-<div class="section" id="other-changes">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Built with Cython 0.29.30 to adapt to changes in Python 3.11 and 3.12.</li>
-<li>Wheels include zlib 1.2.12, libxml2 2.9.14 and libxslt 1.1.35
-(libxml2 2.9.12+ and libxslt 1.1.34 on Windows).</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/343">GH#343</a>: Windows-AArch64 build support in Visual Studio.
-Patch by Steve Dower.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id4">
-<h1>4.8.0 (2022-02-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/337">GH#337</a>: Path-like objects are now supported throughout the API instead of just strings.
-Patch by Henning Janssen.</li>
-<li>The <tt class="docutils literal">ElementMaker</tt> now supports <tt class="docutils literal">QName</tt> values as tags, which always override
-the default namespace of the factory.</li>
-</ul>
-</div>
-<div class="section" id="id5">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/338">GH#338</a>: In lxml.objectify, the XSI float annotation &quot;nan&quot; and &quot;inf&quot; were spelled in
-lower case, whereas XML Schema datatypes define them as &quot;NaN&quot; and &quot;INF&quot; respectively.
-Patch by Tobias Deiminger.</li>
-</ul>
-</div>
-<div class="section" id="id6">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Built with Cython 0.29.28.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id7">
-<h1>4.7.1 (2021-12-13)</h1>
-<div class="section" id="id8">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Chunked Unicode string parsing via <tt class="docutils literal">parser.feed()</tt> now encodes the input data
-to the native UTF-8 encoding directly, instead of going through <tt class="docutils literal">Py_UNICODE</tt> /
-<tt class="docutils literal">wchar_t</tt> encoding first, which previously required duplicate recoding in most cases.</li>
-</ul>
-</div>
-<div class="section" id="id9">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The standard namespace prefixes were mishandled during &quot;C14N2&quot; serialisation on Python 3.
-See <a class="reference external" href="https://mail.python.org/archives/list/lxml&#64;python.org/thread/6ZFBHFOVHOS5GFDOAMPCT6HM5HZPWQ4Q/">https://mail.python.org/archives/list/lxml&#64;python.org/thread/6ZFBHFOVHOS5GFDOAMPCT6HM5HZPWQ4Q/</a></li>
-<li><tt class="docutils literal">lxml.objectify</tt> previously accepted non-XML numbers with underscores (like &quot;1_000&quot;)
-as integers or float values in Python 3.6 and later. It now adheres to the number
-format of the XML spec again.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1939031">LP#1939031</a>: Static wheels of lxml now contain the header files of zlib and libiconv
-(in addition to the already provided headers of libxml2/libxslt/libexslt).</li>
-</ul>
-</div>
-<div class="section" id="id10">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Wheels include libxml2 2.9.12+ and libxslt 1.1.34 (also on Windows).</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id11">
-<h1>4.7.0 (2021-12-13)</h1>
-<ul class="simple">
-<li>Release retracted due to missing files in lxml/includes/.</li>
-</ul>
-</div>
-<div class="section" id="id12">
-<h1>4.6.5 (2021-12-12)</h1>
-<div class="section" id="id13">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>A vulnerability (GHSL-2021-1038) in the HTML cleaner allowed sneaking script
-content through SVG images (CVE-2021-43818).</li>
-<li>A vulnerability (GHSL-2021-1037) in the HTML cleaner allowed sneaking script
-content through CSS imports and other crafted constructs (CVE-2021-43818).</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id14">
-<h1>4.6.4 (2021-11-01)</h1>
-<div class="section" id="id15">
-<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="id16">
-<h1>4.6.3 (2021-03-21)</h1>
-<div class="section" id="id17">
-<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="id18">
-<h1>4.6.2 (2020-11-26)</h1>
-<div class="section" id="id19">
-<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="id20">
-<h1>4.6.1 (2020-10-18)</h1>
-<div class="section" id="id21">
-<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="id22">
-<h1>4.6.0 (2020-10-17)</h1>
-<div class="section" id="id23">
-<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="id24">
-<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="id25">
-<h1>4.5.2 (2020-07-09)</h1>
-<div class="section" id="id26">
-<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="id27">
-<h1>4.5.1 (2020-05-19)</h1>
-<div class="section" id="id28">
-<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="id29">
-<h1>4.5.0 (2020-01-29)</h1>
-<div class="section" id="id30">
-<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="id31">
-<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="id32">
-<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="id33">
-<h1>4.4.3 (2020-01-28)</h1>
-<div class="section" id="id34">
-<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="id35">
-<h1>4.4.2 (2019-11-25)</h1>
-<div class="section" id="id36">
-<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="id37">
-<h1>4.4.1 (2019-08-11)</h1>
-<div class="section" id="id38">
-<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="id39">
-<h1>4.4.0 (2019-07-27)</h1>
-<div class="section" id="id40">
-<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="id41">
-<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="id42">
-<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="id43">
-<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="id44">
-<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="id45">
-<h1>4.3.3 (2019-03-26)</h1>
-<div class="section" id="id46">
-<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="id47">
-<h1>4.3.2 (2019-02-29)</h1>
-<div class="section" id="id48">
-<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="id49">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Built with Cython 0.29.6.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id50">
-<h1>4.3.1 (2019-02-08)</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/1814522">LP#1814522</a>: Crash when appending a child subtree that contains unsubstituted
-entity references.</li>
-</ul>
-</div>
-<div class="section" id="id52">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Built with Cython 0.29.5.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id53">
-<h1>4.3.0 (2019-01-04)</h1>
-<div class="section" id="id54">
-<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="id55">
-<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="id56">
-<h1>4.2.6 (2019-01-02)</h1>
-<div class="section" id="id57">
-<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="id58">
-<h1>4.2.5 (2018-09-09)</h1>
-<div class="section" id="id59">
-<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="id60">
-<h1>4.2.4 (2018-08-03)</h1>
-<div class="section" id="id61">
-<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="id62">
-<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="id63">
-<h1>4.2.3 (2018-06-27)</h1>
-<div class="section" id="id64">
-<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="id65">
-<h1>4.2.2 (2018-06-22)</h1>
-<div class="section" id="id66">
-<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="id68">
-<h1>4.2.1 (2018-03-21)</h1>
-<div class="section" id="id69">
-<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="id70">
-<h1>4.2.0 (2018-03-13)</h1>
-<div class="section" id="id71">
-<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="id72">
-<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="id73">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id74">
-<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="id75">
-<h1>4.1.0 (2017-10-13)</h1>
-<div class="section" id="id76">
-<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="id77">
-<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="id78">
-<h1>4.0.0 (2017-09-17)</h1>
-<div class="section" id="id79">
-<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="id80">
-<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="id81">
-<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="id82">
-<h1>3.8.0 (2017-06-03)</h1>
-<div class="section" id="id83">
-<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="id84">
-<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="id86">
-<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="id87">
-<h1>3.7.4 (2017-??-??)</h1>
-<div class="section" id="id88">
-<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="id92">
-<h1>3.7.3 (2017-02-18)</h1>
-<div class="section" id="id93">
-<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="id94">
-<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="id96">
-<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="id98">
-<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="id99">
-<h1>3.7.0 (2016-12-10)</h1>
-<div class="section" id="id100">
-<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="id101">
-<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="id102">
-<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="id103">
-<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="id104">
-<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="id105">
-<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="id107">
-<h1>3.6.1 (2016-07-24)</h1>
-<div class="section" id="id108">
-<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="id109">
-<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="id111">
-<h1>3.6.0 (2016-03-17)</h1>
-<div class="section" id="id112">
-<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="id113">
-<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="id114">
-<h1>3.5.0 (2015-11-13)</h1>
-<div class="section" id="id115">
-<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="id116">
-<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="id117">
-<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="id118">
-<h1>3.4.4 (2015-04-25)</h1>
-<div class="section" id="id119">
-<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="id120">
-<h1>3.4.3 (2015-04-15)</h1>
-<div class="section" id="id121">
-<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="id122">
-<h1>3.4.2 (2015-02-07)</h1>
-<div class="section" id="id123">
-<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="id124">
-<h1>3.4.1 (2014-11-20)</h1>
-<div class="section" id="id125">
-<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="id126">
-<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="id127">
-<h1>3.4.0 (2014-09-10)</h1>
-<div class="section" id="id128">
-<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="id129">
-<h2>Bugs fixed</h2>
-</div>
-<div class="section" id="id130">
-<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="id131">
-<h1>3.3.6 (2014-08-28)</h1>
-<div class="section" id="id132">
-<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="id133">
-<h1>3.3.5 (2014-04-18)</h1>
-<div class="section" id="id134">
-<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="id135">
-<h1>3.3.4 (2014-04-03)</h1>
-<div class="section" id="id136">
-<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="id137">
-<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="id138">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id139">
-<h1>3.3.3 (2014-03-04)</h1>
-<div class="section" id="id140">
-<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="id141">
-<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="id142">
-<h1>3.3.2 (2014-02-26)</h1>
-<div class="section" id="id143">
-<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="id144">
-<h1>3.3.1 (2014-02-12)</h1>
-<div class="section" id="id145">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id146">
-<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="id147">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id148">
-<h1>3.3.0 (2014-01-26)</h1>
-<div class="section" id="id149">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id150">
-<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="id151">
-<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="id152">
-<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="id153">
-<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="id154">
-<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="id155">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id156">
-<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="id157">
-<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="id158">
-<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="id159">
-<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="id160">
-<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="id161">
-<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="id162">
-<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="id163">
-<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="id164">
-<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="id165">
-<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="id166">
-<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="id167">
-<h1>3.2.5 (2014-01-02)</h1>
-<div class="section" id="id168">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id169">
-<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="id171">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id172">
-<h1>3.2.4 (2013-11-07)</h1>
-<div class="section" id="id173">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id174">
-<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="id177">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id178">
-<h1>3.2.3 (2013-07-28)</h1>
-<div class="section" id="id179">
-<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="id180">
-<h1>3.2.2 (2013-07-28)</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/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="id183">
-<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="id184">
-<h1>3.2.1 (2013-05-11)</h1>
-<div class="section" id="id185">
-<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="id186">
-<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="id187">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id188">
-<h1>3.2.0 (2013-04-28)</h1>
-<div class="section" id="id189">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id190">
-<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="id191">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id192">
-<h1>3.1.2 (2013-04-12)</h1>
-<div class="section" id="id193">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id194">
-<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="id195">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id196">
-<h1>3.1.1 (2013-03-29)</h1>
-<div class="section" id="id197">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id198">
-<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="id199">
-<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="id200">
-<h1>3.1.0 (2013-02-10)</h1>
-<div class="section" id="id201">
-<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="id202">
-<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="id203">
-<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="id204">
-<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="id205">
-<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="id206">
-<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="id207">
-<h1>3.0.2 (2012-12-14)</h1>
-<div class="section" id="id208">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id209">
-<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="id210">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id211">
-<h1>3.0.1 (2012-10-14)</h1>
-<div class="section" id="id212">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id213">
-<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="id214">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id215">
-<h1>3.0 (2012-10-08)</h1>
-<div class="section" id="id216">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id217">
-<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="id218">
-<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="id219">
-<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="id220">
-<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="id221">
-<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="id222">
-<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="id223">
-<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="id224">
-<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="id225">
-<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="id226">
-<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="id227">
-<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="id228">
-<h1>2.3.6 (2012-09-28)</h1>
-<div class="section" id="id229">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id230">
-<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="id231">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id232">
-<h1>2.3.5 (2012-07-31)</h1>
-<div class="section" id="id233">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id234">
-<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="id235">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id236">
-<h1>2.3.4 (2012-03-26)</h1>
-<div class="section" id="id237">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id238">
-<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="id239">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id240">
-<h1>2.3.3 (2012-01-04)</h1>
-<div class="section" id="id241">
-<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="id242">
-<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="id243">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id244">
-<h1>2.3.2 (2011-11-11)</h1>
-<div class="section" id="id245">
-<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="id246">
-<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="id247">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id248">
-<h1>2.3.1 (2011-09-25)</h1>
-<div class="section" id="id249">
-<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="id250">
-<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="id251">
-<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="id252">
-<h1>2.3 (2011-02-06)</h1>
-<div class="section" id="id253">
-<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="id254">
-<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="id255">
-<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="id256">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id257">
-<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="id258">
-<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="id259">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id260">
-<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="id261">
-<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="id262">
-<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="id263">
-<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="id264">
-<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="id265">
-<h1>2.2.8 (2010-09-02)</h1>
-<div class="section" id="id266">
-<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="id267">
-<h1>2.2.7 (2010-07-24)</h1>
-<div class="section" id="id268">
-<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="id269">
-<h1>2.2.6 (2010-03-02)</h1>
-<div class="section" id="id270">
-<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="id271">
-<h1>2.2.5 (2010-02-28)</h1>
-<div class="section" id="id272">
-<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="id273">
-<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="id274">
-<h1>2.2.4 (2009-11-11)</h1>
-<div class="section" id="id275">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Static build of libxml2/libxslt was broken.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id276">
-<h1>2.2.3 (2009-10-30)</h1>
-<div class="section" id="id277">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id278">
-<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="id279">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id280">
-<h1>2.2.2 (2009-06-21)</h1>
-<div class="section" id="id281">
-<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="id282">
-<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="id283">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id284">
-<h1>2.2.1 (2009-06-02)</h1>
-<div class="section" id="id285">
-<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="id286">
-<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="id287">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id288">
-<h1>2.2 (2009-03-21)</h1>
-<div class="section" id="id289">
-<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="id290">
-<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="id291">
-<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="id292">
-<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="id293">
-<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="id294">
-<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="id295">
-<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="id296">
-<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="id297">
-<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="id298">
-<h1>2.1.5 (2009-01-06)</h1>
-<div class="section" id="id299">
-<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="id300">
-<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="id301">
-<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="id302">
-<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="id303">
-<h1>2.1.4 (2008-12-12)</h1>
-<div class="section" id="id304">
-<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="id305">
-<h1>2.0.11 (2008-12-12)</h1>
-<div class="section" id="id306">
-<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="id307">
-<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="id308">
-<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="id309">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id310">
-<h1>2.1.3 (2008-11-17)</h1>
-<div class="section" id="id311">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id312">
-<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="id313">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id314">
-<h1>2.0.10 (2008-11-17)</h1>
-<div class="section" id="id315">
-<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="id316">
-<h1>2.1.2 (2008-09-05)</h1>
-<div class="section" id="id317">
-<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="id318">
-<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="id319">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id320">
-<h1>2.0.9 (2008-09-05)</h1>
-<div class="section" id="id321">
-<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="id322">
-<h1>2.1.1 (2008-07-24)</h1>
-<div class="section" id="id323">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id324">
-<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="id325">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id326">
-<h1>2.0.8 (2008-07-24)</h1>
-<div class="section" id="id327">
-<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="id328">
-<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="id329">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id330">
-<h1>2.1 (2008-07-09)</h1>
-<div class="section" id="id331">
-<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="id332">
-<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="id333">
-<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="id334">
-<h1>2.0.7 (2008-06-20)</h1>
-<div class="section" id="id335">
-<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="id336">
-<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="id337">
-<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="id338">
-<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="id339">
-<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="id340">
-<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="id341">
-<h1>2.0.6 (2008-05-31)</h1>
-<div class="section" id="id342">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id343">
-<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="id344">
-<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="id345">
-<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="id346">
-<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="id347">
-<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="id348">
-<h1>2.0.5 (2008-05-01)</h1>
-<div class="section" id="id349">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id350">
-<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="id351">
-<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="id352">
-<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="id353">
-<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="id354">
-<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="id355">
-<h1>2.0.4 (2008-04-13)</h1>
-<div class="section" id="id356">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id357">
-<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="id358">
-<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="id359">
-<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="id360">
-<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="id361">
-<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="id362">
-<h1>2.0.3 (2008-03-26)</h1>
-<div class="section" id="id363">
-<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="id364">
-<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="id365">
-<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="id366">
-<h1>2.0.2 (2008-02-22)</h1>
-<div class="section" id="id367">
-<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="id368">
-<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="id369">
-<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="id370">
-<h1>2.0.1 (2008-02-13)</h1>
-<div class="section" id="id371">
-<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="id372">
-<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="id373">
-<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="id374">
-<h1>2.0 (2008-02-01)</h1>
-<div class="section" id="id375">
-<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="id376">
-<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="id377">
-<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="id378">
-<h1>1.3.6 (2007-10-29)</h1>
-<div class="section" id="id379">
-<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="id380">
-<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="id381">
-<h1>1.3.5 (2007-10-22)</h1>
-<div class="section" id="id382">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id383">
-<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="id384">
-<h1>1.3.4 (2007-08-30)</h1>
-<div class="section" id="id385">
-<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="id386">
-<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="id387">
-<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="id388">
-<h1>1.3.3 (2007-07-26)</h1>
-<div class="section" id="id389">
-<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="id390">
-<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="id391">
-<h1>1.3.2 (2007-07-03)</h1>
-<div class="section" id="id392">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id393">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>&quot;deallocating None&quot; crash bug</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id394">
-<h1>1.3.1 (2007-07-02)</h1>
-<div class="section" id="id395">
-<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="id396">
-<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="id397">
-<h1>1.3 (2007-06-24)</h1>
-<div class="section" id="id398">
-<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="id399">
-<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="id400">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>major restructuring in the documentation</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id401">
-<h1>1.2.1 (2007-02-27)</h1>
-<div class="section" id="id402">
-<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="id403">
-<h1>1.2 (2007-02-20)</h1>
-<div class="section" id="id404">
-<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="id405">
-<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="id406">
-<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="id407">
-<h1>1.1.2 (2006-10-30)</h1>
-<div class="section" id="id408">
-<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="id409">
-<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="id410">
-<h1>1.1.1 (2006-09-21)</h1>
-<div class="section" id="id411">
-<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="id412">
-<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="id413">
-<h1>1.1 (2006-09-13)</h1>
-<div class="section" id="id414">
-<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="id415">
-<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="id416">
-<h1>1.0.4 (2006-09-09)</h1>
-<div class="section" id="id417">
-<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="id418">
-<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="id419">
-<h1>1.0.3 (2006-08-08)</h1>
-<div class="section" id="id420">
-<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="id421">
-<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="id422">
-<h1>1.0.2 (2006-06-27)</h1>
-<div class="section" id="id423">
-<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="id424">
-<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="id425">
-<h1>1.0.1 (2006-06-09)</h1>
-<div class="section" id="id426">
-<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="id427">
-<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="id428">
-<h1>1.0 (2006-06-01)</h1>
-<div class="section" id="id429">
-<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="id430">
-<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="id431">
-<h1>0.9.2 (2006-05-10)</h1>
-<div class="section" id="id432">
-<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="id433">
-<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="id434">
-<h1>0.9.1 (2006-03-30)</h1>
-<div class="section" id="id435">
-<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="id436">
-<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="id437">
-<h1>0.9 (2006-03-20)</h1>
-<div class="section" id="id438">
-<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="id439">
-<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="id440">
-<h1>0.8 (2005-11-03)</h1>
-<div class="section" id="id441">
-<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="id442">
-<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="id443">
-<h1>0.7 (2005-06-15)</h1>
-<div class="section" id="id444">
-<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="id445">
-<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="id446">
-<h1>0.6 (2005-05-14)</h1>
-<div class="section" id="id447">
-<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="id448">
-<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="id449">
-<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="id450">
-<h1>0.5 (2005-04-08)</h1>
-<p>Initial public release.</p>
-</div>
-</div>
-<div class="footer">
-<hr class="footer" />
-Generated on: 2022-07-01.
-
-</div>
-</body>
-</html>
diff --git a/doc/html/changes-4.9.3.html b/doc/html/changes-4.9.3.html
new file mode 100644 (file)
index 0000000..ce261dd
--- /dev/null
@@ -0,0 +1,3871 @@
+<?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.18.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="section-1">
+<h1>4.9.3 (2023-07-05)</h1>
+<div class="section" id="bugs-fixed">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.objectify</tt> accepted non-decimal numbers like <tt class="docutils literal">²²²</tt> as integers.</li>
+<li>A memory leak in <tt class="docutils literal">lxml.html.clean</tt> was resolved by switching to Cython 0.29.34+.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/348">GH#348</a>: URL checking in the HTML cleaner was improved.
+Patch by Tim McCormack.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/371">GH#371</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/373">GH#373</a>: Some regex strings were changed to raw strings to fix Python warnings.
+Patches by Jakub Wilk and Anthony Sottile.</li>
+</ul>
+</div>
+<div class="section" id="other-changes">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Wheels include zlib 1.2.13, libxml2 2.10.3 and libxslt 1.1.38
+(zlib 1.2.12, libxml2 2.10.3 and libxslt 1.1.37 on Windows).</li>
+<li>Built with Cython 0.29.36 to adapt to changes in Python 3.12.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-2">
+<h1>4.9.2 (2022-12-13)</h1>
+<div class="section" id="bugs-fixed-1">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>CVE-2022-2309: A Bug in libxml2 2.9.1[0-4] could let namespace declarations
+from a failed parser run leak into later parser runs.  This bug was worked around
+in lxml and resolved in libxml2 2.10.0.
+<a class="reference external" href="https://gitlab.gnome.org/GNOME/libxml2/-/issues/378">https://gitlab.gnome.org/GNOME/libxml2/-/issues/378</a></li>
+</ul>
+</div>
+<div class="section" id="other-changes-1">
+<h2>Other changes</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1981760">LP#1981760</a>: <tt class="docutils literal">Element.attrib</tt> now registers as <tt class="docutils literal">collections.abc.MutableMapping</tt>.</li>
+<li>lxml now has a static build setup for macOS on ARM64 machines (not used for building wheels).
+Patch by Quentin Leffray.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-3">
+<h1>4.9.1 (2022-07-01)</h1>
+<div class="section" id="bugs-fixed-2">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>A crash was resolved when using <tt class="docutils literal">iterwalk()</tt> (or <tt class="docutils literal">canonicalize()</tt>)
+after parsing certain incorrect input.  Note that <tt class="docutils literal">iterwalk()</tt> can crash
+on <em>valid</em> input parsed with the same parser <em>after</em> failing to parse the
+incorrect input.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-4">
+<h1>4.9.0 (2022-06-01)</h1>
+<div class="section" id="bugs-fixed-3">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/341">GH#341</a>: The mixin inheritance order in <tt class="docutils literal">lxml.html</tt> was corrected.
+Patch by xmo-odoo.</li>
+</ul>
+</div>
+<div class="section" id="other-changes-2">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Built with Cython 0.29.30 to adapt to changes in Python 3.11 and 3.12.</li>
+<li>Wheels include zlib 1.2.12, libxml2 2.9.14 and libxslt 1.1.35
+(libxml2 2.9.12+ and libxslt 1.1.34 on Windows).</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/343">GH#343</a>: Windows-AArch64 build support in Visual Studio.
+Patch by Steve Dower.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-5">
+<h1>4.8.0 (2022-02-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/337">GH#337</a>: Path-like objects are now supported throughout the API instead of just strings.
+Patch by Henning Janssen.</li>
+<li>The <tt class="docutils literal">ElementMaker</tt> now supports <tt class="docutils literal">QName</tt> values as tags, which always override
+the default namespace of the factory.</li>
+</ul>
+</div>
+<div class="section" id="bugs-fixed-4">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/338">GH#338</a>: In lxml.objectify, the XSI float annotation &quot;nan&quot; and &quot;inf&quot; were spelled in
+lower case, whereas XML Schema datatypes define them as &quot;NaN&quot; and &quot;INF&quot; respectively.
+Patch by Tobias Deiminger.</li>
+</ul>
+</div>
+<div class="section" id="other-changes-3">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Built with Cython 0.29.28.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-6">
+<h1>4.7.1 (2021-12-13)</h1>
+<div class="section" id="features-added-1">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Chunked Unicode string parsing via <tt class="docutils literal">parser.feed()</tt> now encodes the input data
+to the native UTF-8 encoding directly, instead of going through <tt class="docutils literal">Py_UNICODE</tt> /
+<tt class="docutils literal">wchar_t</tt> encoding first, which previously required duplicate recoding in most cases.</li>
+</ul>
+</div>
+<div class="section" id="bugs-fixed-5">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The standard namespace prefixes were mishandled during &quot;C14N2&quot; serialisation on Python 3.
+See <a class="reference external" href="https://mail.python.org/archives/list/lxml&#64;python.org/thread/6ZFBHFOVHOS5GFDOAMPCT6HM5HZPWQ4Q/">https://mail.python.org/archives/list/lxml&#64;python.org/thread/6ZFBHFOVHOS5GFDOAMPCT6HM5HZPWQ4Q/</a></li>
+<li><tt class="docutils literal">lxml.objectify</tt> previously accepted non-XML numbers with underscores (like &quot;1_000&quot;)
+as integers or float values in Python 3.6 and later. It now adheres to the number
+format of the XML spec again.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1939031">LP#1939031</a>: Static wheels of lxml now contain the header files of zlib and libiconv
+(in addition to the already provided headers of libxml2/libxslt/libexslt).</li>
+</ul>
+</div>
+<div class="section" id="other-changes-4">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Wheels include libxml2 2.9.12+ and libxslt 1.1.34 (also on Windows).</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-7">
+<h1>4.7.0 (2021-12-13)</h1>
+<ul class="simple">
+<li>Release retracted due to missing files in lxml/includes/.</li>
+</ul>
+</div>
+<div class="section" id="section-8">
+<h1>4.6.5 (2021-12-12)</h1>
+<div class="section" id="bugs-fixed-6">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>A vulnerability (GHSL-2021-1038) in the HTML cleaner allowed sneaking script
+content through SVG images (CVE-2021-43818).</li>
+<li>A vulnerability (GHSL-2021-1037) in the HTML cleaner allowed sneaking script
+content through CSS imports and other crafted constructs (CVE-2021-43818).</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-9">
+<h1>4.6.4 (2021-11-01)</h1>
+<div class="section" id="features-added-2">
+<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="section-10">
+<h1>4.6.3 (2021-03-21)</h1>
+<div class="section" id="bugs-fixed-7">
+<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="section-11">
+<h1>4.6.2 (2020-11-26)</h1>
+<div class="section" id="bugs-fixed-8">
+<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="section-12">
+<h1>4.6.1 (2020-10-18)</h1>
+<div class="section" id="bugs-fixed-9">
+<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="section-13">
+<h1>4.6.0 (2020-10-17)</h1>
+<div class="section" id="features-added-3">
+<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="bugs-fixed-10">
+<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="section-14">
+<h1>4.5.2 (2020-07-09)</h1>
+<div class="section" id="bugs-fixed-11">
+<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="section-15">
+<h1>4.5.1 (2020-05-19)</h1>
+<div class="section" id="bugs-fixed-12">
+<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="section-16">
+<h1>4.5.0 (2020-01-29)</h1>
+<div class="section" id="features-added-4">
+<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="bugs-fixed-13">
+<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-5">
+<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="section-17">
+<h1>4.4.3 (2020-01-28)</h1>
+<div class="section" id="bugs-fixed-14">
+<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="section-18">
+<h1>4.4.2 (2019-11-25)</h1>
+<div class="section" id="bugs-fixed-15">
+<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="section-19">
+<h1>4.4.1 (2019-08-11)</h1>
+<div class="section" id="bugs-fixed-16">
+<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="section-20">
+<h1>4.4.0 (2019-07-27)</h1>
+<div class="section" id="features-added-5">
+<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="bugs-fixed-17">
+<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="other-changes-6">
+<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="section-21">
+<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="section-22">
+<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="section-23">
+<h1>4.3.3 (2019-03-26)</h1>
+<div class="section" id="bugs-fixed-18">
+<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="section-24">
+<h1>4.3.2 (2019-02-29)</h1>
+<div class="section" id="bugs-fixed-19">
+<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="other-changes-7">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Built with Cython 0.29.6.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-25">
+<h1>4.3.1 (2019-02-08)</h1>
+<div class="section" id="bugs-fixed-20">
+<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="other-changes-8">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Built with Cython 0.29.5.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-26">
+<h1>4.3.0 (2019-01-04)</h1>
+<div class="section" id="features-added-6">
+<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="other-changes-9">
+<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="section-27">
+<h1>4.2.6 (2019-01-02)</h1>
+<div class="section" id="bugs-fixed-21">
+<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="section-28">
+<h1>4.2.5 (2018-09-09)</h1>
+<div class="section" id="bugs-fixed-22">
+<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="section-29">
+<h1>4.2.4 (2018-08-03)</h1>
+<div class="section" id="features-added-7">
+<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="bugs-fixed-23">
+<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="section-30">
+<h1>4.2.3 (2018-06-27)</h1>
+<div class="section" id="bugs-fixed-24">
+<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="section-31">
+<h1>4.2.2 (2018-06-22)</h1>
+<div class="section" id="bugs-fixed-25">
+<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="section-32">
+<h1>4.2.1 (2018-03-21)</h1>
+<div class="section" id="bugs-fixed-26">
+<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="section-33">
+<h1>4.2.0 (2018-03-13)</h1>
+<div class="section" id="features-added-8">
+<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="bugs-fixed-27">
+<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="other-changes-10">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-34">
+<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="section-35">
+<h1>4.1.0 (2017-10-13)</h1>
+<div class="section" id="features-added-9">
+<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="bugs-fixed-28">
+<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="section-36">
+<h1>4.0.0 (2017-09-17)</h1>
+<div class="section" id="features-added-10">
+<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="bugs-fixed-29">
+<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="other-changes-11">
+<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="section-37">
+<h1>3.8.0 (2017-06-03)</h1>
+<div class="section" id="features-added-11">
+<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="bugs-fixed-30">
+<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="other-changes-12">
+<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="section-38">
+<h1>3.7.4 (2017-??-??)</h1>
+<div class="section" id="bugs-fixed-31">
+<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="section-39">
+<h1>3.7.3 (2017-02-18)</h1>
+<div class="section" id="bugs-fixed-32">
+<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="section-40">
+<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="bugs-fixed-33">
+<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="section-41">
+<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="section-42">
+<h1>3.7.0 (2016-12-10)</h1>
+<div class="section" id="features-added-12">
+<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="bugs-fixed-34">
+<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="other-changes-13">
+<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="section-43">
+<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="section-44">
+<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="section-45">
+<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="section-46">
+<h1>3.6.1 (2016-07-24)</h1>
+<div class="section" id="features-added-13">
+<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="bugs-fixed-35">
+<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="section-47">
+<h1>3.6.0 (2016-03-17)</h1>
+<div class="section" id="features-added-14">
+<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="bugs-fixed-36">
+<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="section-48">
+<h1>3.5.0 (2015-11-13)</h1>
+<div class="section" id="bugs-fixed-37">
+<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="features-added-15">
+<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="bugs-fixed-38">
+<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="section-49">
+<h1>3.4.4 (2015-04-25)</h1>
+<div class="section" id="bugs-fixed-39">
+<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="section-50">
+<h1>3.4.3 (2015-04-15)</h1>
+<div class="section" id="bugs-fixed-40">
+<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="section-51">
+<h1>3.4.2 (2015-02-07)</h1>
+<div class="section" id="bugs-fixed-41">
+<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="section-52">
+<h1>3.4.1 (2014-11-20)</h1>
+<div class="section" id="features-added-16">
+<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="bugs-fixed-42">
+<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="section-53">
+<h1>3.4.0 (2014-09-10)</h1>
+<div class="section" id="features-added-17">
+<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="bugs-fixed-43">
+<h2>Bugs fixed</h2>
+</div>
+<div class="section" id="other-changes-14">
+<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="section-54">
+<h1>3.3.6 (2014-08-28)</h1>
+<div class="section" id="bugs-fixed-44">
+<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="section-55">
+<h1>3.3.5 (2014-04-18)</h1>
+<div class="section" id="bugs-fixed-45">
+<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="section-56">
+<h1>3.3.4 (2014-04-03)</h1>
+<div class="section" id="features-added-18">
+<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="bugs-fixed-46">
+<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="other-changes-15">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-57">
+<h1>3.3.3 (2014-03-04)</h1>
+<div class="section" id="bugs-fixed-47">
+<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="other-changes-16">
+<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="section-58">
+<h1>3.3.2 (2014-02-26)</h1>
+<div class="section" id="bugs-fixed-48">
+<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="section-59">
+<h1>3.3.1 (2014-02-12)</h1>
+<div class="section" id="features-added-19">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-49">
+<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="other-changes-17">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-60">
+<h1>3.3.0 (2014-01-26)</h1>
+<div class="section" id="features-added-20">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-50">
+<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="other-changes-18">
+<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="features-added-21">
+<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="bugs-fixed-51">
+<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="other-changes-19">
+<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="features-added-22">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-52">
+<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="other-changes-20">
+<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="features-added-23">
+<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="bugs-fixed-53">
+<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="other-changes-21">
+<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="features-added-24">
+<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="bugs-fixed-54">
+<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="other-changes-22">
+<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="features-added-25">
+<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="bugs-fixed-55">
+<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="other-changes-23">
+<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="section-61">
+<h1>3.2.5 (2014-01-02)</h1>
+<div class="section" id="features-added-26">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-56">
+<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="other-changes-24">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-62">
+<h1>3.2.4 (2013-11-07)</h1>
+<div class="section" id="features-added-27">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-57">
+<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="other-changes-25">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-63">
+<h1>3.2.3 (2013-07-28)</h1>
+<div class="section" id="bugs-fixed-58">
+<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="section-64">
+<h1>3.2.2 (2013-07-28)</h1>
+<div class="section" id="features-added-28">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-59">
+<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="other-changes-26">
+<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="section-65">
+<h1>3.2.1 (2013-05-11)</h1>
+<div class="section" id="features-added-29">
+<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="bugs-fixed-60">
+<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="other-changes-27">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-66">
+<h1>3.2.0 (2013-04-28)</h1>
+<div class="section" id="features-added-30">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-61">
+<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="other-changes-28">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-67">
+<h1>3.1.2 (2013-04-12)</h1>
+<div class="section" id="features-added-31">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-62">
+<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="other-changes-29">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-68">
+<h1>3.1.1 (2013-03-29)</h1>
+<div class="section" id="features-added-32">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-63">
+<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="other-changes-30">
+<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="section-69">
+<h1>3.1.0 (2013-02-10)</h1>
+<div class="section" id="features-added-33">
+<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="bugs-fixed-64">
+<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="other-changes-31">
+<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="features-added-34">
+<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="bugs-fixed-65">
+<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="other-changes-32">
+<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="section-70">
+<h1>3.0.2 (2012-12-14)</h1>
+<div class="section" id="features-added-35">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-66">
+<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="other-changes-33">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-71">
+<h1>3.0.1 (2012-10-14)</h1>
+<div class="section" id="features-added-36">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-67">
+<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="other-changes-34">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-72">
+<h1>3.0 (2012-10-08)</h1>
+<div class="section" id="features-added-37">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-68">
+<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="other-changes-35">
+<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="features-added-38">
+<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="bugs-fixed-69">
+<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="other-changes-36">
+<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="features-added-39">
+<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="bugs-fixed-70">
+<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="other-changes-37">
+<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="features-added-40">
+<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="bugs-fixed-71">
+<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="other-changes-38">
+<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="section-73">
+<h1>2.3.6 (2012-09-28)</h1>
+<div class="section" id="features-added-41">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-72">
+<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="other-changes-39">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-74">
+<h1>2.3.5 (2012-07-31)</h1>
+<div class="section" id="features-added-42">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-73">
+<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="other-changes-40">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-75">
+<h1>2.3.4 (2012-03-26)</h1>
+<div class="section" id="features-added-43">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-74">
+<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="other-changes-41">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-76">
+<h1>2.3.3 (2012-01-04)</h1>
+<div class="section" id="features-added-44">
+<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="bugs-fixed-75">
+<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="other-changes-42">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-77">
+<h1>2.3.2 (2011-11-11)</h1>
+<div class="section" id="features-added-45">
+<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="bugs-fixed-76">
+<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="other-changes-43">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-78">
+<h1>2.3.1 (2011-09-25)</h1>
+<div class="section" id="features-added-46">
+<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="bugs-fixed-77">
+<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="other-changes-44">
+<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="section-79">
+<h1>2.3 (2011-02-06)</h1>
+<div class="section" id="features-added-47">
+<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="bugs-fixed-78">
+<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="other-changes-45">
+<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="features-added-48">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-79">
+<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="other-changes-46">
+<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="features-added-49">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-80">
+<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="other-changes-47">
+<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="features-added-50">
+<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="bugs-fixed-81">
+<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="other-changes-48">
+<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="section-80">
+<h1>2.2.8 (2010-09-02)</h1>
+<div class="section" id="bugs-fixed-82">
+<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="section-81">
+<h1>2.2.7 (2010-07-24)</h1>
+<div class="section" id="bugs-fixed-83">
+<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="section-82">
+<h1>2.2.6 (2010-03-02)</h1>
+<div class="section" id="bugs-fixed-84">
+<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="section-83">
+<h1>2.2.5 (2010-02-28)</h1>
+<div class="section" id="features-added-51">
+<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="bugs-fixed-85">
+<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="section-84">
+<h1>2.2.4 (2009-11-11)</h1>
+<div class="section" id="bugs-fixed-86">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Static build of libxml2/libxslt was broken.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-85">
+<h1>2.2.3 (2009-10-30)</h1>
+<div class="section" id="features-added-52">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-87">
+<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="other-changes-49">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-86">
+<h1>2.2.2 (2009-06-21)</h1>
+<div class="section" id="features-added-53">
+<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="bugs-fixed-88">
+<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="other-changes-50">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-87">
+<h1>2.2.1 (2009-06-02)</h1>
+<div class="section" id="features-added-54">
+<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="bugs-fixed-89">
+<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="other-changes-51">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-88">
+<h1>2.2 (2009-03-21)</h1>
+<div class="section" id="features-added-55">
+<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="bugs-fixed-90">
+<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="features-added-56">
+<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="bugs-fixed-91">
+<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="other-changes-52">
+<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="features-added-57">
+<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="bugs-fixed-92">
+<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="other-changes-53">
+<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="bugs-fixed-93">
+<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="section-89">
+<h1>2.1.5 (2009-01-06)</h1>
+<div class="section" id="bugs-fixed-94">
+<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="features-added-58">
+<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="bugs-fixed-95">
+<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="other-changes-54">
+<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="section-90">
+<h1>2.1.4 (2008-12-12)</h1>
+<div class="section" id="bugs-fixed-96">
+<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="section-91">
+<h1>2.0.11 (2008-12-12)</h1>
+<div class="section" id="bugs-fixed-97">
+<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="features-added-59">
+<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="bugs-fixed-98">
+<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="other-changes-55">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-92">
+<h1>2.1.3 (2008-11-17)</h1>
+<div class="section" id="features-added-60">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-99">
+<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="other-changes-56">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-93">
+<h1>2.0.10 (2008-11-17)</h1>
+<div class="section" id="bugs-fixed-100">
+<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="section-94">
+<h1>2.1.2 (2008-09-05)</h1>
+<div class="section" id="features-added-61">
+<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="bugs-fixed-101">
+<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="other-changes-57">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-95">
+<h1>2.0.9 (2008-09-05)</h1>
+<div class="section" id="bugs-fixed-102">
+<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="section-96">
+<h1>2.1.1 (2008-07-24)</h1>
+<div class="section" id="features-added-62">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-103">
+<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="other-changes-58">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-97">
+<h1>2.0.8 (2008-07-24)</h1>
+<div class="section" id="features-added-63">
+<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="bugs-fixed-104">
+<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="other-changes-59">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="section-98">
+<h1>2.1 (2008-07-09)</h1>
+<div class="section" id="features-added-64">
+<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="bugs-fixed-105">
+<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="other-changes-60">
+<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="section-99">
+<h1>2.0.7 (2008-06-20)</h1>
+<div class="section" id="features-added-65">
+<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="bugs-fixed-106">
+<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="other-changes-61">
+<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="features-added-66">
+<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="bugs-fixed-107">
+<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="other-changes-62">
+<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="section-100">
+<h1>2.0.6 (2008-05-31)</h1>
+<div class="section" id="features-added-67">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-108">
+<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="other-changes-63">
+<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="features-added-68">
+<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="bugs-fixed-109">
+<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="other-changes-64">
+<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="section-101">
+<h1>2.0.5 (2008-05-01)</h1>
+<div class="section" id="features-added-69">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-110">
+<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="other-changes-65">
+<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="features-added-70">
+<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="bugs-fixed-111">
+<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="other-changes-66">
+<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="section-102">
+<h1>2.0.4 (2008-04-13)</h1>
+<div class="section" id="features-added-71">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-112">
+<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="other-changes-67">
+<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="features-added-72">
+<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="bugs-fixed-113">
+<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="other-changes-68">
+<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="section-103">
+<h1>2.0.3 (2008-03-26)</h1>
+<div class="section" id="features-added-73">
+<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="bugs-fixed-114">
+<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="other-changes-69">
+<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="section-104">
+<h1>2.0.2 (2008-02-22)</h1>
+<div class="section" id="features-added-74">
+<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="bugs-fixed-115">
+<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="other-changes-70">
+<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="section-105">
+<h1>2.0.1 (2008-02-13)</h1>
+<div class="section" id="features-added-75">
+<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="bugs-fixed-116">
+<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="other-changes-71">
+<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="section-106">
+<h1>2.0 (2008-02-01)</h1>
+<div class="section" id="features-added-76">
+<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="bugs-fixed-117">
+<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="other-changes-72">
+<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="section-107">
+<h1>1.3.6 (2007-10-29)</h1>
+<div class="section" id="bugs-fixed-118">
+<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="other-changes-73">
+<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="section-108">
+<h1>1.3.5 (2007-10-22)</h1>
+<div class="section" id="features-added-77">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-119">
+<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="section-109">
+<h1>1.3.4 (2007-08-30)</h1>
+<div class="section" id="features-added-78">
+<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="bugs-fixed-120">
+<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="other-changes-74">
+<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="section-110">
+<h1>1.3.3 (2007-07-26)</h1>
+<div class="section" id="features-added-79">
+<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="bugs-fixed-121">
+<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="section-111">
+<h1>1.3.2 (2007-07-03)</h1>
+<div class="section" id="features-added-80">
+<h2>Features added</h2>
+</div>
+<div class="section" id="bugs-fixed-122">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>&quot;deallocating None&quot; crash bug</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-112">
+<h1>1.3.1 (2007-07-02)</h1>
+<div class="section" id="features-added-81">
+<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="bugs-fixed-123">
+<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="section-113">
+<h1>1.3 (2007-06-24)</h1>
+<div class="section" id="features-added-82">
+<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="bugs-fixed-124">
+<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="other-changes-75">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>major restructuring in the documentation</li>
+</ul>
+</div>
+</div>
+<div class="section" id="section-114">
+<h1>1.2.1 (2007-02-27)</h1>
+<div class="section" id="bugs-fixed-125">
+<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="section-115">
+<h1>1.2 (2007-02-20)</h1>
+<div class="section" id="features-added-83">
+<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="bugs-fixed-126">
+<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="other-changes-76">
+<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="section-116">
+<h1>1.1.2 (2006-10-30)</h1>
+<div class="section" id="features-added-84">
+<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="bugs-fixed-127">
+<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="section-117">
+<h1>1.1.1 (2006-09-21)</h1>
+<div class="section" id="features-added-85">
+<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="bugs-fixed-128">
+<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="section-118">
+<h1>1.1 (2006-09-13)</h1>
+<div class="section" id="features-added-86">
+<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="bugs-fixed-129">
+<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="section-119">
+<h1>1.0.4 (2006-09-09)</h1>
+<div class="section" id="features-added-87">
+<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="bugs-fixed-130">
+<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="section-120">
+<h1>1.0.3 (2006-08-08)</h1>
+<div class="section" id="features-added-88">
+<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="bugs-fixed-131">
+<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="section-121">
+<h1>1.0.2 (2006-06-27)</h1>
+<div class="section" id="features-added-89">
+<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="bugs-fixed-132">
+<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="section-122">
+<h1>1.0.1 (2006-06-09)</h1>
+<div class="section" id="features-added-90">
+<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="bugs-fixed-133">
+<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="section-123">
+<h1>1.0 (2006-06-01)</h1>
+<div class="section" id="features-added-91">
+<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="bugs-fixed-134">
+<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="section-124">
+<h1>0.9.2 (2006-05-10)</h1>
+<div class="section" id="features-added-92">
+<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="bugs-fixed-135">
+<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="section-125">
+<h1>0.9.1 (2006-03-30)</h1>
+<div class="section" id="features-added-93">
+<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="bugs-fixed-136">
+<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="section-126">
+<h1>0.9 (2006-03-20)</h1>
+<div class="section" id="features-added-94">
+<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="bugs-fixed-137">
+<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="section-127">
+<h1>0.8 (2005-11-03)</h1>
+<div class="section" id="features-added-95">
+<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="bugs-fixed-138">
+<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="section-128">
+<h1>0.7 (2005-06-15)</h1>
+<div class="section" id="features-added-96">
+<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="bugs-fixed-139">
+<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="section-129">
+<h1>0.6 (2005-05-14)</h1>
+<div class="section" id="features-added-97">
+<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="bugs-fixed-140">
+<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="section-130">
+<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="section-131">
+<h1>0.5 (2005-04-08)</h1>
+<p>Initial public release.</p>
+</div>
+</div>
+<div class="footer">
+<hr class="footer" />
+Generated on: 2023-07-05.
+
+</div>
+</body>
+</html>
index 7ecb55a2da4b488767b277d0c66cfd4961c03d33..4f1e38d153ab0df556b85fe29d9c1a80235eaba7 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <p>A lot of care has been taken to ensure compatibility between etree and
 ElementTree.  Nonetheless, some differences and incompatibilities exist:</p>
@@ -75,10 +75,10 @@ same time.  Thus, this:</p>
 <span class="n">c</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
 </pre></div>
 <p>will result in the following tree a:</p>
-<div class="syntax"><pre><span></span><span class="nt">&lt;a&gt;&lt;b</span> <span class="nt">/&gt;&lt;/a&gt;</span>
+<div class="syntax"><pre><span></span><span class="nt">&lt;a&gt;&lt;b</span><span class="w"> </span><span class="nt">/&gt;&lt;/a&gt;</span>
 </pre></div>
 <p>and the following tree c:</p>
-<div class="syntax"><pre><span></span><span class="nt">&lt;c&gt;&lt;b</span> <span class="nt">/&gt;&lt;/c&gt;</span>
+<div class="syntax"><pre><span></span><span class="nt">&lt;c&gt;&lt;b</span><span class="w"> </span><span class="nt">/&gt;&lt;/c&gt;</span>
 </pre></div>
 <p>In lxml, this behavior is different, because lxml is built on top of a tree
 that maintains parent relationships for elements (like W3C DOM).  This means
@@ -199,7 +199,7 @@ enough to replace a shallow copy in your case.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index d88181ef55512c6ec24b84632441e6b8087aeffa..61cb5aaa1b8f8bce8122497ce3cbdc430274a55a 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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="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: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 82cbefc0c38501c30e2443f79f6d19e195e83f7c..b13d0df9ffc3906dbdeb2d45263bf4361a3d4c3f 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <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
@@ -43,10 +43,10 @@ pip install cssselect
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#the-cssselector-class" id="id1">The CSSSelector class</a></li>
-<li><a class="reference internal" href="#the-cssselect-method" id="id2">The cssselect method</a></li>
-<li><a class="reference internal" href="#supported-selectors" id="id3">Supported Selectors</a></li>
-<li><a class="reference internal" href="#namespaces" id="id4">Namespaces</a></li>
+<li><a class="reference internal" href="#the-cssselector-class" id="toc-entry-1">The CSSSelector class</a></li>
+<li><a class="reference internal" href="#the-cssselect-method" id="toc-entry-2">The cssselect method</a></li>
+<li><a class="reference internal" href="#supported-selectors" id="toc-entry-3">Supported Selectors</a></li>
+<li><a class="reference internal" href="#namespaces" id="toc-entry-4">Namespaces</a></li>
 </ul>
 </div>
 <div class="section" id="the-cssselector-class">
@@ -113,7 +113,7 @@ namespace URIs: the <tt class="docutils literal">CSSSelector</tt> class accepts
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 1089e9ff6411758c0a618e7a892dea1786f8721f..75f68164b97662d048e75c986c5c283774fd2acf 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <p>lxml has very sophisticated support for custom Element classes.  You
 can provide your own classes for Elements and have lxml use them by
@@ -46,18 +46,18 @@ custom Element classes.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#background-on-element-proxies" id="id2">Background on Element proxies</a></li>
-<li><a class="reference internal" href="#element-initialization" id="id3">Element initialization</a></li>
-<li><a class="reference internal" href="#setting-up-a-class-lookup-scheme" id="id4">Setting up a class lookup scheme</a><ul>
-<li><a class="reference internal" href="#default-class-lookup" id="id5">Default class lookup</a></li>
-<li><a class="reference internal" href="#namespace-class-lookup" id="id6">Namespace class lookup</a></li>
-<li><a class="reference internal" href="#attribute-based-lookup" id="id7">Attribute based lookup</a></li>
-<li><a class="reference internal" href="#custom-element-class-lookup" id="id8">Custom element class lookup</a></li>
-<li><a class="reference internal" href="#tree-based-element-class-lookup-in-python" id="id9">Tree based element class lookup in Python</a></li>
+<li><a class="reference internal" href="#background-on-element-proxies" id="toc-entry-1">Background on Element proxies</a></li>
+<li><a class="reference internal" href="#element-initialization" id="toc-entry-2">Element initialization</a></li>
+<li><a class="reference internal" href="#setting-up-a-class-lookup-scheme" id="toc-entry-3">Setting up a class lookup scheme</a><ul>
+<li><a class="reference internal" href="#default-class-lookup" id="toc-entry-4">Default class lookup</a></li>
+<li><a class="reference internal" href="#namespace-class-lookup" id="toc-entry-5">Namespace class lookup</a></li>
+<li><a class="reference internal" href="#attribute-based-lookup" id="toc-entry-6">Attribute based lookup</a></li>
+<li><a class="reference internal" href="#custom-element-class-lookup" id="toc-entry-7">Custom element class lookup</a></li>
+<li><a class="reference internal" href="#tree-based-element-class-lookup-in-python" id="toc-entry-8">Tree based element class lookup in Python</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#generating-xml-with-custom-classes" id="id10">Generating XML with custom classes</a></li>
-<li><a class="reference internal" href="#id1" id="id11">Implementing namespaces</a></li>
+<li><a class="reference internal" href="#generating-xml-with-custom-classes" id="toc-entry-9">Generating XML with custom classes</a></li>
+<li><a class="reference internal" href="#implementing-namespaces-1" id="toc-entry-10">Implementing namespaces</a></li>
 </ul>
 </div>
 <div class="section" id="background-on-element-proxies">
@@ -387,7 +387,7 @@ your Element proxy classes for the elements that they create.  The
 <span class="go">&lt;hale&gt;some &lt;honk honking="true"/&gt;&lt;bopp/&gt; text&lt;/hale&gt;</span>
 </pre></div>
 </div>
-<div class="section" id="id1">
+<div class="section" id="implementing-namespaces-1">
 <h1>Implementing namespaces</h1>
 <p>lxml allows you to implement namespaces, in a rather literal sense.  After
 setting up the namespace class lookup mechanism as described above, you can
@@ -437,7 +437,7 @@ implementation:</p>
 <span class="go">True</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="w">  </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="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>
@@ -520,7 +520,7 @@ and use the blank decorator instead:</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 58431c0a4947ec9eb75493cd725b82e779dc07fb..799fc1ba32a170670e9d7a7440ea53e06ff46fc3 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <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
@@ -49,10 +49,10 @@ tree into a list of top-level Elements.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#parsing-with-the-soupparser" id="id1">Parsing with the soupparser</a></li>
-<li><a class="reference internal" href="#entity-handling" id="id2">Entity handling</a></li>
-<li><a class="reference internal" href="#using-soupparser-as-a-fallback" id="id3">Using soupparser as a fallback</a></li>
-<li><a class="reference internal" href="#using-only-the-encoding-detection" id="id4">Using only the encoding detection</a></li>
+<li><a class="reference internal" href="#parsing-with-the-soupparser" id="toc-entry-1">Parsing with the soupparser</a></li>
+<li><a class="reference internal" href="#entity-handling" id="toc-entry-2">Entity handling</a></li>
+<li><a class="reference internal" href="#using-soupparser-as-a-fallback" id="toc-entry-3">Using soupparser as a fallback</a></li>
+<li><a class="reference internal" href="#using-only-the-encoding-detection" id="toc-entry-4">Using only the encoding detection</a></li>
 </ul>
 </div>
 <div class="section" id="parsing-with-the-soupparser">
@@ -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: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 31b3050f95e99a1ef6600d1fe8f98038a759e5a2..caae9e9f2ea82598688d2a73a45c27aafea66d40 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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,35 +24,35 @@ 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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <p>This document describes how to use Python extension functions in XPath
 and XSLT like this:</p>
-<div class="syntax"><pre><span></span><span class="nt">&lt;xsl:value-of</span> <span class="na">select=</span><span class="s">"f:myPythonFunction(.//sometag)"</span> <span class="nt">/&gt;</span>
+<div class="syntax"><pre><span></span><span class="nt">&lt;xsl:value-of</span><span class="w"> </span><span class="na">select=</span><span class="s">"f:myPythonFunction(.//sometag)"</span><span class="w"> </span><span class="nt">/&gt;</span>
 </pre></div>
 <p>and extension elements in XSLT as in the following example:</p>
-<div class="syntax"><pre><span></span><span class="nt">&lt;xsl:template</span> <span class="na">match=</span><span class="s">"*"</span><span class="nt">&gt;</span>
-    <span class="nt">&lt;my:python-extension&gt;</span>
-        <span class="nt">&lt;some-content</span> <span class="nt">/&gt;</span>
-    <span class="nt">&lt;/my:python-extension&gt;</span>
+<div class="syntax"><pre><span></span><span class="nt">&lt;xsl:template</span><span class="w"> </span><span class="na">match=</span><span class="s">"*"</span><span class="nt">&gt;</span>
+<span class="w">    </span><span class="nt">&lt;my:python-extension&gt;</span>
+<span class="w">        </span><span class="nt">&lt;some-content</span><span class="w"> </span><span class="nt">/&gt;</span>
+<span class="w">    </span><span class="nt">&lt;/my:python-extension&gt;</span>
 <span class="nt">&lt;/xsl:template&gt;</span>
 </pre></div>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#xpath-extension-functions" id="id1">XPath Extension functions</a><ul>
-<li><a class="reference internal" href="#the-functionnamespace" id="id2">The FunctionNamespace</a></li>
-<li><a class="reference internal" href="#global-prefix-assignment" id="id3">Global prefix assignment</a></li>
-<li><a class="reference internal" href="#the-xpath-context" id="id4">The XPath context</a></li>
-<li><a class="reference internal" href="#evaluators-and-xslt" id="id5">Evaluators and XSLT</a></li>
-<li><a class="reference internal" href="#evaluator-local-extensions" id="id6">Evaluator-local extensions</a></li>
-<li><a class="reference internal" href="#what-to-return-from-a-function" id="id7">What to return from a function</a></li>
+<li><a class="reference internal" href="#xpath-extension-functions" id="toc-entry-1">XPath Extension functions</a><ul>
+<li><a class="reference internal" href="#the-functionnamespace" id="toc-entry-2">The FunctionNamespace</a></li>
+<li><a class="reference internal" href="#global-prefix-assignment" id="toc-entry-3">Global prefix assignment</a></li>
+<li><a class="reference internal" href="#the-xpath-context" id="toc-entry-4">The XPath context</a></li>
+<li><a class="reference internal" href="#evaluators-and-xslt" id="toc-entry-5">Evaluators and XSLT</a></li>
+<li><a class="reference internal" href="#evaluator-local-extensions" id="toc-entry-6">Evaluator-local extensions</a></li>
+<li><a class="reference internal" href="#what-to-return-from-a-function" id="toc-entry-7">What to return from a function</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#xslt-extension-elements" id="id8">XSLT extension elements</a><ul>
-<li><a class="reference internal" href="#declaring-extension-elements" id="id9">Declaring extension elements</a></li>
-<li><a class="reference internal" href="#applying-xsl-templates" id="id10">Applying XSL templates</a></li>
-<li><a class="reference internal" href="#working-with-read-only-elements" id="id11">Working with read-only elements</a></li>
+<li><a class="reference internal" href="#xslt-extension-elements" id="toc-entry-8">XSLT extension elements</a><ul>
+<li><a class="reference internal" href="#declaring-extension-elements" id="toc-entry-9">Declaring extension elements</a></li>
+<li><a class="reference internal" href="#applying-xsl-templates" id="toc-entry-10">Applying XSL templates</a></li>
+<li><a class="reference internal" href="#working-with-read-only-elements" id="toc-entry-11">Working with read-only elements</a></li>
 </ul>
 </li>
 </ul>
@@ -390,10 +390,10 @@ will always be passed unchanged.</p>
 <p>Just like the XPath extension functions described above, lxml supports
 custom extension <em>elements</em> in XSLT.  This means, you can write XSLT
 code like this:</p>
-<div class="syntax"><pre><span></span><span class="nt">&lt;xsl:template</span> <span class="na">match=</span><span class="s">"*"</span><span class="nt">&gt;</span>
-    <span class="nt">&lt;my:python-extension&gt;</span>
-        <span class="nt">&lt;some-content</span> <span class="nt">/&gt;</span>
-    <span class="nt">&lt;/my:python-extension&gt;</span>
+<div class="syntax"><pre><span></span><span class="nt">&lt;xsl:template</span><span class="w"> </span><span class="na">match=</span><span class="s">"*"</span><span class="nt">&gt;</span>
+<span class="w">    </span><span class="nt">&lt;my:python-extension&gt;</span>
+<span class="w">        </span><span class="nt">&lt;some-content</span><span class="w"> </span><span class="nt">/&gt;</span>
+<span class="w">    </span><span class="nt">&lt;/my:python-extension&gt;</span>
 <span class="nt">&lt;/xsl:template&gt;</span>
 </pre></div>
 <p>And then you can implement the element in Python like this:</p>
@@ -530,7 +530,7 @@ will work:</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index f0c42b7528193d75753293b95c0535cf24744929..64712691ba7ebb5d5de411efbb5dd2f46536a82e 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <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: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index c1e91fb9b5a64bce73dde51d58de209c1c14ca94..57168a38b39c00c98f01999b54a00df0b7034f75 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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="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>
@@ -148,8 +148,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.9.1.tgz">lxml 4.9.1</a>, released 2022-07-01
-(<a class="reference external" href="/changes-4.9.1.html">changes for 4.9.1</a>).  <a class="reference external" href="#old-versions">Older versions</a>
+<p>The latest version is <a class="reference external" href="/files/lxml-4.9.3.tgz">lxml 4.9.3</a>, released 2023-07-05
+(<a href="#system-message-1"><span class="problematic" id="problematic-1">`changes for 4.9.3`_</span></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>
@@ -216,6 +216,8 @@ obstacle to using lxml in your codebase.</p>
 <a class="reference external" href="https://lxml.de/2.0/">2.0</a>,
 <a class="reference external" href="https://lxml.de/1.3/">1.3</a></p>
 <ul class="simple">
+<li><a class="reference external" href="/files/lxml-4.9.3.tgz">lxml 4.9.3</a>, released 2023-07-05 (<a href="#system-message-2"><span class="problematic" id="problematic-2">`changes for 4.9.3`_</span></a>)</li>
+<li><a class="reference external" href="/files/lxml-4.9.2.tgz">lxml 4.9.2</a>, released 2022-12-13 (<a class="reference external" href="/changes-4.9.2.html">changes for 4.9.2</a>)</li>
 <li><a class="reference external" href="/files/lxml-4.9.1.tgz">lxml 4.9.1</a>, released 2022-07-01 (<a class="reference external" href="/changes-4.9.1.html">changes for 4.9.1</a>)</li>
 <li><a class="reference external" href="/files/lxml-4.9.0.tgz">lxml 4.9.0</a>, released 2022-06-01 (<a class="reference external" href="/changes-4.9.0.html">changes for 4.9.0</a>)</li>
 <li><a class="reference external" href="/files/lxml-4.8.0.tgz">lxml 4.8.0</a>, released 2022-02-17 (<a class="reference external" href="/changes-4.8.0.html">changes for 4.8.0</a>)</li>
@@ -229,13 +231,28 @@ obstacle to using lxml in your codebase.</p>
 <li><a class="reference external" href="/files/lxml-4.6.0.tgz">lxml 4.6.0</a>, released 2020-10-17 (<a class="reference external" href="/changes-4.6.0.html">changes for 4.6.0</a>)</li>
 <li><a class="reference external" href="https://lxml.de/4.6/#old-versions">older releases</a></li>
 </ul>
-</div><div class="section" id="project-income-report">
+</div>
+<div class="system-messages section">
+<h1>Docutils System Messages</h1>
+<div class="system-message" id="system-message-1">
+<p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">./doc/main.txt</tt>, line 163); <em><a href="#problematic-1">backlink</a></em></p>
+Unknown target name: "changes for 4.9.3".</div>
+<div class="system-message" id="system-message-2">
+<p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">./doc/main.txt</tt>, line 261); <em><a href="#problematic-2">backlink</a></em></p>
+Unknown target name: "changes for 4.9.3".</div><div class="section" id="project-income-report">
 <h1>Project income report</h1>
+<p>lxml has <a class="reference external" href="https://pypistats.org/packages/lxml">about 60 million downloads</a>
+per month on PyPI.</p>
 <ul class="simple">
-<li>Total project income in 2021: EUR 4890.37  (407.53 &#8364; / month)<ul>
+<li>Total project income in 2022: EUR 2566.38  (213.87 &#8364; / month)<ul>
+<li>Tidelift: EUR 2539.38</li>
+<li>Paypal: EUR 27.00</li>
+</ul>
+</li>
+<li>Total project income in 2021: EUR 4640.37  (386.70 &#8364; / month)<ul>
 <li>Tidelift: EUR 4066.66</li>
 <li>Paypal: EUR 223.71</li>
-<li>other: EUR 600.00</li>
+<li>other: EUR 350.00</li>
 </ul>
 </li>
 <li>Total project income in 2020: EUR 6065,86  (506.49 &#8364; / month)<ul>
@@ -270,10 +287,11 @@ donation is non-refundable.</p>
 </div>
 
 
+</div>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 6e34fb69ace0344897d8804420d9d76329c2bc3b..582ffbdf1ee7b4186ada6d5fd1f4c14d2d3c8fff 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 <title>Installing lxml</title>
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
@@ -24,18 +24,18 @@ 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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#where-to-get-it" id="id1">Where to get it</a></li>
-<li><a class="reference internal" href="#requirements" id="id2">Requirements</a></li>
-<li><a class="reference internal" href="#installation" id="id3">Installation</a></li>
-<li><a class="reference internal" href="#building-lxml-from-dev-sources" id="id4">Building lxml from dev sources</a></li>
-<li><a class="reference internal" href="#using-lxml-with-python-libxml2" id="id5">Using lxml with python-libxml2</a></li>
-<li><a class="reference internal" href="#source-builds-on-ms-windows" id="id6">Source builds on MS Windows</a></li>
-<li><a class="reference internal" href="#source-builds-on-macos-x" id="id7">Source builds on MacOS-X</a></li>
+<li><a class="reference internal" href="#where-to-get-it" id="toc-entry-1">Where to get it</a></li>
+<li><a class="reference internal" href="#requirements" id="toc-entry-2">Requirements</a></li>
+<li><a class="reference internal" href="#installation" id="toc-entry-3">Installation</a></li>
+<li><a class="reference internal" href="#building-lxml-from-dev-sources" id="toc-entry-4">Building lxml from dev sources</a></li>
+<li><a class="reference internal" href="#using-lxml-with-python-libxml2" id="toc-entry-5">Using lxml with python-libxml2</a></li>
+<li><a class="reference internal" href="#source-builds-on-ms-windows" id="toc-entry-6">Source builds on MS Windows</a></li>
+<li><a class="reference internal" href="#source-builds-on-macos-x" id="toc-entry-7">Source builds on MacOS-X</a></li>
 </ul>
 </div>
 <div class="section" id="where-to-get-it">
@@ -208,7 +208,7 @@ read the
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index b29b2e7c524dfd475dc04d1ec2975288e5ae424b..20109a6b06f1ae7d527460c23805026f290b3ce7 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 <title>Why lxml?</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="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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#motto" id="id1">Motto</a></li>
-<li><a class="reference internal" href="#aims" id="id2">Aims</a></li>
+<li><a class="reference internal" href="#motto" id="toc-entry-1">Motto</a></li>
+<li><a class="reference internal" href="#aims" id="toc-entry-2">Aims</a></li>
 </ul>
 </div>
 <div class="section" id="motto">
@@ -82,7 +82,7 @@ having to learn new things -- XML is complicated enough.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 5f9150ce3465b1e815870fac8c47eafc21755a18..888dad12442a0861dbfc458462ef2e928a7b2aa4 100644 (file)
@@ -2,11 +2,11 @@
 <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/" />
+<meta name="generator" content="Docutils 0.18.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" />
 <meta content="lxml, XML, Cython, source code, develop, comprehend, understand" name="keywords" />
+<meta name="author" content="Stefan Behnel" />
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
 function trigger_menu(event) {
@@ -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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -42,16 +42,16 @@ document that describes <a class="reference external" href="build.html">how to b
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#what-is-cython" id="id1">What is Cython?</a></li>
-<li><a class="reference internal" href="#where-to-start" id="id2">Where to start?</a><ul>
-<li><a class="reference internal" href="#concepts" id="id3">Concepts</a></li>
-<li><a class="reference internal" href="#the-documentation" id="id4">The documentation</a></li>
+<li><a class="reference internal" href="#what-is-cython" id="toc-entry-1">What is Cython?</a></li>
+<li><a class="reference internal" href="#where-to-start" id="toc-entry-2">Where to start?</a><ul>
+<li><a class="reference internal" href="#concepts" id="toc-entry-3">Concepts</a></li>
+<li><a class="reference internal" href="#the-documentation" id="toc-entry-4">The documentation</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#lxml-etree" id="id5">lxml.etree</a></li>
-<li><a class="reference internal" href="#python-modules" id="id6">Python modules</a></li>
-<li><a class="reference internal" href="#lxml-objectify" id="id7">lxml.objectify</a></li>
-<li><a class="reference internal" href="#lxml-html" id="id8">lxml.html</a></li>
+<li><a class="reference internal" href="#lxml-etree" id="toc-entry-5">lxml.etree</a></li>
+<li><a class="reference internal" href="#python-modules" id="toc-entry-6">Python modules</a></li>
+<li><a class="reference internal" href="#lxml-objectify" id="toc-entry-7">lxml.objectify</a></li>
+<li><a class="reference internal" href="#lxml-html" id="toc-entry-8">lxml.html</a></li>
 </ul>
 </div>
 <div class="section" id="what-is-cython">
@@ -286,7 +286,7 @@ implemented in pure Python.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 6355aad1528142882284a91b7f74431217a9d512..dcf079aa40ad23ad03efebc2f991b1020575c009 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -41,34 +41,34 @@ number of utilities for common HTML processing tasks.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#parsing-html" id="id1">Parsing HTML</a><ul>
-<li><a class="reference internal" href="#parsing-html-fragments" id="id2">Parsing HTML fragments</a></li>
-<li><a class="reference internal" href="#really-broken-pages" id="id3">Really broken pages</a></li>
+<li><a class="reference internal" href="#parsing-html" id="toc-entry-1">Parsing HTML</a><ul>
+<li><a class="reference internal" href="#parsing-html-fragments" id="toc-entry-2">Parsing HTML fragments</a></li>
+<li><a class="reference internal" href="#really-broken-pages" id="toc-entry-3">Really broken pages</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#html-element-methods" id="id4">HTML Element Methods</a></li>
-<li><a class="reference internal" href="#running-html-doctests" id="id5">Running HTML doctests</a></li>
-<li><a class="reference internal" href="#creating-html-with-the-e-factory" id="id6">Creating HTML with the E-factory</a><ul>
-<li><a class="reference internal" href="#viewing-your-html" id="id7">Viewing your HTML</a></li>
+<li><a class="reference internal" href="#html-element-methods" id="toc-entry-4">HTML Element Methods</a></li>
+<li><a class="reference internal" href="#running-html-doctests" id="toc-entry-5">Running HTML doctests</a></li>
+<li><a class="reference internal" href="#creating-html-with-the-e-factory" id="toc-entry-6">Creating HTML with the E-factory</a><ul>
+<li><a class="reference internal" href="#viewing-your-html" id="toc-entry-7">Viewing your HTML</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#working-with-links" id="id8">Working with links</a><ul>
-<li><a class="reference internal" href="#functions" id="id9">Functions</a></li>
+<li><a class="reference internal" href="#working-with-links" id="toc-entry-8">Working with links</a><ul>
+<li><a class="reference internal" href="#functions" id="toc-entry-9">Functions</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#forms" id="id10">Forms</a><ul>
-<li><a class="reference internal" href="#form-filling-example" id="id11">Form Filling Example</a></li>
-<li><a class="reference internal" href="#form-submission" id="id12">Form Submission</a></li>
+<li><a class="reference internal" href="#forms" id="toc-entry-10">Forms</a><ul>
+<li><a class="reference internal" href="#form-filling-example" id="toc-entry-11">Form Filling Example</a></li>
+<li><a class="reference internal" href="#form-submission" id="toc-entry-12">Form Submission</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#cleaning-up-html" id="id13">Cleaning up HTML</a><ul>
-<li><a class="reference internal" href="#autolink" id="id14">autolink</a></li>
-<li><a class="reference internal" href="#wordwrap" id="id15">wordwrap</a></li>
+<li><a class="reference internal" href="#cleaning-up-html" id="toc-entry-13">Cleaning up HTML</a><ul>
+<li><a class="reference internal" href="#autolink" id="toc-entry-14">autolink</a></li>
+<li><a class="reference internal" href="#wordwrap" id="toc-entry-15">wordwrap</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#html-diff" id="id16">HTML Diff</a></li>
-<li><a class="reference internal" href="#examples" id="id17">Examples</a><ul>
-<li><a class="reference internal" href="#microformat-example" id="id18">Microformat Example</a></li>
+<li><a class="reference internal" href="#html-diff" id="toc-entry-16">HTML Diff</a></li>
+<li><a class="reference internal" href="#examples" id="toc-entry-17">Examples</a><ul>
+<li><a class="reference internal" href="#microformat-example" id="toc-entry-18">Microformat Example</a></li>
 </ul>
 </li>
 </ul>
@@ -700,7 +700,7 @@ microformat.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 19716472b0fee5621a45bdf02cdcbd4b4e0903a1..8028533fe2ebd43093c7e9650511bc25a86d0213 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -47,29 +47,29 @@ available to the normal Python operators.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#the-lxml-objectify-api" id="id1">The lxml.objectify API</a><ul>
-<li><a class="reference internal" href="#element-access-through-object-attributes" id="id2">Element access through object attributes</a></li>
-<li><a class="reference internal" href="#creating-objectify-trees" id="id3">Creating objectify trees</a></li>
-<li><a class="reference internal" href="#tree-generation-with-the-e-factory" id="id4">Tree generation with the E-factory</a></li>
-<li><a class="reference internal" href="#namespace-handling" id="id5">Namespace handling</a></li>
+<li><a class="reference internal" href="#the-lxml-objectify-api" id="toc-entry-1">The lxml.objectify API</a><ul>
+<li><a class="reference internal" href="#element-access-through-object-attributes" id="toc-entry-2">Element access through object attributes</a></li>
+<li><a class="reference internal" href="#creating-objectify-trees" id="toc-entry-3">Creating objectify trees</a></li>
+<li><a class="reference internal" href="#tree-generation-with-the-e-factory" id="toc-entry-4">Tree generation with the E-factory</a></li>
+<li><a class="reference internal" href="#namespace-handling" id="toc-entry-5">Namespace handling</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#asserting-a-schema" id="id6">Asserting a Schema</a></li>
-<li><a class="reference internal" href="#objectpath" id="id7">ObjectPath</a></li>
-<li><a class="reference internal" href="#python-data-types" id="id8">Python data types</a><ul>
-<li><a class="reference internal" href="#recursive-tree-dump" id="id9">Recursive tree dump</a></li>
-<li><a class="reference internal" href="#recursive-string-representation-of-elements" id="id10">Recursive string representation of elements</a></li>
+<li><a class="reference internal" href="#asserting-a-schema" id="toc-entry-6">Asserting a Schema</a></li>
+<li><a class="reference internal" href="#objectpath" id="toc-entry-7">ObjectPath</a></li>
+<li><a class="reference internal" href="#python-data-types" id="toc-entry-8">Python data types</a><ul>
+<li><a class="reference internal" href="#recursive-tree-dump" id="toc-entry-9">Recursive tree dump</a></li>
+<li><a class="reference internal" href="#recursive-string-representation-of-elements" id="toc-entry-10">Recursive string representation of elements</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#how-data-types-are-matched" id="id11">How data types are matched</a><ul>
-<li><a class="reference internal" href="#type-annotations" id="id12">Type annotations</a></li>
-<li><a class="reference internal" href="#xml-schema-datatype-annotation" id="id13">XML Schema datatype annotation</a></li>
-<li><a class="reference internal" href="#the-dataelement-factory" id="id14">The DataElement factory</a></li>
-<li><a class="reference internal" href="#defining-additional-data-classes" id="id15">Defining additional data classes</a></li>
-<li><a class="reference internal" href="#advanced-element-class-lookup" id="id16">Advanced element class lookup</a></li>
+<li><a class="reference internal" href="#how-data-types-are-matched" id="toc-entry-11">How data types are matched</a><ul>
+<li><a class="reference internal" href="#type-annotations" id="toc-entry-12">Type annotations</a></li>
+<li><a class="reference internal" href="#xml-schema-datatype-annotation" id="toc-entry-13">XML Schema datatype annotation</a></li>
+<li><a class="reference internal" href="#the-dataelement-factory" id="toc-entry-14">The DataElement factory</a></li>
+<li><a class="reference internal" href="#defining-additional-data-classes" id="toc-entry-15">Defining additional data classes</a></li>
+<li><a class="reference internal" href="#advanced-element-class-lookup" id="toc-entry-16">Advanced element class lookup</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#what-is-different-from-lxml-etree" id="id17">What is different from lxml.etree?</a></li>
+<li><a class="reference internal" href="#what-is-different-from-lxml-etree" id="toc-entry-17">What is different from lxml.etree?</a></li>
 </ul>
 </div>
 <p>To set up and use <tt class="docutils literal">objectify</tt>, you need both the <tt class="docutils literal">lxml.etree</tt>
@@ -200,7 +200,7 @@ updated to match the attribute name:</p>
 <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="w">  </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="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>
@@ -317,7 +317,7 @@ through the E-factory as described above.</p>
 
 <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="w">    </span><span class="o">...</span>
 <span class="gr">AttributeError</span>: <span class="n">no such child: {http://ns/}c</span>
 </pre></div>
 <p>To access an element in a different namespace than its parent, you can
@@ -360,7 +360,7 @@ valid Python identifiers:</p>
 
 <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="w">  </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="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>
@@ -441,13 +441,13 @@ represented by the <tt class="docutils literal">ObjectPath</tt> class:</p>
 <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="w">  </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">"</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="w">  </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>
@@ -480,13 +480,13 @@ element and only inherit its namespace:</p>
 <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="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="w">  </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="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="w">  </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>
@@ -502,7 +502,7 @@ element and only inherit its namespace:</p>
 <span class="go">False</span>
 <span class="gp">&gt;&gt;&gt; </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="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">no such child: {http://ns/}some</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="c1"># creates children as necessary</span>
@@ -532,7 +532,7 @@ 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">".</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>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">TypeError</span>: <span class="n">creating indexed path attributes is not supported</span>
 </pre></div>
 <p>It is worth noting that ObjectPath does not depend on the <tt class="docutils literal">objectify</tt> module
@@ -609,12 +609,12 @@ provide a <tt class="docutils literal">.pyval</tt> attribute that returns the va
 to change values, just assign them directly to the attribute:</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">a</span><span class="o">.</span><span class="n">text</span>  <span class="o">=</span> <span class="s2">"25"</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">TypeError</span>: <span class="n">attribute 'text' 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="n">pyval</span> <span class="o">=</span> <span class="mi">25</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <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>
@@ -1071,7 +1071,7 @@ the next step, which is to register the type.  Then you can use it:</p>
 <span class="go">Ho ho ho!</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">call_santa</span><span class="p">()</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">no such child: call_santa</span>
 </pre></div>
 <p>If you need to specify dependencies between the type check functions, you can
@@ -1099,7 +1099,7 @@ function defined above:</p>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">xmas_type</span><span class="o">.</span><span class="n">unregister</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="n">call_santa</span><span class="p">()</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">no such child: call_santa</span>
 </pre></div>
 <p>Be aware, though, that this does not immediately apply to elements to which
@@ -1165,7 +1165,7 @@ support any XPath expression.</li>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 37f7a345c440c1683f96d1e92b6634c15a0509fc..ac3cb9ba2790962e7fd351afbaa3e2bb183a551a 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <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
@@ -32,29 +32,29 @@ event-driven API (currently only for XML).</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#parsers" id="id1">Parsers</a><ul>
-<li><a class="reference internal" href="#parser-options" id="id2">Parser options</a></li>
-<li><a class="reference internal" href="#error-log" id="id3">Error log</a></li>
-<li><a class="reference internal" href="#parsing-html" id="id4">Parsing HTML</a></li>
-<li><a class="reference internal" href="#doctype-information" id="id5">Doctype information</a></li>
+<li><a class="reference internal" href="#parsers" id="toc-entry-1">Parsers</a><ul>
+<li><a class="reference internal" href="#parser-options" id="toc-entry-2">Parser options</a></li>
+<li><a class="reference internal" href="#error-log" id="toc-entry-3">Error log</a></li>
+<li><a class="reference internal" href="#parsing-html" id="toc-entry-4">Parsing HTML</a></li>
+<li><a class="reference internal" href="#doctype-information" id="toc-entry-5">Doctype information</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#the-target-parser-interface" id="id6">The target parser interface</a></li>
-<li><a class="reference internal" href="#the-feed-parser-interface" id="id7">The feed parser interface</a></li>
-<li><a class="reference internal" href="#incremental-event-parsing" id="id8">Incremental event parsing</a><ul>
-<li><a class="reference internal" href="#event-types" id="id9">Event types</a></li>
-<li><a class="reference internal" href="#modifying-the-tree" id="id10">Modifying the tree</a></li>
-<li><a class="reference internal" href="#selective-tag-events" id="id11">Selective tag events</a></li>
-<li><a class="reference internal" href="#comments-and-pis" id="id12">Comments and PIs</a></li>
-<li><a class="reference internal" href="#events-with-custom-targets" id="id13">Events with custom targets</a></li>
+<li><a class="reference internal" href="#the-target-parser-interface" id="toc-entry-6">The target parser interface</a></li>
+<li><a class="reference internal" href="#the-feed-parser-interface" id="toc-entry-7">The feed parser interface</a></li>
+<li><a class="reference internal" href="#incremental-event-parsing" id="toc-entry-8">Incremental event parsing</a><ul>
+<li><a class="reference internal" href="#event-types" id="toc-entry-9">Event types</a></li>
+<li><a class="reference internal" href="#modifying-the-tree" id="toc-entry-10">Modifying the tree</a></li>
+<li><a class="reference internal" href="#selective-tag-events" id="toc-entry-11">Selective tag events</a></li>
+<li><a class="reference internal" href="#comments-and-pis" id="toc-entry-12">Comments and PIs</a></li>
+<li><a class="reference internal" href="#events-with-custom-targets" id="toc-entry-13">Events with custom targets</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#iterparse-and-iterwalk" id="id14">iterparse and iterwalk</a><ul>
-<li><a class="reference internal" href="#iterwalk" id="id15">iterwalk</a></li>
+<li><a class="reference internal" href="#iterparse-and-iterwalk" id="toc-entry-14">iterparse and iterwalk</a><ul>
+<li><a class="reference internal" href="#iterwalk" id="toc-entry-15">iterwalk</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#python-unicode-strings" id="id16">Python unicode strings</a><ul>
-<li><a class="reference internal" href="#serialising-to-unicode-strings" id="id17">Serialising to Unicode strings</a></li>
+<li><a class="reference internal" href="#python-unicode-strings" id="toc-entry-16">Python unicode strings</a><ul>
+<li><a class="reference internal" href="#serialising-to-unicode-strings" id="toc-entry-17">Serialising to Unicode strings</a></li>
 </ul>
 </li>
 </ul>
@@ -152,7 +152,7 @@ warnings of the last parser run:</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">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>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><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="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>
@@ -346,7 +346,7 @@ that the parser can reuse them afterwards.</p>
 <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;/error&gt;"</span><span class="p">,</span>
 <span class="gp">... </span>                   <span class="n">parser</span><span class="p">)</span>        <span class="c1"># doctest: +ELLIPSIS</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <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>
@@ -839,7 +839,7 @@ encoding themselves and thus lie about their real encoding:</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">XML</span><span class="p">(</span> <span class="sa">u</span><span class="s1">'&lt;?xml version="1.0" encoding="ASCII"?&gt;</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
 <span class="gp">... </span>           <span class="sa">u</span><span class="s1">'&lt;test&gt; </span><span class="se">\uf8d1</span><span class="s1"> + </span><span class="se">\uf8d2</span><span class="s1"> &lt;/test&gt;'</span> <span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">ValueError</span>: <span class="n">Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.</span>
 </pre></div>
 <p>Similarly, you will get errors when you try the same with HTML data in a
@@ -893,7 +893,7 @@ with UTF-8 is also considerably faster in most cases.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 2f480ada4a7787ba810a94a56bdd1524cb480079..a6f9a2d8ae27f38b364da5722e7044606fbd6414 100644 (file)
@@ -2,11 +2,11 @@
 <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/" />
+<meta name="generator" content="Docutils 0.18.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" />
 <meta content="Python XML parser performance, XML processing, performance comparison, lxml performance, lxml.etree, lxml.objectify, benchmarks, ElementTree" name="keywords" />
+<meta name="author" content="Stefan Behnel" />
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
 function trigger_menu(event) {
@@ -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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -62,23 +62,23 @@ ElementTree.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#general-notes" id="id1">General notes</a></li>
-<li><a class="reference internal" href="#how-to-read-the-timings" id="id2">How to read the timings</a></li>
-<li><a class="reference internal" href="#parsing-and-serialising" id="id3">Parsing and Serialising</a></li>
-<li><a class="reference internal" href="#the-elementtree-api" id="id4">The ElementTree API</a><ul>
-<li><a class="reference internal" href="#child-access" id="id5">Child access</a></li>
-<li><a class="reference internal" href="#element-creation" id="id6">Element creation</a></li>
-<li><a class="reference internal" href="#merging-different-sources" id="id7">Merging different sources</a></li>
-<li><a class="reference internal" href="#deepcopy" id="id8">deepcopy</a></li>
-<li><a class="reference internal" href="#tree-traversal" id="id9">Tree traversal</a></li>
+<li><a class="reference internal" href="#general-notes" id="toc-entry-1">General notes</a></li>
+<li><a class="reference internal" href="#how-to-read-the-timings" id="toc-entry-2">How to read the timings</a></li>
+<li><a class="reference internal" href="#parsing-and-serialising" id="toc-entry-3">Parsing and Serialising</a></li>
+<li><a class="reference internal" href="#the-elementtree-api" id="toc-entry-4">The ElementTree API</a><ul>
+<li><a class="reference internal" href="#child-access" id="toc-entry-5">Child access</a></li>
+<li><a class="reference internal" href="#element-creation" id="toc-entry-6">Element creation</a></li>
+<li><a class="reference internal" href="#merging-different-sources" id="toc-entry-7">Merging different sources</a></li>
+<li><a class="reference internal" href="#deepcopy" id="toc-entry-8">deepcopy</a></li>
+<li><a class="reference internal" href="#tree-traversal" id="toc-entry-9">Tree traversal</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#xpath" id="id10">XPath</a></li>
-<li><a class="reference internal" href="#a-longer-example" id="id11">A longer example</a></li>
-<li><a class="reference internal" href="#lxml-objectify" id="id12">lxml.objectify</a><ul>
-<li><a class="reference internal" href="#objectpath" id="id13">ObjectPath</a></li>
-<li><a class="reference internal" href="#caching-elements" id="id14">Caching Elements</a></li>
-<li><a class="reference internal" href="#further-optimisations" id="id15">Further optimisations</a></li>
+<li><a class="reference internal" href="#xpath" id="toc-entry-10">XPath</a></li>
+<li><a class="reference internal" href="#a-longer-example" id="toc-entry-11">A longer example</a></li>
+<li><a class="reference internal" href="#lxml-objectify" id="toc-entry-12">lxml.objectify</a><ul>
+<li><a class="reference internal" href="#objectpath" id="toc-entry-13">ObjectPath</a></li>
+<li><a class="reference internal" href="#caching-elements" id="toc-entry-14">Caching Elements</a></li>
+<li><a class="reference internal" href="#further-optimisations" id="toc-entry-15">Further optimisations</a></li>
 </ul>
 </li>
 </ul>
@@ -790,7 +790,7 @@ random.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 8748eb44fcfabfc2d9e768bfea3096eb6b5640fe..2da99d71572aa9f78400143ccd0967dbbbb80a80 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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,15 +24,15 @@ 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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#xml-catalogs" id="id2">XML Catalogs</a></li>
-<li><a class="reference internal" href="#uri-resolvers" id="id3">URI Resolvers</a></li>
-<li><a class="reference internal" href="#document-loading-in-context" id="id4">Document loading in context</a></li>
-<li><a class="reference internal" href="#i-o-access-control-in-xslt" id="id5">I/O access control in XSLT</a></li>
+<li><a class="reference internal" href="#xml-catalogs" id="toc-entry-1">XML Catalogs</a></li>
+<li><a class="reference internal" href="#uri-resolvers" id="toc-entry-2">URI Resolvers</a></li>
+<li><a class="reference internal" href="#document-loading-in-context" id="toc-entry-3">Document loading in context</a></li>
+<li><a class="reference internal" href="#i-o-access-control-in-xslt" id="toc-entry-4">I/O access control in XSLT</a></li>
 </ul>
 </div>
 <p>The normal way to load external entities (such as DTDs) is by using
@@ -154,12 +154,12 @@ subsequent lookups.  To compile the stylesheet, XSLT must resolve the
 do that:</p>
 <div class="syntax"><pre><span></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">normal_doc</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XSLTParseError</span>: <span class="n">Cannot resolve URI honk:test</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">hoi_doc</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XSLTParseError</span>: <span class="n">Cannot resolve URI honk:test</span>
 </pre></div>
 <p>However, if we use the <tt class="docutils literal">honk</tt> resolver associated with the respective
@@ -172,17 +172,17 @@ needs to resolve the <tt class="docutils literal">hoi</tt> URI in the call to th
 <tt class="docutils literal">honk</tt> resolver will fail to do so:</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="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XSLTApplyError</span>: <span class="n">Cannot resolve URI hoi:test</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">hoi_doc</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XSLTApplyError</span>: <span class="n">Cannot resolve URI hoi:test</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="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XSLTApplyError</span>: <span class="n">Cannot resolve URI hoi:test</span>
 </pre></div>
 <p>This can only be solved by adding a <tt class="docutils literal">hoi</tt> resolver to the original parser:</p>
@@ -232,7 +232,7 @@ operations:</p>
 <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>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XSLTApplyError</span>: <span class="n">xsltLoadDocument: read rights for hoi:test denied</span>
 </pre></div>
 <p>There are a few things to keep in mind:</p>
@@ -250,7 +250,7 @@ documents or raises exceptions if access is denied.</li>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 95f305b67e5fc34df225d45d921865662b8ba2fb..953c9811450a5b1d2f470f8a55a735155abc516a 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <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
@@ -34,9 +34,9 @@ uses the Python core SAX facilities.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#building-a-tree-from-sax-events" id="id1">Building a tree from SAX events</a></li>
-<li><a class="reference internal" href="#producing-sax-events-from-an-elementtree-or-element" id="id2">Producing SAX events from an ElementTree or Element</a></li>
-<li><a class="reference internal" href="#interfacing-with-pulldom-minidom" id="id3">Interfacing with pulldom/minidom</a></li>
+<li><a class="reference internal" href="#building-a-tree-from-sax-events" id="toc-entry-1">Building a tree from SAX events</a></li>
+<li><a class="reference internal" href="#producing-sax-events-from-an-elementtree-or-element" id="toc-entry-2">Producing SAX events from an ElementTree or Element</a></li>
+<li><a class="reference internal" href="#interfacing-with-pulldom-minidom" id="toc-entry-3">Interfacing with pulldom/minidom</a></li>
 </ul>
 </div>
 <div class="section" id="building-a-tree-from-sax-events">
@@ -124,7 +124,7 @@ DOM implementation cannot generate SAX events from a DOM tree.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index a6ef572640e0899106bacba0a7f2624a769e2ee7..a4b9e7dee5ac467d7a4ebf9a29c2e964ac2fd8cf 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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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="https://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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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="https://lxml.de/files/">Download files</a></li></div></div></body>
 </html>
\ No newline at end of file
index 130fb3e2d2fbdbfecb20fe39e3af86edd2ae612c..fefde2040912b4fe2f5add99f69ece84634d4d50 100644 (file)
@@ -2,11 +2,11 @@
 <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/" />
+<meta name="generator" content="Docutils 0.18.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" />
 <meta content="XML processing with Python, lxml, lxml.etree, tutorial, ElementTree, Python, XML, HTML" name="keywords" />
+<meta name="author" content="Stefan Behnel" />
 <link rel="stylesheet" href="style.css" type="text/css" />
 <script type="text/javascript">
 function trigger_menu(event) {
@@ -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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -44,28 +44,28 @@ documentation</a>.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#the-element-class" id="id2">The Element class</a><ul>
-<li><a class="reference internal" href="#elements-are-lists" id="id3">Elements are lists</a></li>
-<li><a class="reference internal" href="#elements-carry-attributes-as-a-dict" id="id4">Elements carry attributes as a dict</a></li>
-<li><a class="reference internal" href="#elements-contain-text" id="id5">Elements contain text</a></li>
-<li><a class="reference internal" href="#using-xpath-to-find-text" id="id6">Using XPath to find text</a></li>
-<li><a class="reference internal" href="#tree-iteration" id="id7">Tree iteration</a></li>
-<li><a class="reference internal" href="#serialisation" id="id8">Serialisation</a></li>
+<li><a class="reference internal" href="#the-element-class" id="toc-entry-1">The Element class</a><ul>
+<li><a class="reference internal" href="#elements-are-lists" id="toc-entry-2">Elements are lists</a></li>
+<li><a class="reference internal" href="#elements-carry-attributes-as-a-dict" id="toc-entry-3">Elements carry attributes as a dict</a></li>
+<li><a class="reference internal" href="#elements-contain-text" id="toc-entry-4">Elements contain text</a></li>
+<li><a class="reference internal" href="#using-xpath-to-find-text" id="toc-entry-5">Using XPath to find text</a></li>
+<li><a class="reference internal" href="#tree-iteration" id="toc-entry-6">Tree iteration</a></li>
+<li><a class="reference internal" href="#serialisation" id="toc-entry-7">Serialisation</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#the-elementtree-class" id="id9">The ElementTree class</a></li>
-<li><a class="reference internal" href="#parsing-from-strings-and-files" id="id10">Parsing from strings and files</a><ul>
-<li><a class="reference internal" href="#the-fromstring-function" id="id11">The fromstring() function</a></li>
-<li><a class="reference internal" href="#the-xml-function" id="id12">The XML() function</a></li>
-<li><a class="reference internal" href="#the-parse-function" id="id13">The parse() function</a></li>
-<li><a class="reference internal" href="#parser-objects" id="id14">Parser objects</a></li>
-<li><a class="reference internal" href="#incremental-parsing" id="id15">Incremental parsing</a></li>
-<li><a class="reference internal" href="#event-driven-parsing" id="id16">Event-driven parsing</a></li>
+<li><a class="reference internal" href="#the-elementtree-class" id="toc-entry-8">The ElementTree class</a></li>
+<li><a class="reference internal" href="#parsing-from-strings-and-files" id="toc-entry-9">Parsing from strings and files</a><ul>
+<li><a class="reference internal" href="#the-fromstring-function" id="toc-entry-10">The fromstring() function</a></li>
+<li><a class="reference internal" href="#the-xml-function" id="toc-entry-11">The XML() function</a></li>
+<li><a class="reference internal" href="#the-parse-function" id="toc-entry-12">The parse() function</a></li>
+<li><a class="reference internal" href="#parser-objects" id="toc-entry-13">Parser objects</a></li>
+<li><a class="reference internal" href="#incremental-parsing" id="toc-entry-14">Incremental parsing</a></li>
+<li><a class="reference internal" href="#event-driven-parsing" id="toc-entry-15">Event-driven parsing</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#namespaces" id="id17">Namespaces</a></li>
-<li><a class="reference internal" href="#the-e-factory" id="id18">The E-factory</a></li>
-<li><a class="reference internal" href="#elementpath" id="id19">ElementPath</a></li>
+<li><a class="reference internal" href="#namespaces" id="toc-entry-16">Namespaces</a></li>
+<li><a class="reference internal" href="#the-e-factory" id="toc-entry-17">The E-factory</a></li>
+<li><a class="reference internal" href="#elementpath" id="toc-entry-18">ElementPath</a></li>
 </ul>
 </div>
 <p>A common way to import <tt class="docutils literal">lxml.etree</tt> is as follows:</p>
@@ -574,7 +574,7 @@ serialisation is 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="n">method</span><span class="o">=</span><span class="s1">'text'</span><span class="p">)</span>  <span class="c1"># doctest: +ELLIPSIS</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">UnicodeEncodeError</span>: <span class="n">'ascii' codec can't encode character u'\xf6' ...</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">method</span><span class="o">=</span><span class="s1">'text'</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">"UTF-8"</span><span class="p">)</span>
@@ -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: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 3979bcd37b3a93cb0e9398239b22c620d669ba9f..ad16689284faf7fdec88c62b91d294eeb2860967 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <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
@@ -39,12 +39,12 @@ libxml2 2.6.30.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#validation-at-parse-time" id="id4">Validation at parse time</a></li>
-<li><a class="reference internal" href="#id1" id="id5">DTD</a></li>
-<li><a class="reference internal" href="#relaxng" id="id6">RelaxNG</a></li>
-<li><a class="reference internal" href="#xmlschema" id="id7">XMLSchema</a></li>
-<li><a class="reference internal" href="#id2" id="id8">Schematron</a></li>
-<li><a class="reference internal" href="#id3" id="id9">(Pre-ISO-Schematron)</a></li>
+<li><a class="reference internal" href="#validation-at-parse-time" id="toc-entry-1">Validation at parse time</a></li>
+<li><a class="reference internal" href="#dtd-1" id="toc-entry-2">DTD</a></li>
+<li><a class="reference internal" href="#relaxng" id="toc-entry-3">RelaxNG</a></li>
+<li><a class="reference internal" href="#xmlschema" id="toc-entry-4">XMLSchema</a></li>
+<li><a class="reference internal" href="#schematron-1" id="toc-entry-5">Schematron</a></li>
+<li><a class="reference internal" href="#pre-iso-schematron-1" id="toc-entry-6">(Pre-ISO-Schematron)</a></li>
 </ul>
 </div>
 <p>The usual setup procedure:</p>
@@ -92,7 +92,7 @@ will raise an exception:</p>
 validation, you should use a non validating parser and run the
 validation separately after parsing the document.</p>
 </div>
-<div class="section" id="id1">
+<div class="section" id="dtd-1">
 <h1>DTD</h1>
 <p>As described above, the parser support for DTDs depends on internal or
 external subsets of the XML file.  This means that the XML file itself
@@ -243,12 +243,12 @@ method. This is sometimes used in conditional statements:</p>
 <tt class="docutils literal">assert_</tt> or <tt class="docutils literal">assertValid</tt> methods:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">relaxng</span><span class="o">.</span><span class="n">assertValid</span><span class="p">(</span><span class="n">doc2</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.DocumentInvalid</span>: <span class="n">Did not expect element c there, line 1</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">relaxng</span><span class="o">.</span><span class="n">assert_</span><span class="p">(</span><span class="n">doc2</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">AssertionError</span>: <span class="n">Did not expect element c there, line 1</span>
 </pre></div>
 <p>If you want to find out why the validation failed in the second case, you can
@@ -327,12 +327,12 @@ This is sometimes used in conditional statements:</p>
 <tt class="docutils literal">assert_</tt> or <tt class="docutils literal">assertValid</tt> methods:</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">xmlschema</span><span class="o">.</span><span class="n">assertValid</span><span class="p">(</span><span class="n">doc2</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.DocumentInvalid</span>: <span class="n">Element 'c': This element is not expected. Expected is ( b )., line 1</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">xmlschema</span><span class="o">.</span><span class="n">assert_</span><span class="p">(</span><span class="n">doc2</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">AssertionError</span>: <span class="n">Element 'c': This element is not expected. Expected is ( b )., line 1</span>
 </pre></div>
 <p>Error reporting works as for the RelaxNG class:</p>
@@ -357,7 +357,7 @@ method to do XML Schema validation:</p>
 <span class="go">False</span>
 </pre></div>
 </div>
-<div class="section" id="id2">
+<div class="section" id="schematron-1">
 <h1>Schematron</h1>
 <p>From version 2.3 on lxml features ISO-<a class="reference external" href="http://www.schematron.com">Schematron</a> support built on the
 de-facto reference implementation of Schematron, the pure-XSLT-1.0
@@ -502,7 +502,7 @@ certain validation scenario, it can now be disabled:</p>
 a very powerful tool e.g. for establishing validation stages or to provide
 different validators for different "validation audiences".</p>
 </div>
-<div class="section" id="id3">
+<div class="section" id="pre-iso-schematron-1">
 <h1>(Pre-ISO-Schematron)</h1>
 <p>Since version 2.0, lxml.etree features <a class="reference external" href="http://www.ascc.net/xml/schematron">pre-ISO-Schematron</a> support, using the
 class lxml.etree.Schematron.  It requires at least libxml2 2.6.21 to
@@ -556,7 +556,7 @@ reporting during validation.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index d948e015e391285cbbdea268d76b747a65de77f6..91f66fde0cb14450d9f6cf4cc473b1faba5f2828 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.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,32 +24,32 @@ 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 9 1-menu"><li class="menu title"><a href="changes-4.9.1.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#docutils-system-messages">Docutils System Messages</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#threading-1">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#dtd-1">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#schematron-1">Schematron</a></li><li class="menu item"><a href="validation.html#pre-iso-schematron-1">(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#implementing-namespaces-1">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 9 3-menu"><li class="menu title"><a href="changes-4.9.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>
 
 <p>lxml supports XPath 1.0, XSLT 1.0 and the EXSLT extensions through
 libxml2 and libxslt in a standards compliant way.</p>
 <div class="contents topic" id="contents">
 <p class="topic-title">Contents</p>
 <ul class="simple">
-<li><a class="reference internal" href="#xpath" id="id1">XPath</a><ul>
-<li><a class="reference internal" href="#the-xpath-method" id="id2">The <tt class="docutils literal">xpath()</tt> method</a></li>
-<li><a class="reference internal" href="#namespaces-and-prefixes" id="id3">Namespaces and prefixes</a></li>
-<li><a class="reference internal" href="#xpath-return-values" id="id4">XPath return values</a></li>
-<li><a class="reference internal" href="#generating-xpath-expressions" id="id5">Generating XPath expressions</a></li>
-<li><a class="reference internal" href="#the-xpath-class" id="id6">The <tt class="docutils literal">XPath</tt> class</a></li>
-<li><a class="reference internal" href="#regular-expressions-in-xpath" id="id7">Regular expressions in XPath</a></li>
-<li><a class="reference internal" href="#the-xpathevaluator-classes" id="id8">The <tt class="docutils literal">XPathEvaluator</tt> classes</a></li>
-<li><a class="reference internal" href="#etxpath" id="id9"><tt class="docutils literal">ETXPath</tt></a></li>
-<li><a class="reference internal" href="#error-handling" id="id10">Error handling</a></li>
+<li><a class="reference internal" href="#xpath" id="toc-entry-1">XPath</a><ul>
+<li><a class="reference internal" href="#the-xpath-method" id="toc-entry-2">The <tt class="docutils literal">xpath()</tt> method</a></li>
+<li><a class="reference internal" href="#namespaces-and-prefixes" id="toc-entry-3">Namespaces and prefixes</a></li>
+<li><a class="reference internal" href="#xpath-return-values" id="toc-entry-4">XPath return values</a></li>
+<li><a class="reference internal" href="#generating-xpath-expressions" id="toc-entry-5">Generating XPath expressions</a></li>
+<li><a class="reference internal" href="#the-xpath-class" id="toc-entry-6">The <tt class="docutils literal">XPath</tt> class</a></li>
+<li><a class="reference internal" href="#regular-expressions-in-xpath" id="toc-entry-7">Regular expressions in XPath</a></li>
+<li><a class="reference internal" href="#the-xpathevaluator-classes" id="toc-entry-8">The <tt class="docutils literal">XPathEvaluator</tt> classes</a></li>
+<li><a class="reference internal" href="#etxpath" id="toc-entry-9"><tt class="docutils literal">ETXPath</tt></a></li>
+<li><a class="reference internal" href="#error-handling" id="toc-entry-10">Error handling</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#xslt" id="id11">XSLT</a><ul>
-<li><a class="reference internal" href="#xslt-result-objects" id="id12">XSLT result objects</a></li>
-<li><a class="reference internal" href="#stylesheet-parameters" id="id13">Stylesheet parameters</a></li>
-<li><a class="reference internal" href="#errors-and-messages" id="id14">Errors and messages</a></li>
-<li><a class="reference internal" href="#the-xslt-tree-method" id="id15">The <tt class="docutils literal">xslt()</tt> tree method</a></li>
-<li><a class="reference internal" href="#dealing-with-stylesheet-complexity" id="id16">Dealing with stylesheet complexity</a></li>
-<li><a class="reference internal" href="#profiling" id="id17">Profiling</a></li>
+<li><a class="reference internal" href="#xslt" id="toc-entry-11">XSLT</a><ul>
+<li><a class="reference internal" href="#xslt-result-objects" id="toc-entry-12">XSLT result objects</a></li>
+<li><a class="reference internal" href="#stylesheet-parameters" id="toc-entry-13">Stylesheet parameters</a></li>
+<li><a class="reference internal" href="#errors-and-messages" id="toc-entry-14">Errors and messages</a></li>
+<li><a class="reference internal" href="#the-xslt-tree-method" id="toc-entry-15">The <tt class="docutils literal">xslt()</tt> tree method</a></li>
+<li><a class="reference internal" href="#dealing-with-stylesheet-complexity" id="toc-entry-16">Dealing with stylesheet complexity</a></li>
+<li><a class="reference internal" href="#profiling" id="toc-entry-17">Profiling</a></li>
 </ul>
 </li>
 </ul>
@@ -327,21 +327,21 @@ write:</p>
 XPath expression:</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">XPath</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XPathSyntaxError</span>: <span class="n">Invalid expression</span>
 </pre></div>
 <p>lxml will also try to give you a hint what went wrong, so if you pass a more
 complex expression, you may get a somewhat more specific error:</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">XPath</span><span class="p">(</span><span class="s2">"//*[1.1.1]"</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XPathSyntaxError</span>: <span class="n">Invalid predicate</span>
 </pre></div>
 <p>During evaluation, lxml will emit an XPathEvalError on errors:</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">XPath</span><span class="p">(</span><span class="s2">"//ns:a"</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XPathEvalError</span>: <span class="n">Undefined namespace prefix</span>
 </pre></div>
 <p>This works for the <tt class="docutils literal">XPath</tt> class, however, the other evaluators (including
@@ -350,17 +350,17 @@ in one step.  They therefore raise evaluation exceptions in all cases:</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">find</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">"//*[1.1.1]"</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XPathEvalError</span>: <span class="n">Invalid predicate</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</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">"//ns:a"</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XPathEvalError</span>: <span class="n">Undefined namespace prefix</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">find</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">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">lxml.etree.XPathEvalError</span>: <span class="n">Invalid expression</span>
 </pre></div>
 <p>Note that lxml versions before 1.3 always raised an <tt class="docutils literal">XPathSyntaxError</tt> for
@@ -439,7 +439,7 @@ are not supported by Python will result in an error:</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">doc</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">LookupError</span>: <span class="n">unknown encoding: UCS4</span>
 </pre></div>
 <p>While it is possible to use the <tt class="docutils literal">.write()</tt> method (known from <tt class="docutils literal">ElementTree</tt>
@@ -511,7 +511,7 @@ First, let's try passing in a simple integer expression:</p>
 string.  Instead, it returns an opaque object that keeps the string
 value.</p>
 <div class="syntax"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">plain_string_value</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XSLT</span><span class="o">.</span><span class="n">strparam</span><span class="p">(</span>
-<span class="gp">... </span>                         <span class="sd">""" It's "Monty Python" """</span><span class="p">)</span>
+<span class="gp">... </span><span class="w">                         </span><span class="sd">""" It's "Monty Python" """</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">doc_root</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="n">plain_string_value</span><span class="p">)</span>
 <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; It\'s "Monty Python" &lt;/foo&gt;\n'</span>
@@ -635,7 +635,7 @@ keyword to the transform:</p>
 <p>The value of the <tt class="docutils literal">xslt_profile</tt> property is an ElementTree with profiling
 data about each template, similar to the following:</p>
 <div class="syntax"><pre><span></span><span class="nt">&lt;profile&gt;</span>
-  <span class="nt">&lt;template</span> <span class="na">rank=</span><span class="s">"1"</span> <span class="na">match=</span><span class="s">"/"</span> <span class="na">name=</span><span class="s">""</span> <span class="na">mode=</span><span class="s">""</span> <span class="na">calls=</span><span class="s">"1"</span> <span class="na">time=</span><span class="s">"1"</span> <span class="na">average=</span><span class="s">"1"</span><span class="nt">/&gt;</span>
+<span class="w">  </span><span class="nt">&lt;template</span><span class="w"> </span><span class="na">rank=</span><span class="s">"1"</span><span class="w"> </span><span class="na">match=</span><span class="s">"/"</span><span class="w"> </span><span class="na">name=</span><span class="s">""</span><span class="w"> </span><span class="na">mode=</span><span class="s">""</span><span class="w"> </span><span class="na">calls=</span><span class="s">"1"</span><span class="w"> </span><span class="na">time=</span><span class="s">"1"</span><span class="w"> </span><span class="na">average=</span><span class="s">"1"</span><span class="nt">/&gt;</span>
 <span class="nt">&lt;/profile&gt;</span>
 </pre></div>
 <p>Note that this is a read-only document.  You must not move any of its elements
@@ -648,7 +648,7 @@ If you want to free it from memory, just do:</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2022-07-01.
+Generated on: 2023-07-05.
 
 </div>
 </body>
index 578f92dcfe4582b21873d74f0bff7a2911873af2..041ad50b9508ea61eae924f0a37675b7505cb145 100644 (file)
@@ -160,8 +160,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.9.1`_, released 2022-07-01
-(`changes for 4.9.1`_).  `Older versions <#old-versions>`_
+The latest version is `lxml 4.9.3`_, released 2023-07-05
+(`changes for 4.9.3`_).  `Older versions <#old-versions>`_
 are listed below.
 
 Please take a look at the
@@ -256,7 +256,11 @@ See the websites of lxml
 ..
    and the `latest in-development version <https://lxml.de/dev/>`_.
 
-.. _`PDF documentation`: lxmldoc-4.9.1.pdf
+.. _`PDF documentation`: lxmldoc-4.9.3.pdf
+
+* `lxml 4.9.3`_, released 2023-07-05 (`changes for 4.9.3`_)
+
+* `lxml 4.9.2`_, released 2022-12-13 (`changes for 4.9.2`_)
 
 * `lxml 4.9.1`_, released 2022-07-01 (`changes for 4.9.1`_)
 
@@ -282,6 +286,8 @@ See the websites of lxml
 
 * `older releases <https://lxml.de/4.6/#old-versions>`_
 
+.. _`lxml 4.9.3`: /files/lxml-4.9.3.tgz
+.. _`lxml 4.9.2`: /files/lxml-4.9.2.tgz
 .. _`lxml 4.9.1`: /files/lxml-4.9.1.tgz
 .. _`lxml 4.9.0`: /files/lxml-4.9.0.tgz
 .. _`lxml 4.8.0`: /files/lxml-4.8.0.tgz
@@ -294,6 +300,7 @@ See the websites of lxml
 .. _`lxml 4.6.1`: /files/lxml-4.6.1.tgz
 .. _`lxml 4.6.0`: /files/lxml-4.6.0.tgz
 
+.. _`changes for 4.9.2`: /changes-4.9.2.html
 .. _`changes for 4.9.1`: /changes-4.9.1.html
 .. _`changes for 4.9.0`: /changes-4.9.0.html
 .. _`changes for 4.8.0`: /changes-4.8.0.html
index a88e7cb1a29bd5ee62b3861cdfe76a45c2acf0eb..99dbd01d7cd023a65352229f05fba525aa63a988 100644 (file)
@@ -24,7 +24,7 @@ RST2LATEX_OPTIONS = " ".join([
 htmlnsmap = {"h" : "http://www.w3.org/1999/xhtml"}
 
 replace_invalid = re.compile(r'[-_/.\s\\]').sub
-replace_content = re.compile("\{[^\}]*\}").sub
+replace_content = re.compile(r"\{[^\}]*\}").sub
 
 replace_epydoc_macros = re.compile(r'(,\s*amssymb|dvips\s*,\s*)').sub
 replace_rst_macros = re.compile(r'(\\usepackage\{color}|\\usepackage\[[^]]*]\{hyperref})').sub
@@ -167,7 +167,7 @@ def tex_postprocess(src_path, dest_path, want_header=False, process_line=noop):
         if skipping(l):
             # To-Do minitoc instead of tableofcontents
             continue
-        elif "\hypertarget{old-versions}" in l:
+        elif r"\hypertarget{old-versions}" in l:
             break
         elif "listcnt0" in l:
             l = l.replace("listcnt0", counter_text)
index 62ffda736c8d2ed14d9ca9155d7e108535b61f4f..be2c4e6677d0a98551f93717bae72410a23af8dd 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.17.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
 <meta name="version" content="S5 1.1" />
 <title>Implementing XML languages with lxml</title>
 <style type="text/css">
@@ -439,7 +439,7 @@ ul.auto-toc {
 <h1>Popular mistakes to avoid (2)</h1>
 <p>&quot;This is tree data, I'll take the DOM!&quot;</p>
 </div>
-<div class="slide" id="id1">
+<div class="slide" id="popular-mistakes-to-avoid-2-1">
 <h1>Popular mistakes to avoid (2)</h1>
 <p>&quot;This is tree data, I'll take the DOM!&quot;</p>
 <ul class="simple">
@@ -457,7 +457,7 @@ ul.auto-toc {
 <h1>Popular mistakes to avoid (3)</h1>
 <p>&quot;SAX is <em>so</em> fast and consumes <em>no</em> memory!&quot;</p>
 </div>
-<div class="slide" id="id2">
+<div class="slide" id="popular-mistakes-to-avoid-3-1">
 <h1>Popular mistakes to avoid (3)</h1>
 <p>&quot;SAX is <em>so</em> fast and consumes <em>no</em> memory!&quot;</p>
 <ul class="simple">
@@ -527,7 +527,7 @@ ul.auto-toc {
 </li>
 </ul>
 </div>
-<div class="slide" id="id3">
+<div class="slide" id="what-if-you-could-simplify-this-1">
 <h1>What if you could simplify this ...</h1>
 <ul class="simple">
 <li>... without sacrificing usability or flexibility?</li>
@@ -760,8 +760,8 @@ HTML task«</li>
 <div class="slide" id="path-languages-in-lxml">
 <h1>Path languages in lxml</h1>
 <div class="highlight"><pre><span></span><span class="nt">&lt;root&gt;</span>
-  <span class="nt">&lt;speech</span> <span class="na">class=</span><span class="s">&#39;dialog&#39;</span><span class="nt">&gt;&lt;p&gt;</span>So be it!<span class="nt">&lt;/p&gt;&lt;/speech&gt;</span>
-  <span class="nt">&lt;p&gt;</span>stuff<span class="nt">&lt;/p&gt;</span>
+<span class="w">  </span><span class="nt">&lt;speech</span><span class="w"> </span><span class="na">class=</span><span class="s">&#39;dialog&#39;</span><span class="nt">&gt;&lt;p&gt;</span>So<span class="w"> </span>be<span class="w"> </span>it!<span class="nt">&lt;/p&gt;&lt;/speech&gt;</span>
+<span class="w">  </span><span class="nt">&lt;p&gt;</span>stuff<span class="nt">&lt;/p&gt;</span>
 <span class="nt">&lt;/root&gt;</span>
 </pre></div>
 <ul>
@@ -937,16 +937,16 @@ HTML task«</li>
 <span class="gp">... </span>  <span class="p">)</span>
 <span class="gp">... </span><span class="p">)</span>
 </pre></div>
-<div class="highlight"><pre><span></span><span class="nt">&lt;feed</span> <span class="na">xmlns=</span><span class="s">&quot;http://www.w3.org/2005/Atom&quot;</span><span class="nt">&gt;</span>
-  <span class="nt">&lt;author&gt;</span>
-    <span class="nt">&lt;name&gt;</span>Stefan Behnel<span class="nt">&lt;/name&gt;</span>
-  <span class="nt">&lt;/author&gt;</span>
-  <span class="nt">&lt;entry&gt;</span>
-    <span class="nt">&lt;title&gt;</span>News from lxml<span class="nt">&lt;/title&gt;</span>
-    <span class="nt">&lt;link</span> <span class="na">href=</span><span class="s">&quot;http://codespeak.net/lxml/&quot;</span><span class="nt">/&gt;</span>
-    <span class="nt">&lt;summary</span> <span class="na">type=</span><span class="s">&quot;html&quot;</span><span class="nt">&gt;</span>See what&#39;s <span class="ni">&amp;lt;</span>b<span class="ni">&amp;gt;</span>fun<span class="ni">&amp;lt;</span>/b<span class="ni">&amp;gt;</span>
-                         about lxml...<span class="nt">&lt;/summary&gt;</span>
-  <span class="nt">&lt;/entry&gt;</span>
+<div class="highlight"><pre><span></span><span class="nt">&lt;feed</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">&quot;http://www.w3.org/2005/Atom&quot;</span><span class="nt">&gt;</span>
+<span class="w">  </span><span class="nt">&lt;author&gt;</span>
+<span class="w">    </span><span class="nt">&lt;name&gt;</span>Stefan<span class="w"> </span>Behnel<span class="nt">&lt;/name&gt;</span>
+<span class="w">  </span><span class="nt">&lt;/author&gt;</span>
+<span class="w">  </span><span class="nt">&lt;entry&gt;</span>
+<span class="w">    </span><span class="nt">&lt;title&gt;</span>News<span class="w"> </span>from<span class="w"> </span>lxml<span class="nt">&lt;/title&gt;</span>
+<span class="w">    </span><span class="nt">&lt;link</span><span class="w"> </span><span class="na">href=</span><span class="s">&quot;http://codespeak.net/lxml/&quot;</span><span class="nt">/&gt;</span>
+<span class="w">    </span><span class="nt">&lt;summary</span><span class="w"> </span><span class="na">type=</span><span class="s">&quot;html&quot;</span><span class="nt">&gt;</span>See<span class="w"> </span>what&#39;s<span class="w"> </span><span class="ni">&amp;lt;</span>b<span class="ni">&amp;gt;</span>fun<span class="ni">&amp;lt;</span>/b<span class="ni">&amp;gt;</span>
+<span class="w">                         </span>about<span class="w"> </span>lxml...<span class="nt">&lt;/summary&gt;</span>
+<span class="w">  </span><span class="nt">&lt;/entry&gt;</span>
 <span class="nt">&lt;/feed&gt;</span>
 </pre></div>
 </div>
@@ -962,16 +962,16 @@ HTML task«</li>
 <span class="gp">... </span>  <span class="p">)</span>
 <span class="gp">... </span><span class="p">)</span>
 </pre></div>
-<div class="highlight"><pre><span></span><span class="nt">&lt;feed</span> <span class="na">xmlns=</span><span class="s">&quot;http://www.w3.org/2005/Atom&quot;</span><span class="nt">&gt;</span>
-  <span class="nt">&lt;author&gt;</span>
-    <span class="nt">&lt;name&gt;</span>Stefan Behnel<span class="nt">&lt;/name&gt;</span>
-  <span class="nt">&lt;/author&gt;</span>
-  <span class="nt">&lt;entry&gt;</span>
-    <span class="nt">&lt;titel&gt;</span>News from lxml<span class="nt">&lt;/titel&gt;</span>
-    <span class="nt">&lt;link</span> <span class="na">href=</span><span class="s">&quot;http://codespeak.net/lxml/&quot;</span><span class="nt">/&gt;</span>
-    <span class="nt">&lt;summary</span> <span class="na">type=</span><span class="s">&quot;html&quot;</span><span class="nt">&gt;</span>See what&#39;s <span class="ni">&amp;lt;</span>b<span class="ni">&amp;gt;</span>fun<span class="ni">&amp;lt;</span>/b<span class="ni">&amp;gt;</span>
-                         about lxml...<span class="nt">&lt;/summary&gt;</span>
-  <span class="nt">&lt;/entry&gt;</span>
+<div class="highlight"><pre><span></span><span class="nt">&lt;feed</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">&quot;http://www.w3.org/2005/Atom&quot;</span><span class="nt">&gt;</span>
+<span class="w">  </span><span class="nt">&lt;author&gt;</span>
+<span class="w">    </span><span class="nt">&lt;name&gt;</span>Stefan<span class="w"> </span>Behnel<span class="nt">&lt;/name&gt;</span>
+<span class="w">  </span><span class="nt">&lt;/author&gt;</span>
+<span class="w">  </span><span class="nt">&lt;entry&gt;</span>
+<span class="w">    </span><span class="nt">&lt;titel&gt;</span>News<span class="w"> </span>from<span class="w"> </span>lxml<span class="nt">&lt;/titel&gt;</span>
+<span class="w">    </span><span class="nt">&lt;link</span><span class="w"> </span><span class="na">href=</span><span class="s">&quot;http://codespeak.net/lxml/&quot;</span><span class="nt">/&gt;</span>
+<span class="w">    </span><span class="nt">&lt;summary</span><span class="w"> </span><span class="na">type=</span><span class="s">&quot;html&quot;</span><span class="nt">&gt;</span>See<span class="w"> </span>what&#39;s<span class="w"> </span><span class="ni">&amp;lt;</span>b<span class="ni">&amp;gt;</span>fun<span class="ni">&amp;lt;</span>/b<span class="ni">&amp;gt;</span>
+<span class="w">                         </span>about<span class="w"> </span>lxml...<span class="nt">&lt;/summary&gt;</span>
+<span class="w">  </span><span class="nt">&lt;/entry&gt;</span>
 <span class="nt">&lt;/feed&gt;</span>
 </pre></div>
 </div>
@@ -1019,7 +1019,7 @@ HTML task«</li>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="n">title</span> <span class="o">=</span> <span class="n">A</span><span class="o">.</span><span class="n">titel</span><span class="p">(</span><span class="s2">&quot;News from lxml&quot;</span><span class="p">)</span>
 <span class="gt">Traceback (most recent call last):</span>
-  <span class="c">...</span>
+<span class="w">  </span><span class="c">...</span>
 <span class="gr">AttributeError</span>: <span class="n">&#39;module&#39; object has no attribute &#39;titel&#39;</span>
 </pre></div>
 </div>
@@ -1153,7 +1153,7 @@ HTML task«</li>
 </li>
 </ul>
 </div>
-<div class="slide" id="id4">
+<div class="slide" id="mapping-python-classes-to-nodes-1">
 <h1>Mapping Python classes to nodes</h1>
 <ul class="simple">
 <li>The Element class lookup<ul>
index cf0f45bbc9c9b1a040cc78ec2eaa003c1af13d96..43a52589cdce5ba47ab83820e4f79f2ab110f074 100644 (file)
@@ -2,7 +2,7 @@ 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)"
+    r"\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')
index 988182be65dd1e830d00198929bb3768be04a8a6..b3a8bdb977cc4ca1154e7aed6b1761b9f1e33a96 100644 (file)
@@ -1 +1 @@
-Cython>=0.29.7
+Cython>=0.29.35
index 97dd973fe56d65f0a4700086180ac1a65d7c0d78..7a3f46e5389db2a0c069652490433246f0d8bab7 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -88,6 +88,9 @@ extra_options['package_data'] = {
         'etree_api.h',
         'lxml.etree.h',
         'lxml.etree_api.h',
+        # Include Cython source files for better traceback output.
+        '*.pyx',
+        '*.pxi',
     ],
     'lxml.includes': [
         '*.pxd', '*.h'
@@ -111,7 +114,7 @@ extra_options['packages'] = [
 
 def setup_extra_options():
     is_interesting_package = re.compile('^(libxml|libxslt|libexslt)$').match
-    is_interesting_header = re.compile('^(zconf|zlib|.*charset)\.h$').match
+    is_interesting_header = re.compile(r'^(zconf|zlib|.*charset)\.h$').match
 
     def extract_files(directories, pattern='*'):
         def get_files(root, dir_path, files):
@@ -208,7 +211,7 @@ setup(
     author_email="lxml-dev@lxml.de",
     maintainer="lxml dev team",
     maintainer_email="lxml-dev@lxml.de",
-    license="BSD",
+    license="BSD-3-Clause",
     url="https://lxml.de/",
     # Commented out because this causes distutils to emit warnings
     # `Unknown distribution option: 'bugtrack_url'`
@@ -254,12 +257,13 @@ an appropriate version of Cython installed.
         'Programming Language :: Python :: 2',
         'Programming Language :: Python :: 2.7',
         'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.5',
         'Programming Language :: Python :: 3.6',
         'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
         'Programming Language :: Python :: 3.9',
         'Programming Language :: Python :: 3.10',
+        'Programming Language :: Python :: 3.11',
+        'Programming Language :: Python :: 3.12',
         'Programming Language :: C',
         'Operating System :: OS Independent',
         'Topic :: Text Processing :: Markup :: HTML',
index 675891478329792e7d17fea7fd2120238426013c..90b1de4eacd018197ea1bbf5a188524597a14615 100644 (file)
@@ -351,6 +351,7 @@ def define_macros():
     if OPTION_BUILD_LIBXML2XSLT:
         macros.append(('LIBXML_STATIC', None))
         macros.append(('LIBXSLT_STATIC', None))
+        macros.append(('LIBEXSLT_STATIC', None))
     # Disable showing C lines in tracebacks, unless explicitly requested.
     macros.append(('CYTHON_CLINE_IN_TRACEBACK', '1' if OPTION_WITH_CLINES else '0'))
     return macros
index 53cced125c189da885a329cdf2241ca01178d24c..33d4731b12fc392112194aec3d5c24f9eb712e65 100644 (file)
@@ -1,13 +1,13 @@
 Metadata-Version: 2.1
 Name: lxml
-Version: 4.9.1
+Version: 4.9.3
 Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
 Home-page: https://lxml.de/
 Author: lxml dev team
 Author-email: lxml-dev@lxml.de
 Maintainer: lxml dev team
 Maintainer-email: lxml-dev@lxml.de
-License: BSD
+License: BSD-3-Clause
 Project-URL: Source, https://github.com/lxml/lxml
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
@@ -17,12 +17,13 @@ Classifier: Programming Language :: Cython
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 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 :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: C
 Classifier: Operating System :: OS Independent
 Classifier: Topic :: Text Processing :: Markup :: HTML
@@ -66,15 +67,28 @@ https://github.com/lxml/lxml/tarball/lxml-4.9#egg=lxml-4.9bugfix
 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.9.1 (2022-07-01)
+4.9.3 (2023-07-05)
 ==================
 
 Bugs fixed
 ----------
 
-* A crash was resolved when using ``iterwalk()`` (or ``canonicalize()``)
-  after parsing certain incorrect input.  Note that ``iterwalk()`` can crash
-  on *valid* input parsed with the same parser *after* failing to parse the
-  incorrect input.
+* ``lxml.objectify`` accepted non-decimal numbers like ``²²²`` as integers.
+
+* A memory leak in ``lxml.html.clean`` was resolved by switching to Cython 0.29.34+.
+
+* GH#348: URL checking in the HTML cleaner was improved.
+  Patch by Tim McCormack.
+
+* GH#371, GH#373: Some regex strings were changed to raw strings to fix Python warnings.
+  Patches by Jakub Wilk and Anthony Sottile.
+
+Other changes
+-------------
+
+* Wheels include zlib 1.2.13, libxml2 2.10.3 and libxslt 1.1.38
+  (zlib 1.2.12, libxml2 2.10.3 and libxslt 1.1.37 on Windows).
+
+* Built with Cython 0.29.36 to adapt to changes in Python 3.12.
 
 
index dd7f8b7692de68cc949d0deb96b29409ee5f75ad..c315ae8620edb7ebfa1d4abad6e167ca6ce333b2 100644 (file)
@@ -59,7 +59,7 @@ doc/html/FAQ.html
 doc/html/api.html
 doc/html/build.html
 doc/html/capi.html
-doc/html/changes-4.9.1.html
+doc/html/changes-4.9.3.html
 doc/html/compatibility.html
 doc/html/credits.html
 doc/html/cssselect.html
@@ -111,8 +111,10 @@ 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/objects.inv
 doc/html/apidoc/py-modindex.html
 doc/html/apidoc/search.html
+doc/html/apidoc/searchindex.js
 doc/html/apidoc/_modules/index.html
 doc/html/apidoc/_modules/lxml.html
 doc/html/apidoc/_modules/lxml/ElementInclude.html
@@ -146,10 +148,25 @@ doc/html/apidoc/_sources/lxml.isoschematron.rst.txt
 doc/html/apidoc/_sources/lxml.objectify.rst.txt
 doc/html/apidoc/_sources/lxml.rst.txt
 doc/html/apidoc/_sources/lxml.sax.rst.txt
+doc/html/apidoc/_static/_sphinx_javascript_frameworks_compat.js
 doc/html/apidoc/_static/basic.css
+doc/html/apidoc/_static/doctools.js
+doc/html/apidoc/_static/documentation_options.js
+doc/html/apidoc/_static/file.png
+doc/html/apidoc/_static/jquery.js
+doc/html/apidoc/_static/language_data.js
+doc/html/apidoc/_static/minus.png
+doc/html/apidoc/_static/plus.png
 doc/html/apidoc/_static/pygments.css
+doc/html/apidoc/_static/python-xml.png
+doc/html/apidoc/_static/searchtools.js
+doc/html/apidoc/_static/sphinx_highlight.js
 doc/html/apidoc/_static/css/badge_only.css
 doc/html/apidoc/_static/css/theme.css
+doc/html/apidoc/_static/js/badge_only.js
+doc/html/apidoc/_static/js/html5shiv-printshiv.min.js
+doc/html/apidoc/_static/js/html5shiv.min.js
+doc/html/apidoc/_static/js/theme.js
 doc/licenses/BSD.txt
 doc/licenses/GPL.txt
 doc/licenses/elementtree.txt
@@ -449,5 +466,6 @@ src/lxml/tests/c14n-20/out_inNsXml_c14nPrefixQname.xml
 src/lxml/tests/c14n-20/out_inNsXml_c14nQname.xml
 src/lxml/tests/c14n-20/world.txt
 src/lxml/tests/include/test_xinclude.xml
+tools/pypistats.py
 tools/xpathgrep.py
 tools/manylinux/build-wheels.sh
\ No newline at end of file
index 29f62b2881b64ea11a6fe6d1dc8cc31f94b63365..a021061bbe5ed10861b35e3c6badb3da5603daff 100644 (file)
@@ -9,4 +9,4 @@ html5lib
 BeautifulSoup4
 
 [source]
-Cython>=0.29.7
+Cython>=0.29.35
index f8be68f71145eb678de3d61311126457b52ea105..42400a06d4aa809a33d4940432b2cdfe57a22069 100644 (file)
@@ -1,6 +1,6 @@
 # this is a package
 
-__version__ = "4.9.1"
+__version__ = "4.9.3"
 
 
 def get_include():
index 2c47fdd43dabe5729d11bc9e5c0a962a8da15345..901a7f4594a0f6a63c23bba1d885e47ff17dc407 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 /* BEGIN: Cython Metadata
 {
@@ -32,8 +32,8 @@ END: Cython Metadata */
 #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_30"
-#define CYTHON_HEX_VERSION 0x001D1EF0
+#define CYTHON_ABI "0_29_36"
+#define CYTHON_HEX_VERSION 0x001D24F0
 #define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
@@ -72,6 +72,7 @@ END: Cython Metadata */
   #define CYTHON_COMPILING_IN_PYPY 1
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #undef CYTHON_USE_TYPE_SLOTS
   #define CYTHON_USE_TYPE_SLOTS 0
   #undef CYTHON_USE_PYTYPE_LOOKUP
@@ -100,21 +101,26 @@ END: Cython Metadata */
   #define CYTHON_FAST_THREAD_STATE 0
   #undef CYTHON_FAST_PYCALL
   #define CYTHON_FAST_PYCALL 0
-  #undef CYTHON_PEP489_MULTI_PHASE_INIT
-  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #if PY_VERSION_HEX < 0x03090000
+    #undef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
   #undef CYTHON_USE_TP_FINALIZE
-  #define CYTHON_USE_TP_FINALIZE 0
+  #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
   #undef CYTHON_USE_DICT_VERSIONS
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
-    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
 #elif defined(PYSTON_VERSION)
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -155,10 +161,56 @@ END: Cython Metadata */
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
     #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
+#elif defined(PY_NOGIL)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #ifndef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE 1
+  #endif
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -178,7 +230,7 @@ END: Cython Metadata */
     #undef CYTHON_USE_PYLONG_INTERNALS
     #define CYTHON_USE_PYLONG_INTERNALS 0
   #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
-    #define CYTHON_USE_PYLONG_INTERNALS 1
+    #define CYTHON_USE_PYLONG_INTERNALS (PY_VERSION_HEX < 0x030C00A5)
   #endif
   #ifndef CYTHON_USE_PYLIST_INTERNALS
     #define CYTHON_USE_PYLIST_INTERNALS 1
@@ -217,7 +269,7 @@ END: Cython Metadata */
     #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
   #endif
   #ifndef CYTHON_USE_DICT_VERSIONS
-    #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+    #define CYTHON_USE_DICT_VERSIONS ((PY_VERSION_HEX >= 0x030600B1) && (PY_VERSION_HEX < 0x030C00A5))
   #endif
   #if PY_VERSION_HEX >= 0x030B00A4
     #undef CYTHON_USE_EXC_INFO_STACK
@@ -340,9 +392,6 @@ END: Cython Metadata */
   #endif
 #endif
 
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
-  #define Py_OptimizeFlag 0
-#endif
 #define __PYX_BUILD_PY_SSIZE_T "n"
 #define CYTHON_FORMAT_SSIZE_T "z"
 #if PY_MAJOR_VERSION < 3
@@ -420,6 +469,11 @@ END: Cython Metadata */
 #endif
   #define __Pyx_DefaultClassType PyType_Type
 #endif
+#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
+#else
+  #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
+#endif
 #ifndef Py_TPFLAGS_CHECKTYPES
   #define Py_TPFLAGS_CHECKTYPES 0
 #endif
@@ -527,11 +581,11 @@ 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)))
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_READY(op)       (0)
   #else
-  #define __Pyx_PyUnicode_READY(op)       (0)
+    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+                                                0 : _PyUnicode_Ready((PyObject *)(op)))
   #endif
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
@@ -540,14 +594,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
-  #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
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #else
-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
+    #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
   #endif
 #else
   #define CYTHON_PEP393_ENABLED 0
@@ -1416,18 +1470,18 @@ static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UIN
 
 /* GetModuleGlobalName.proto */
 #if CYTHON_USE_DICT_VERSIONS
-#define __Pyx_GetModuleGlobalName(var, name)  {\
+#define __Pyx_GetModuleGlobalName(var, name)  do {\
     static PY_UINT64_T __pyx_dict_version = 0;\
     static PyObject *__pyx_dict_cached_value = NULL;\
     (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
         (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
         __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
-#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
+} while(0)
+#define __Pyx_GetModuleGlobalNameUncached(var, name)  do {\
     PY_UINT64_T __pyx_dict_version;\
     PyObject *__pyx_dict_cached_value;\
     (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
+} while(0)
 static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
 #else
 #define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
@@ -10663,7 +10717,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct__xpath_to
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -10778,7 +10832,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_1_prepare
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -10907,7 +10961,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_2_select
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -11032,7 +11086,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_3_select
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -11147,7 +11201,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_4_prepare
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -11276,7 +11330,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_5_select
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -11397,7 +11451,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_6_select
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -11527,7 +11581,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_7_prepare
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -11648,7 +11702,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_8_select
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -11769,7 +11823,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_9_select
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -11898,7 +11952,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_10_select
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -12027,7 +12081,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_11_select
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -12148,7 +12202,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_12_select
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -12289,7 +12343,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_13_select
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -12404,7 +12458,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_14__build
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -12517,7 +12571,7 @@ static PyTypeObject __pyx_type_4lxml_12_elementpath___pyx_scope_struct_15_genexp
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -13168,7 +13222,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
 }
 
 static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error)
@@ -13542,7 +13596,7 @@ if (!__Pyx_RefNanny) {
   Py_INCREF(__pyx_b);
   __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
   Py_INCREF(__pyx_cython_runtime);
-  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Initialize various global constants etc. ---*/
   if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
@@ -13855,7 +13909,7 @@ if (!__Pyx_RefNanny) {
 
   /*--- Wrapped vars code ---*/
 
-  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error)
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -14596,10 +14650,8 @@ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
         Py_DECREF(retval);
         __Pyx_RaiseTooManyValuesError(expected);
         return -1;
-    } else {
-        return __Pyx_IterFinish();
     }
-    return 0;
+    return __Pyx_IterFinish();
 }
 
 /* GetItemInt */
@@ -14999,13 +15051,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     }
     PyErr_SetObject(type, value);
     if (tb) {
-#if CYTHON_COMPILING_IN_PYPY
-        PyObject *tmp_type, *tmp_value, *tmp_tb;
-        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
-        Py_INCREF(tb);
-        PyErr_Restore(tmp_type, tmp_value, tb);
-        Py_XDECREF(tmp_tb);
-#else
+#if CYTHON_FAST_THREAD_STATE
         PyThreadState *tstate = __Pyx_PyThreadState_Current;
         PyObject* tmp_tb = tstate->curexc_traceback;
         if (tb != tmp_tb) {
@@ -15013,6 +15059,12 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             tstate->curexc_traceback = tb;
             Py_XDECREF(tmp_tb);
         }
+#else
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
 #endif
     }
 bad:
@@ -15024,7 +15076,7 @@ bad:
 /* ObjectGetItem */
 #if CYTHON_USE_TYPE_SLOTS
 static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
-    PyObject *runerr;
+    PyObject *runerr = NULL;
     Py_ssize_t key_value;
     PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
     if (unlikely(!(m && m->sq_item))) {
@@ -15746,9 +15798,14 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P
         self = PyTuple_GetItem(args, 0);
         if (unlikely(!self)) {
             Py_DECREF(new_args);
+#if PY_MAJOR_VERSION > 2
             PyErr_Format(PyExc_TypeError,
                          "unbound method %.200S() needs an argument",
                          cyfunc->func_qualname);
+#else
+            PyErr_SetString(PyExc_TypeError,
+                            "unbound method needs an argument");
+#endif
             return NULL;
         }
         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
@@ -15823,7 +15880,10 @@ static PyTypeObject __pyx_CyFunctionType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
@@ -15881,7 +15941,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
         return __Pyx_PyFunction_FastCall(func, NULL, 0);
     }
 #endif
-#ifdef __Pyx_CyFunction_USED
+#if defined(__Pyx_CyFunction_USED) && defined(NDEBUG)
     if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
 #else
     if (likely(PyCFunction_Check(func)))
@@ -16242,11 +16302,11 @@ static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject* iterator, PyObject*
     PyObject* next;
     iternextfunc iternext = Py_TYPE(iterator)->tp_iternext;
     if (likely(iternext)) {
-#if CYTHON_USE_TYPE_SLOTS
+#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY
         next = iternext(iterator);
         if (likely(next))
             return next;
-        #if PY_VERSION_HEX >= 0x02070000
+        #if PY_VERSION_HEX >= 0x02070000 && CYTHON_COMPILING_IN_CPYTHON
         if (unlikely(iternext == &_PyObject_NextNotImplemented))
             return NULL;
         #endif
@@ -16438,7 +16498,7 @@ bad:
 
 /* CLineInTraceback */
 #ifndef CYTHON_CLINE_IN_TRACEBACK
-static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
+static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_line) {
     PyObject *use_cline;
     PyObject *ptype, *pvalue, *ptraceback;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -16785,7 +16845,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -16981,7 +17041,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -18346,7 +18406,10 @@ static PyTypeObject __pyx_GeneratorType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
index 52559e78c745b972b2f72fc8faa67abe07064733..236e535d0d20760ee51d28377b91c5511f01d10f 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 /* BEGIN: Cython Metadata
 {
@@ -32,8 +32,8 @@ END: Cython Metadata */
 #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_30"
-#define CYTHON_HEX_VERSION 0x001D1EF0
+#define CYTHON_ABI "0_29_36"
+#define CYTHON_HEX_VERSION 0x001D24F0
 #define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
@@ -72,6 +72,7 @@ END: Cython Metadata */
   #define CYTHON_COMPILING_IN_PYPY 1
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #undef CYTHON_USE_TYPE_SLOTS
   #define CYTHON_USE_TYPE_SLOTS 0
   #undef CYTHON_USE_PYTYPE_LOOKUP
@@ -100,21 +101,26 @@ END: Cython Metadata */
   #define CYTHON_FAST_THREAD_STATE 0
   #undef CYTHON_FAST_PYCALL
   #define CYTHON_FAST_PYCALL 0
-  #undef CYTHON_PEP489_MULTI_PHASE_INIT
-  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #if PY_VERSION_HEX < 0x03090000
+    #undef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
   #undef CYTHON_USE_TP_FINALIZE
-  #define CYTHON_USE_TP_FINALIZE 0
+  #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
   #undef CYTHON_USE_DICT_VERSIONS
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
-    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
 #elif defined(PYSTON_VERSION)
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -155,10 +161,56 @@ END: Cython Metadata */
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
     #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
+#elif defined(PY_NOGIL)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #ifndef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE 1
+  #endif
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -178,7 +230,7 @@ END: Cython Metadata */
     #undef CYTHON_USE_PYLONG_INTERNALS
     #define CYTHON_USE_PYLONG_INTERNALS 0
   #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
-    #define CYTHON_USE_PYLONG_INTERNALS 1
+    #define CYTHON_USE_PYLONG_INTERNALS (PY_VERSION_HEX < 0x030C00A5)
   #endif
   #ifndef CYTHON_USE_PYLIST_INTERNALS
     #define CYTHON_USE_PYLIST_INTERNALS 1
@@ -217,7 +269,7 @@ END: Cython Metadata */
     #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
   #endif
   #ifndef CYTHON_USE_DICT_VERSIONS
-    #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+    #define CYTHON_USE_DICT_VERSIONS ((PY_VERSION_HEX >= 0x030600B1) && (PY_VERSION_HEX < 0x030C00A5))
   #endif
   #if PY_VERSION_HEX >= 0x030B00A4
     #undef CYTHON_USE_EXC_INFO_STACK
@@ -340,9 +392,6 @@ END: Cython Metadata */
   #endif
 #endif
 
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
-  #define Py_OptimizeFlag 0
-#endif
 #define __PYX_BUILD_PY_SSIZE_T "n"
 #define CYTHON_FORMAT_SSIZE_T "z"
 #if PY_MAJOR_VERSION < 3
@@ -420,6 +469,11 @@ END: Cython Metadata */
 #endif
   #define __Pyx_DefaultClassType PyType_Type
 #endif
+#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
+#else
+  #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
+#endif
 #ifndef Py_TPFLAGS_CHECKTYPES
   #define Py_TPFLAGS_CHECKTYPES 0
 #endif
@@ -527,11 +581,11 @@ 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)))
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_READY(op)       (0)
   #else
-  #define __Pyx_PyUnicode_READY(op)       (0)
+    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+                                                0 : _PyUnicode_Ready((PyObject *)(op)))
   #endif
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
@@ -540,14 +594,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
-  #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
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #else
-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
+    #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
   #endif
 #else
   #define CYTHON_PEP393_ENABLED 0
@@ -1250,18 +1304,18 @@ static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UIN
 
 /* GetModuleGlobalName.proto */
 #if CYTHON_USE_DICT_VERSIONS
-#define __Pyx_GetModuleGlobalName(var, name)  {\
+#define __Pyx_GetModuleGlobalName(var, name)  do {\
     static PY_UINT64_T __pyx_dict_version = 0;\
     static PyObject *__pyx_dict_cached_value = NULL;\
     (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
         (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
         __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
-#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
+} while(0)
+#define __Pyx_GetModuleGlobalNameUncached(var, name)  do {\
     PY_UINT64_T __pyx_dict_version;\
     PyObject *__pyx_dict_cached_value;\
     (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
+} while(0)
 static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
 #else
 #define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
@@ -1279,6 +1333,23 @@ static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* k
 #define __Pyx_PyObject_GetItem(obj, key)  PyObject_GetItem(obj, key)
 #endif
 
+/* AssertionsEnabled.proto */
+#define __Pyx_init_assertions_enabled()
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
+  #define __pyx_assertions_enabled() (1)
+#elif PY_VERSION_HEX < 0x03080000  ||  CYTHON_COMPILING_IN_PYPY  ||  defined(Py_LIMITED_API)
+  #define __pyx_assertions_enabled() (!Py_OptimizeFlag)
+#elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030900A6
+  static int __pyx_assertions_enabled_flag;
+  #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag)
+  #undef __Pyx_init_assertions_enabled
+  static void __Pyx_init_assertions_enabled(void) {
+    __pyx_assertions_enabled_flag = ! _PyInterpreterState_GetConfig(__Pyx_PyThreadState_Current->interp)->optimization_level;
+  }
+#else
+  #define __pyx_assertions_enabled() (!Py_OptimizeFlag)
+#endif
+
 /* CallableCheck.proto */
 #if CYTHON_USE_TYPE_SLOTS && PY_MAJOR_VERSION >= 3
 #define __Pyx_PyCallable_Check(obj)   (Py_TYPE(obj)->tp_call != NULL)
@@ -2745,7 +2816,7 @@ static int __pyx_pf_4lxml_7builder_12ElementMaker___init__(struct __pyx_obj_4lxm
  * 
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_5 = (__pyx_v_makeelement == Py_None);
     __pyx_t_6 = (__pyx_t_5 != 0);
     if (!__pyx_t_6) {
@@ -2982,7 +3053,7 @@ static int __pyx_pf_4lxml_7builder_12ElementMaker___init__(struct __pyx_obj_4lxm
  * 
  *     def __call__(self, tag, *children, **attrib):
  */
-  if (!(likely(PyDict_CheckExact(__pyx_cur_scope->__pyx_v_typemap))||((__pyx_cur_scope->__pyx_v_typemap) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_cur_scope->__pyx_v_typemap)->tp_name), 0))) __PYX_ERR(0, 191, __pyx_L1_error)
+  if (!(likely(PyDict_CheckExact(__pyx_cur_scope->__pyx_v_typemap))||((__pyx_cur_scope->__pyx_v_typemap) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_cur_scope->__pyx_v_typemap)->tp_name), 0))) __PYX_ERR(0, 191, __pyx_L1_error)
   __pyx_t_1 = __pyx_cur_scope->__pyx_v_typemap;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -4388,7 +4459,7 @@ static PyObject *__pyx_pf_4lxml_7builder_12ElementMaker_8__setstate_cython__(str
  * def __setstate_cython__(self, __pyx_state):
  *     __pyx_unpickle_ElementMaker__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
  */
-  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error)
+  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error)
   __pyx_t_1 = __pyx_f_4lxml_7builder___pyx_unpickle_ElementMaker__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -4634,7 +4705,7 @@ static PyObject *__pyx_pf_4lxml_7builder___pyx_unpickle_ElementMaker(CYTHON_UNUS
  *     return __pyx_result
  * cdef __pyx_unpickle_ElementMaker__set_state(ElementMaker __pyx_result, tuple __pyx_state):
  */
-    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error)
+    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error)
     __pyx_t_4 = __pyx_f_4lxml_7builder___pyx_unpickle_ElementMaker__set_state(((struct __pyx_obj_4lxml_7builder_ElementMaker *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -4741,7 +4812,7 @@ static PyObject *__pyx_f_4lxml_7builder___pyx_unpickle_ElementMaker__set_state(s
   }
   __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error)
+  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error)
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v___pyx_result->_nsmap);
   __Pyx_DECREF(__pyx_v___pyx_result->_nsmap);
@@ -4753,7 +4824,7 @@ static PyObject *__pyx_f_4lxml_7builder___pyx_unpickle_ElementMaker__set_state(s
   }
   __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error)
+  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error)
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v___pyx_result->_typemap);
   __Pyx_DECREF(__pyx_v___pyx_result->_typemap);
@@ -4869,7 +4940,7 @@ static PyObject *__pyx_tp_new_4lxml_7builder_ElementMaker(PyTypeObject *t, CYTHO
 static void __pyx_tp_dealloc_4lxml_7builder_ElementMaker(PyObject *o) {
   struct __pyx_obj_4lxml_7builder_ElementMaker *p = (struct __pyx_obj_4lxml_7builder_ElementMaker *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -5015,7 +5086,7 @@ static PyTypeObject __pyx_type_4lxml_7builder_ElementMaker = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -5130,7 +5201,7 @@ static PyTypeObject __pyx_type_4lxml_7builder___pyx_scope_struct____init__ = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -5362,8 +5433,13 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
 }
 
 static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
+  /* AssertionsEnabled.init */
+  __Pyx_init_assertions_enabled();
+
+if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)
+
   __pyx_umethod_PyDict_Type_get.type = (PyObject*)&PyDict_Type;
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_97892792 = PyInt_FromLong(97892792L); if (unlikely(!__pyx_int_97892792)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_167522209 = PyInt_FromLong(167522209L); if (unlikely(!__pyx_int_167522209)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_227406024 = PyInt_FromLong(227406024L); if (unlikely(!__pyx_int_227406024)) __PYX_ERR(0, 1, __pyx_L1_error)
@@ -5641,7 +5717,7 @@ if (!__Pyx_RefNanny) {
   Py_INCREF(__pyx_b);
   __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
   Py_INCREF(__pyx_cython_runtime);
-  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Initialize various global constants etc. ---*/
   if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
@@ -5704,7 +5780,7 @@ if (!__Pyx_RefNanny) {
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_7builder_ET, __pyx_n_s_QName_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 45, __pyx_L1_error)
+  if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 45, __pyx_L1_error)
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_7builder__QName));
   __Pyx_DECREF_SET(__pyx_v_4lxml_7builder__QName, ((PyTypeObject*)__pyx_t_2));
   __Pyx_GIVEREF(__pyx_t_2);
@@ -5978,7 +6054,7 @@ if (!__Pyx_RefNanny) {
 
   /*--- Wrapped vars code ---*/
 
-  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error)
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -6882,13 +6958,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     }
     PyErr_SetObject(type, value);
     if (tb) {
-#if CYTHON_COMPILING_IN_PYPY
-        PyObject *tmp_type, *tmp_value, *tmp_tb;
-        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
-        Py_INCREF(tb);
-        PyErr_Restore(tmp_type, tmp_value, tb);
-        Py_XDECREF(tmp_tb);
-#else
+#if CYTHON_FAST_THREAD_STATE
         PyThreadState *tstate = __Pyx_PyThreadState_Current;
         PyObject* tmp_tb = tstate->curexc_traceback;
         if (tb != tmp_tb) {
@@ -6896,6 +6966,12 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             tstate->curexc_traceback = tb;
             Py_XDECREF(tmp_tb);
         }
+#else
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
 #endif
     }
 bad:
@@ -6912,7 +6988,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
         return __Pyx_PyFunction_FastCall(func, NULL, 0);
     }
 #endif
-#ifdef __Pyx_CyFunction_USED
+#if defined(__Pyx_CyFunction_USED) && defined(NDEBUG)
     if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
 #else
     if (likely(PyCFunction_Check(func)))
@@ -6980,10 +7056,8 @@ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
         Py_DECREF(retval);
         __Pyx_RaiseTooManyValuesError(expected);
         return -1;
-    } else {
-        return __Pyx_IterFinish();
     }
-    return 0;
+    return __Pyx_IterFinish();
 }
 
 /* PyDictVersioning */
@@ -7055,7 +7129,7 @@ static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) {
 /* ObjectGetItem */
 #if CYTHON_USE_TYPE_SLOTS
 static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
-    PyObject *runerr;
+    PyObject *runerr = NULL;
     Py_ssize_t key_value;
     PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
     if (unlikely(!(m && m->sq_item))) {
@@ -7617,9 +7691,14 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P
         self = PyTuple_GetItem(args, 0);
         if (unlikely(!self)) {
             Py_DECREF(new_args);
+#if PY_MAJOR_VERSION > 2
             PyErr_Format(PyExc_TypeError,
                          "unbound method %.200S() needs an argument",
                          cyfunc->func_qualname);
+#else
+            PyErr_SetString(PyExc_TypeError,
+                            "unbound method needs an argument");
+#endif
             return NULL;
         }
         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
@@ -7694,7 +7773,10 @@ static PyTypeObject __pyx_CyFunctionType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
@@ -7945,11 +8027,11 @@ static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction*
         if (flag == METH_O) {
             return (*(cfunc->func))(self, arg);
         } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) {
-            if (PY_VERSION_HEX >= 0x030700A0) {
+            #if PY_VERSION_HEX >= 0x030700A0
                 return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1);
-            } else {
+            #else
                 return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
-            }
+            #endif
         } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) {
             return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
         }
@@ -8596,7 +8678,7 @@ bad:
 
 /* CLineInTraceback */
 #ifndef CYTHON_CLINE_IN_TRACEBACK
-static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
+static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_line) {
     PyObject *use_cline;
     PyObject *ptype, *pvalue, *ptraceback;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -8905,7 +8987,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -9139,7 +9221,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
index 586a1427cf3222301858d1711e1c7c1187ce61e2..df57681a14498e498296e3e9c97eb122f0b97c71 100644 (file)
@@ -14,7 +14,7 @@ try:
 except ImportError:
     raise ImportError(
         'cssselect does not seem to be installed. '
-        'See http://packages.python.org/cssselect/')
+        'See https://pypi.org/project/cssselect/')
 
 
 SelectorSyntaxError = external_cssselect.SelectorSyntaxError
index 28ad5484d2f84198741ce48621024d2d30caee60..d60494a3cdd85cc9dd94a53e4ef4485695dc4d6f 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 /* BEGIN: Cython Metadata
 {
@@ -120,8 +120,8 @@ END: Cython Metadata */
 #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_30"
-#define CYTHON_HEX_VERSION 0x001D1EF0
+#define CYTHON_ABI "0_29_36"
+#define CYTHON_HEX_VERSION 0x001D24F0
 #define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
@@ -160,6 +160,7 @@ END: Cython Metadata */
   #define CYTHON_COMPILING_IN_PYPY 1
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #undef CYTHON_USE_TYPE_SLOTS
   #define CYTHON_USE_TYPE_SLOTS 0
   #undef CYTHON_USE_PYTYPE_LOOKUP
@@ -188,21 +189,26 @@ END: Cython Metadata */
   #define CYTHON_FAST_THREAD_STATE 0
   #undef CYTHON_FAST_PYCALL
   #define CYTHON_FAST_PYCALL 0
-  #undef CYTHON_PEP489_MULTI_PHASE_INIT
-  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #if PY_VERSION_HEX < 0x03090000
+    #undef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
   #undef CYTHON_USE_TP_FINALIZE
-  #define CYTHON_USE_TP_FINALIZE 0
+  #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
   #undef CYTHON_USE_DICT_VERSIONS
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
-    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
 #elif defined(PYSTON_VERSION)
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -243,10 +249,56 @@ END: Cython Metadata */
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
     #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
+#elif defined(PY_NOGIL)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #ifndef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE 1
+  #endif
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -266,7 +318,7 @@ END: Cython Metadata */
     #undef CYTHON_USE_PYLONG_INTERNALS
     #define CYTHON_USE_PYLONG_INTERNALS 0
   #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
-    #define CYTHON_USE_PYLONG_INTERNALS 1
+    #define CYTHON_USE_PYLONG_INTERNALS (PY_VERSION_HEX < 0x030C00A5)
   #endif
   #ifndef CYTHON_USE_PYLIST_INTERNALS
     #define CYTHON_USE_PYLIST_INTERNALS 1
@@ -305,7 +357,7 @@ END: Cython Metadata */
     #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
   #endif
   #ifndef CYTHON_USE_DICT_VERSIONS
-    #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+    #define CYTHON_USE_DICT_VERSIONS ((PY_VERSION_HEX >= 0x030600B1) && (PY_VERSION_HEX < 0x030C00A5))
   #endif
   #if PY_VERSION_HEX >= 0x030B00A4
     #undef CYTHON_USE_EXC_INFO_STACK
@@ -428,9 +480,6 @@ END: Cython Metadata */
   #endif
 #endif
 
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
-  #define Py_OptimizeFlag 0
-#endif
 #define __PYX_BUILD_PY_SSIZE_T "n"
 #define CYTHON_FORMAT_SSIZE_T "z"
 #if PY_MAJOR_VERSION < 3
@@ -508,6 +557,11 @@ END: Cython Metadata */
 #endif
   #define __Pyx_DefaultClassType PyType_Type
 #endif
+#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
+#else
+  #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
+#endif
 #ifndef Py_TPFLAGS_CHECKTYPES
   #define Py_TPFLAGS_CHECKTYPES 0
 #endif
@@ -615,11 +669,11 @@ 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)))
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_READY(op)       (0)
   #else
-  #define __Pyx_PyUnicode_READY(op)       (0)
+    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+                                                0 : _PyUnicode_Ready((PyObject *)(op)))
   #endif
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
@@ -628,14 +682,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
-  #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
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #else
-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
+    #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
   #endif
 #else
   #define CYTHON_PEP393_ENABLED 0
@@ -1408,7 +1462,7 @@ enum __pyx_t_4lxml_5etree__IterwalkSkipStates {
   __pyx_e_4lxml_5etree_IWSKIP_CANNOT_SKIP
 };
 
-/* "lxml/etree.pyx":140
+/* "lxml/etree.pyx":141
  * # PyPy requires us to store a Python reference for the
  * # namespace in order to keep the byte buffer alive.
  * cdef struct qname:             # <<<<<<<<<<<<<<
@@ -1420,7 +1474,7 @@ struct __pyx_t_4lxml_5etree_qname {
   PyObject *href;
 };
 
-/* "lxml/etree.pyx":337
+/* "lxml/etree.pyx":338
  * 
  * # type of a function that steps from node to node
  * ctypedef public xmlNode* (*_node_to_node_function)(xmlNode*)             # <<<<<<<<<<<<<<
@@ -1503,7 +1557,7 @@ struct __pyx_opt_args_4lxml_5etree__connectGenericErrorLog {
   int c_domain;
 };
 
-/* "lxml/etree.pyx":2768
+/* "lxml/etree.pyx":2771
  *                 self._storeTags(item, seen)
  * 
  *     cdef inline int cacheTags(self, _Document doc, bint force_into_dict=False) except -1:             # <<<<<<<<<<<<<<
@@ -1524,8 +1578,8 @@ struct __pyx_opt_args_4lxml_5etree_16_MultiTagMatcher_cacheTags {
  */
 typedef PyObject *(*_element_class_lookup_function)(PyObject *, struct LxmlDocument *, xmlNode *);
 
-/* "src/lxml/parser.pxi":573
- *                 xmlparser.xmlClearParserCtxt(self._c_ctxt)
+/* "src/lxml/parser.pxi":576
+ *                 self._c_ctxt.nsNr = 0
  * 
  *     cdef int prepare(self, bint set_document_loader=True) except -1:             # <<<<<<<<<<<<<<
  *         cdef int result
@@ -1536,7 +1590,7 @@ struct __pyx_opt_args_4lxml_5etree_14_ParserContext_prepare {
   int set_document_loader;
 };
 
-/* "src/lxml/parser.pxi":1421
+/* "src/lxml/parser.pxi":1424
  * 
  * 
  * cdef (int, int) _parse_data_chunk(xmlparser.xmlParserCtxt* c_ctxt,             # <<<<<<<<<<<<<<
@@ -1581,7 +1635,7 @@ struct __pyx_opt_args_4lxml_5etree_16C14NWriterTarget__start {
  */
 typedef int (*__pyx_t_4lxml_5etree__register_function)(void *, PyObject *, PyObject *);
 
-/* "lxml/etree.pyx":211
+/* "lxml/etree.pyx":212
  * 
  * # Error superclass for ElementTree compatibility
  * cdef class Error(Exception):             # <<<<<<<<<<<<<<
@@ -1593,7 +1647,7 @@ struct __pyx_obj_4lxml_5etree_Error {
 };
 
 
-/* "lxml/etree.pyx":215
+/* "lxml/etree.pyx":216
  * 
  * # module level superclass for all exceptions
  * cdef class LxmlError(Error):             # <<<<<<<<<<<<<<
@@ -1605,7 +1659,7 @@ struct __pyx_obj_4lxml_5etree_LxmlError {
 };
 
 
-/* "lxml/etree.pyx":234
+/* "lxml/etree.pyx":235
  *     """
  * 
  * cdef class C14NError(LxmlError):             # <<<<<<<<<<<<<<
@@ -1617,7 +1671,7 @@ struct __pyx_obj_4lxml_5etree_C14NError {
 };
 
 
-/* "lxml/etree.pyx":288
+/* "lxml/etree.pyx":289
  * @cython.final
  * @cython.internal
  * cdef class _TempStore:             # <<<<<<<<<<<<<<
@@ -1631,7 +1685,7 @@ struct __pyx_obj_4lxml_5etree__TempStore {
 };
 
 
-/* "lxml/etree.pyx":304
+/* "lxml/etree.pyx":305
  * # class for temporarily storing exceptions raised in extensions
  * @cython.internal
  * cdef class _ExceptionContext:             # <<<<<<<<<<<<<<
@@ -1768,7 +1822,7 @@ struct __pyx_obj_4lxml_5etree_PyErrorLog {
 };
 
 
-/* "lxml/etree.pyx":353
+/* "lxml/etree.pyx":354
  * @cython.final
  * @cython.freelist(8)
  * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]:             # <<<<<<<<<<<<<<
@@ -1786,7 +1840,7 @@ struct LxmlDocument {
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlDocumentType;
 
-/* "lxml/etree.pyx":527
+/* "lxml/etree.pyx":528
  * 
  * 
  * cdef class DocInfo:             # <<<<<<<<<<<<<<
@@ -1800,7 +1854,7 @@ struct __pyx_obj_4lxml_5etree_DocInfo {
 };
 
 
-/* "lxml/etree.pyx":702
+/* "lxml/etree.pyx":703
  * 
  * @cython.no_gc_clear
  * cdef public class _Element [ type LxmlElementType, object LxmlElement ]:             # <<<<<<<<<<<<<<
@@ -1816,7 +1870,7 @@ struct LxmlElement {
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementType;
 
-/* "lxml/etree.pyx":1647
+/* "lxml/etree.pyx":1648
  * 
  * @cython.internal
  * cdef class __ContentOnlyElement(_Element):             # <<<<<<<<<<<<<<
@@ -1829,7 +1883,7 @@ struct __pyx_obj_4lxml_5etree___ContentOnlyElement {
 };
 
 
-/* "lxml/etree.pyx":1714
+/* "lxml/etree.pyx":1715
  *         return []
  * 
  * cdef class _Comment(__ContentOnlyElement):             # <<<<<<<<<<<<<<
@@ -1841,7 +1895,7 @@ struct __pyx_obj_4lxml_5etree__Comment {
 };
 
 
-/* "lxml/etree.pyx":1722
+/* "lxml/etree.pyx":1723
  *         return "<!--%s-->" % strrepr(self.text)
  * 
  * cdef class _ProcessingInstruction(__ContentOnlyElement):             # <<<<<<<<<<<<<<
@@ -1853,7 +1907,7 @@ struct __pyx_obj_4lxml_5etree__ProcessingInstruction {
 };
 
 
-/* "lxml/etree.pyx":1773
+/* "lxml/etree.pyx":1774
  * cdef object _FIND_PI_ATTRIBUTES = re.compile(ur'\s+(\w+)\s*=\s*(?:\'([^\']*)\'|"([^"]*)")', re.U).findall
  * 
  * cdef class _Entity(__ContentOnlyElement):             # <<<<<<<<<<<<<<
@@ -1865,7 +1919,7 @@ struct __pyx_obj_4lxml_5etree__Entity {
 };
 
 
-/* "lxml/etree.pyx":1802
+/* "lxml/etree.pyx":1803
  * 
  * 
  * cdef class QName:             # <<<<<<<<<<<<<<
@@ -1880,7 +1934,7 @@ struct __pyx_obj_4lxml_5etree_QName {
 };
 
 
-/* "lxml/etree.pyx":1871
+/* "lxml/etree.pyx":1872
  * 
  * 
  * cdef public class _ElementTree [ type LxmlElementTreeType,             # <<<<<<<<<<<<<<
@@ -1896,7 +1950,7 @@ struct LxmlElementTree {
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTreeType;
 
-/* "lxml/etree.pyx":2435
+/* "lxml/etree.pyx":2436
  * @cython.final
  * @cython.freelist(16)
  * cdef class _Attrib:             # <<<<<<<<<<<<<<
@@ -1909,7 +1963,7 @@ struct __pyx_obj_4lxml_5etree__Attrib {
 };
 
 
-/* "lxml/etree.pyx":2574
+/* "lxml/etree.pyx":2577
  * @cython.final
  * @cython.internal
  * cdef class _AttribIterator:             # <<<<<<<<<<<<<<
@@ -1924,7 +1978,7 @@ struct __pyx_obj_4lxml_5etree__AttribIterator {
 };
 
 
-/* "lxml/etree.pyx":2615
+/* "lxml/etree.pyx":2618
  * 
  * 
  * cdef public class _ElementTagMatcher [ object LxmlElementTagMatcher,             # <<<<<<<<<<<<<<
@@ -1942,7 +1996,7 @@ struct LxmlElementTagMatcher {
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType;
 
-/* "lxml/etree.pyx":2646
+/* "lxml/etree.pyx":2649
  *                 self._name = NULL
  * 
  * cdef public class _ElementIterator(_ElementTagMatcher) [             # <<<<<<<<<<<<<<
@@ -1957,7 +2011,7 @@ struct LxmlElementIterator {
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementIteratorType;
 
-/* "lxml/etree.pyx":2683
+/* "lxml/etree.pyx":2686
  * @cython.final
  * @cython.internal
  * cdef class _MultiTagMatcher:             # <<<<<<<<<<<<<<
@@ -1976,7 +2030,7 @@ struct __pyx_obj_4lxml_5etree__MultiTagMatcher {
 };
 
 
-/* "lxml/etree.pyx":2822
+/* "lxml/etree.pyx":2825
  *         return False
  * 
  * cdef class _ElementMatchIterator:             # <<<<<<<<<<<<<<
@@ -1992,7 +2046,7 @@ struct __pyx_obj_4lxml_5etree__ElementMatchIterator {
 };
 
 
-/* "lxml/etree.pyx":2851
+/* "lxml/etree.pyx":2854
  *         return current_node
  * 
  * cdef class ElementChildIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
@@ -2004,7 +2058,7 @@ struct __pyx_obj_4lxml_5etree_ElementChildIterator {
 };
 
 
-/* "lxml/etree.pyx":2871
+/* "lxml/etree.pyx":2874
  *         self._node = _elementFactory(node._doc, c_node) if c_node is not NULL else None
  * 
  * cdef class SiblingsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
@@ -2016,7 +2070,7 @@ struct __pyx_obj_4lxml_5etree_SiblingsIterator {
 };
 
 
-/* "lxml/etree.pyx":2886
+/* "lxml/etree.pyx":2889
  *         self._storeNext(node)
  * 
  * cdef class AncestorsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
@@ -2028,7 +2082,7 @@ struct __pyx_obj_4lxml_5etree_AncestorsIterator {
 };
 
 
-/* "lxml/etree.pyx":2896
+/* "lxml/etree.pyx":2899
  *         self._storeNext(node)
  * 
  * cdef class ElementDepthFirstIterator:             # <<<<<<<<<<<<<<
@@ -2044,7 +2098,7 @@ struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator {
 };
 
 
-/* "lxml/etree.pyx":2972
+/* "lxml/etree.pyx":2975
  *         return NULL
  * 
  * cdef class ElementTextIterator:             # <<<<<<<<<<<<<<
@@ -2058,7 +2112,7 @@ struct __pyx_obj_4lxml_5etree_ElementTextIterator {
 };
 
 
-/* "lxml/etree.pyx":3098
+/* "lxml/etree.pyx":3101
  * 
  * 
  * cdef class CDATA:             # <<<<<<<<<<<<<<
@@ -2563,7 +2617,7 @@ struct __pyx_obj_4lxml_5etree__ParserContext {
 };
 
 
-/* "src/lxml/parser.pxi":795
+/* "src/lxml/parser.pxi":798
  * 
  * @cython.internal
  * cdef class _BaseParser:             # <<<<<<<<<<<<<<
@@ -2591,7 +2645,7 @@ struct __pyx_obj_4lxml_5etree__BaseParser {
 };
 
 
-/* "src/lxml/parser.pxi":1244
+/* "src/lxml/parser.pxi":1247
  * ############################################################
  * 
  * cdef class _FeedParser(_BaseParser):             # <<<<<<<<<<<<<<
@@ -2604,7 +2658,7 @@ struct __pyx_obj_4lxml_5etree__FeedParser {
 };
 
 
-/* "src/lxml/parser.pxi":1477
+/* "src/lxml/parser.pxi":1480
  *     )
  * 
  * cdef class XMLParser(_FeedParser):             # <<<<<<<<<<<<<<
@@ -2616,7 +2670,7 @@ struct __pyx_obj_4lxml_5etree_XMLParser {
 };
 
 
-/* "src/lxml/parser.pxi":1561
+/* "src/lxml/parser.pxi":1564
  * 
  * 
  * cdef class XMLPullParser(XMLParser):             # <<<<<<<<<<<<<<
@@ -2628,7 +2682,7 @@ struct __pyx_obj_4lxml_5etree_XMLPullParser {
 };
 
 
-/* "src/lxml/parser.pxi":1590
+/* "src/lxml/parser.pxi":1593
  * 
  * 
  * cdef class ETCompatXMLParser(XMLParser):             # <<<<<<<<<<<<<<
@@ -2640,7 +2694,7 @@ struct __pyx_obj_4lxml_5etree_ETCompatXMLParser {
 };
 
 
-/* "src/lxml/parser.pxi":1669
+/* "src/lxml/parser.pxi":1672
  *     )
  * 
  * cdef class HTMLParser(_FeedParser):             # <<<<<<<<<<<<<<
@@ -2652,7 +2706,7 @@ struct __pyx_obj_4lxml_5etree_HTMLParser {
 };
 
 
-/* "src/lxml/parser.pxi":1734
+/* "src/lxml/parser.pxi":1737
  * 
  * 
  * cdef class HTMLPullParser(HTMLParser):             # <<<<<<<<<<<<<<
@@ -3362,7 +3416,7 @@ struct __pyx_obj_4lxml_5etree_XSLT {
 };
 
 
-/* "src/lxml/xslt.pxi":705
+/* "src/lxml/xslt.pxi":706
  * 
  * @cython.final
  * cdef class _XSLTResultTree(_ElementTree):             # <<<<<<<<<<<<<<
@@ -3379,7 +3433,7 @@ struct __pyx_obj_4lxml_5etree__XSLTResultTree {
 };
 
 
-/* "src/lxml/xslt.pxi":894
+/* "src/lxml/xslt.pxi":895
  *     return __findStylesheetByID(doc, id=id)
  * 
  * cdef class _XSLTProcessingInstruction(PIBase):             # <<<<<<<<<<<<<<
@@ -3404,7 +3458,7 @@ struct __pyx_obj_4lxml_5etree_XSLTExtension {
 };
 
 
-/* "lxml/etree.pyx":3611
+/* "lxml/etree.pyx":3614
  * # Validation
  * 
  * cdef class DocumentInvalid(LxmlError):             # <<<<<<<<<<<<<<
@@ -3416,7 +3470,7 @@ struct __pyx_obj_4lxml_5etree_DocumentInvalid {
 };
 
 
-/* "lxml/etree.pyx":3619
+/* "lxml/etree.pyx":3622
  * 
  * 
  * cdef class _Validator:             # <<<<<<<<<<<<<<
@@ -3979,7 +4033,7 @@ struct __pyx_obj_4lxml_5etree___pyx_scope_struct_16_iterentities {
 
 
 
-/* "lxml/etree.pyx":288
+/* "lxml/etree.pyx":289
  * @cython.final
  * @cython.internal
  * cdef class _TempStore:             # <<<<<<<<<<<<<<
@@ -3996,7 +4050,7 @@ static int __pyx_f_4lxml_5etree_10_TempStore_add(struct __pyx_obj_4lxml_5etree__
 static int __pyx_f_4lxml_5etree_10_TempStore_clear(struct __pyx_obj_4lxml_5etree__TempStore *);
 
 
-/* "lxml/etree.pyx":304
+/* "lxml/etree.pyx":305
  * # class for temporarily storing exceptions raised in extensions
  * @cython.internal
  * cdef class _ExceptionContext:             # <<<<<<<<<<<<<<
@@ -4149,7 +4203,7 @@ static struct __pyx_vtabstruct_4lxml_5etree_PyErrorLog *__pyx_vtabptr_4lxml_5etr
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlDocumentType;
 
-/* "lxml/etree.pyx":353
+/* "lxml/etree.pyx":354
  * @cython.final
  * @cython.freelist(8)
  * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]:             # <<<<<<<<<<<<<<
@@ -4178,7 +4232,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
 static int __pyx_f_4lxml_5etree_9_Document__setNodeNs(struct LxmlDocument *, xmlNode *, const xmlChar *);
 
 
-/* "lxml/etree.pyx":527
+/* "lxml/etree.pyx":528
  * 
  * 
  * cdef class DocInfo:             # <<<<<<<<<<<<<<
@@ -4193,7 +4247,7 @@ static struct __pyx_vtabstruct_4lxml_5etree_DocInfo *__pyx_vtabptr_4lxml_5etree_
 static xmlDtd *__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(struct __pyx_obj_4lxml_5etree_DocInfo *);
 
 
-/* "lxml/etree.pyx":1647
+/* "lxml/etree.pyx":1648
  * 
  * @cython.internal
  * cdef class __ContentOnlyElement(_Element):             # <<<<<<<<<<<<<<
@@ -4207,7 +4261,7 @@ struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement {
 static struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement *__pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
 
 
-/* "lxml/etree.pyx":1714
+/* "lxml/etree.pyx":1715
  *         return []
  * 
  * cdef class _Comment(__ContentOnlyElement):             # <<<<<<<<<<<<<<
@@ -4221,7 +4275,7 @@ struct __pyx_vtabstruct_4lxml_5etree__Comment {
 static struct __pyx_vtabstruct_4lxml_5etree__Comment *__pyx_vtabptr_4lxml_5etree__Comment;
 
 
-/* "lxml/etree.pyx":1722
+/* "lxml/etree.pyx":1723
  *         return "<!--%s-->" % strrepr(self.text)
  * 
  * cdef class _ProcessingInstruction(__ContentOnlyElement):             # <<<<<<<<<<<<<<
@@ -4235,7 +4289,7 @@ struct __pyx_vtabstruct_4lxml_5etree__ProcessingInstruction {
 static struct __pyx_vtabstruct_4lxml_5etree__ProcessingInstruction *__pyx_vtabptr_4lxml_5etree__ProcessingInstruction;
 
 
-/* "lxml/etree.pyx":1773
+/* "lxml/etree.pyx":1774
  * cdef object _FIND_PI_ATTRIBUTES = re.compile(ur'\s+(\w+)\s*=\s*(?:\'([^\']*)\'|"([^"]*)")', re.U).findall
  * 
  * cdef class _Entity(__ContentOnlyElement):             # <<<<<<<<<<<<<<
@@ -4250,7 +4304,7 @@ static struct __pyx_vtabstruct_4lxml_5etree__Entity *__pyx_vtabptr_4lxml_5etree_
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTreeType;
 
-/* "lxml/etree.pyx":1871
+/* "lxml/etree.pyx":1872
  * 
  * 
  * cdef public class _ElementTree [ type LxmlElementTreeType,             # <<<<<<<<<<<<<<
@@ -4266,7 +4320,7 @@ static int __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(struct LxmlElement
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType;
 
-/* "lxml/etree.pyx":2615
+/* "lxml/etree.pyx":2618
  * 
  * 
  * cdef public class _ElementTagMatcher [ object LxmlElementTagMatcher,             # <<<<<<<<<<<<<<
@@ -4281,7 +4335,7 @@ static struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher *__pyx_vtabptr_4l
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementIteratorType;
 
-/* "lxml/etree.pyx":2646
+/* "lxml/etree.pyx":2649
  *                 self._name = NULL
  * 
  * cdef public class _ElementIterator(_ElementTagMatcher) [             # <<<<<<<<<<<<<<
@@ -4296,7 +4350,7 @@ struct __pyx_vtabstruct_4lxml_5etree__ElementIterator {
 static struct __pyx_vtabstruct_4lxml_5etree__ElementIterator *__pyx_vtabptr_4lxml_5etree__ElementIterator;
 
 
-/* "lxml/etree.pyx":2683
+/* "lxml/etree.pyx":2686
  * @cython.final
  * @cython.internal
  * cdef class _MultiTagMatcher:             # <<<<<<<<<<<<<<
@@ -4329,7 +4383,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
 static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribute(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlAttr *);
 
 
-/* "lxml/etree.pyx":2822
+/* "lxml/etree.pyx":2825
  *         return False
  * 
  * cdef class _ElementMatchIterator:             # <<<<<<<<<<<<<<
@@ -4346,7 +4400,7 @@ static PyObject *__pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(st
 static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, struct LxmlElement *);
 
 
-/* "lxml/etree.pyx":2851
+/* "lxml/etree.pyx":2854
  *         return current_node
  * 
  * cdef class ElementChildIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
@@ -4360,7 +4414,7 @@ struct __pyx_vtabstruct_4lxml_5etree_ElementChildIterator {
 static struct __pyx_vtabstruct_4lxml_5etree_ElementChildIterator *__pyx_vtabptr_4lxml_5etree_ElementChildIterator;
 
 
-/* "lxml/etree.pyx":2871
+/* "lxml/etree.pyx":2874
  *         self._node = _elementFactory(node._doc, c_node) if c_node is not NULL else None
  * 
  * cdef class SiblingsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
@@ -4374,7 +4428,7 @@ struct __pyx_vtabstruct_4lxml_5etree_SiblingsIterator {
 static struct __pyx_vtabstruct_4lxml_5etree_SiblingsIterator *__pyx_vtabptr_4lxml_5etree_SiblingsIterator;
 
 
-/* "lxml/etree.pyx":2886
+/* "lxml/etree.pyx":2889
  *         self._storeNext(node)
  * 
  * cdef class AncestorsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
@@ -4388,7 +4442,7 @@ struct __pyx_vtabstruct_4lxml_5etree_AncestorsIterator {
 static struct __pyx_vtabstruct_4lxml_5etree_AncestorsIterator *__pyx_vtabptr_4lxml_5etree_AncestorsIterator;
 
 
-/* "lxml/etree.pyx":2896
+/* "lxml/etree.pyx":2899
  *         self._storeNext(node)
  * 
  * cdef class ElementDepthFirstIterator:             # <<<<<<<<<<<<<<
@@ -4838,7 +4892,7 @@ struct __pyx_vtabstruct_4lxml_5etree__ParserContext {
 static struct __pyx_vtabstruct_4lxml_5etree__ParserContext *__pyx_vtabptr_4lxml_5etree__ParserContext;
 
 
-/* "src/lxml/parser.pxi":795
+/* "src/lxml/parser.pxi":798
  * 
  * @cython.internal
  * cdef class _BaseParser:             # <<<<<<<<<<<<<<
@@ -4866,7 +4920,7 @@ static struct __pyx_vtabstruct_4lxml_5etree__BaseParser *__pyx_vtabptr_4lxml_5et
 static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_obj_4lxml_5etree__BaseParser *, xmlParserCtxt *);
 
 
-/* "src/lxml/parser.pxi":1244
+/* "src/lxml/parser.pxi":1247
  * ############################################################
  * 
  * cdef class _FeedParser(_BaseParser):             # <<<<<<<<<<<<<<
@@ -4882,7 +4936,7 @@ struct __pyx_vtabstruct_4lxml_5etree__FeedParser {
 static struct __pyx_vtabstruct_4lxml_5etree__FeedParser *__pyx_vtabptr_4lxml_5etree__FeedParser;
 
 
-/* "src/lxml/parser.pxi":1477
+/* "src/lxml/parser.pxi":1480
  *     )
  * 
  * cdef class XMLParser(_FeedParser):             # <<<<<<<<<<<<<<
@@ -4896,7 +4950,7 @@ struct __pyx_vtabstruct_4lxml_5etree_XMLParser {
 static struct __pyx_vtabstruct_4lxml_5etree_XMLParser *__pyx_vtabptr_4lxml_5etree_XMLParser;
 
 
-/* "src/lxml/parser.pxi":1561
+/* "src/lxml/parser.pxi":1564
  * 
  * 
  * cdef class XMLPullParser(XMLParser):             # <<<<<<<<<<<<<<
@@ -4910,7 +4964,7 @@ struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser {
 static struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *__pyx_vtabptr_4lxml_5etree_XMLPullParser;
 
 
-/* "src/lxml/parser.pxi":1590
+/* "src/lxml/parser.pxi":1593
  * 
  * 
  * cdef class ETCompatXMLParser(XMLParser):             # <<<<<<<<<<<<<<
@@ -4924,7 +4978,7 @@ struct __pyx_vtabstruct_4lxml_5etree_ETCompatXMLParser {
 static struct __pyx_vtabstruct_4lxml_5etree_ETCompatXMLParser *__pyx_vtabptr_4lxml_5etree_ETCompatXMLParser;
 
 
-/* "src/lxml/parser.pxi":1669
+/* "src/lxml/parser.pxi":1672
  *     )
  * 
  * cdef class HTMLParser(_FeedParser):             # <<<<<<<<<<<<<<
@@ -4938,7 +4992,7 @@ struct __pyx_vtabstruct_4lxml_5etree_HTMLParser {
 static struct __pyx_vtabstruct_4lxml_5etree_HTMLParser *__pyx_vtabptr_4lxml_5etree_HTMLParser;
 
 
-/* "src/lxml/parser.pxi":1734
+/* "src/lxml/parser.pxi":1737
  * 
  * 
  * cdef class HTMLPullParser(HTMLParser):             # <<<<<<<<<<<<<<
@@ -5425,7 +5479,7 @@ struct __pyx_vtabstruct_4lxml_5etree_XSLT {
 static struct __pyx_vtabstruct_4lxml_5etree_XSLT *__pyx_vtabptr_4lxml_5etree_XSLT;
 
 
-/* "src/lxml/xslt.pxi":705
+/* "src/lxml/xslt.pxi":706
  * 
  * @cython.final
  * cdef class _XSLTResultTree(_ElementTree):             # <<<<<<<<<<<<<<
@@ -5441,7 +5495,7 @@ static struct __pyx_vtabstruct_4lxml_5etree__XSLTResultTree *__pyx_vtabptr_4lxml
 static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(struct __pyx_obj_4lxml_5etree__XSLTResultTree *, xmlChar **, int *);
 
 
-/* "src/lxml/xslt.pxi":894
+/* "src/lxml/xslt.pxi":895
  *     return __findStylesheetByID(doc, id=id)
  * 
  * cdef class _XSLTProcessingInstruction(PIBase):             # <<<<<<<<<<<<<<
@@ -5469,7 +5523,7 @@ struct __pyx_vtabstruct_4lxml_5etree_XSLTExtension {
 static struct __pyx_vtabstruct_4lxml_5etree_XSLTExtension *__pyx_vtabptr_4lxml_5etree_XSLTExtension;
 
 
-/* "lxml/etree.pyx":3619
+/* "lxml/etree.pyx":3622
  * 
  * 
  * cdef class _Validator:             # <<<<<<<<<<<<<<
@@ -5920,6 +5974,23 @@ static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject *
 static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
 #endif
 
+/* AssertionsEnabled.proto */
+#define __Pyx_init_assertions_enabled()
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
+  #define __pyx_assertions_enabled() (1)
+#elif PY_VERSION_HEX < 0x03080000  ||  CYTHON_COMPILING_IN_PYPY  ||  defined(Py_LIMITED_API)
+  #define __pyx_assertions_enabled() (!Py_OptimizeFlag)
+#elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030900A6
+  static int __pyx_assertions_enabled_flag;
+  #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag)
+  #undef __Pyx_init_assertions_enabled
+  static void __Pyx_init_assertions_enabled(void) {
+    __pyx_assertions_enabled_flag = ! _PyInterpreterState_GetConfig(__Pyx_PyThreadState_Current->interp)->optimization_level;
+  }
+#else
+  #define __pyx_assertions_enabled() (!Py_OptimizeFlag)
+#endif
+
 /* PyIntBinop.proto */
 #if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
@@ -6095,18 +6166,18 @@ static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UIN
 
 /* GetModuleGlobalName.proto */
 #if CYTHON_USE_DICT_VERSIONS
-#define __Pyx_GetModuleGlobalName(var, name)  {\
+#define __Pyx_GetModuleGlobalName(var, name)  do {\
     static PY_UINT64_T __pyx_dict_version = 0;\
     static PyObject *__pyx_dict_cached_value = NULL;\
     (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
         (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
         __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
-#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
+} while(0)
+#define __Pyx_GetModuleGlobalNameUncached(var, name)  do {\
     PY_UINT64_T __pyx_dict_version;\
     PyObject *__pyx_dict_cached_value;\
     (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
+} while(0)
 static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
 #else
 #define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
@@ -6554,14 +6625,22 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam
 static int __Pyx_SetVtable(PyObject *dict, void *vtable);
 
 /* TypeImport.proto */
-#ifndef __PYX_HAVE_RT_ImportType_proto
-#define __PYX_HAVE_RT_ImportType_proto
-enum __Pyx_ImportType_CheckSize {
-   __Pyx_ImportType_CheckSize_Error = 0,
-   __Pyx_ImportType_CheckSize_Warn = 1,
-   __Pyx_ImportType_CheckSize_Ignore = 2
+#ifndef __PYX_HAVE_RT_ImportType_proto_0_29_36
+#define __PYX_HAVE_RT_ImportType_proto_0_29_36
+#if __STDC_VERSION__ >= 201112L
+#include <stdalign.h>
+#endif
+#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
+#define __PYX_GET_STRUCT_ALIGNMENT_0_29_36(s) alignof(s)
+#else
+#define __PYX_GET_STRUCT_ALIGNMENT_0_29_36(s) sizeof(void*)
+#endif
+enum __Pyx_ImportType_CheckSize_0_29_36 {
+   __Pyx_ImportType_CheckSize_Error_0_29_36 = 0,
+   __Pyx_ImportType_CheckSize_Warn_0_29_36 = 1,
+   __Pyx_ImportType_CheckSize_Ignore_0_29_36 = 2
 };
-static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size);
+static PyTypeObject *__Pyx_ImportType_0_29_36(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_0_29_36 check_size);
 #endif
 
 /* CalculateMetaclass.proto */
@@ -7150,6 +7229,7 @@ static PyObject *__pyx_v_4lxml_5etree_re = 0;
 static PyObject *__pyx_v_4lxml_5etree_partial = 0;
 static PyObject *__pyx_v_4lxml_5etree_islice = 0;
 static PyObject *__pyx_v_4lxml_5etree_ITER_EMPTY = 0;
+static PyObject *__pyx_v_4lxml_5etree_MutableMapping = 0;
 static PyObject *__pyx_v_4lxml_5etree_IMMUTABLE_EMPTY_MAPPING = 0;
 static PyObject *__pyx_v_4lxml_5etree__FILENAME_ENCODING = 0;
 static char *__pyx_v_4lxml_5etree__C_FILENAME_ENCODING;
@@ -8064,6 +8144,7 @@ static const char __pyx_k_position[] = "position";
 static const char __pyx_k_preserve[] = "preserve";
 static const char __pyx_k_property[] = "property";
 static const char __pyx_k_qualname[] = "__qualname__";
+static const char __pyx_k_register[] = "register";
 static const char __pyx_k_registry[] = "registry";
 static const char __pyx_k_required[] = "required";
 static const char __pyx_k_resolver[] = "resolver";
@@ -8312,7 +8393,7 @@ static const char __pyx_k_StopIteration[] = "StopIteration";
 static const char __pyx_k_Unknown_error[] = "\077\077 Unknown error \077\077\n";
 static const char __pyx_k_XIncludeError[] = "XIncludeError";
 static const char __pyx_k_XMLPullParser[] = "XMLPullParser";
-static const char __pyx_k_XML_line_3208[] = "XML (line 3208)";
+static const char __pyx_k_XML_line_3211[] = "XML (line 3211)";
 static const char __pyx_k_XSLTExtension[] = "XSLTExtension";
 static const char __pyx_k_XSLTSaveError[] = "XSLTSaveError";
 static const char __pyx_k_XSLT_strparam[] = "XSLT.strparam";
@@ -9541,7 +9622,7 @@ static PyObject *__pyx_n_s_XMLSyntaxAssertionError;
 static PyObject *__pyx_n_s_XMLSyntaxError;
 static PyObject *__pyx_n_s_XMLTreeBuilder;
 static PyObject *__pyx_kp_s_XML_declaration_already_written;
-static PyObject *__pyx_kp_u_XML_line_3208;
+static PyObject *__pyx_kp_u_XML_line_3211;
 static PyObject *__pyx_kp_u_XML_text_parser_None_base_url_No;
 static PyObject *__pyx_n_u_XPATH_LOCATIONSET;
 static PyObject *__pyx_n_u_XPATH_POINT;
@@ -10219,6 +10300,7 @@ static PyObject *__pyx_n_s_receive;
 static PyObject *__pyx_n_s_recover;
 static PyObject *__pyx_kp_u_reference_to_non_existing_embedd;
 static PyObject *__pyx_n_s_regexp;
+static PyObject *__pyx_n_s_register;
 static PyObject *__pyx_n_s_register_namespace;
 static PyObject *__pyx_n_s_register_namespaces;
 static PyObject *__pyx_n_s_registry;
@@ -11896,7 +11978,7 @@ static PyObject *__pyx_codeobj__684;
 static PyObject *__pyx_codeobj__686;
 /* Late includes */
 
-/* "lxml/etree.pyx":96
+/* "lxml/etree.pyx":97
  * 
  * class _ImmutableMapping(MutableMapping):
  *     def __getitem__(self, key):             # <<<<<<<<<<<<<<
@@ -11939,11 +12021,11 @@ static PyObject *__pyx_pw_4lxml_5etree_17_ImmutableMapping_1__getitem__(PyObject
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); __PYX_ERR(0, 96, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); __PYX_ERR(0, 97, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) __PYX_ERR(0, 96, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) __PYX_ERR(0, 97, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -11956,7 +12038,7 @@ static PyObject *__pyx_pw_4lxml_5etree_17_ImmutableMapping_1__getitem__(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 96, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 97, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ImmutableMapping.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -11977,7 +12059,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping___getitem__(CYTHON_UN
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "lxml/etree.pyx":97
+  /* "lxml/etree.pyx":98
  * class _ImmutableMapping(MutableMapping):
  *     def __getitem__(self, key):
  *         raise KeyError, key             # <<<<<<<<<<<<<<
@@ -11985,9 +12067,9 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping___getitem__(CYTHON_UN
  *     def __setitem__(self, key, value):
  */
   __Pyx_Raise(__pyx_builtin_KeyError, __pyx_v_key, 0, 0);
-  __PYX_ERR(0, 97, __pyx_L1_error)
+  __PYX_ERR(0, 98, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":96
+  /* "lxml/etree.pyx":97
  * 
  * class _ImmutableMapping(MutableMapping):
  *     def __getitem__(self, key):             # <<<<<<<<<<<<<<
@@ -12004,7 +12086,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping___getitem__(CYTHON_UN
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":99
+/* "lxml/etree.pyx":100
  *         raise KeyError, key
  * 
  *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
@@ -12050,17 +12132,17 @@ static PyObject *__pyx_pw_4lxml_5etree_17_ImmutableMapping_3__setitem__(PyObject
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 1); __PYX_ERR(0, 99, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 1); __PYX_ERR(0, 100, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 2); __PYX_ERR(0, 99, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 2); __PYX_ERR(0, 100, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__setitem__") < 0)) __PYX_ERR(0, 99, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__setitem__") < 0)) __PYX_ERR(0, 100, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -12075,7 +12157,7 @@ static PyObject *__pyx_pw_4lxml_5etree_17_ImmutableMapping_3__setitem__(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 99, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 100, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ImmutableMapping.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -12096,7 +12178,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_2__setitem__(CYTHON_U
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "lxml/etree.pyx":100
+  /* "lxml/etree.pyx":101
  * 
  *     def __setitem__(self, key, value):
  *         raise KeyError, key             # <<<<<<<<<<<<<<
@@ -12104,9 +12186,9 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_2__setitem__(CYTHON_U
  *     def __delitem__(self, key):
  */
   __Pyx_Raise(__pyx_builtin_KeyError, __pyx_v_key, 0, 0);
-  __PYX_ERR(0, 100, __pyx_L1_error)
+  __PYX_ERR(0, 101, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":99
+  /* "lxml/etree.pyx":100
  *         raise KeyError, key
  * 
  *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
@@ -12123,7 +12205,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_2__setitem__(CYTHON_U
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":102
+/* "lxml/etree.pyx":103
  *         raise KeyError, key
  * 
  *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
@@ -12166,11 +12248,11 @@ static PyObject *__pyx_pw_4lxml_5etree_17_ImmutableMapping_5__delitem__(PyObject
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__delitem__", 1, 2, 2, 1); __PYX_ERR(0, 102, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__delitem__", 1, 2, 2, 1); __PYX_ERR(0, 103, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__delitem__") < 0)) __PYX_ERR(0, 102, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__delitem__") < 0)) __PYX_ERR(0, 103, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -12183,7 +12265,7 @@ static PyObject *__pyx_pw_4lxml_5etree_17_ImmutableMapping_5__delitem__(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__delitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 102, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__delitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 103, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ImmutableMapping.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -12204,7 +12286,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_4__delitem__(CYTHON_U
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__delitem__", 0);
 
-  /* "lxml/etree.pyx":103
+  /* "lxml/etree.pyx":104
  * 
  *     def __delitem__(self, key):
  *         raise KeyError, key             # <<<<<<<<<<<<<<
@@ -12212,9 +12294,9 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_4__delitem__(CYTHON_U
  *     def __contains__(self, key):
  */
   __Pyx_Raise(__pyx_builtin_KeyError, __pyx_v_key, 0, 0);
-  __PYX_ERR(0, 103, __pyx_L1_error)
+  __PYX_ERR(0, 104, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":102
+  /* "lxml/etree.pyx":103
  *         raise KeyError, key
  * 
  *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
@@ -12231,7 +12313,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_4__delitem__(CYTHON_U
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":105
+/* "lxml/etree.pyx":106
  *         raise KeyError, key
  * 
  *     def __contains__(self, key):             # <<<<<<<<<<<<<<
@@ -12274,11 +12356,11 @@ static PyObject *__pyx_pw_4lxml_5etree_17_ImmutableMapping_7__contains__(PyObjec
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__contains__", 1, 2, 2, 1); __PYX_ERR(0, 105, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__contains__", 1, 2, 2, 1); __PYX_ERR(0, 106, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__contains__") < 0)) __PYX_ERR(0, 105, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__contains__") < 0)) __PYX_ERR(0, 106, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -12291,7 +12373,7 @@ static PyObject *__pyx_pw_4lxml_5etree_17_ImmutableMapping_7__contains__(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__contains__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 105, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__contains__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 106, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ImmutableMapping.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -12309,7 +12391,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_6__contains__(CYTHON_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__contains__", 0);
 
-  /* "lxml/etree.pyx":106
+  /* "lxml/etree.pyx":107
  * 
  *     def __contains__(self, key):
  *         return False             # <<<<<<<<<<<<<<
@@ -12321,7 +12403,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_6__contains__(CYTHON_
   __pyx_r = Py_False;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":105
+  /* "lxml/etree.pyx":106
  *         raise KeyError, key
  * 
  *     def __contains__(self, key):             # <<<<<<<<<<<<<<
@@ -12336,7 +12418,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_6__contains__(CYTHON_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":108
+/* "lxml/etree.pyx":109
  *         return False
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -12363,7 +12445,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_8__len__(CYTHON_UNUSE
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__len__", 0);
 
-  /* "lxml/etree.pyx":109
+  /* "lxml/etree.pyx":110
  * 
  *     def __len__(self):
  *         return 0             # <<<<<<<<<<<<<<
@@ -12375,7 +12457,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_8__len__(CYTHON_UNUSE
   __pyx_r = __pyx_int_0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":108
+  /* "lxml/etree.pyx":109
  *         return False
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -12390,7 +12472,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_8__len__(CYTHON_UNUSE
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":111
+/* "lxml/etree.pyx":112
  *         return 0
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -12417,7 +12499,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_10__iter__(CYTHON_UNU
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__iter__", 0);
 
-  /* "lxml/etree.pyx":112
+  /* "lxml/etree.pyx":113
  * 
  *     def __iter__(self):
  *         return ITER_EMPTY             # <<<<<<<<<<<<<<
@@ -12429,7 +12511,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_10__iter__(CYTHON_UNU
   __pyx_r = __pyx_v_4lxml_5etree_ITER_EMPTY;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":111
+  /* "lxml/etree.pyx":112
  *         return 0
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -12444,7 +12526,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ImmutableMapping_10__iter__(CYTHON_UNU
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":177
+/* "lxml/etree.pyx":178
  * cdef object _DEFAULT_NAMESPACE_PREFIXES_ITEMS = []
  * 
  * cdef _update_default_namespace_prefixes_items():             # <<<<<<<<<<<<<<
@@ -12471,7 +12553,7 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_update_default_namespace_prefixes_items", 0);
 
-  /* "lxml/etree.pyx":183
+  /* "lxml/etree.pyx":184
  *         ns.decode('utf-8') : prefix.decode('utf-8')
  *         for ns, prefix in _DEFAULT_NAMESPACE_PREFIXES.items()
  *     }.items()             # <<<<<<<<<<<<<<
@@ -12480,17 +12562,17 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
  */
   { /* enter inner scope */
 
-    /* "lxml/etree.pyx":180
+    /* "lxml/etree.pyx":181
  *     cdef bytes ns, prefix
  *     global _DEFAULT_NAMESPACE_PREFIXES_ITEMS
  *     _DEFAULT_NAMESPACE_PREFIXES_ITEMS = {             # <<<<<<<<<<<<<<
  *         ns.decode('utf-8') : prefix.decode('utf-8')
  *         for ns, prefix in _DEFAULT_NAMESPACE_PREFIXES.items()
  */
-    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L5_error)
+    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_1);
 
-    /* "lxml/etree.pyx":182
+    /* "lxml/etree.pyx":183
  *     _DEFAULT_NAMESPACE_PREFIXES_ITEMS = {
  *         ns.decode('utf-8') : prefix.decode('utf-8')
  *         for ns, prefix in _DEFAULT_NAMESPACE_PREFIXES.items()             # <<<<<<<<<<<<<<
@@ -12499,17 +12581,17 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
  */
     if (unlikely(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
-      __PYX_ERR(0, 182, __pyx_L5_error)
+      __PYX_ERR(0, 183, __pyx_L5_error)
     }
-    __pyx_t_2 = __Pyx_PyDict_Items(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 182, __pyx_L5_error)
+    __pyx_t_2 = __Pyx_PyDict_Items(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_2);
     if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
       __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
       __pyx_t_5 = NULL;
     } else {
-      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 182, __pyx_L5_error)
+      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 183, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 182, __pyx_L5_error)
+      __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 183, __pyx_L5_error)
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     for (;;) {
@@ -12517,17 +12599,17 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
         if (likely(PyList_CheckExact(__pyx_t_3))) {
           if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 182, __pyx_L5_error)
+          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 183, __pyx_L5_error)
           #else
-          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 182, __pyx_L5_error)
+          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L5_error)
           __Pyx_GOTREF(__pyx_t_2);
           #endif
         } else {
           if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 182, __pyx_L5_error)
+          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 183, __pyx_L5_error)
           #else
-          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 182, __pyx_L5_error)
+          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L5_error)
           __Pyx_GOTREF(__pyx_t_2);
           #endif
         }
@@ -12537,7 +12619,7 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 182, __pyx_L5_error)
+            else __PYX_ERR(0, 183, __pyx_L5_error)
           }
           break;
         }
@@ -12549,7 +12631,7 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(0, 182, __pyx_L5_error)
+          __PYX_ERR(0, 183, __pyx_L5_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -12562,15 +12644,15 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
         __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, 182, __pyx_L5_error)
+        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 183, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 182, __pyx_L5_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 183, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_7);
         #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(0, 182, __pyx_L5_error)
+        __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 183, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
@@ -12578,7 +12660,7 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
         __Pyx_GOTREF(__pyx_t_6);
         index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_7);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 182, __pyx_L5_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 183, __pyx_L5_error)
         __pyx_t_9 = NULL;
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         goto __pyx_L9_unpacking_done;
@@ -12586,17 +12668,17 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __pyx_t_9 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(0, 182, __pyx_L5_error)
+        __PYX_ERR(0, 183, __pyx_L5_error)
         __pyx_L9_unpacking_done:;
       }
-      if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 182, __pyx_L5_error)
-      if (!(likely(PyBytes_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 182, __pyx_L5_error)
+      if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 183, __pyx_L5_error)
+      if (!(likely(PyBytes_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 183, __pyx_L5_error)
       __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_ns, ((PyObject*)__pyx_t_6));
       __pyx_t_6 = 0;
       __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_prefix, ((PyObject*)__pyx_t_7));
       __pyx_t_7 = 0;
 
-      /* "lxml/etree.pyx":181
+      /* "lxml/etree.pyx":182
  *     global _DEFAULT_NAMESPACE_PREFIXES_ITEMS
  *     _DEFAULT_NAMESPACE_PREFIXES_ITEMS = {
  *         ns.decode('utf-8') : prefix.decode('utf-8')             # <<<<<<<<<<<<<<
@@ -12605,21 +12687,21 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
  */
       if (unlikely(__pyx_7genexpr__pyx_v_ns == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
-        __PYX_ERR(0, 181, __pyx_L5_error)
+        __PYX_ERR(0, 182, __pyx_L5_error)
       }
-      __pyx_t_2 = __Pyx_decode_bytes(__pyx_7genexpr__pyx_v_ns, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L5_error)
+      __pyx_t_2 = __Pyx_decode_bytes(__pyx_7genexpr__pyx_v_ns, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 182, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_2);
       if (unlikely(__pyx_7genexpr__pyx_v_prefix == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
-        __PYX_ERR(0, 181, __pyx_L5_error)
+        __PYX_ERR(0, 182, __pyx_L5_error)
       }
-      __pyx_t_7 = __Pyx_decode_bytes(__pyx_7genexpr__pyx_v_prefix, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 181, __pyx_L5_error)
+      __pyx_t_7 = __Pyx_decode_bytes(__pyx_7genexpr__pyx_v_prefix, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 182, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_7);
-      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_t_2, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 181, __pyx_L5_error)
+      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_t_2, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 182, __pyx_L5_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "lxml/etree.pyx":182
+      /* "lxml/etree.pyx":183
  *     _DEFAULT_NAMESPACE_PREFIXES_ITEMS = {
  *         ns.decode('utf-8') : prefix.decode('utf-8')
  *         for ns, prefix in _DEFAULT_NAMESPACE_PREFIXES.items()             # <<<<<<<<<<<<<<
@@ -12638,14 +12720,14 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
     __pyx_L10_exit_scope:;
   } /* exit inner scope */
 
-  /* "lxml/etree.pyx":183
+  /* "lxml/etree.pyx":184
  *         ns.decode('utf-8') : prefix.decode('utf-8')
  *         for ns, prefix in _DEFAULT_NAMESPACE_PREFIXES.items()
  *     }.items()             # <<<<<<<<<<<<<<
  * 
  * _update_default_namespace_prefixes_items()
  */
-  __pyx_t_3 = __Pyx_PyDict_Items(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 183, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_Items(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES_ITEMS);
@@ -12653,7 +12735,7 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":177
+  /* "lxml/etree.pyx":178
  * cdef object _DEFAULT_NAMESPACE_PREFIXES_ITEMS = []
  * 
  * cdef _update_default_namespace_prefixes_items():             # <<<<<<<<<<<<<<
@@ -12681,7 +12763,7 @@ static PyObject *__pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(v
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":189
+/* "lxml/etree.pyx":190
  * cdef object _check_internal_prefix = re.compile(b"ns\d+$").match
  * 
  * def register_namespace(prefix, uri):             # <<<<<<<<<<<<<<
@@ -12725,11 +12807,11 @@ static PyObject *__pyx_pw_4lxml_5etree_1register_namespace(PyObject *__pyx_self,
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_uri)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("register_namespace", 1, 2, 2, 1); __PYX_ERR(0, 189, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("register_namespace", 1, 2, 2, 1); __PYX_ERR(0, 190, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "register_namespace") < 0)) __PYX_ERR(0, 189, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "register_namespace") < 0)) __PYX_ERR(0, 190, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -12742,7 +12824,7 @@ static PyObject *__pyx_pw_4lxml_5etree_1register_namespace(PyObject *__pyx_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("register_namespace", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 189, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("register_namespace", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 190, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.register_namespace", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -12778,23 +12860,23 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("register_namespace", 0);
 
-  /* "lxml/etree.pyx":195
+  /* "lxml/etree.pyx":196
  *     removed.
  *     """
  *     prefix_utf, uri_utf = _utf8(prefix), _utf8(uri)             # <<<<<<<<<<<<<<
  *     if _check_internal_prefix(prefix_utf):
  *         raise ValueError("Prefix format reserved for internal use")
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_prefix); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 195, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_prefix); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__utf8(__pyx_v_uri); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 195, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__utf8(__pyx_v_uri); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_prefix_utf = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
   __pyx_v_uri_utf = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":196
+  /* "lxml/etree.pyx":197
  *     """
  *     prefix_utf, uri_utf = _utf8(prefix), _utf8(uri)
  *     if _check_internal_prefix(prefix_utf):             # <<<<<<<<<<<<<<
@@ -12814,27 +12896,27 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
   }
   __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_v_prefix_utf) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_prefix_utf);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 197, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 196, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 197, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (unlikely(__pyx_t_4)) {
 
-    /* "lxml/etree.pyx":197
+    /* "lxml/etree.pyx":198
  *     prefix_utf, uri_utf = _utf8(prefix), _utf8(uri)
  *     if _check_internal_prefix(prefix_utf):
  *         raise ValueError("Prefix format reserved for internal use")             # <<<<<<<<<<<<<<
  *     _tagValidOrRaise(prefix_utf)
  *     _uriValidOrRaise(uri_utf)
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 197, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 198, __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(0, 197, __pyx_L1_error)
+    __PYX_ERR(0, 198, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":196
+    /* "lxml/etree.pyx":197
  *     """
  *     prefix_utf, uri_utf = _utf8(prefix), _utf8(uri)
  *     if _check_internal_prefix(prefix_utf):             # <<<<<<<<<<<<<<
@@ -12843,38 +12925,38 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/etree.pyx":198
+  /* "lxml/etree.pyx":199
  *     if _check_internal_prefix(prefix_utf):
  *         raise ValueError("Prefix format reserved for internal use")
  *     _tagValidOrRaise(prefix_utf)             # <<<<<<<<<<<<<<
  *     _uriValidOrRaise(uri_utf)
  *     if (uri_utf == b"http://www.w3.org/XML/1998/namespace" and prefix_utf != b'xml'
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_prefix_utf); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 198, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_prefix_utf); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 199, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":199
+  /* "lxml/etree.pyx":200
  *         raise ValueError("Prefix format reserved for internal use")
  *     _tagValidOrRaise(prefix_utf)
  *     _uriValidOrRaise(uri_utf)             # <<<<<<<<<<<<<<
  *     if (uri_utf == b"http://www.w3.org/XML/1998/namespace" and prefix_utf != b'xml'
  *             or prefix_utf == b'xml' and uri_utf != b"http://www.w3.org/XML/1998/namespace"):
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree__uriValidOrRaise(__pyx_v_uri_utf); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 199, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree__uriValidOrRaise(__pyx_v_uri_utf); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 200, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":200
+  /* "lxml/etree.pyx":201
  *     _tagValidOrRaise(prefix_utf)
  *     _uriValidOrRaise(uri_utf)
  *     if (uri_utf == b"http://www.w3.org/XML/1998/namespace" and prefix_utf != b'xml'             # <<<<<<<<<<<<<<
  *             or prefix_utf == b'xml' and uri_utf != b"http://www.w3.org/XML/1998/namespace"):
  *         raise ValueError("Cannot change the 'xml' prefix of the XML namespace")
  */
-  __pyx_t_6 = (__Pyx_PyBytes_Equals(__pyx_v_uri_utf, __pyx_kp_b_http_www_w3_org_XML_1998_namespa, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 200, __pyx_L1_error)
+  __pyx_t_6 = (__Pyx_PyBytes_Equals(__pyx_v_uri_utf, __pyx_kp_b_http_www_w3_org_XML_1998_namespa, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 201, __pyx_L1_error)
   __pyx_t_7 = (__pyx_t_6 != 0);
   if (!__pyx_t_7) {
     goto __pyx_L6_next_or;
   } else {
   }
-  __pyx_t_7 = (__Pyx_PyBytes_Equals(__pyx_v_prefix_utf, __pyx_n_b_xml, Py_NE)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 200, __pyx_L1_error)
+  __pyx_t_7 = (__Pyx_PyBytes_Equals(__pyx_v_prefix_utf, __pyx_n_b_xml, Py_NE)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 201, __pyx_L1_error)
   __pyx_t_6 = (__pyx_t_7 != 0);
   if (!__pyx_t_6) {
   } else {
@@ -12883,26 +12965,26 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
   }
   __pyx_L6_next_or:;
 
-  /* "lxml/etree.pyx":201
+  /* "lxml/etree.pyx":202
  *     _uriValidOrRaise(uri_utf)
  *     if (uri_utf == b"http://www.w3.org/XML/1998/namespace" and prefix_utf != b'xml'
  *             or prefix_utf == b'xml' and uri_utf != b"http://www.w3.org/XML/1998/namespace"):             # <<<<<<<<<<<<<<
  *         raise ValueError("Cannot change the 'xml' prefix of the XML namespace")
  *     for k, v in list(_DEFAULT_NAMESPACE_PREFIXES.items()):
  */
-  __pyx_t_6 = (__Pyx_PyBytes_Equals(__pyx_v_prefix_utf, __pyx_n_b_xml, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 201, __pyx_L1_error)
+  __pyx_t_6 = (__Pyx_PyBytes_Equals(__pyx_v_prefix_utf, __pyx_n_b_xml, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 202, __pyx_L1_error)
   __pyx_t_7 = (__pyx_t_6 != 0);
   if (__pyx_t_7) {
   } else {
     __pyx_t_4 = __pyx_t_7;
     goto __pyx_L5_bool_binop_done;
   }
-  __pyx_t_7 = (__Pyx_PyBytes_Equals(__pyx_v_uri_utf, __pyx_kp_b_http_www_w3_org_XML_1998_namespa, Py_NE)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 201, __pyx_L1_error)
+  __pyx_t_7 = (__Pyx_PyBytes_Equals(__pyx_v_uri_utf, __pyx_kp_b_http_www_w3_org_XML_1998_namespa, Py_NE)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 202, __pyx_L1_error)
   __pyx_t_6 = (__pyx_t_7 != 0);
   __pyx_t_4 = __pyx_t_6;
   __pyx_L5_bool_binop_done:;
 
-  /* "lxml/etree.pyx":200
+  /* "lxml/etree.pyx":201
  *     _tagValidOrRaise(prefix_utf)
  *     _uriValidOrRaise(uri_utf)
  *     if (uri_utf == b"http://www.w3.org/XML/1998/namespace" and prefix_utf != b'xml'             # <<<<<<<<<<<<<<
@@ -12911,20 +12993,20 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
  */
   if (unlikely(__pyx_t_4)) {
 
-    /* "lxml/etree.pyx":202
+    /* "lxml/etree.pyx":203
  *     if (uri_utf == b"http://www.w3.org/XML/1998/namespace" and prefix_utf != b'xml'
  *             or prefix_utf == b'xml' and uri_utf != b"http://www.w3.org/XML/1998/namespace"):
  *         raise ValueError("Cannot change the 'xml' prefix of the XML namespace")             # <<<<<<<<<<<<<<
  *     for k, v in list(_DEFAULT_NAMESPACE_PREFIXES.items()):
  *         if k == uri_utf or v == prefix_utf:
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __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(0, 202, __pyx_L1_error)
+    __PYX_ERR(0, 203, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":200
+    /* "lxml/etree.pyx":201
  *     _tagValidOrRaise(prefix_utf)
  *     _uriValidOrRaise(uri_utf)
  *     if (uri_utf == b"http://www.w3.org/XML/1998/namespace" and prefix_utf != b'xml'             # <<<<<<<<<<<<<<
@@ -12933,7 +13015,7 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/etree.pyx":203
+  /* "lxml/etree.pyx":204
  *             or prefix_utf == b'xml' and uri_utf != b"http://www.w3.org/XML/1998/namespace"):
  *         raise ValueError("Cannot change the 'xml' prefix of the XML namespace")
  *     for k, v in list(_DEFAULT_NAMESPACE_PREFIXES.items()):             # <<<<<<<<<<<<<<
@@ -12942,11 +13024,11 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
  */
   if (unlikely(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
-    __PYX_ERR(0, 203, __pyx_L1_error)
+    __PYX_ERR(0, 204, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_PyDict_Items(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_Items(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error)
+  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
@@ -12954,9 +13036,9 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
   for (;;) {
     if (__pyx_t_8 >= 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_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 203, __pyx_L1_error)
+    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 204, __pyx_L1_error)
     #else
-    __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 204, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
@@ -12965,7 +13047,7 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 203, __pyx_L1_error)
+        __PYX_ERR(0, 204, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -12978,15 +13060,15 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_9);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 204, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 203, __pyx_L1_error)
+      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 204, __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, 203, __pyx_L1_error)
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 204, __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;
@@ -12994,7 +13076,7 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
       __Pyx_GOTREF(__pyx_t_3);
       index = 1; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L11_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_9);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) __PYX_ERR(0, 203, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
       __pyx_t_11 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L12_unpacking_done;
@@ -13002,7 +13084,7 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_11 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 203, __pyx_L1_error)
+      __PYX_ERR(0, 204, __pyx_L1_error)
       __pyx_L12_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
@@ -13010,25 +13092,25 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
     __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "lxml/etree.pyx":204
+    /* "lxml/etree.pyx":205
  *         raise ValueError("Cannot change the 'xml' prefix of the XML namespace")
  *     for k, v in list(_DEFAULT_NAMESPACE_PREFIXES.items()):
  *         if k == uri_utf or v == prefix_utf:             # <<<<<<<<<<<<<<
  *             del _DEFAULT_NAMESPACE_PREFIXES[k]
  *     _DEFAULT_NAMESPACE_PREFIXES[uri_utf] = prefix_utf
  */
-    __pyx_t_6 = (__Pyx_PyBytes_Equals(__pyx_v_k, __pyx_v_uri_utf, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 204, __pyx_L1_error)
+    __pyx_t_6 = (__Pyx_PyBytes_Equals(__pyx_v_k, __pyx_v_uri_utf, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 205, __pyx_L1_error)
     if (!__pyx_t_6) {
     } else {
       __pyx_t_4 = __pyx_t_6;
       goto __pyx_L14_bool_binop_done;
     }
-    __pyx_t_6 = (__Pyx_PyBytes_Equals(__pyx_v_v, __pyx_v_prefix_utf, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 204, __pyx_L1_error)
+    __pyx_t_6 = (__Pyx_PyBytes_Equals(__pyx_v_v, __pyx_v_prefix_utf, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 205, __pyx_L1_error)
     __pyx_t_4 = __pyx_t_6;
     __pyx_L14_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "lxml/etree.pyx":205
+      /* "lxml/etree.pyx":206
  *     for k, v in list(_DEFAULT_NAMESPACE_PREFIXES.items()):
  *         if k == uri_utf or v == prefix_utf:
  *             del _DEFAULT_NAMESPACE_PREFIXES[k]             # <<<<<<<<<<<<<<
@@ -13037,11 +13119,11 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
  */
       if (unlikely(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 205, __pyx_L1_error)
+        __PYX_ERR(0, 206, __pyx_L1_error)
       }
-      if (unlikely(PyDict_DelItem(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES, __pyx_v_k) < 0)) __PYX_ERR(0, 205, __pyx_L1_error)
+      if (unlikely(PyDict_DelItem(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES, __pyx_v_k) < 0)) __PYX_ERR(0, 206, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":204
+      /* "lxml/etree.pyx":205
  *         raise ValueError("Cannot change the 'xml' prefix of the XML namespace")
  *     for k, v in list(_DEFAULT_NAMESPACE_PREFIXES.items()):
  *         if k == uri_utf or v == prefix_utf:             # <<<<<<<<<<<<<<
@@ -13050,7 +13132,7 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/etree.pyx":203
+    /* "lxml/etree.pyx":204
  *             or prefix_utf == b'xml' and uri_utf != b"http://www.w3.org/XML/1998/namespace"):
  *         raise ValueError("Cannot change the 'xml' prefix of the XML namespace")
  *     for k, v in list(_DEFAULT_NAMESPACE_PREFIXES.items()):             # <<<<<<<<<<<<<<
@@ -13060,7 +13142,7 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":206
+  /* "lxml/etree.pyx":207
  *         if k == uri_utf or v == prefix_utf:
  *             del _DEFAULT_NAMESPACE_PREFIXES[k]
  *     _DEFAULT_NAMESPACE_PREFIXES[uri_utf] = prefix_utf             # <<<<<<<<<<<<<<
@@ -13069,22 +13151,22 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
  */
   if (unlikely(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 206, __pyx_L1_error)
+    __PYX_ERR(0, 207, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES, __pyx_v_uri_utf, __pyx_v_prefix_utf) < 0)) __PYX_ERR(0, 206, __pyx_L1_error)
+  if (unlikely(PyDict_SetItem(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES, __pyx_v_uri_utf, __pyx_v_prefix_utf) < 0)) __PYX_ERR(0, 207, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":207
+  /* "lxml/etree.pyx":208
  *             del _DEFAULT_NAMESPACE_PREFIXES[k]
  *     _DEFAULT_NAMESPACE_PREFIXES[uri_utf] = prefix_utf
  *     _update_default_namespace_prefixes_items()             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 207, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":189
+  /* "lxml/etree.pyx":190
  * cdef object _check_internal_prefix = re.compile(b"ns\d+$").match
  * 
  * def register_namespace(prefix, uri):             # <<<<<<<<<<<<<<
@@ -13113,7 +13195,7 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":219
+/* "lxml/etree.pyx":220
  *     this one.
  *     """
  *     def __init__(self, message, error_log=None):             # <<<<<<<<<<<<<<
@@ -13160,7 +13242,7 @@ static int __pyx_pw_4lxml_5etree_9LxmlError_1__init__(PyObject *__pyx_v_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 219, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 220, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -13176,7 +13258,7 @@ static int __pyx_pw_4lxml_5etree_9LxmlError_1__init__(PyObject *__pyx_v_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 219, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 220, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.LxmlError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -13202,14 +13284,14 @@ static int __pyx_pf_4lxml_5etree_9LxmlError___init__(struct __pyx_obj_4lxml_5etr
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "lxml/etree.pyx":220
+  /* "lxml/etree.pyx":221
  *     """
  *     def __init__(self, message, error_log=None):
  *         super(_Error, self).__init__(message)             # <<<<<<<<<<<<<<
  *         if error_log is None:
  *             self.error_log = __copyGlobalErrorLog()
  */
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 220, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_4lxml_5etree__Error);
   __Pyx_GIVEREF(__pyx_v_4lxml_5etree__Error);
@@ -13217,10 +13299,10 @@ static int __pyx_pf_4lxml_5etree_9LxmlError___init__(struct __pyx_obj_4lxml_5etr
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 220, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 220, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = NULL;
@@ -13235,12 +13317,12 @@ static int __pyx_pf_4lxml_5etree_9LxmlError___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_message) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_message);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __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/etree.pyx":221
+  /* "lxml/etree.pyx":222
  *     def __init__(self, message, error_log=None):
  *         super(_Error, self).__init__(message)
  *         if error_log is None:             # <<<<<<<<<<<<<<
@@ -13251,19 +13333,19 @@ static int __pyx_pf_4lxml_5etree_9LxmlError___init__(struct __pyx_obj_4lxml_5etr
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":222
+    /* "lxml/etree.pyx":223
  *         super(_Error, self).__init__(message)
  *         if error_log is None:
  *             self.error_log = __copyGlobalErrorLog()             # <<<<<<<<<<<<<<
  *         else:
  *             self.error_log = error_log.copy()
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree___copyGlobalErrorLog(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree___copyGlobalErrorLog(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_error_log, __pyx_t_1) < 0) __PYX_ERR(0, 222, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_error_log, __pyx_t_1) < 0) __PYX_ERR(0, 223, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "lxml/etree.pyx":221
+    /* "lxml/etree.pyx":222
  *     def __init__(self, message, error_log=None):
  *         super(_Error, self).__init__(message)
  *         if error_log is None:             # <<<<<<<<<<<<<<
@@ -13273,7 +13355,7 @@ static int __pyx_pf_4lxml_5etree_9LxmlError___init__(struct __pyx_obj_4lxml_5etr
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":224
+  /* "lxml/etree.pyx":225
  *             self.error_log = __copyGlobalErrorLog()
  *         else:
  *             self.error_log = error_log.copy()             # <<<<<<<<<<<<<<
@@ -13281,7 +13363,7 @@ static int __pyx_pf_4lxml_5etree_9LxmlError___init__(struct __pyx_obj_4lxml_5etr
  * cdef object _Error = Error
  */
   /*else*/ {
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_error_log, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_error_log, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -13295,15 +13377,15 @@ static int __pyx_pf_4lxml_5etree_9LxmlError___init__(struct __pyx_obj_4lxml_5etr
     }
     __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, 224, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_error_log, __pyx_t_1) < 0) __PYX_ERR(0, 224, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_error_log, __pyx_t_1) < 0) __PYX_ERR(0, 225, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":219
+  /* "lxml/etree.pyx":220
  *     this one.
  *     """
  *     def __init__(self, message, error_log=None):             # <<<<<<<<<<<<<<
@@ -13325,7 +13407,7 @@ static int __pyx_pf_4lxml_5etree_9LxmlError___init__(struct __pyx_obj_4lxml_5etr
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":239
+/* "lxml/etree.pyx":240
  * 
  * # version information
  * cdef __unpackDottedVersion(version):             # <<<<<<<<<<<<<<
@@ -13360,26 +13442,26 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__unpackDottedVersion", 0);
 
-  /* "lxml/etree.pyx":240
+  /* "lxml/etree.pyx":241
  * # version information
  * cdef __unpackDottedVersion(version):
  *     version_list = []             # <<<<<<<<<<<<<<
  *     l = (version.decode("ascii").replace(u'-', u'.').split(u'.') + [0]*4)[:4]
  *     for item in l:
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_version_list = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":241
+  /* "lxml/etree.pyx":242
  * cdef __unpackDottedVersion(version):
  *     version_list = []
  *     l = (version.decode("ascii").replace(u'-', u'.').split(u'.') + [0]*4)[:4]             # <<<<<<<<<<<<<<
  *     for item in l:
  *         try:
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_version, __pyx_n_s_decode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_version, __pyx_n_s_decode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -13393,16 +13475,16 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
   }
   __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_n_s_ascii) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_s_ascii);
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 241, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 242, __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_3, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -13417,10 +13499,10 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
   }
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_kp_u__4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u__4);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyList_New(1 * 4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(1 * 4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   { Py_ssize_t __pyx_temp;
     for (__pyx_temp=0; __pyx_temp < 4; __pyx_temp++) {
@@ -13429,17 +13511,17 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
       PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_int_0);
     }
   }
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_t_2, 0, 4, NULL, NULL, &__pyx_slice__6, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_t_2, 0, 4, NULL, NULL, &__pyx_slice__6, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_l = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":242
+  /* "lxml/etree.pyx":243
  *     version_list = []
  *     l = (version.decode("ascii").replace(u'-', u'.').split(u'.') + [0]*4)[:4]
  *     for item in l:             # <<<<<<<<<<<<<<
@@ -13450,26 +13532,26 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
     __pyx_t_3 = __pyx_v_l; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_l); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 242, __pyx_L1_error)
+    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_l); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 243, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 242, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 243, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 242, __pyx_L1_error)
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 243, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_5 >= 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_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 242, __pyx_L1_error)
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 243, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -13479,7 +13561,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 242, __pyx_L1_error)
+          else __PYX_ERR(0, 243, __pyx_L1_error)
         }
         break;
       }
@@ -13488,7 +13570,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
     __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "lxml/etree.pyx":243
+    /* "lxml/etree.pyx":244
  *     l = (version.decode("ascii").replace(u'-', u'.').split(u'.') + [0]*4)[:4]
  *     for item in l:
  *         try:             # <<<<<<<<<<<<<<
@@ -13504,19 +13586,19 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
       __Pyx_XGOTREF(__pyx_t_9);
       /*try:*/ {
 
-        /* "lxml/etree.pyx":244
+        /* "lxml/etree.pyx":245
  *     for item in l:
  *         try:
  *             item = int(item)             # <<<<<<<<<<<<<<
  *         except ValueError:
  *             if item.startswith(u'dev'):
  */
-        __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L5_error)
+        __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF_SET(__pyx_v_item, __pyx_t_2);
         __pyx_t_2 = 0;
 
-        /* "lxml/etree.pyx":243
+        /* "lxml/etree.pyx":244
  *     l = (version.decode("ascii").replace(u'-', u'.').split(u'.') + [0]*4)[:4]
  *     for item in l:
  *         try:             # <<<<<<<<<<<<<<
@@ -13533,7 +13615,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "lxml/etree.pyx":245
+      /* "lxml/etree.pyx":246
  *         try:
  *             item = int(item)
  *         except ValueError:             # <<<<<<<<<<<<<<
@@ -13543,19 +13625,19 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
       __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
       if (__pyx_t_10) {
         __Pyx_AddTraceback("lxml.etree.__unpackDottedVersion", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_4) < 0) __PYX_ERR(0, 245, __pyx_L7_except_error)
+        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_4) < 0) __PYX_ERR(0, 246, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_GOTREF(__pyx_t_4);
 
-        /* "lxml/etree.pyx":246
+        /* "lxml/etree.pyx":247
  *             item = int(item)
  *         except ValueError:
  *             if item.startswith(u'dev'):             # <<<<<<<<<<<<<<
  *                 count = item[3:]
  *                 item = -300
  */
-        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_startswith); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 246, __pyx_L7_except_error)
+        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_startswith); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 247, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_12);
         __pyx_t_13 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
@@ -13569,26 +13651,26 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
         }
         __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_n_u_dev) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_n_u_dev);
         __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
-        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 246, __pyx_L7_except_error)
+        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 247, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 246, __pyx_L7_except_error)
+        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 247, __pyx_L7_except_error)
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         if (__pyx_t_14) {
 
-          /* "lxml/etree.pyx":247
+          /* "lxml/etree.pyx":248
  *         except ValueError:
  *             if item.startswith(u'dev'):
  *                 count = item[3:]             # <<<<<<<<<<<<<<
  *                 item = -300
  *             elif item.startswith(u'alpha'):
  */
-          __pyx_t_11 = __Pyx_PyObject_GetSlice(__pyx_v_item, 3, 0, NULL, NULL, &__pyx_slice__7, 1, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 247, __pyx_L7_except_error)
+          __pyx_t_11 = __Pyx_PyObject_GetSlice(__pyx_v_item, 3, 0, NULL, NULL, &__pyx_slice__7, 1, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 248, __pyx_L7_except_error)
           __Pyx_GOTREF(__pyx_t_11);
           __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_11);
           __pyx_t_11 = 0;
 
-          /* "lxml/etree.pyx":248
+          /* "lxml/etree.pyx":249
  *             if item.startswith(u'dev'):
  *                 count = item[3:]
  *                 item = -300             # <<<<<<<<<<<<<<
@@ -13598,7 +13680,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
           __Pyx_INCREF(__pyx_int_neg_300);
           __Pyx_DECREF_SET(__pyx_v_item, __pyx_int_neg_300);
 
-          /* "lxml/etree.pyx":246
+          /* "lxml/etree.pyx":247
  *             item = int(item)
  *         except ValueError:
  *             if item.startswith(u'dev'):             # <<<<<<<<<<<<<<
@@ -13608,14 +13690,14 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
           goto __pyx_L15;
         }
 
-        /* "lxml/etree.pyx":249
+        /* "lxml/etree.pyx":250
  *                 count = item[3:]
  *                 item = -300
  *             elif item.startswith(u'alpha'):             # <<<<<<<<<<<<<<
  *                 count = item[5:]
  *                 item = -200
  */
-        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_startswith); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 249, __pyx_L7_except_error)
+        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_startswith); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 250, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_12);
         __pyx_t_13 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
@@ -13629,26 +13711,26 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
         }
         __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_n_u_alpha) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_n_u_alpha);
         __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
-        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 249, __pyx_L7_except_error)
+        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 250, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 249, __pyx_L7_except_error)
+        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 250, __pyx_L7_except_error)
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         if (__pyx_t_14) {
 
-          /* "lxml/etree.pyx":250
+          /* "lxml/etree.pyx":251
  *                 item = -300
  *             elif item.startswith(u'alpha'):
  *                 count = item[5:]             # <<<<<<<<<<<<<<
  *                 item = -200
  *             elif item.startswith(u'beta'):
  */
-          __pyx_t_11 = __Pyx_PyObject_GetSlice(__pyx_v_item, 5, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 250, __pyx_L7_except_error)
+          __pyx_t_11 = __Pyx_PyObject_GetSlice(__pyx_v_item, 5, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 251, __pyx_L7_except_error)
           __Pyx_GOTREF(__pyx_t_11);
           __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_11);
           __pyx_t_11 = 0;
 
-          /* "lxml/etree.pyx":251
+          /* "lxml/etree.pyx":252
  *             elif item.startswith(u'alpha'):
  *                 count = item[5:]
  *                 item = -200             # <<<<<<<<<<<<<<
@@ -13658,7 +13740,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
           __Pyx_INCREF(__pyx_int_neg_200);
           __Pyx_DECREF_SET(__pyx_v_item, __pyx_int_neg_200);
 
-          /* "lxml/etree.pyx":249
+          /* "lxml/etree.pyx":250
  *                 count = item[3:]
  *                 item = -300
  *             elif item.startswith(u'alpha'):             # <<<<<<<<<<<<<<
@@ -13668,14 +13750,14 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
           goto __pyx_L15;
         }
 
-        /* "lxml/etree.pyx":252
+        /* "lxml/etree.pyx":253
  *                 count = item[5:]
  *                 item = -200
  *             elif item.startswith(u'beta'):             # <<<<<<<<<<<<<<
  *                 count = item[4:]
  *                 item = -100
  */
-        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_startswith); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 252, __pyx_L7_except_error)
+        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_startswith); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 253, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_12);
         __pyx_t_13 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
@@ -13689,26 +13771,26 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
         }
         __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_n_u_beta) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_n_u_beta);
         __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
-        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 252, __pyx_L7_except_error)
+        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 253, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 252, __pyx_L7_except_error)
+        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 253, __pyx_L7_except_error)
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         if (__pyx_t_14) {
 
-          /* "lxml/etree.pyx":253
+          /* "lxml/etree.pyx":254
  *                 item = -200
  *             elif item.startswith(u'beta'):
  *                 count = item[4:]             # <<<<<<<<<<<<<<
  *                 item = -100
  *             else:
  */
-          __pyx_t_11 = __Pyx_PyObject_GetSlice(__pyx_v_item, 4, 0, NULL, NULL, &__pyx_slice__9, 1, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 253, __pyx_L7_except_error)
+          __pyx_t_11 = __Pyx_PyObject_GetSlice(__pyx_v_item, 4, 0, NULL, NULL, &__pyx_slice__9, 1, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 254, __pyx_L7_except_error)
           __Pyx_GOTREF(__pyx_t_11);
           __Pyx_XDECREF_SET(__pyx_v_count, __pyx_t_11);
           __pyx_t_11 = 0;
 
-          /* "lxml/etree.pyx":254
+          /* "lxml/etree.pyx":255
  *             elif item.startswith(u'beta'):
  *                 count = item[4:]
  *                 item = -100             # <<<<<<<<<<<<<<
@@ -13718,7 +13800,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
           __Pyx_INCREF(__pyx_int_neg_100);
           __Pyx_DECREF_SET(__pyx_v_item, __pyx_int_neg_100);
 
-          /* "lxml/etree.pyx":252
+          /* "lxml/etree.pyx":253
  *                 count = item[5:]
  *                 item = -200
  *             elif item.startswith(u'beta'):             # <<<<<<<<<<<<<<
@@ -13728,7 +13810,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
           goto __pyx_L15;
         }
 
-        /* "lxml/etree.pyx":256
+        /* "lxml/etree.pyx":257
  *                 item = -100
  *             else:
  *                 count = 0             # <<<<<<<<<<<<<<
@@ -13741,32 +13823,32 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
         }
         __pyx_L15:;
 
-        /* "lxml/etree.pyx":257
+        /* "lxml/etree.pyx":258
  *             else:
  *                 count = 0
  *             if count:             # <<<<<<<<<<<<<<
  *                 item += int(count)
  *         version_list.append(item)
  */
-        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_count); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 257, __pyx_L7_except_error)
+        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_count); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 258, __pyx_L7_except_error)
         if (__pyx_t_14) {
 
-          /* "lxml/etree.pyx":258
+          /* "lxml/etree.pyx":259
  *                 count = 0
  *             if count:
  *                 item += int(count)             # <<<<<<<<<<<<<<
  *         version_list.append(item)
  *     return tuple(version_list)
  */
-          __pyx_t_11 = __Pyx_PyNumber_Int(__pyx_v_count); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 258, __pyx_L7_except_error)
+          __pyx_t_11 = __Pyx_PyNumber_Int(__pyx_v_count); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 259, __pyx_L7_except_error)
           __Pyx_GOTREF(__pyx_t_11);
-          __pyx_t_12 = PyNumber_InPlaceAdd(__pyx_v_item, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 258, __pyx_L7_except_error)
+          __pyx_t_12 = PyNumber_InPlaceAdd(__pyx_v_item, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 259, __pyx_L7_except_error)
           __Pyx_GOTREF(__pyx_t_12);
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           __Pyx_DECREF_SET(__pyx_v_item, __pyx_t_12);
           __pyx_t_12 = 0;
 
-          /* "lxml/etree.pyx":257
+          /* "lxml/etree.pyx":258
  *             else:
  *                 count = 0
  *             if count:             # <<<<<<<<<<<<<<
@@ -13782,7 +13864,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
       goto __pyx_L7_except_error;
       __pyx_L7_except_error:;
 
-      /* "lxml/etree.pyx":243
+      /* "lxml/etree.pyx":244
  *     l = (version.decode("ascii").replace(u'-', u'.').split(u'.') + [0]*4)[:4]
  *     for item in l:
  *         try:             # <<<<<<<<<<<<<<
@@ -13802,16 +13884,16 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
       __pyx_L12_try_end:;
     }
 
-    /* "lxml/etree.pyx":259
+    /* "lxml/etree.pyx":260
  *             if count:
  *                 item += int(count)
  *         version_list.append(item)             # <<<<<<<<<<<<<<
  *     return tuple(version_list)
  * 
  */
-    __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_version_list, __pyx_v_item); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 259, __pyx_L1_error)
+    __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_version_list, __pyx_v_item); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 260, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":242
+    /* "lxml/etree.pyx":243
  *     version_list = []
  *     l = (version.decode("ascii").replace(u'-', u'.').split(u'.') + [0]*4)[:4]
  *     for item in l:             # <<<<<<<<<<<<<<
@@ -13821,7 +13903,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":260
+  /* "lxml/etree.pyx":261
  *                 item += int(count)
  *         version_list.append(item)
  *     return tuple(version_list)             # <<<<<<<<<<<<<<
@@ -13829,13 +13911,13 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
  * cdef __unpackIntVersion(int c_version):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyList_AsTuple(__pyx_v_version_list); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 260, __pyx_L1_error)
+  __pyx_t_3 = PyList_AsTuple(__pyx_v_version_list); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":239
+  /* "lxml/etree.pyx":240
  * 
  * # version information
  * cdef __unpackDottedVersion(version):             # <<<<<<<<<<<<<<
@@ -13864,7 +13946,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":262
+/* "lxml/etree.pyx":263
  *     return tuple(version_list)
  * 
  * cdef __unpackIntVersion(int c_version):             # <<<<<<<<<<<<<<
@@ -13884,7 +13966,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackIntVersion(int __pyx_v_c_version)
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__unpackIntVersion", 0);
 
-  /* "lxml/etree.pyx":263
+  /* "lxml/etree.pyx":264
  * 
  * cdef __unpackIntVersion(int c_version):
  *     return (             # <<<<<<<<<<<<<<
@@ -13893,44 +13975,44 @@ static PyObject *__pyx_f_4lxml_5etree___unpackIntVersion(int __pyx_v_c_version)
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "lxml/etree.pyx":264
+  /* "lxml/etree.pyx":265
  * cdef __unpackIntVersion(int c_version):
  *     return (
  *         ((c_version / (100*100)) % 100),             # <<<<<<<<<<<<<<
  *         ((c_version / 100)       % 100),
  *         (c_version               % 100)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_long(__Pyx_mod_long(__Pyx_div_long(__pyx_v_c_version, 0x2710), 0x64)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_long(__Pyx_mod_long(__Pyx_div_long(__pyx_v_c_version, 0x2710), 0x64)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "lxml/etree.pyx":265
+  /* "lxml/etree.pyx":266
  *     return (
  *         ((c_version / (100*100)) % 100),
  *         ((c_version / 100)       % 100),             # <<<<<<<<<<<<<<
  *         (c_version               % 100)
  *         )
  */
-  __pyx_t_2 = __Pyx_PyInt_From_long(__Pyx_mod_long(__Pyx_div_long(__pyx_v_c_version, 0x64), 0x64)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 265, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_long(__Pyx_mod_long(__Pyx_div_long(__pyx_v_c_version, 0x64), 0x64)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "lxml/etree.pyx":266
+  /* "lxml/etree.pyx":267
  *         ((c_version / (100*100)) % 100),
  *         ((c_version / 100)       % 100),
  *         (c_version               % 100)             # <<<<<<<<<<<<<<
  *         )
  * 
  */
-  __pyx_t_3 = __Pyx_PyInt_From_long(__Pyx_mod_long(__pyx_v_c_version, 0x64)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 266, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_long(__Pyx_mod_long(__pyx_v_c_version, 0x64)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 267, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "lxml/etree.pyx":264
+  /* "lxml/etree.pyx":265
  * cdef __unpackIntVersion(int c_version):
  *     return (
  *         ((c_version / (100*100)) % 100),             # <<<<<<<<<<<<<<
  *         ((c_version / 100)       % 100),
  *         (c_version               % 100)
  */
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 264, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 265, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
@@ -13945,7 +14027,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackIntVersion(int __pyx_v_c_version)
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":262
+  /* "lxml/etree.pyx":263
  *     return tuple(version_list)
  * 
  * cdef __unpackIntVersion(int c_version):             # <<<<<<<<<<<<<<
@@ -13967,7 +14049,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackIntVersion(int __pyx_v_c_version)
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":290
+/* "lxml/etree.pyx":291
  * cdef class _TempStore:
  *     cdef list _storage
  *     def __init__(self):             # <<<<<<<<<<<<<<
@@ -14000,14 +14082,14 @@ static int __pyx_pf_4lxml_5etree_10_TempStore___init__(struct __pyx_obj_4lxml_5e
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "lxml/etree.pyx":291
+  /* "lxml/etree.pyx":292
  *     cdef list _storage
  *     def __init__(self):
  *         self._storage = []             # <<<<<<<<<<<<<<
  * 
  *     cdef int add(self, obj) except -1:
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_storage);
@@ -14015,7 +14097,7 @@ static int __pyx_pf_4lxml_5etree_10_TempStore___init__(struct __pyx_obj_4lxml_5e
   __pyx_v_self->_storage = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":290
+  /* "lxml/etree.pyx":291
  * cdef class _TempStore:
  *     cdef list _storage
  *     def __init__(self):             # <<<<<<<<<<<<<<
@@ -14035,7 +14117,7 @@ static int __pyx_pf_4lxml_5etree_10_TempStore___init__(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":293
+/* "lxml/etree.pyx":294
  *         self._storage = []
  * 
  *     cdef int add(self, obj) except -1:             # <<<<<<<<<<<<<<
@@ -14052,7 +14134,7 @@ static int __pyx_f_4lxml_5etree_10_TempStore_add(struct __pyx_obj_4lxml_5etree__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("add", 0);
 
-  /* "lxml/etree.pyx":294
+  /* "lxml/etree.pyx":295
  * 
  *     cdef int add(self, obj) except -1:
  *         self._storage.append(obj)             # <<<<<<<<<<<<<<
@@ -14061,11 +14143,11 @@ static int __pyx_f_4lxml_5etree_10_TempStore_add(struct __pyx_obj_4lxml_5etree__
  */
   if (unlikely(__pyx_v_self->_storage == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-    __PYX_ERR(0, 294, __pyx_L1_error)
+    __PYX_ERR(0, 295, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyList_Append(__pyx_v_self->_storage, __pyx_v_obj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 294, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyList_Append(__pyx_v_self->_storage, __pyx_v_obj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 295, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":295
+  /* "lxml/etree.pyx":296
  *     cdef int add(self, obj) except -1:
  *         self._storage.append(obj)
  *         return 0             # <<<<<<<<<<<<<<
@@ -14075,7 +14157,7 @@ static int __pyx_f_4lxml_5etree_10_TempStore_add(struct __pyx_obj_4lxml_5etree__
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":293
+  /* "lxml/etree.pyx":294
  *         self._storage = []
  * 
  *     cdef int add(self, obj) except -1:             # <<<<<<<<<<<<<<
@@ -14092,7 +14174,7 @@ static int __pyx_f_4lxml_5etree_10_TempStore_add(struct __pyx_obj_4lxml_5etree__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":297
+/* "lxml/etree.pyx":298
  *         return 0
  * 
  *     cdef int clear(self) except -1:             # <<<<<<<<<<<<<<
@@ -14108,7 +14190,7 @@ static int __pyx_f_4lxml_5etree_10_TempStore_clear(struct __pyx_obj_4lxml_5etree
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("clear", 0);
 
-  /* "lxml/etree.pyx":298
+  /* "lxml/etree.pyx":299
  * 
  *     cdef int clear(self) except -1:
  *         del self._storage[:]             # <<<<<<<<<<<<<<
@@ -14117,11 +14199,11 @@ static int __pyx_f_4lxml_5etree_10_TempStore_clear(struct __pyx_obj_4lxml_5etree
  */
   if (unlikely(__pyx_v_self->_storage == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 298, __pyx_L1_error)
+    __PYX_ERR(0, 299, __pyx_L1_error)
   }
-  if (__Pyx_PyObject_DelSlice(__pyx_v_self->_storage, 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) __PYX_ERR(0, 298, __pyx_L1_error)
+  if (__Pyx_PyObject_DelSlice(__pyx_v_self->_storage, 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) __PYX_ERR(0, 299, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":299
+  /* "lxml/etree.pyx":300
  *     cdef int clear(self) except -1:
  *         del self._storage[:]
  *         return 0             # <<<<<<<<<<<<<<
@@ -14131,7 +14213,7 @@ static int __pyx_f_4lxml_5etree_10_TempStore_clear(struct __pyx_obj_4lxml_5etree
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":297
+  /* "lxml/etree.pyx":298
  *         return 0
  * 
  *     cdef int clear(self) except -1:             # <<<<<<<<<<<<<<
@@ -14148,7 +14230,7 @@ static int __pyx_f_4lxml_5etree_10_TempStore_clear(struct __pyx_obj_4lxml_5etree
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":306
+/* "lxml/etree.pyx":307
  * cdef class _ExceptionContext:
  *     cdef object _exc_info
  *     cdef int clear(self) except -1:             # <<<<<<<<<<<<<<
@@ -14161,7 +14243,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext_clear(struct __pyx_obj_4lxml
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("clear", 0);
 
-  /* "lxml/etree.pyx":307
+  /* "lxml/etree.pyx":308
  *     cdef object _exc_info
  *     cdef int clear(self) except -1:
  *         self._exc_info = None             # <<<<<<<<<<<<<<
@@ -14174,7 +14256,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext_clear(struct __pyx_obj_4lxml
   __Pyx_DECREF(__pyx_v_self->_exc_info);
   __pyx_v_self->_exc_info = Py_None;
 
-  /* "lxml/etree.pyx":308
+  /* "lxml/etree.pyx":309
  *     cdef int clear(self) except -1:
  *         self._exc_info = None
  *         return 0             # <<<<<<<<<<<<<<
@@ -14184,7 +14266,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext_clear(struct __pyx_obj_4lxml
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":306
+  /* "lxml/etree.pyx":307
  * cdef class _ExceptionContext:
  *     cdef object _exc_info
  *     cdef int clear(self) except -1:             # <<<<<<<<<<<<<<
@@ -14198,7 +14280,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext_clear(struct __pyx_obj_4lxml
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":310
+/* "lxml/etree.pyx":311
  *         return 0
  * 
  *     cdef void _store_raised(self):             # <<<<<<<<<<<<<<
@@ -14224,7 +14306,7 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_store_raised", 0);
 
-  /* "lxml/etree.pyx":311
+  /* "lxml/etree.pyx":312
  * 
  *     cdef void _store_raised(self):
  *         try:             # <<<<<<<<<<<<<<
@@ -14241,14 +14323,14 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
       __Pyx_XGOTREF(__pyx_t_3);
       /*try:*/ {
 
-        /* "lxml/etree.pyx":312
+        /* "lxml/etree.pyx":313
  *     cdef void _store_raised(self):
  *         try:
  *             self._exc_info = sys.exc_info()             # <<<<<<<<<<<<<<
  *         except BaseException as e:
  *             self._store_exception(e)
  */
-        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 312, __pyx_L6_error)
+        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 313, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_t_6 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -14262,7 +14344,7 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
         }
         __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, 312, __pyx_L6_error)
+        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_GIVEREF(__pyx_t_4);
@@ -14271,7 +14353,7 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
         __pyx_v_self->_exc_info = __pyx_t_4;
         __pyx_t_4 = 0;
 
-        /* "lxml/etree.pyx":311
+        /* "lxml/etree.pyx":312
  * 
  *     cdef void _store_raised(self):
  *         try:             # <<<<<<<<<<<<<<
@@ -14288,7 +14370,7 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "lxml/etree.pyx":313
+      /* "lxml/etree.pyx":314
  *         try:
  *             self._exc_info = sys.exc_info()
  *         except BaseException as e:             # <<<<<<<<<<<<<<
@@ -14298,21 +14380,21 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
       __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException);
       if (__pyx_t_7) {
         __Pyx_AddTraceback("lxml.etree._ExceptionContext._store_raised", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 313, __pyx_L8_except_error)
+        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 314, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_INCREF(__pyx_t_5);
         __pyx_v_e = __pyx_t_5;
 
-        /* "lxml/etree.pyx":314
+        /* "lxml/etree.pyx":315
  *             self._exc_info = sys.exc_info()
  *         except BaseException as e:
  *             self._store_exception(e)             # <<<<<<<<<<<<<<
  *         finally:
  *             return  # and swallow any further exceptions
  */
-        __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_self->__pyx_vtab)->_store_exception(__pyx_v_self, __pyx_v_e); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 314, __pyx_L8_except_error)
+        __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_self->__pyx_vtab)->_store_exception(__pyx_v_self, __pyx_v_e); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 315, __pyx_L8_except_error)
         __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -14321,7 +14403,7 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
       goto __pyx_L8_except_error;
       __pyx_L8_except_error:;
 
-      /* "lxml/etree.pyx":311
+      /* "lxml/etree.pyx":312
  * 
  *     cdef void _store_raised(self):
  *         try:             # <<<<<<<<<<<<<<
@@ -14342,7 +14424,7 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
     }
   }
 
-  /* "lxml/etree.pyx":316
+  /* "lxml/etree.pyx":317
  *             self._store_exception(e)
  *         finally:
  *             return  # and swallow any further exceptions             # <<<<<<<<<<<<<<
@@ -14387,7 +14469,7 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
     }
   }
 
-  /* "lxml/etree.pyx":310
+  /* "lxml/etree.pyx":311
  *         return 0
  * 
  *     cdef void _store_raised(self):             # <<<<<<<<<<<<<<
@@ -14401,7 +14483,7 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
   __Pyx_RefNannyFinishContext();
 }
 
-/* "lxml/etree.pyx":318
+/* "lxml/etree.pyx":319
  *             return  # and swallow any further exceptions
  * 
  *     cdef int _store_exception(self, exception) except -1:             # <<<<<<<<<<<<<<
@@ -14418,14 +14500,14 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__store_exception(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_store_exception", 0);
 
-  /* "lxml/etree.pyx":319
+  /* "lxml/etree.pyx":320
  * 
  *     cdef int _store_exception(self, exception) except -1:
  *         self._exc_info = (exception, None, None)             # <<<<<<<<<<<<<<
  *         return 0
  * 
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 319, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_exception);
   __Pyx_GIVEREF(__pyx_v_exception);
@@ -14442,7 +14524,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__store_exception(struct __py
   __pyx_v_self->_exc_info = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":320
+  /* "lxml/etree.pyx":321
  *     cdef int _store_exception(self, exception) except -1:
  *         self._exc_info = (exception, None, None)
  *         return 0             # <<<<<<<<<<<<<<
@@ -14452,7 +14534,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__store_exception(struct __py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":318
+  /* "lxml/etree.pyx":319
  *             return  # and swallow any further exceptions
  * 
  *     cdef int _store_exception(self, exception) except -1:             # <<<<<<<<<<<<<<
@@ -14470,7 +14552,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__store_exception(struct __py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":322
+/* "lxml/etree.pyx":323
  *         return 0
  * 
  *     cdef bint _has_raised(self) except -1:             # <<<<<<<<<<<<<<
@@ -14484,7 +14566,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__has_raised(struct __pyx_obj
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("_has_raised", 0);
 
-  /* "lxml/etree.pyx":323
+  /* "lxml/etree.pyx":324
  * 
  *     cdef bint _has_raised(self) except -1:
  *         return self._exc_info is not None             # <<<<<<<<<<<<<<
@@ -14495,7 +14577,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__has_raised(struct __pyx_obj
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":322
+  /* "lxml/etree.pyx":323
  *         return 0
  * 
  *     cdef bint _has_raised(self) except -1:             # <<<<<<<<<<<<<<
@@ -14509,7 +14591,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__has_raised(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":325
+/* "lxml/etree.pyx":326
  *         return self._exc_info is not None
  * 
  *     cdef int _raise_if_stored(self) except -1:             # <<<<<<<<<<<<<<
@@ -14537,7 +14619,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_raise_if_stored", 0);
 
-  /* "lxml/etree.pyx":326
+  /* "lxml/etree.pyx":327
  * 
  *     cdef int _raise_if_stored(self) except -1:
  *         if self._exc_info is None:             # <<<<<<<<<<<<<<
@@ -14548,7 +14630,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":327
+    /* "lxml/etree.pyx":328
  *     cdef int _raise_if_stored(self) except -1:
  *         if self._exc_info is None:
  *             return 0             # <<<<<<<<<<<<<<
@@ -14558,7 +14640,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":326
+    /* "lxml/etree.pyx":327
  * 
  *     cdef int _raise_if_stored(self) except -1:
  *         if self._exc_info is None:             # <<<<<<<<<<<<<<
@@ -14567,7 +14649,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
  */
   }
 
-  /* "lxml/etree.pyx":328
+  /* "lxml/etree.pyx":329
  *         if self._exc_info is None:
  *             return 0
  *         type, value, traceback = self._exc_info             # <<<<<<<<<<<<<<
@@ -14582,7 +14664,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 328, __pyx_L1_error)
+      __PYX_ERR(0, 329, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -14598,17 +14680,17 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
     __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(0, 328, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 329, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 328, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 329, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 328, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 329, __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(0, 328, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 329, __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;
@@ -14618,7 +14700,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
     __Pyx_GOTREF(__pyx_t_5);
     index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(0, 328, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(0, 329, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L5_unpacking_done;
@@ -14626,7 +14708,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(0, 328, __pyx_L1_error)
+    __PYX_ERR(0, 329, __pyx_L1_error)
     __pyx_L5_unpacking_done:;
   }
   __pyx_v_type = __pyx_t_4;
@@ -14636,7 +14718,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
   __pyx_v_traceback = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "lxml/etree.pyx":329
+  /* "lxml/etree.pyx":330
  *             return 0
  *         type, value, traceback = self._exc_info
  *         self._exc_info = None             # <<<<<<<<<<<<<<
@@ -14649,7 +14731,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
   __Pyx_DECREF(__pyx_v_self->_exc_info);
   __pyx_v_self->_exc_info = Py_None;
 
-  /* "lxml/etree.pyx":330
+  /* "lxml/etree.pyx":331
  *         type, value, traceback = self._exc_info
  *         self._exc_info = None
  *         if value is None and traceback is None:             # <<<<<<<<<<<<<<
@@ -14669,7 +14751,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
   __pyx_L7_bool_binop_done:;
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":331
+    /* "lxml/etree.pyx":332
  *         self._exc_info = None
  *         if value is None and traceback is None:
  *             raise type             # <<<<<<<<<<<<<<
@@ -14677,9 +14759,9 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
  *             raise type, value, traceback
  */
     __Pyx_Raise(__pyx_v_type, 0, 0, 0);
-    __PYX_ERR(0, 331, __pyx_L1_error)
+    __PYX_ERR(0, 332, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":330
+    /* "lxml/etree.pyx":331
  *         type, value, traceback = self._exc_info
  *         self._exc_info = None
  *         if value is None and traceback is None:             # <<<<<<<<<<<<<<
@@ -14688,7 +14770,7 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
  */
   }
 
-  /* "lxml/etree.pyx":333
+  /* "lxml/etree.pyx":334
  *             raise type
  *         else:
  *             raise type, value, traceback             # <<<<<<<<<<<<<<
@@ -14697,10 +14779,10 @@ static int __pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored(struct __py
  */
   /*else*/ {
     __Pyx_Raise(__pyx_v_type, __pyx_v_value, __pyx_v_traceback, 0);
-    __PYX_ERR(0, 333, __pyx_L1_error)
+    __PYX_ERR(0, 334, __pyx_L1_error)
   }
 
-  /* "lxml/etree.pyx":325
+  /* "lxml/etree.pyx":326
  *         return self._exc_info is not None
  * 
  *     cdef int _raise_if_stored(self) except -1:             # <<<<<<<<<<<<<<
@@ -14898,7 +14980,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__registerProxy(struct LxmlElement
  *     proxy._c_node = c_node
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((!(__pyx_f_4lxml_5etree_hasProxy(__pyx_v_c_node) != 0)) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_double_registering_proxy);
       __PYX_ERR(5, 34, __pyx_L1_error)
@@ -15000,7 +15082,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__unregisterProxy(struct LxmlElemen
  *     return 0
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_c_node->_private == ((void *)__pyx_v_proxy)) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Tried_to_unregister_unknown_prox);
       __PYX_ERR(5, 47, __pyx_L1_error)
@@ -19696,7 +19778,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__assertValidNode(struct LxmlElemen
  * cdef inline int _assertValidDoc(_Document doc) except -1:
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_element->_c_node != NULL) != 0))) {
       __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_element)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 19, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
@@ -19757,7 +19839,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__assertValidDoc(struct LxmlDocumen
  * cdef _Document _documentOrRaise(object input):
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_doc->_c_doc != NULL) != 0))) {
       __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_doc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 22, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
@@ -28415,7 +28497,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
  *         c_ns = element._doc._findOrBuildNodeNs(
  */
     __Pyx_XDECREF(__pyx_r);
-    if (!(likely(PyBytes_CheckExact(__pyx_v_tag))||((__pyx_v_tag) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_tag)->tp_name), 0))) __PYX_ERR(1, 769, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_tag))||((__pyx_v_tag) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_tag)->tp_name), 0))) __PYX_ERR(1, 769, __pyx_L1_error)
     __Pyx_INCREF(__pyx_v_tag);
     __pyx_r = ((PyObject*)__pyx_v_tag);
     goto __pyx_L0;
@@ -30752,8 +30834,8 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
       __PYX_ERR(1, 1035, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
-    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 1035, __pyx_L1_error)
-    if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(1, 1035, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 1035, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(1, 1035, __pyx_L1_error)
     __Pyx_XDECREF_SET(__pyx_v_ns, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
     __Pyx_XDECREF_SET(__pyx_v_tag, ((PyObject*)__pyx_t_5));
@@ -32271,7 +32353,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         next_element = _nextElement
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_step > 0) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
       __PYX_ERR(1, 1194, __pyx_L1_error)
@@ -32550,7 +32632,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         else:
  */
         #ifndef CYTHON_WITHOUT_ASSERTIONS
-        if (unlikely(!Py_OptimizeFlag)) {
+        if (unlikely(__pyx_assertions_enabled())) {
           __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
           if (unlikely(!(__pyx_t_2 != 0))) {
             PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None);
@@ -32647,7 +32729,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         return 0
  */
         #ifndef CYTHON_WITHOUT_ASSERTIONS
-        if (unlikely(!Py_OptimizeFlag)) {
+        if (unlikely(__pyx_assertions_enabled())) {
           __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
           if (unlikely(!(__pyx_t_2 != 0))) {
             PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None);
@@ -32997,7 +33079,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *             c_node = element._c_node
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
+      if (unlikely(__pyx_assertions_enabled())) {
         __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
         if (unlikely(!(__pyx_t_2 != 0))) {
           PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None);
@@ -33242,7 +33324,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *             # move element and tail over
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
+      if (unlikely(__pyx_assertions_enabled())) {
         __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
         if (unlikely(!(__pyx_t_2 != 0))) {
           PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None);
@@ -33526,7 +33608,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *             _appendChild(parent, element)
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
+      if (unlikely(__pyx_assertions_enabled())) {
         __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
         if (unlikely(!(__pyx_t_2 != 0))) {
           PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None);
@@ -33570,7 +33652,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"
  */
-    goto __pyx_L43;
+    goto __pyx_L44;
   }
 
   /* "src/lxml/apihelpers.pxi":1311
@@ -33632,7 +33714,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *             _prependChild(parent, element)
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
+      if (unlikely(__pyx_assertions_enabled())) {
         __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
         if (unlikely(!(__pyx_t_2 != 0))) {
           PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None);
@@ -33669,7 +33751,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
-  __pyx_L43:;
+  __pyx_L44:;
 
   /* "src/lxml/apihelpers.pxi":1316
  *             _prependChild(parent, element)
@@ -33728,7 +33810,7 @@ static int __pyx_f_4lxml_5etree__linkChild(xmlNode *__pyx_v_c_parent, xmlNode *_
  *     if c_parent.children is NULL:
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!(_isElement(__pyx_v_c_node) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
       __PYX_ERR(1, 1322, __pyx_L1_error)
@@ -40336,7 +40418,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_LogEntry__setGeneric(struct __pyx_obj_4l
  *         self._filename = filename
  *         self._c_path = NULL
  */
-  if (!(likely(__Pyx_PyBaseString_CheckExact(__pyx_v_message))||((__pyx_v_message) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", (PY_MAJOR_VERSION < 3 ? "basestring" : "str"), Py_TYPE(__pyx_v_message)->tp_name), 0))) __PYX_ERR(6, 106, __pyx_L1_error)
+  if (!(likely(__Pyx_PyBaseString_CheckExact(__pyx_v_message))||((__pyx_v_message) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", (PY_MAJOR_VERSION < 3 ? "basestring" : "str"), Py_TYPE(__pyx_v_message)->tp_name), 0))) __PYX_ERR(6, 106, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_message;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -40352,7 +40434,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_LogEntry__setGeneric(struct __pyx_obj_4l
  *         self._c_path = NULL
  * 
  */
-  if (!(likely(__Pyx_PyBaseString_CheckExact(__pyx_v_filename))||((__pyx_v_filename) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", (PY_MAJOR_VERSION < 3 ? "basestring" : "str"), Py_TYPE(__pyx_v_filename)->tp_name), 0))) __PYX_ERR(6, 107, __pyx_L1_error)
+  if (!(likely(__Pyx_PyBaseString_CheckExact(__pyx_v_filename))||((__pyx_v_filename) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", (PY_MAJOR_VERSION < 3 ? "basestring" : "str"), Py_TYPE(__pyx_v_filename)->tp_name), 0))) __PYX_ERR(6, 107, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_filename;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -41187,7 +41269,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_LogEntry_7message___get__(struct __pyx_
  */
       __pyx_t_6 = __Pyx_decode_c_string(__pyx_v_self->_c_message, 0, __pyx_v_size, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 152, __pyx_L8_error)
       __Pyx_GOTREF(__pyx_t_6);
-      if (!(likely(__Pyx_PyBaseString_CheckExact(__pyx_t_6))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", (PY_MAJOR_VERSION < 3 ? "basestring" : "str"), Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(6, 152, __pyx_L8_error)
+      if (!(likely(__Pyx_PyBaseString_CheckExact(__pyx_t_6))||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", (PY_MAJOR_VERSION < 3 ? "basestring" : "str"), Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(6, 152, __pyx_L8_error)
       __Pyx_GIVEREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_v_self->_message);
       __Pyx_DECREF(__pyx_v_self->_message);
@@ -41249,7 +41331,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_LogEntry_7message___get__(struct __pyx_
  */
           __pyx_t_13 = __Pyx_decode_c_string(__pyx_v_self->_c_message, 0, __pyx_v_size, NULL, ((char const *)"backslashreplace"), PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 155, __pyx_L16_error)
           __Pyx_GOTREF(__pyx_t_13);
-          if (!(likely(__Pyx_PyBaseString_CheckExact(__pyx_t_13))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", (PY_MAJOR_VERSION < 3 ? "basestring" : "str"), Py_TYPE(__pyx_t_13)->tp_name), 0))) __PYX_ERR(6, 155, __pyx_L16_error)
+          if (!(likely(__Pyx_PyBaseString_CheckExact(__pyx_t_13))||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", (PY_MAJOR_VERSION < 3 ? "basestring" : "str"), Py_TYPE(__pyx_t_13)->tp_name), 0))) __PYX_ERR(6, 155, __pyx_L16_error)
           __Pyx_GIVEREF(__pyx_t_13);
           __Pyx_GOTREF(__pyx_v_self->_message);
           __Pyx_DECREF(__pyx_v_self->_message);
@@ -41488,7 +41570,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_LogEntry_8filename___get__(struct __pyx
  */
       __pyx_t_3 = __pyx_f_4lxml_5etree__decodeFilename(__pyx_v_self->_c_filename); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 171, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      if (!(likely(__Pyx_PyBaseString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", (PY_MAJOR_VERSION < 3 ? "basestring" : "str"), Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(6, 171, __pyx_L1_error)
+      if (!(likely(__Pyx_PyBaseString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", (PY_MAJOR_VERSION < 3 ? "basestring" : "str"), Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(6, 171, __pyx_L1_error)
       __Pyx_GIVEREF(__pyx_t_3);
       __Pyx_GOTREF(__pyx_v_self->_filename);
       __Pyx_DECREF(__pyx_v_self->_filename);
@@ -43797,7 +43879,7 @@ static int __pyx_pf_4lxml_5etree_13_ListErrorLog___init__(struct __pyx_obj_4lxml
  * 
  *     cpdef copy(self):
  */
-  if (!(likely(PyList_CheckExact(__pyx_v_entries))||((__pyx_v_entries) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_entries)->tp_name), 0))) __PYX_ERR(6, 285, __pyx_L1_error)
+  if (!(likely(PyList_CheckExact(__pyx_v_entries))||((__pyx_v_entries) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_entries)->tp_name), 0))) __PYX_ERR(6, 285, __pyx_L1_error)
   __pyx_t_3 = __pyx_v_entries;
   __Pyx_INCREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
@@ -51040,7 +51122,7 @@ static PyObject *__pyx_f_4lxml_5etree___initErrorConstants(void) {
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":364
+/* "lxml/etree.pyx":365
  *     cdef _BaseParser _parser
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -51063,7 +51145,7 @@ static void __pyx_pf_4lxml_5etree_9_Document___dealloc__(struct LxmlDocument *__
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "lxml/etree.pyx":368
+  /* "lxml/etree.pyx":369
  *         # to clean the whole thing up, as all nodes have a reference to
  *         # the document
  *         tree.xmlFreeDoc(self._c_doc)             # <<<<<<<<<<<<<<
@@ -51072,7 +51154,7 @@ static void __pyx_pf_4lxml_5etree_9_Document___dealloc__(struct LxmlDocument *__
  */
   xmlFreeDoc(__pyx_v_self->_c_doc);
 
-  /* "lxml/etree.pyx":364
+  /* "lxml/etree.pyx":365
  *     cdef _BaseParser _parser
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -51084,7 +51166,7 @@ static void __pyx_pf_4lxml_5etree_9_Document___dealloc__(struct LxmlDocument *__
   __Pyx_RefNannyFinishContext();
 }
 
-/* "lxml/etree.pyx":371
+/* "lxml/etree.pyx":372
  * 
  *     @cython.final
  *     cdef getroot(self):             # <<<<<<<<<<<<<<
@@ -51103,7 +51185,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getroot(struct LxmlDocument *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getroot", 0);
 
-  /* "lxml/etree.pyx":374
+  /* "lxml/etree.pyx":375
  *         # return an element proxy for the document root
  *         cdef xmlNode* c_node
  *         c_node = tree.xmlDocGetRootElement(self._c_doc)             # <<<<<<<<<<<<<<
@@ -51112,7 +51194,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getroot(struct LxmlDocument *__
  */
   __pyx_v_c_node = xmlDocGetRootElement(__pyx_v_self->_c_doc);
 
-  /* "lxml/etree.pyx":375
+  /* "lxml/etree.pyx":376
  *         cdef xmlNode* c_node
  *         c_node = tree.xmlDocGetRootElement(self._c_doc)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -51122,7 +51204,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getroot(struct LxmlDocument *__
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":376
+    /* "lxml/etree.pyx":377
  *         c_node = tree.xmlDocGetRootElement(self._c_doc)
  *         if c_node is NULL:
  *             return None             # <<<<<<<<<<<<<<
@@ -51133,7 +51215,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getroot(struct LxmlDocument *__
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":375
+    /* "lxml/etree.pyx":376
  *         cdef xmlNode* c_node
  *         c_node = tree.xmlDocGetRootElement(self._c_doc)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -51142,7 +51224,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getroot(struct LxmlDocument *__
  */
   }
 
-  /* "lxml/etree.pyx":377
+  /* "lxml/etree.pyx":378
  *         if c_node is NULL:
  *             return None
  *         return _elementFactory(self, c_node)             # <<<<<<<<<<<<<<
@@ -51150,13 +51232,13 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getroot(struct LxmlDocument *__
  *     @cython.final
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_self, __pyx_v_c_node)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_self, __pyx_v_c_node)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 378, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":371
+  /* "lxml/etree.pyx":372
  * 
  *     @cython.final
  *     cdef getroot(self):             # <<<<<<<<<<<<<<
@@ -51175,7 +51257,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getroot(struct LxmlDocument *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":380
+/* "lxml/etree.pyx":381
  * 
  *     @cython.final
  *     cdef bint hasdoctype(self):             # <<<<<<<<<<<<<<
@@ -51190,7 +51272,7 @@ static int __pyx_f_4lxml_5etree_9_Document_hasdoctype(struct LxmlDocument *__pyx
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("hasdoctype", 0);
 
-  /* "lxml/etree.pyx":382
+  /* "lxml/etree.pyx":383
  *     cdef bint hasdoctype(self):
  *         # DOCTYPE gets parsed into internal subset (xmlDTD*)
  *         return self._c_doc is not NULL and self._c_doc.intSubset is not NULL             # <<<<<<<<<<<<<<
@@ -51209,7 +51291,7 @@ static int __pyx_f_4lxml_5etree_9_Document_hasdoctype(struct LxmlDocument *__pyx
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":380
+  /* "lxml/etree.pyx":381
  * 
  *     @cython.final
  *     cdef bint hasdoctype(self):             # <<<<<<<<<<<<<<
@@ -51223,7 +51305,7 @@ static int __pyx_f_4lxml_5etree_9_Document_hasdoctype(struct LxmlDocument *__pyx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":385
+/* "lxml/etree.pyx":386
  * 
  *     @cython.final
  *     cdef getdoctype(self):             # <<<<<<<<<<<<<<
@@ -51249,7 +51331,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getdoctype", 0);
 
-  /* "lxml/etree.pyx":389
+  /* "lxml/etree.pyx":390
  *         cdef tree.xmlDtd* c_dtd
  *         cdef xmlNode* c_root_node
  *         public_id = None             # <<<<<<<<<<<<<<
@@ -51259,7 +51341,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
   __Pyx_INCREF(Py_None);
   __pyx_v_public_id = Py_None;
 
-  /* "lxml/etree.pyx":390
+  /* "lxml/etree.pyx":391
  *         cdef xmlNode* c_root_node
  *         public_id = None
  *         sys_url   = None             # <<<<<<<<<<<<<<
@@ -51269,7 +51351,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
   __Pyx_INCREF(Py_None);
   __pyx_v_sys_url = Py_None;
 
-  /* "lxml/etree.pyx":391
+  /* "lxml/etree.pyx":392
  *         public_id = None
  *         sys_url   = None
  *         c_dtd = self._c_doc.intSubset             # <<<<<<<<<<<<<<
@@ -51279,7 +51361,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
   __pyx_t_1 = __pyx_v_self->_c_doc->intSubset;
   __pyx_v_c_dtd = __pyx_t_1;
 
-  /* "lxml/etree.pyx":392
+  /* "lxml/etree.pyx":393
  *         sys_url   = None
  *         c_dtd = self._c_doc.intSubset
  *         if c_dtd is not NULL:             # <<<<<<<<<<<<<<
@@ -51289,7 +51371,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
   __pyx_t_2 = ((__pyx_v_c_dtd != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":393
+    /* "lxml/etree.pyx":394
  *         c_dtd = self._c_doc.intSubset
  *         if c_dtd is not NULL:
  *             if c_dtd.ExternalID is not NULL:             # <<<<<<<<<<<<<<
@@ -51299,19 +51381,19 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
     __pyx_t_2 = ((__pyx_v_c_dtd->ExternalID != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":394
+      /* "lxml/etree.pyx":395
  *         if c_dtd is not NULL:
  *             if c_dtd.ExternalID is not NULL:
  *                 public_id = funicode(c_dtd.ExternalID)             # <<<<<<<<<<<<<<
  *             if c_dtd.SystemID is not NULL:
  *                 sys_url = funicode(c_dtd.SystemID)
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_dtd->ExternalID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 394, __pyx_L1_error)
+      __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_dtd->ExternalID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 395, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_public_id, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/etree.pyx":393
+      /* "lxml/etree.pyx":394
  *         c_dtd = self._c_doc.intSubset
  *         if c_dtd is not NULL:
  *             if c_dtd.ExternalID is not NULL:             # <<<<<<<<<<<<<<
@@ -51320,7 +51402,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
  */
     }
 
-    /* "lxml/etree.pyx":395
+    /* "lxml/etree.pyx":396
  *             if c_dtd.ExternalID is not NULL:
  *                 public_id = funicode(c_dtd.ExternalID)
  *             if c_dtd.SystemID is not NULL:             # <<<<<<<<<<<<<<
@@ -51330,19 +51412,19 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
     __pyx_t_2 = ((__pyx_v_c_dtd->SystemID != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":396
+      /* "lxml/etree.pyx":397
  *                 public_id = funicode(c_dtd.ExternalID)
  *             if c_dtd.SystemID is not NULL:
  *                 sys_url = funicode(c_dtd.SystemID)             # <<<<<<<<<<<<<<
  *         c_dtd = self._c_doc.extSubset
  *         if c_dtd is not NULL:
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_dtd->SystemID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error)
+      __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_dtd->SystemID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 397, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_sys_url, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/etree.pyx":395
+      /* "lxml/etree.pyx":396
  *             if c_dtd.ExternalID is not NULL:
  *                 public_id = funicode(c_dtd.ExternalID)
  *             if c_dtd.SystemID is not NULL:             # <<<<<<<<<<<<<<
@@ -51351,7 +51433,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
  */
     }
 
-    /* "lxml/etree.pyx":392
+    /* "lxml/etree.pyx":393
  *         sys_url   = None
  *         c_dtd = self._c_doc.intSubset
  *         if c_dtd is not NULL:             # <<<<<<<<<<<<<<
@@ -51360,7 +51442,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
  */
   }
 
-  /* "lxml/etree.pyx":397
+  /* "lxml/etree.pyx":398
  *             if c_dtd.SystemID is not NULL:
  *                 sys_url = funicode(c_dtd.SystemID)
  *         c_dtd = self._c_doc.extSubset             # <<<<<<<<<<<<<<
@@ -51370,7 +51452,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
   __pyx_t_1 = __pyx_v_self->_c_doc->extSubset;
   __pyx_v_c_dtd = __pyx_t_1;
 
-  /* "lxml/etree.pyx":398
+  /* "lxml/etree.pyx":399
  *                 sys_url = funicode(c_dtd.SystemID)
  *         c_dtd = self._c_doc.extSubset
  *         if c_dtd is not NULL:             # <<<<<<<<<<<<<<
@@ -51380,14 +51462,14 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
   __pyx_t_2 = ((__pyx_v_c_dtd != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":399
+    /* "lxml/etree.pyx":400
  *         c_dtd = self._c_doc.extSubset
  *         if c_dtd is not NULL:
  *             if not public_id and c_dtd.ExternalID is not NULL:             # <<<<<<<<<<<<<<
  *                 public_id = funicode(c_dtd.ExternalID)
  *             if not sys_url and c_dtd.SystemID is not NULL:
  */
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_public_id); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 399, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_public_id); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 400, __pyx_L1_error)
     __pyx_t_5 = ((!__pyx_t_4) != 0);
     if (__pyx_t_5) {
     } else {
@@ -51399,19 +51481,19 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
     __pyx_L8_bool_binop_done:;
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":400
+      /* "lxml/etree.pyx":401
  *         if c_dtd is not NULL:
  *             if not public_id and c_dtd.ExternalID is not NULL:
  *                 public_id = funicode(c_dtd.ExternalID)             # <<<<<<<<<<<<<<
  *             if not sys_url and c_dtd.SystemID is not NULL:
  *                 sys_url = funicode(c_dtd.SystemID)
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_dtd->ExternalID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 400, __pyx_L1_error)
+      __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_dtd->ExternalID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 401, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_public_id, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/etree.pyx":399
+      /* "lxml/etree.pyx":400
  *         c_dtd = self._c_doc.extSubset
  *         if c_dtd is not NULL:
  *             if not public_id and c_dtd.ExternalID is not NULL:             # <<<<<<<<<<<<<<
@@ -51420,14 +51502,14 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
  */
     }
 
-    /* "lxml/etree.pyx":401
+    /* "lxml/etree.pyx":402
  *             if not public_id and c_dtd.ExternalID is not NULL:
  *                 public_id = funicode(c_dtd.ExternalID)
  *             if not sys_url and c_dtd.SystemID is not NULL:             # <<<<<<<<<<<<<<
  *                 sys_url = funicode(c_dtd.SystemID)
  *         c_root_node = tree.xmlDocGetRootElement(self._c_doc)
  */
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_sys_url); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 401, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_sys_url); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 402, __pyx_L1_error)
     __pyx_t_4 = ((!__pyx_t_5) != 0);
     if (__pyx_t_4) {
     } else {
@@ -51439,19 +51521,19 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
     __pyx_L11_bool_binop_done:;
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":402
+      /* "lxml/etree.pyx":403
  *                 public_id = funicode(c_dtd.ExternalID)
  *             if not sys_url and c_dtd.SystemID is not NULL:
  *                 sys_url = funicode(c_dtd.SystemID)             # <<<<<<<<<<<<<<
  *         c_root_node = tree.xmlDocGetRootElement(self._c_doc)
  *         if c_root_node is NULL:
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_dtd->SystemID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 402, __pyx_L1_error)
+      __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_dtd->SystemID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 403, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_sys_url, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/etree.pyx":401
+      /* "lxml/etree.pyx":402
  *             if not public_id and c_dtd.ExternalID is not NULL:
  *                 public_id = funicode(c_dtd.ExternalID)
  *             if not sys_url and c_dtd.SystemID is not NULL:             # <<<<<<<<<<<<<<
@@ -51460,7 +51542,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
  */
     }
 
-    /* "lxml/etree.pyx":398
+    /* "lxml/etree.pyx":399
  *                 sys_url = funicode(c_dtd.SystemID)
  *         c_dtd = self._c_doc.extSubset
  *         if c_dtd is not NULL:             # <<<<<<<<<<<<<<
@@ -51469,7 +51551,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
  */
   }
 
-  /* "lxml/etree.pyx":403
+  /* "lxml/etree.pyx":404
  *             if not sys_url and c_dtd.SystemID is not NULL:
  *                 sys_url = funicode(c_dtd.SystemID)
  *         c_root_node = tree.xmlDocGetRootElement(self._c_doc)             # <<<<<<<<<<<<<<
@@ -51478,7 +51560,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
  */
   __pyx_v_c_root_node = xmlDocGetRootElement(__pyx_v_self->_c_doc);
 
-  /* "lxml/etree.pyx":404
+  /* "lxml/etree.pyx":405
  *                 sys_url = funicode(c_dtd.SystemID)
  *         c_root_node = tree.xmlDocGetRootElement(self._c_doc)
  *         if c_root_node is NULL:             # <<<<<<<<<<<<<<
@@ -51488,7 +51570,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
   __pyx_t_2 = ((__pyx_v_c_root_node == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":405
+    /* "lxml/etree.pyx":406
  *         c_root_node = tree.xmlDocGetRootElement(self._c_doc)
  *         if c_root_node is NULL:
  *             root_name = None             # <<<<<<<<<<<<<<
@@ -51498,7 +51580,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
     __Pyx_INCREF(Py_None);
     __pyx_v_root_name = Py_None;
 
-    /* "lxml/etree.pyx":404
+    /* "lxml/etree.pyx":405
  *                 sys_url = funicode(c_dtd.SystemID)
  *         c_root_node = tree.xmlDocGetRootElement(self._c_doc)
  *         if c_root_node is NULL:             # <<<<<<<<<<<<<<
@@ -51508,7 +51590,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
     goto __pyx_L13;
   }
 
-  /* "lxml/etree.pyx":407
+  /* "lxml/etree.pyx":408
  *             root_name = None
  *         else:
  *             root_name = funicode(c_root_node.name)             # <<<<<<<<<<<<<<
@@ -51516,14 +51598,14 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
  * 
  */
   /*else*/ {
-    __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_root_node->name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 407, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_root_node->name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 408, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_root_name = __pyx_t_3;
     __pyx_t_3 = 0;
   }
   __pyx_L13:;
 
-  /* "lxml/etree.pyx":408
+  /* "lxml/etree.pyx":409
  *         else:
  *             root_name = funicode(c_root_node.name)
  *         return root_name, public_id, sys_url             # <<<<<<<<<<<<<<
@@ -51531,7 +51613,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
  *     @cython.final
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 408, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 409, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_root_name);
   __Pyx_GIVEREF(__pyx_v_root_name);
@@ -51546,7 +51628,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":385
+  /* "lxml/etree.pyx":386
  * 
  *     @cython.final
  *     cdef getdoctype(self):             # <<<<<<<<<<<<<<
@@ -51568,7 +51650,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":411
+/* "lxml/etree.pyx":412
  * 
  *     @cython.final
  *     cdef getxmlinfo(self):             # <<<<<<<<<<<<<<
@@ -51590,7 +51672,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getxmlinfo", 0);
 
-  /* "lxml/etree.pyx":413
+  /* "lxml/etree.pyx":414
  *     cdef getxmlinfo(self):
  *         # return XML version and encoding (or None if not known)
  *         cdef xmlDoc* c_doc = self._c_doc             # <<<<<<<<<<<<<<
@@ -51600,7 +51682,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
   __pyx_t_1 = __pyx_v_self->_c_doc;
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "lxml/etree.pyx":414
+  /* "lxml/etree.pyx":415
  *         # return XML version and encoding (or None if not known)
  *         cdef xmlDoc* c_doc = self._c_doc
  *         if c_doc.version is NULL:             # <<<<<<<<<<<<<<
@@ -51610,7 +51692,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
   __pyx_t_2 = ((__pyx_v_c_doc->version == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":415
+    /* "lxml/etree.pyx":416
  *         cdef xmlDoc* c_doc = self._c_doc
  *         if c_doc.version is NULL:
  *             version = None             # <<<<<<<<<<<<<<
@@ -51620,7 +51702,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
     __Pyx_INCREF(Py_None);
     __pyx_v_version = Py_None;
 
-    /* "lxml/etree.pyx":414
+    /* "lxml/etree.pyx":415
  *         # return XML version and encoding (or None if not known)
  *         cdef xmlDoc* c_doc = self._c_doc
  *         if c_doc.version is NULL:             # <<<<<<<<<<<<<<
@@ -51630,7 +51712,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":417
+  /* "lxml/etree.pyx":418
  *             version = None
  *         else:
  *             version = funicode(c_doc.version)             # <<<<<<<<<<<<<<
@@ -51638,14 +51720,14 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
  *             encoding = None
  */
   /*else*/ {
-    __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_doc->version); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 417, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_doc->version); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 418, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_version = __pyx_t_3;
     __pyx_t_3 = 0;
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":418
+  /* "lxml/etree.pyx":419
  *         else:
  *             version = funicode(c_doc.version)
  *         if c_doc.encoding is NULL:             # <<<<<<<<<<<<<<
@@ -51655,7 +51737,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
   __pyx_t_2 = ((__pyx_v_c_doc->encoding == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":419
+    /* "lxml/etree.pyx":420
  *             version = funicode(c_doc.version)
  *         if c_doc.encoding is NULL:
  *             encoding = None             # <<<<<<<<<<<<<<
@@ -51665,7 +51747,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
     __Pyx_INCREF(Py_None);
     __pyx_v_encoding = Py_None;
 
-    /* "lxml/etree.pyx":418
+    /* "lxml/etree.pyx":419
  *         else:
  *             version = funicode(c_doc.version)
  *         if c_doc.encoding is NULL:             # <<<<<<<<<<<<<<
@@ -51675,7 +51757,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
     goto __pyx_L4;
   }
 
-  /* "lxml/etree.pyx":421
+  /* "lxml/etree.pyx":422
  *             encoding = None
  *         else:
  *             encoding = funicode(c_doc.encoding)             # <<<<<<<<<<<<<<
@@ -51683,14 +51765,14 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
  * 
  */
   /*else*/ {
-    __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_doc->encoding); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 421, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_doc->encoding); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_encoding = __pyx_t_3;
     __pyx_t_3 = 0;
   }
   __pyx_L4:;
 
-  /* "lxml/etree.pyx":422
+  /* "lxml/etree.pyx":423
  *         else:
  *             encoding = funicode(c_doc.encoding)
  *         return version, encoding             # <<<<<<<<<<<<<<
@@ -51698,7 +51780,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
  *     @cython.final
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 423, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_version);
   __Pyx_GIVEREF(__pyx_v_version);
@@ -51710,7 +51792,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":411
+  /* "lxml/etree.pyx":412
  * 
  *     @cython.final
  *     cdef getxmlinfo(self):             # <<<<<<<<<<<<<<
@@ -51731,7 +51813,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":425
+/* "lxml/etree.pyx":426
  * 
  *     @cython.final
  *     cdef isstandalone(self):             # <<<<<<<<<<<<<<
@@ -51749,7 +51831,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_isstandalone(struct LxmlDocumen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("isstandalone", 0);
 
-  /* "lxml/etree.pyx":428
+  /* "lxml/etree.pyx":429
  *         # returns True for "standalone=true",
  *         # False for "standalone=false", None if not provided
  *         if self._c_doc.standalone == -1:             # <<<<<<<<<<<<<<
@@ -51759,7 +51841,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_isstandalone(struct LxmlDocumen
   __pyx_t_1 = ((__pyx_v_self->_c_doc->standalone == -1L) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":429
+    /* "lxml/etree.pyx":430
  *         # False for "standalone=false", None if not provided
  *         if self._c_doc.standalone == -1:
  *             return None             # <<<<<<<<<<<<<<
@@ -51770,7 +51852,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_isstandalone(struct LxmlDocumen
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":428
+    /* "lxml/etree.pyx":429
  *         # returns True for "standalone=true",
  *         # False for "standalone=false", None if not provided
  *         if self._c_doc.standalone == -1:             # <<<<<<<<<<<<<<
@@ -51779,7 +51861,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_isstandalone(struct LxmlDocumen
  */
   }
 
-  /* "lxml/etree.pyx":431
+  /* "lxml/etree.pyx":432
  *             return None
  *         else:
  *             return <bint>(self._c_doc.standalone == 1)             # <<<<<<<<<<<<<<
@@ -51788,14 +51870,14 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_isstandalone(struct LxmlDocumen
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = __Pyx_PyBool_FromLong(((__pyx_v_self->_c_doc->standalone == 1) != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 431, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyBool_FromLong(((__pyx_v_self->_c_doc->standalone == 1) != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 432, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
   }
 
-  /* "lxml/etree.pyx":425
+  /* "lxml/etree.pyx":426
  * 
  *     @cython.final
  *     cdef isstandalone(self):             # <<<<<<<<<<<<<<
@@ -51814,7 +51896,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_isstandalone(struct LxmlDocumen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":434
+/* "lxml/etree.pyx":435
  * 
  *     @cython.final
  *     cdef bytes buildNewPrefix(self):             # <<<<<<<<<<<<<<
@@ -51835,7 +51917,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("buildNewPrefix", 0);
 
-  /* "lxml/etree.pyx":437
+  /* "lxml/etree.pyx":438
  *         # get a new unique prefix ("nsX") for this document
  *         cdef bytes ns
  *         if self._ns_counter < len(_PREFIX_CACHE):             # <<<<<<<<<<<<<<
@@ -51846,14 +51928,14 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
   __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, 437, __pyx_L1_error)
+    __PYX_ERR(0, 438, __pyx_L1_error)
   }
-  __pyx_t_2 = PyTuple_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 437, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 438, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = ((__pyx_v_self->_ns_counter < __pyx_t_2) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":438
+    /* "lxml/etree.pyx":439
  *         cdef bytes ns
  *         if self._ns_counter < len(_PREFIX_CACHE):
  *             ns = _PREFIX_CACHE[self._ns_counter]             # <<<<<<<<<<<<<<
@@ -51862,15 +51944,15 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
  */
     if (unlikely(__pyx_v_4lxml_5etree__PREFIX_CACHE == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 438, __pyx_L1_error)
+      __PYX_ERR(0, 439, __pyx_L1_error)
     }
-    __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_4lxml_5etree__PREFIX_CACHE, __pyx_v_self->_ns_counter, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 438, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_4lxml_5etree__PREFIX_CACHE, __pyx_v_self->_ns_counter, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 438, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 439, __pyx_L1_error)
     __pyx_v_ns = ((PyObject*)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/etree.pyx":437
+    /* "lxml/etree.pyx":438
  *         # get a new unique prefix ("nsX") for this document
  *         cdef bytes ns
  *         if self._ns_counter < len(_PREFIX_CACHE):             # <<<<<<<<<<<<<<
@@ -51880,7 +51962,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":440
+  /* "lxml/etree.pyx":441
  *             ns = _PREFIX_CACHE[self._ns_counter]
  *         else:
  *             ns = python.PyBytes_FromFormat("ns%d", self._ns_counter)             # <<<<<<<<<<<<<<
@@ -51888,14 +51970,14 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
  *             ns += self._prefix_tail
  */
   /*else*/ {
-    __pyx_t_1 = PyBytes_FromFormat(((char *)"ns%d"), __pyx_v_self->_ns_counter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L1_error)
+    __pyx_t_1 = PyBytes_FromFormat(((char *)"ns%d"), __pyx_v_self->_ns_counter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_v_ns = ((PyObject*)__pyx_t_1);
     __pyx_t_1 = 0;
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":441
+  /* "lxml/etree.pyx":442
  *         else:
  *             ns = python.PyBytes_FromFormat("ns%d", self._ns_counter)
  *         if self._prefix_tail is not None:             # <<<<<<<<<<<<<<
@@ -51906,19 +51988,19 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":442
+    /* "lxml/etree.pyx":443
  *             ns = python.PyBytes_FromFormat("ns%d", self._ns_counter)
  *         if self._prefix_tail is not None:
  *             ns += self._prefix_tail             # <<<<<<<<<<<<<<
  *         self._ns_counter += 1
  *         if self._ns_counter < 0:
  */
-    __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_ns, __pyx_v_self->_prefix_tail); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 442, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_ns, __pyx_v_self->_prefix_tail); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 443, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_ns, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "lxml/etree.pyx":441
+    /* "lxml/etree.pyx":442
  *         else:
  *             ns = python.PyBytes_FromFormat("ns%d", self._ns_counter)
  *         if self._prefix_tail is not None:             # <<<<<<<<<<<<<<
@@ -51927,7 +52009,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
  */
   }
 
-  /* "lxml/etree.pyx":443
+  /* "lxml/etree.pyx":444
  *         if self._prefix_tail is not None:
  *             ns += self._prefix_tail
  *         self._ns_counter += 1             # <<<<<<<<<<<<<<
@@ -51936,7 +52018,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
  */
   __pyx_v_self->_ns_counter = (__pyx_v_self->_ns_counter + 1);
 
-  /* "lxml/etree.pyx":444
+  /* "lxml/etree.pyx":445
  *             ns += self._prefix_tail
  *         self._ns_counter += 1
  *         if self._ns_counter < 0:             # <<<<<<<<<<<<<<
@@ -51946,7 +52028,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
   __pyx_t_4 = ((__pyx_v_self->_ns_counter < 0) != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":446
+    /* "lxml/etree.pyx":447
  *         if self._ns_counter < 0:
  *             # overflow!
  *             self._ns_counter = 0             # <<<<<<<<<<<<<<
@@ -51955,7 +52037,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
  */
     __pyx_v_self->_ns_counter = 0;
 
-    /* "lxml/etree.pyx":447
+    /* "lxml/etree.pyx":448
  *             # overflow!
  *             self._ns_counter = 0
  *             if self._prefix_tail is None:             # <<<<<<<<<<<<<<
@@ -51966,7 +52048,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/etree.pyx":448
+      /* "lxml/etree.pyx":449
  *             self._ns_counter = 0
  *             if self._prefix_tail is None:
  *                 self._prefix_tail = b"A"             # <<<<<<<<<<<<<<
@@ -51979,7 +52061,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
       __Pyx_DECREF(__pyx_v_self->_prefix_tail);
       __pyx_v_self->_prefix_tail = __pyx_n_b_A;
 
-      /* "lxml/etree.pyx":447
+      /* "lxml/etree.pyx":448
  *             # overflow!
  *             self._ns_counter = 0
  *             if self._prefix_tail is None:             # <<<<<<<<<<<<<<
@@ -51989,7 +52071,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
       goto __pyx_L6;
     }
 
-    /* "lxml/etree.pyx":450
+    /* "lxml/etree.pyx":451
  *                 self._prefix_tail = b"A"
  *             else:
  *                 self._prefix_tail += b"A"             # <<<<<<<<<<<<<<
@@ -51997,7 +52079,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
  * 
  */
     /*else*/ {
-      __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_self->_prefix_tail, __pyx_n_b_A); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 450, __pyx_L1_error)
+      __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_self->_prefix_tail, __pyx_n_b_A); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_1);
       __Pyx_GOTREF(__pyx_v_self->_prefix_tail);
@@ -52007,7 +52089,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
     }
     __pyx_L6:;
 
-    /* "lxml/etree.pyx":444
+    /* "lxml/etree.pyx":445
  *             ns += self._prefix_tail
  *         self._ns_counter += 1
  *         if self._ns_counter < 0:             # <<<<<<<<<<<<<<
@@ -52016,7 +52098,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
  */
   }
 
-  /* "lxml/etree.pyx":451
+  /* "lxml/etree.pyx":452
  *             else:
  *                 self._prefix_tail += b"A"
  *         return ns             # <<<<<<<<<<<<<<
@@ -52028,7 +52110,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
   __pyx_r = __pyx_v_ns;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":434
+  /* "lxml/etree.pyx":435
  * 
  *     @cython.final
  *     cdef bytes buildNewPrefix(self):             # <<<<<<<<<<<<<<
@@ -52048,7 +52130,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocum
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":454
+/* "lxml/etree.pyx":455
  * 
  *     @cython.final
  *     cdef xmlNs* _findOrBuildNodeNs(self, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -52073,7 +52155,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_findOrBuildNodeNs", 0);
 
-  /* "lxml/etree.pyx":463
+  /* "lxml/etree.pyx":464
  *         cdef xmlNs* c_doc_ns
  *         cdef python.PyObject* dict_result
  *         if c_node.type != tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -52083,7 +52165,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
   __pyx_t_1 = ((__pyx_v_c_node->type != XML_ELEMENT_NODE) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":464
+    /* "lxml/etree.pyx":465
  *         cdef python.PyObject* dict_result
  *         if c_node.type != tree.XML_ELEMENT_NODE:
  *             assert c_node.type == tree.XML_ELEMENT_NODE, \             # <<<<<<<<<<<<<<
@@ -52091,17 +52173,17 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
  *                 c_node.type, tree.XML_ELEMENT_NODE)
  */
     #ifndef CYTHON_WITHOUT_ASSERTIONS
-    if (unlikely(!Py_OptimizeFlag)) {
+    if (unlikely(__pyx_assertions_enabled())) {
       if (unlikely(!((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0))) {
 
-        /* "lxml/etree.pyx":465
+        /* "lxml/etree.pyx":466
  *         if c_node.type != tree.XML_ELEMENT_NODE:
  *             assert c_node.type == tree.XML_ELEMENT_NODE, \
  *                 u"invalid node type %d, expected %d" % (             # <<<<<<<<<<<<<<
  *                 c_node.type, tree.XML_ELEMENT_NODE)
  *         # look for existing ns declaration
  */
-        __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 465, __pyx_L1_error)
+        __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         __pyx_t_3 = 0;
         __pyx_t_4 = 127;
@@ -52110,14 +52192,14 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
         __Pyx_GIVEREF(__pyx_kp_u_invalid_node_type);
         PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_invalid_node_type);
 
-        /* "lxml/etree.pyx":466
+        /* "lxml/etree.pyx":467
  *             assert c_node.type == tree.XML_ELEMENT_NODE, \
  *                 u"invalid node type %d, expected %d" % (
  *                 c_node.type, tree.XML_ELEMENT_NODE)             # <<<<<<<<<<<<<<
  *         # look for existing ns declaration
  *         c_ns = _searchNsByHref(c_node, c_href, is_attribute)
  */
-        __pyx_t_5 = __Pyx_PyUnicode_From_xmlElementType(__pyx_v_c_node->type, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 466, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyUnicode_From_xmlElementType(__pyx_v_c_node->type, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 467, __pyx_L1_error)
         __Pyx_GOTREF(__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;
         __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
@@ -52128,7 +52210,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
         __pyx_t_3 += 11;
         __Pyx_GIVEREF(__pyx_kp_u_expected);
         PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_expected);
-        __pyx_t_5 = __Pyx_PyUnicode_From_xmlElementType(XML_ELEMENT_NODE, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 466, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyUnicode_From_xmlElementType(XML_ELEMENT_NODE, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 467, __pyx_L1_error)
         __Pyx_GOTREF(__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;
         __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
@@ -52136,24 +52218,24 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
         PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_5);
         __pyx_t_5 = 0;
 
-        /* "lxml/etree.pyx":465
+        /* "lxml/etree.pyx":466
  *         if c_node.type != tree.XML_ELEMENT_NODE:
  *             assert c_node.type == tree.XML_ELEMENT_NODE, \
  *                 u"invalid node type %d, expected %d" % (             # <<<<<<<<<<<<<<
  *                 c_node.type, tree.XML_ELEMENT_NODE)
  *         # look for existing ns declaration
  */
-        __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 465, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 466, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         PyErr_SetObject(PyExc_AssertionError, __pyx_t_5);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-        __PYX_ERR(0, 464, __pyx_L1_error)
+        __PYX_ERR(0, 465, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "lxml/etree.pyx":463
+    /* "lxml/etree.pyx":464
  *         cdef xmlNs* c_doc_ns
  *         cdef python.PyObject* dict_result
  *         if c_node.type != tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -52162,7 +52244,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
  */
   }
 
-  /* "lxml/etree.pyx":468
+  /* "lxml/etree.pyx":469
  *                 c_node.type, tree.XML_ELEMENT_NODE)
  *         # look for existing ns declaration
  *         c_ns = _searchNsByHref(c_node, c_href, is_attribute)             # <<<<<<<<<<<<<<
@@ -52171,7 +52253,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
  */
   __pyx_v_c_ns = __pyx_f_4lxml_5etree__searchNsByHref(__pyx_v_c_node, __pyx_v_c_href, __pyx_v_is_attribute);
 
-  /* "lxml/etree.pyx":469
+  /* "lxml/etree.pyx":470
  *         # look for existing ns declaration
  *         c_ns = _searchNsByHref(c_node, c_href, is_attribute)
  *         if c_ns is not NULL:             # <<<<<<<<<<<<<<
@@ -52181,7 +52263,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
   __pyx_t_1 = ((__pyx_v_c_ns != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":470
+    /* "lxml/etree.pyx":471
  *         c_ns = _searchNsByHref(c_node, c_href, is_attribute)
  *         if c_ns is not NULL:
  *             if is_attribute and c_ns.prefix is NULL:             # <<<<<<<<<<<<<<
@@ -52201,7 +52283,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
       goto __pyx_L5;
     }
 
-    /* "lxml/etree.pyx":475
+    /* "lxml/etree.pyx":476
  *                 pass
  *             else:
  *                 return c_ns             # <<<<<<<<<<<<<<
@@ -52214,7 +52296,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
     }
     __pyx_L5:;
 
-    /* "lxml/etree.pyx":469
+    /* "lxml/etree.pyx":470
  *         # look for existing ns declaration
  *         c_ns = _searchNsByHref(c_node, c_href, is_attribute)
  *         if c_ns is not NULL:             # <<<<<<<<<<<<<<
@@ -52223,7 +52305,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
  */
   }
 
-  /* "lxml/etree.pyx":478
+  /* "lxml/etree.pyx":479
  * 
  *         # none found => determine a suitable new prefix
  *         if c_prefix is NULL:             # <<<<<<<<<<<<<<
@@ -52233,7 +52315,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
   __pyx_t_1 = ((__pyx_v_c_prefix == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":480
+    /* "lxml/etree.pyx":481
  *         if c_prefix is NULL:
  *             dict_result = python.PyDict_GetItem(
  *                 _DEFAULT_NAMESPACE_PREFIXES, <unsigned char*>c_href)             # <<<<<<<<<<<<<<
@@ -52242,10 +52324,10 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
  */
     __pyx_t_5 = __pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES;
     __Pyx_INCREF(__pyx_t_5);
-    __pyx_t_2 = __Pyx_PyBytes_FromCString(((unsigned char *)__pyx_v_c_href)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 480, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyBytes_FromCString(((unsigned char *)__pyx_v_c_href)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 481, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
 
-    /* "lxml/etree.pyx":479
+    /* "lxml/etree.pyx":480
  *         # none found => determine a suitable new prefix
  *         if c_prefix is NULL:
  *             dict_result = python.PyDict_GetItem(             # <<<<<<<<<<<<<<
@@ -52256,7 +52338,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "lxml/etree.pyx":481
+    /* "lxml/etree.pyx":482
  *             dict_result = python.PyDict_GetItem(
  *                 _DEFAULT_NAMESPACE_PREFIXES, <unsigned char*>c_href)
  *             if dict_result is not NULL:             # <<<<<<<<<<<<<<
@@ -52266,7 +52348,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
     __pyx_t_1 = ((__pyx_v_dict_result != NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":482
+      /* "lxml/etree.pyx":483
  *                 _DEFAULT_NAMESPACE_PREFIXES, <unsigned char*>c_href)
  *             if dict_result is not NULL:
  *                 prefix = <object>dict_result             # <<<<<<<<<<<<<<
@@ -52278,7 +52360,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
       __pyx_v_prefix = __pyx_t_2;
       __pyx_t_2 = 0;
 
-      /* "lxml/etree.pyx":481
+      /* "lxml/etree.pyx":482
  *             dict_result = python.PyDict_GetItem(
  *                 _DEFAULT_NAMESPACE_PREFIXES, <unsigned char*>c_href)
  *             if dict_result is not NULL:             # <<<<<<<<<<<<<<
@@ -52288,7 +52370,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
       goto __pyx_L9;
     }
 
-    /* "lxml/etree.pyx":484
+    /* "lxml/etree.pyx":485
  *                 prefix = <object>dict_result
  *             else:
  *                 prefix = self.buildNewPrefix()             # <<<<<<<<<<<<<<
@@ -52296,14 +52378,14 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
  * 
  */
     /*else*/ {
-      __pyx_t_2 = __pyx_f_4lxml_5etree_9_Document_buildNewPrefix(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 484, __pyx_L1_error)
+      __pyx_t_2 = __pyx_f_4lxml_5etree_9_Document_buildNewPrefix(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 485, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_v_prefix = __pyx_t_2;
       __pyx_t_2 = 0;
     }
     __pyx_L9:;
 
-    /* "lxml/etree.pyx":485
+    /* "lxml/etree.pyx":486
  *             else:
  *                 prefix = self.buildNewPrefix()
  *             c_prefix = _xcstr(prefix)             # <<<<<<<<<<<<<<
@@ -52312,7 +52394,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
  */
     __pyx_v_c_prefix = (const xmlChar*)PyBytes_AS_STRING(__pyx_v_prefix);
 
-    /* "lxml/etree.pyx":478
+    /* "lxml/etree.pyx":479
  * 
  *         # none found => determine a suitable new prefix
  *         if c_prefix is NULL:             # <<<<<<<<<<<<<<
@@ -52321,7 +52403,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
  */
   }
 
-  /* "lxml/etree.pyx":488
+  /* "lxml/etree.pyx":489
  * 
  *         # make sure the prefix is not in use already
  *         while tree.xmlSearchNs(self._c_doc, c_node, c_prefix) is not NULL:             # <<<<<<<<<<<<<<
@@ -52332,19 +52414,19 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
     __pyx_t_1 = ((xmlSearchNs(__pyx_v_self->_c_doc, __pyx_v_c_node, __pyx_v_c_prefix) != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "lxml/etree.pyx":489
+    /* "lxml/etree.pyx":490
  *         # make sure the prefix is not in use already
  *         while tree.xmlSearchNs(self._c_doc, c_node, c_prefix) is not NULL:
  *             prefix = self.buildNewPrefix()             # <<<<<<<<<<<<<<
  *             c_prefix = _xcstr(prefix)
  * 
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree_9_Document_buildNewPrefix(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 489, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_5etree_9_Document_buildNewPrefix(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 490, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "lxml/etree.pyx":490
+    /* "lxml/etree.pyx":491
  *         while tree.xmlSearchNs(self._c_doc, c_node, c_prefix) is not NULL:
  *             prefix = self.buildNewPrefix()
  *             c_prefix = _xcstr(prefix)             # <<<<<<<<<<<<<<
@@ -52354,7 +52436,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
     __pyx_v_c_prefix = (const xmlChar*)PyBytes_AS_STRING(__pyx_v_prefix);
   }
 
-  /* "lxml/etree.pyx":493
+  /* "lxml/etree.pyx":494
  * 
  *         # declare the namespace and return it
  *         c_ns = tree.xmlNewNs(c_node, c_href, c_prefix)             # <<<<<<<<<<<<<<
@@ -52363,7 +52445,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
  */
   __pyx_v_c_ns = xmlNewNs(__pyx_v_c_node, __pyx_v_c_href, __pyx_v_c_prefix);
 
-  /* "lxml/etree.pyx":494
+  /* "lxml/etree.pyx":495
  *         # declare the namespace and return it
  *         c_ns = tree.xmlNewNs(c_node, c_href, c_prefix)
  *         if c_ns is NULL:             # <<<<<<<<<<<<<<
@@ -52373,16 +52455,16 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
   __pyx_t_1 = ((__pyx_v_c_ns == NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "lxml/etree.pyx":495
+    /* "lxml/etree.pyx":496
  *         c_ns = tree.xmlNewNs(c_node, c_href, c_prefix)
  *         if c_ns is NULL:
  *             raise MemoryError()             # <<<<<<<<<<<<<<
  *         return c_ns
  * 
  */
-    PyErr_NoMemory(); __PYX_ERR(0, 495, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(0, 496, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":494
+    /* "lxml/etree.pyx":495
  *         # declare the namespace and return it
  *         c_ns = tree.xmlNewNs(c_node, c_href, c_prefix)
  *         if c_ns is NULL:             # <<<<<<<<<<<<<<
@@ -52391,7 +52473,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
  */
   }
 
-  /* "lxml/etree.pyx":496
+  /* "lxml/etree.pyx":497
  *         if c_ns is NULL:
  *             raise MemoryError()
  *         return c_ns             # <<<<<<<<<<<<<<
@@ -52401,7 +52483,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
   __pyx_r = __pyx_v_c_ns;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":454
+  /* "lxml/etree.pyx":455
  * 
  *     @cython.final
  *     cdef xmlNs* _findOrBuildNodeNs(self, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -52421,7 +52503,7 @@ static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocu
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":499
+/* "lxml/etree.pyx":500
  * 
  *     @cython.final
  *     cdef int _setNodeNs(self, xmlNode* c_node, const_xmlChar* c_href) except -1:             # <<<<<<<<<<<<<<
@@ -52439,17 +52521,17 @@ static int __pyx_f_4lxml_5etree_9_Document__setNodeNs(struct LxmlDocument *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_setNodeNs", 0);
 
-  /* "lxml/etree.pyx":501
+  /* "lxml/etree.pyx":502
  *     cdef int _setNodeNs(self, xmlNode* c_node, const_xmlChar* c_href) except -1:
  *         u"Lookup namespace structure and set it for the node."
  *         c_ns = self._findOrBuildNodeNs(c_node, c_href, NULL, 0)             # <<<<<<<<<<<<<<
  *         tree.xmlSetNs(c_node, c_ns)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_self, __pyx_v_c_node, __pyx_v_c_href, NULL, 0); if (unlikely(__pyx_t_1 == ((xmlNs *)NULL))) __PYX_ERR(0, 501, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_self, __pyx_v_c_node, __pyx_v_c_href, NULL, 0); if (unlikely(__pyx_t_1 == ((xmlNs *)NULL))) __PYX_ERR(0, 502, __pyx_L1_error)
   __pyx_v_c_ns = __pyx_t_1;
 
-  /* "lxml/etree.pyx":502
+  /* "lxml/etree.pyx":503
  *         u"Lookup namespace structure and set it for the node."
  *         c_ns = self._findOrBuildNodeNs(c_node, c_href, NULL, 0)
  *         tree.xmlSetNs(c_node, c_ns)             # <<<<<<<<<<<<<<
@@ -52458,7 +52540,7 @@ static int __pyx_f_4lxml_5etree_9_Document__setNodeNs(struct LxmlDocument *__pyx
  */
   xmlSetNs(__pyx_v_c_node, __pyx_v_c_ns);
 
-  /* "lxml/etree.pyx":499
+  /* "lxml/etree.pyx":500
  * 
  *     @cython.final
  *     cdef int _setNodeNs(self, xmlNode* c_node, const_xmlChar* c_href) except -1:             # <<<<<<<<<<<<<<
@@ -52477,7 +52559,7 @@ static int __pyx_f_4lxml_5etree_9_Document__setNodeNs(struct LxmlDocument *__pyx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":504
+/* "lxml/etree.pyx":505
  *         tree.xmlSetNs(c_node, c_ns)
  * 
  * cdef tuple __initPrefixCache():             # <<<<<<<<<<<<<<
@@ -52497,7 +52579,7 @@ static PyObject *__pyx_f_4lxml_5etree___initPrefixCache(void) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__initPrefixCache", 0);
 
-  /* "lxml/etree.pyx":506
+  /* "lxml/etree.pyx":507
  * cdef tuple __initPrefixCache():
  *     cdef int i
  *     return tuple([ python.PyBytes_FromFormat("ns%d", i)             # <<<<<<<<<<<<<<
@@ -52505,10 +52587,10 @@ static PyObject *__pyx_f_4lxml_5etree___initPrefixCache(void) {
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 506, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 507, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "lxml/etree.pyx":507
+  /* "lxml/etree.pyx":508
  *     cdef int i
  *     return tuple([ python.PyBytes_FromFormat("ns%d", i)
  *                    for i in range(30) ])             # <<<<<<<<<<<<<<
@@ -52518,26 +52600,26 @@ static PyObject *__pyx_f_4lxml_5etree___initPrefixCache(void) {
   for (__pyx_t_2 = 0; __pyx_t_2 < 30; __pyx_t_2+=1) {
     __pyx_v_i = __pyx_t_2;
 
-    /* "lxml/etree.pyx":506
+    /* "lxml/etree.pyx":507
  * cdef tuple __initPrefixCache():
  *     cdef int i
  *     return tuple([ python.PyBytes_FromFormat("ns%d", i)             # <<<<<<<<<<<<<<
  *                    for i in range(30) ])
  * 
  */
-    __pyx_t_3 = PyBytes_FromFormat(((char *)"ns%d"), __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 506, __pyx_L1_error)
+    __pyx_t_3 = PyBytes_FromFormat(((char *)"ns%d"), __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 507, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 506, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 507, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
-  __pyx_t_3 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 506, __pyx_L1_error)
+  __pyx_t_3 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 507, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":504
+  /* "lxml/etree.pyx":505
  *         tree.xmlSetNs(c_node, c_ns)
  * 
  * cdef tuple __initPrefixCache():             # <<<<<<<<<<<<<<
@@ -52557,7 +52639,7 @@ static PyObject *__pyx_f_4lxml_5etree___initPrefixCache(void) {
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":511
+/* "lxml/etree.pyx":512
  * cdef tuple _PREFIX_CACHE = __initPrefixCache()
  * 
  * cdef _Document _documentFactory(xmlDoc* c_doc, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -52578,19 +52660,19 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__documentFactory(xmlDoc *__pyx_
   __Pyx_RefNannySetupContext("_documentFactory", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "lxml/etree.pyx":513
+  /* "lxml/etree.pyx":514
  * cdef _Document _documentFactory(xmlDoc* c_doc, _BaseParser parser):
  *     cdef _Document result
  *     result = _Document.__new__(_Document)             # <<<<<<<<<<<<<<
  *     result._c_doc = c_doc
  *     result._ns_counter = 0
  */
-  __pyx_t_1 = ((PyObject *)__pyx_tp_new_4lxml_5etree__Document(((PyTypeObject *)__pyx_ptype_4lxml_5etree__Document), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 513, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_tp_new_4lxml_5etree__Document(((PyTypeObject *)__pyx_ptype_4lxml_5etree__Document), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_result = ((struct LxmlDocument *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":514
+  /* "lxml/etree.pyx":515
  *     cdef _Document result
  *     result = _Document.__new__(_Document)
  *     result._c_doc = c_doc             # <<<<<<<<<<<<<<
@@ -52599,7 +52681,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__documentFactory(xmlDoc *__pyx_
  */
   __pyx_v_result->_c_doc = __pyx_v_c_doc;
 
-  /* "lxml/etree.pyx":515
+  /* "lxml/etree.pyx":516
  *     result = _Document.__new__(_Document)
  *     result._c_doc = c_doc
  *     result._ns_counter = 0             # <<<<<<<<<<<<<<
@@ -52608,7 +52690,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__documentFactory(xmlDoc *__pyx_
  */
   __pyx_v_result->_ns_counter = 0;
 
-  /* "lxml/etree.pyx":516
+  /* "lxml/etree.pyx":517
  *     result._c_doc = c_doc
  *     result._ns_counter = 0
  *     result._prefix_tail = None             # <<<<<<<<<<<<<<
@@ -52621,7 +52703,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__documentFactory(xmlDoc *__pyx_
   __Pyx_DECREF(__pyx_v_result->_prefix_tail);
   __pyx_v_result->_prefix_tail = ((PyObject*)Py_None);
 
-  /* "lxml/etree.pyx":517
+  /* "lxml/etree.pyx":518
  *     result._ns_counter = 0
  *     result._prefix_tail = None
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -52632,19 +52714,19 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__documentFactory(xmlDoc *__pyx_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":518
+    /* "lxml/etree.pyx":519
  *     result._prefix_tail = None
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
  *     result._parser = parser
  *     return result
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 518, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "lxml/etree.pyx":517
+    /* "lxml/etree.pyx":518
  *     result._ns_counter = 0
  *     result._prefix_tail = None
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -52653,7 +52735,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__documentFactory(xmlDoc *__pyx_
  */
   }
 
-  /* "lxml/etree.pyx":519
+  /* "lxml/etree.pyx":520
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     result._parser = parser             # <<<<<<<<<<<<<<
@@ -52666,7 +52748,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__documentFactory(xmlDoc *__pyx_
   __Pyx_DECREF(((PyObject *)__pyx_v_result->_parser));
   __pyx_v_result->_parser = __pyx_v_parser;
 
-  /* "lxml/etree.pyx":520
+  /* "lxml/etree.pyx":521
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     result._parser = parser
  *     return result             # <<<<<<<<<<<<<<
@@ -52678,7 +52760,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__documentFactory(xmlDoc *__pyx_
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":511
+  /* "lxml/etree.pyx":512
  * cdef tuple _PREFIX_CACHE = __initPrefixCache()
  * 
  * cdef _Document _documentFactory(xmlDoc* c_doc, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -52699,7 +52781,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__documentFactory(xmlDoc *__pyx_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":530
+/* "lxml/etree.pyx":531
  *     u"Document information provided by parser and DTD."
  *     cdef _Document _doc
  *     def __cinit__(self, tree):             # <<<<<<<<<<<<<<
@@ -52736,7 +52818,7 @@ static int __pyx_pw_4lxml_5etree_7DocInfo_1__cinit__(PyObject *__pyx_v_self, PyO
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 530, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 531, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -52747,7 +52829,7 @@ static int __pyx_pw_4lxml_5etree_7DocInfo_1__cinit__(PyObject *__pyx_v_self, PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 530, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 531, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.DocInfo.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -52780,14 +52862,14 @@ static int __pyx_pf_4lxml_5etree_7DocInfo___cinit__(struct __pyx_obj_4lxml_5etre
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "lxml/etree.pyx":532
+  /* "lxml/etree.pyx":533
  *     def __cinit__(self, tree):
  *         u"Create a DocInfo object for an ElementTree object or root Element."
  *         self._doc = _documentOrRaise(tree)             # <<<<<<<<<<<<<<
  *         root_name, public_id, system_url = self._doc.getdoctype()
  *         if not root_name and (public_id or system_url):
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentOrRaise(__pyx_v_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentOrRaise(__pyx_v_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_doc);
@@ -52795,14 +52877,14 @@ static int __pyx_pf_4lxml_5etree_7DocInfo___cinit__(struct __pyx_obj_4lxml_5etre
   __pyx_v_self->_doc = ((struct LxmlDocument *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":533
+  /* "lxml/etree.pyx":534
  *         u"Create a DocInfo object for an ElementTree object or root Element."
  *         self._doc = _documentOrRaise(tree)
  *         root_name, public_id, system_url = self._doc.getdoctype()             # <<<<<<<<<<<<<<
  *         if not root_name and (public_id or system_url):
  *             raise ValueError, u"Could not find root node"
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getdoctype(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getdoctype(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -52810,7 +52892,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo___cinit__(struct __pyx_obj_4lxml_5etre
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 533, __pyx_L1_error)
+      __PYX_ERR(0, 534, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -52826,17 +52908,17 @@ static int __pyx_pf_4lxml_5etree_7DocInfo___cinit__(struct __pyx_obj_4lxml_5etre
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_4);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 533, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 533, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 533, __pyx_L1_error)
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
@@ -52846,7 +52928,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo___cinit__(struct __pyx_obj_4lxml_5etre
     __Pyx_GOTREF(__pyx_t_3);
     index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_4);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 533, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 534, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -52854,7 +52936,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo___cinit__(struct __pyx_obj_4lxml_5etre
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(0, 533, __pyx_L1_error)
+    __PYX_ERR(0, 534, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_root_name = __pyx_t_2;
@@ -52864,32 +52946,32 @@ static int __pyx_pf_4lxml_5etree_7DocInfo___cinit__(struct __pyx_obj_4lxml_5etre
   __pyx_v_system_url = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":534
+  /* "lxml/etree.pyx":535
  *         self._doc = _documentOrRaise(tree)
  *         root_name, public_id, system_url = self._doc.getdoctype()
  *         if not root_name and (public_id or system_url):             # <<<<<<<<<<<<<<
  *             raise ValueError, u"Could not find root node"
  * 
  */
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_root_name); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 534, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_root_name); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 535, __pyx_L1_error)
   __pyx_t_9 = ((!__pyx_t_8) != 0);
   if (__pyx_t_9) {
   } else {
     __pyx_t_7 = __pyx_t_9;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_public_id); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 534, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_public_id); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 535, __pyx_L1_error)
   if (!__pyx_t_9) {
   } else {
     __pyx_t_7 = __pyx_t_9;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_system_url); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 534, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_system_url); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 535, __pyx_L1_error)
   __pyx_t_7 = __pyx_t_9;
   __pyx_L6_bool_binop_done:;
   if (unlikely(__pyx_t_7)) {
 
-    /* "lxml/etree.pyx":535
+    /* "lxml/etree.pyx":536
  *         root_name, public_id, system_url = self._doc.getdoctype()
  *         if not root_name and (public_id or system_url):
  *             raise ValueError, u"Could not find root node"             # <<<<<<<<<<<<<<
@@ -52897,9 +52979,9 @@ static int __pyx_pf_4lxml_5etree_7DocInfo___cinit__(struct __pyx_obj_4lxml_5etre
  *     @property
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Could_not_find_root_node, 0, 0);
-    __PYX_ERR(0, 535, __pyx_L1_error)
+    __PYX_ERR(0, 536, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":534
+    /* "lxml/etree.pyx":535
  *         self._doc = _documentOrRaise(tree)
  *         root_name, public_id, system_url = self._doc.getdoctype()
  *         if not root_name and (public_id or system_url):             # <<<<<<<<<<<<<<
@@ -52908,7 +52990,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo___cinit__(struct __pyx_obj_4lxml_5etre
  */
   }
 
-  /* "lxml/etree.pyx":530
+  /* "lxml/etree.pyx":531
  *     u"Document information provided by parser and DTD."
  *     cdef _Document _doc
  *     def __cinit__(self, tree):             # <<<<<<<<<<<<<<
@@ -52935,7 +53017,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo___cinit__(struct __pyx_obj_4lxml_5etre
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":538
+/* "lxml/etree.pyx":539
  * 
  *     @property
  *     def root_name(self):             # <<<<<<<<<<<<<<
@@ -52973,14 +53055,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9root_name___get__(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":540
+  /* "lxml/etree.pyx":541
  *     def root_name(self):
  *         """Returns the name of the root node as defined by the DOCTYPE."""
  *         root_name, public_id, system_url = self._doc.getdoctype()             # <<<<<<<<<<<<<<
  *         return root_name
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getdoctype(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getdoctype(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -52988,7 +53070,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9root_name___get__(struct __pyx_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 540, __pyx_L1_error)
+      __PYX_ERR(0, 541, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -53004,17 +53086,17 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9root_name___get__(struct __pyx_
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_4);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 541, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 540, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 541, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 540, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 541, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error)
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 541, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
@@ -53024,7 +53106,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9root_name___get__(struct __pyx_
     __Pyx_GOTREF(__pyx_t_3);
     index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_4);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 540, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 541, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -53032,7 +53114,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9root_name___get__(struct __pyx_
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(0, 540, __pyx_L1_error)
+    __PYX_ERR(0, 541, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_root_name = __pyx_t_2;
@@ -53042,7 +53124,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9root_name___get__(struct __pyx_
   __pyx_v_system_url = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":541
+  /* "lxml/etree.pyx":542
  *         """Returns the name of the root node as defined by the DOCTYPE."""
  *         root_name, public_id, system_url = self._doc.getdoctype()
  *         return root_name             # <<<<<<<<<<<<<<
@@ -53054,7 +53136,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9root_name___get__(struct __pyx_
   __pyx_r = __pyx_v_root_name;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":538
+  /* "lxml/etree.pyx":539
  * 
  *     @property
  *     def root_name(self):             # <<<<<<<<<<<<<<
@@ -53080,7 +53162,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9root_name___get__(struct __pyx_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":544
+/* "lxml/etree.pyx":545
  * 
  *     @cython.final
  *     cdef tree.xmlDtd* _get_c_dtd(self):             # <<<<<<<<<<<<<<
@@ -53099,7 +53181,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(struct __pyx_obj_4lxml_5
   const xmlChar *__pyx_t_3;
   __Pyx_RefNannySetupContext("_get_c_dtd", 0);
 
-  /* "lxml/etree.pyx":546
+  /* "lxml/etree.pyx":547
  *     cdef tree.xmlDtd* _get_c_dtd(self):
  *         """"Return the DTD. Create it if it does not yet exist."""
  *         cdef xmlDoc* c_doc = self._doc._c_doc             # <<<<<<<<<<<<<<
@@ -53109,7 +53191,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(struct __pyx_obj_4lxml_5
   __pyx_t_1 = __pyx_v_self->_doc->_c_doc;
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "lxml/etree.pyx":550
+  /* "lxml/etree.pyx":551
  *         cdef const_xmlChar* c_name
  * 
  *         if c_doc.intSubset:             # <<<<<<<<<<<<<<
@@ -53119,7 +53201,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(struct __pyx_obj_4lxml_5
   __pyx_t_2 = (__pyx_v_c_doc->intSubset != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":551
+    /* "lxml/etree.pyx":552
  * 
  *         if c_doc.intSubset:
  *             return c_doc.intSubset             # <<<<<<<<<<<<<<
@@ -53129,7 +53211,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(struct __pyx_obj_4lxml_5
     __pyx_r = __pyx_v_c_doc->intSubset;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":550
+    /* "lxml/etree.pyx":551
  *         cdef const_xmlChar* c_name
  * 
  *         if c_doc.intSubset:             # <<<<<<<<<<<<<<
@@ -53138,7 +53220,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(struct __pyx_obj_4lxml_5
  */
   }
 
-  /* "lxml/etree.pyx":553
+  /* "lxml/etree.pyx":554
  *             return c_doc.intSubset
  * 
  *         c_root_node = tree.xmlDocGetRootElement(c_doc)             # <<<<<<<<<<<<<<
@@ -53147,7 +53229,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(struct __pyx_obj_4lxml_5
  */
   __pyx_v_c_root_node = xmlDocGetRootElement(__pyx_v_c_doc);
 
-  /* "lxml/etree.pyx":554
+  /* "lxml/etree.pyx":555
  * 
  *         c_root_node = tree.xmlDocGetRootElement(c_doc)
  *         c_name = c_root_node.name if c_root_node else NULL             # <<<<<<<<<<<<<<
@@ -53161,7 +53243,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(struct __pyx_obj_4lxml_5
   }
   __pyx_v_c_name = __pyx_t_3;
 
-  /* "lxml/etree.pyx":555
+  /* "lxml/etree.pyx":556
  *         c_root_node = tree.xmlDocGetRootElement(c_doc)
  *         c_name = c_root_node.name if c_root_node else NULL
  *         return  tree.xmlCreateIntSubset(c_doc, c_name, NULL, NULL)             # <<<<<<<<<<<<<<
@@ -53171,7 +53253,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(struct __pyx_obj_4lxml_5
   __pyx_r = xmlCreateIntSubset(__pyx_v_c_doc, __pyx_v_c_name, NULL, NULL);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":544
+  /* "lxml/etree.pyx":545
  * 
  *     @cython.final
  *     cdef tree.xmlDtd* _get_c_dtd(self):             # <<<<<<<<<<<<<<
@@ -53185,7 +53267,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":557
+/* "lxml/etree.pyx":558
  *         return  tree.xmlCreateIntSubset(c_doc, c_name, NULL, NULL)
  * 
  *     def clear(self):             # <<<<<<<<<<<<<<
@@ -53217,7 +53299,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_2clear(struct __pyx_obj_4lxml_5e
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("clear", 0);
 
-  /* "lxml/etree.pyx":559
+  /* "lxml/etree.pyx":560
  *     def clear(self):
  *         u"""Removes DOCTYPE and internal subset from the document."""
  *         cdef xmlDoc* c_doc = self._doc._c_doc             # <<<<<<<<<<<<<<
@@ -53227,7 +53309,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_2clear(struct __pyx_obj_4lxml_5e
   __pyx_t_1 = __pyx_v_self->_doc->_c_doc;
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "lxml/etree.pyx":560
+  /* "lxml/etree.pyx":561
  *         u"""Removes DOCTYPE and internal subset from the document."""
  *         cdef xmlDoc* c_doc = self._doc._c_doc
  *         cdef tree.xmlNode* c_dtd = <xmlNode*>c_doc.intSubset             # <<<<<<<<<<<<<<
@@ -53236,7 +53318,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_2clear(struct __pyx_obj_4lxml_5e
  */
   __pyx_v_c_dtd = ((xmlNode *)__pyx_v_c_doc->intSubset);
 
-  /* "lxml/etree.pyx":561
+  /* "lxml/etree.pyx":562
  *         cdef xmlDoc* c_doc = self._doc._c_doc
  *         cdef tree.xmlNode* c_dtd = <xmlNode*>c_doc.intSubset
  *         if c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -53246,7 +53328,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_2clear(struct __pyx_obj_4lxml_5e
   __pyx_t_2 = ((__pyx_v_c_dtd == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":562
+    /* "lxml/etree.pyx":563
  *         cdef tree.xmlNode* c_dtd = <xmlNode*>c_doc.intSubset
  *         if c_dtd is NULL:
  *             return             # <<<<<<<<<<<<<<
@@ -53257,7 +53339,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_2clear(struct __pyx_obj_4lxml_5e
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":561
+    /* "lxml/etree.pyx":562
  *         cdef xmlDoc* c_doc = self._doc._c_doc
  *         cdef tree.xmlNode* c_dtd = <xmlNode*>c_doc.intSubset
  *         if c_dtd is NULL:             # <<<<<<<<<<<<<<
@@ -53266,7 +53348,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_2clear(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "lxml/etree.pyx":563
+  /* "lxml/etree.pyx":564
  *         if c_dtd is NULL:
  *             return
  *         tree.xmlUnlinkNode(c_dtd)             # <<<<<<<<<<<<<<
@@ -53275,7 +53357,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_2clear(struct __pyx_obj_4lxml_5e
  */
   xmlUnlinkNode(__pyx_v_c_dtd);
 
-  /* "lxml/etree.pyx":564
+  /* "lxml/etree.pyx":565
  *             return
  *         tree.xmlUnlinkNode(c_dtd)
  *         tree.xmlFreeNode(c_dtd)             # <<<<<<<<<<<<<<
@@ -53284,7 +53366,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_2clear(struct __pyx_obj_4lxml_5e
  */
   xmlFreeNode(__pyx_v_c_dtd);
 
-  /* "lxml/etree.pyx":557
+  /* "lxml/etree.pyx":558
  *         return  tree.xmlCreateIntSubset(c_doc, c_name, NULL, NULL)
  * 
  *     def clear(self):             # <<<<<<<<<<<<<<
@@ -53300,7 +53382,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_2clear(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":572
+/* "lxml/etree.pyx":573
  *         exist, setting this variable (even to None) will create one.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -53338,14 +53420,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9public_id___get__(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":573
+  /* "lxml/etree.pyx":574
  *         """
  *         def __get__(self):
  *             root_name, public_id, system_url = self._doc.getdoctype()             # <<<<<<<<<<<<<<
  *             return public_id
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getdoctype(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 573, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getdoctype(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -53353,7 +53435,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9public_id___get__(struct __pyx_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 573, __pyx_L1_error)
+      __PYX_ERR(0, 574, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -53369,17 +53451,17 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9public_id___get__(struct __pyx_
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_4);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 573, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 574, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 573, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 574, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 573, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 574, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 573, __pyx_L1_error)
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 574, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
@@ -53389,7 +53471,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9public_id___get__(struct __pyx_
     __Pyx_GOTREF(__pyx_t_3);
     index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_4);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 573, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 574, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -53397,7 +53479,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9public_id___get__(struct __pyx_
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(0, 573, __pyx_L1_error)
+    __PYX_ERR(0, 574, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_root_name = __pyx_t_2;
@@ -53407,7 +53489,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9public_id___get__(struct __pyx_
   __pyx_v_system_url = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":574
+  /* "lxml/etree.pyx":575
  *         def __get__(self):
  *             root_name, public_id, system_url = self._doc.getdoctype()
  *             return public_id             # <<<<<<<<<<<<<<
@@ -53419,7 +53501,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9public_id___get__(struct __pyx_
   __pyx_r = __pyx_v_public_id;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":572
+  /* "lxml/etree.pyx":573
  *         exist, setting this variable (even to None) will create one.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -53445,7 +53527,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_9public_id___get__(struct __pyx_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":576
+/* "lxml/etree.pyx":577
  *             return public_id
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -53486,7 +53568,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
   __Pyx_RefNannySetupContext("__set__", 0);
   __Pyx_INCREF(__pyx_v_value);
 
-  /* "lxml/etree.pyx":577
+  /* "lxml/etree.pyx":578
  * 
  *         def __set__(self, value):
  *             cdef xmlChar* c_value = NULL             # <<<<<<<<<<<<<<
@@ -53495,7 +53577,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
   __pyx_v_c_value = NULL;
 
-  /* "lxml/etree.pyx":578
+  /* "lxml/etree.pyx":579
  *         def __set__(self, value):
  *             cdef xmlChar* c_value = NULL
  *             if value is not None:             # <<<<<<<<<<<<<<
@@ -53506,7 +53588,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":579
+    /* "lxml/etree.pyx":580
  *             cdef xmlChar* c_value = NULL
  *             if value is not None:
  *                 match = _find_invalid_public_id_characters(value)             # <<<<<<<<<<<<<<
@@ -53526,30 +53608,30 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
     }
     __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_value);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 579, __pyx_L1_error)
+    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 580, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_match = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":580
+    /* "lxml/etree.pyx":581
  *             if value is not None:
  *                 match = _find_invalid_public_id_characters(value)
  *                 if match:             # <<<<<<<<<<<<<<
  *                     raise ValueError, f'Invalid character(s) {match.group(0)!r} in public_id.'
  *                 value = _utf8(value)
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_match); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 580, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_match); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 581, __pyx_L1_error)
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":581
+      /* "lxml/etree.pyx":582
  *                 match = _find_invalid_public_id_characters(value)
  *                 if match:
  *                     raise ValueError, f'Invalid character(s) {match.group(0)!r} in public_id.'             # <<<<<<<<<<<<<<
  *                 value = _utf8(value)
  *                 c_value = tree.xmlStrdup(_xcstr(value))
  */
-      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 581, __pyx_L1_error)
+      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 582, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_6 = 0;
       __pyx_t_7 = 127;
@@ -53557,7 +53639,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
       __pyx_t_6 += 21;
       __Pyx_GIVEREF(__pyx_kp_u_Invalid_character_s);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Invalid_character_s);
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_group); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 581, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_group); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 582, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_8 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -53571,10 +53653,10 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
       }
       __pyx_t_4 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_8, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_int_0);
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
-      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 581, __pyx_L1_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 582, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_4), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 581, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_4), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 582, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 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;
@@ -53586,14 +53668,14 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
       __pyx_t_6 += 14;
       __Pyx_GIVEREF(__pyx_kp_u_in_public_id);
       PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_in_public_id);
-      __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 581, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 582, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_5, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __PYX_ERR(0, 581, __pyx_L1_error)
+      __PYX_ERR(0, 582, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":580
+      /* "lxml/etree.pyx":581
  *             if value is not None:
  *                 match = _find_invalid_public_id_characters(value)
  *                 if match:             # <<<<<<<<<<<<<<
@@ -53602,19 +53684,19 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
     }
 
-    /* "lxml/etree.pyx":582
+    /* "lxml/etree.pyx":583
  *                 if match:
  *                     raise ValueError, f'Invalid character(s) {match.group(0)!r} in public_id.'
  *                 value = _utf8(value)             # <<<<<<<<<<<<<<
  *                 c_value = tree.xmlStrdup(_xcstr(value))
  *                 if not c_value:
  */
-    __pyx_t_5 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 582, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 583, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "lxml/etree.pyx":583
+    /* "lxml/etree.pyx":584
  *                     raise ValueError, f'Invalid character(s) {match.group(0)!r} in public_id.'
  *                 value = _utf8(value)
  *                 c_value = tree.xmlStrdup(_xcstr(value))             # <<<<<<<<<<<<<<
@@ -53623,7 +53705,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
     __pyx_v_c_value = xmlStrdup((const xmlChar*)PyBytes_AS_STRING(__pyx_v_value));
 
-    /* "lxml/etree.pyx":584
+    /* "lxml/etree.pyx":585
  *                 value = _utf8(value)
  *                 c_value = tree.xmlStrdup(_xcstr(value))
  *                 if not c_value:             # <<<<<<<<<<<<<<
@@ -53633,16 +53715,16 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
     __pyx_t_2 = ((!(__pyx_v_c_value != 0)) != 0);
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":585
+      /* "lxml/etree.pyx":586
  *                 c_value = tree.xmlStrdup(_xcstr(value))
  *                 if not c_value:
  *                     raise MemoryError()             # <<<<<<<<<<<<<<
  * 
  *             c_dtd = self._get_c_dtd()
  */
-      PyErr_NoMemory(); __PYX_ERR(0, 585, __pyx_L1_error)
+      PyErr_NoMemory(); __PYX_ERR(0, 586, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":584
+      /* "lxml/etree.pyx":585
  *                 value = _utf8(value)
  *                 c_value = tree.xmlStrdup(_xcstr(value))
  *                 if not c_value:             # <<<<<<<<<<<<<<
@@ -53651,7 +53733,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
     }
 
-    /* "lxml/etree.pyx":578
+    /* "lxml/etree.pyx":579
  *         def __set__(self, value):
  *             cdef xmlChar* c_value = NULL
  *             if value is not None:             # <<<<<<<<<<<<<<
@@ -53660,7 +53742,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
   }
 
-  /* "lxml/etree.pyx":587
+  /* "lxml/etree.pyx":588
  *                     raise MemoryError()
  * 
  *             c_dtd = self._get_c_dtd()             # <<<<<<<<<<<<<<
@@ -53669,7 +53751,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
   __pyx_v_c_dtd = __pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(__pyx_v_self);
 
-  /* "lxml/etree.pyx":588
+  /* "lxml/etree.pyx":589
  * 
  *             c_dtd = self._get_c_dtd()
  *             if not c_dtd:             # <<<<<<<<<<<<<<
@@ -53679,7 +53761,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
   __pyx_t_2 = ((!(__pyx_v_c_dtd != 0)) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":589
+    /* "lxml/etree.pyx":590
  *             c_dtd = self._get_c_dtd()
  *             if not c_dtd:
  *                 tree.xmlFree(c_value)             # <<<<<<<<<<<<<<
@@ -53688,16 +53770,16 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
     xmlFree(__pyx_v_c_value);
 
-    /* "lxml/etree.pyx":590
+    /* "lxml/etree.pyx":591
  *             if not c_dtd:
  *                 tree.xmlFree(c_value)
  *                 raise MemoryError()             # <<<<<<<<<<<<<<
  *             if c_dtd.ExternalID:
  *                 tree.xmlFree(<void*>c_dtd.ExternalID)
  */
-    PyErr_NoMemory(); __PYX_ERR(0, 590, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(0, 591, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":588
+    /* "lxml/etree.pyx":589
  * 
  *             c_dtd = self._get_c_dtd()
  *             if not c_dtd:             # <<<<<<<<<<<<<<
@@ -53706,7 +53788,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
   }
 
-  /* "lxml/etree.pyx":591
+  /* "lxml/etree.pyx":592
  *                 tree.xmlFree(c_value)
  *                 raise MemoryError()
  *             if c_dtd.ExternalID:             # <<<<<<<<<<<<<<
@@ -53716,7 +53798,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
   __pyx_t_2 = (__pyx_v_c_dtd->ExternalID != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":592
+    /* "lxml/etree.pyx":593
  *                 raise MemoryError()
  *             if c_dtd.ExternalID:
  *                 tree.xmlFree(<void*>c_dtd.ExternalID)             # <<<<<<<<<<<<<<
@@ -53725,7 +53807,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
     xmlFree(((void *)__pyx_v_c_dtd->ExternalID));
 
-    /* "lxml/etree.pyx":591
+    /* "lxml/etree.pyx":592
  *                 tree.xmlFree(c_value)
  *                 raise MemoryError()
  *             if c_dtd.ExternalID:             # <<<<<<<<<<<<<<
@@ -53734,7 +53816,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
   }
 
-  /* "lxml/etree.pyx":593
+  /* "lxml/etree.pyx":594
  *             if c_dtd.ExternalID:
  *                 tree.xmlFree(<void*>c_dtd.ExternalID)
  *             c_dtd.ExternalID = c_value             # <<<<<<<<<<<<<<
@@ -53743,7 +53825,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
  */
   __pyx_v_c_dtd->ExternalID = __pyx_v_c_value;
 
-  /* "lxml/etree.pyx":576
+  /* "lxml/etree.pyx":577
  *             return public_id
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -53768,7 +53850,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_9public_id_2__set__(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":601
+/* "lxml/etree.pyx":602
  *         exist, setting this variable (even to None) will create one.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -53806,14 +53888,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10system_url___get__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":602
+  /* "lxml/etree.pyx":603
  *         """
  *         def __get__(self):
  *             root_name, public_id, system_url = self._doc.getdoctype()             # <<<<<<<<<<<<<<
  *             return system_url
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getdoctype(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getdoctype(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 603, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -53821,7 +53903,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10system_url___get__(struct __py
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 602, __pyx_L1_error)
+      __PYX_ERR(0, 603, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -53837,17 +53919,17 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10system_url___get__(struct __py
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_4);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 602, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 603, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 602, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 603, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 602, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 603, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 602, __pyx_L1_error)
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 603, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
@@ -53857,7 +53939,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10system_url___get__(struct __py
     __Pyx_GOTREF(__pyx_t_3);
     index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_4);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 602, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 603, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -53865,7 +53947,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10system_url___get__(struct __py
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(0, 602, __pyx_L1_error)
+    __PYX_ERR(0, 603, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_root_name = __pyx_t_2;
@@ -53875,7 +53957,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10system_url___get__(struct __py
   __pyx_v_system_url = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":603
+  /* "lxml/etree.pyx":604
  *         def __get__(self):
  *             root_name, public_id, system_url = self._doc.getdoctype()
  *             return system_url             # <<<<<<<<<<<<<<
@@ -53887,7 +53969,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10system_url___get__(struct __py
   __pyx_r = __pyx_v_system_url;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":601
+  /* "lxml/etree.pyx":602
  *         exist, setting this variable (even to None) will create one.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -53913,7 +53995,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10system_url___get__(struct __py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":605
+/* "lxml/etree.pyx":606
  *             return system_url
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -53949,7 +54031,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "lxml/etree.pyx":606
+  /* "lxml/etree.pyx":607
  * 
  *         def __set__(self, value):
  *             cdef xmlChar* c_value = NULL             # <<<<<<<<<<<<<<
@@ -53958,7 +54040,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
   __pyx_v_c_value = NULL;
 
-  /* "lxml/etree.pyx":607
+  /* "lxml/etree.pyx":608
  *         def __set__(self, value):
  *             cdef xmlChar* c_value = NULL
  *             if value is not None:             # <<<<<<<<<<<<<<
@@ -53969,52 +54051,52 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":608
+    /* "lxml/etree.pyx":609
  *             cdef xmlChar* c_value = NULL
  *             if value is not None:
  *                 bvalue = _utf8(value)             # <<<<<<<<<<<<<<
  *                 # sys_url may be any valid unicode string that can be
  *                 # enclosed in single quotes or quotes.
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 608, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 609, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_bvalue = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":611
+    /* "lxml/etree.pyx":612
  *                 # sys_url may be any valid unicode string that can be
  *                 # enclosed in single quotes or quotes.
  *                 if b"'" in bvalue and b'"' in bvalue:             # <<<<<<<<<<<<<<
  *                     raise ValueError(
  *                         'System URL may not contain both single (\') and double quotes (").')
  */
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__22, __pyx_v_bvalue, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 611, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__22, __pyx_v_bvalue, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 612, __pyx_L1_error)
     __pyx_t_4 = (__pyx_t_1 != 0);
     if (__pyx_t_4) {
     } else {
       __pyx_t_2 = __pyx_t_4;
       goto __pyx_L5_bool_binop_done;
     }
-    __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__23, __pyx_v_bvalue, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 611, __pyx_L1_error)
+    __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__23, __pyx_v_bvalue, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 612, __pyx_L1_error)
     __pyx_t_1 = (__pyx_t_4 != 0);
     __pyx_t_2 = __pyx_t_1;
     __pyx_L5_bool_binop_done:;
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":612
+      /* "lxml/etree.pyx":613
  *                 # enclosed in single quotes or quotes.
  *                 if b"'" in bvalue and b'"' in bvalue:
  *                     raise ValueError(             # <<<<<<<<<<<<<<
  *                         'System URL may not contain both single (\') and double quotes (").')
  *                 c_value = tree.xmlStrdup(_xcstr(bvalue))
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 612, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 613, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 612, __pyx_L1_error)
+      __PYX_ERR(0, 613, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":611
+      /* "lxml/etree.pyx":612
  *                 # sys_url may be any valid unicode string that can be
  *                 # enclosed in single quotes or quotes.
  *                 if b"'" in bvalue and b'"' in bvalue:             # <<<<<<<<<<<<<<
@@ -54023,7 +54105,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
     }
 
-    /* "lxml/etree.pyx":614
+    /* "lxml/etree.pyx":615
  *                     raise ValueError(
  *                         'System URL may not contain both single (\') and double quotes (").')
  *                 c_value = tree.xmlStrdup(_xcstr(bvalue))             # <<<<<<<<<<<<<<
@@ -54032,7 +54114,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
     __pyx_v_c_value = xmlStrdup((const xmlChar*)PyBytes_AS_STRING(__pyx_v_bvalue));
 
-    /* "lxml/etree.pyx":615
+    /* "lxml/etree.pyx":616
  *                         'System URL may not contain both single (\') and double quotes (").')
  *                 c_value = tree.xmlStrdup(_xcstr(bvalue))
  *                 if not c_value:             # <<<<<<<<<<<<<<
@@ -54042,16 +54124,16 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
     __pyx_t_2 = ((!(__pyx_v_c_value != 0)) != 0);
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":616
+      /* "lxml/etree.pyx":617
  *                 c_value = tree.xmlStrdup(_xcstr(bvalue))
  *                 if not c_value:
  *                     raise MemoryError()             # <<<<<<<<<<<<<<
  * 
  *             c_dtd = self._get_c_dtd()
  */
-      PyErr_NoMemory(); __PYX_ERR(0, 616, __pyx_L1_error)
+      PyErr_NoMemory(); __PYX_ERR(0, 617, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":615
+      /* "lxml/etree.pyx":616
  *                         'System URL may not contain both single (\') and double quotes (").')
  *                 c_value = tree.xmlStrdup(_xcstr(bvalue))
  *                 if not c_value:             # <<<<<<<<<<<<<<
@@ -54060,7 +54142,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
     }
 
-    /* "lxml/etree.pyx":607
+    /* "lxml/etree.pyx":608
  *         def __set__(self, value):
  *             cdef xmlChar* c_value = NULL
  *             if value is not None:             # <<<<<<<<<<<<<<
@@ -54069,7 +54151,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
   }
 
-  /* "lxml/etree.pyx":618
+  /* "lxml/etree.pyx":619
  *                     raise MemoryError()
  * 
  *             c_dtd = self._get_c_dtd()             # <<<<<<<<<<<<<<
@@ -54078,7 +54160,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
   __pyx_v_c_dtd = __pyx_f_4lxml_5etree_7DocInfo__get_c_dtd(__pyx_v_self);
 
-  /* "lxml/etree.pyx":619
+  /* "lxml/etree.pyx":620
  * 
  *             c_dtd = self._get_c_dtd()
  *             if not c_dtd:             # <<<<<<<<<<<<<<
@@ -54088,7 +54170,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
   __pyx_t_2 = ((!(__pyx_v_c_dtd != 0)) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":620
+    /* "lxml/etree.pyx":621
  *             c_dtd = self._get_c_dtd()
  *             if not c_dtd:
  *                 tree.xmlFree(c_value)             # <<<<<<<<<<<<<<
@@ -54097,16 +54179,16 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
     xmlFree(__pyx_v_c_value);
 
-    /* "lxml/etree.pyx":621
+    /* "lxml/etree.pyx":622
  *             if not c_dtd:
  *                 tree.xmlFree(c_value)
  *                 raise MemoryError()             # <<<<<<<<<<<<<<
  *             if c_dtd.SystemID:
  *                 tree.xmlFree(<void*>c_dtd.SystemID)
  */
-    PyErr_NoMemory(); __PYX_ERR(0, 621, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(0, 622, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":619
+    /* "lxml/etree.pyx":620
  * 
  *             c_dtd = self._get_c_dtd()
  *             if not c_dtd:             # <<<<<<<<<<<<<<
@@ -54115,7 +54197,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
   }
 
-  /* "lxml/etree.pyx":622
+  /* "lxml/etree.pyx":623
  *                 tree.xmlFree(c_value)
  *                 raise MemoryError()
  *             if c_dtd.SystemID:             # <<<<<<<<<<<<<<
@@ -54125,7 +54207,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
   __pyx_t_2 = (__pyx_v_c_dtd->SystemID != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":623
+    /* "lxml/etree.pyx":624
  *                 raise MemoryError()
  *             if c_dtd.SystemID:
  *                 tree.xmlFree(<void*>c_dtd.SystemID)             # <<<<<<<<<<<<<<
@@ -54134,7 +54216,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
     xmlFree(((void *)__pyx_v_c_dtd->SystemID));
 
-    /* "lxml/etree.pyx":622
+    /* "lxml/etree.pyx":623
  *                 tree.xmlFree(c_value)
  *                 raise MemoryError()
  *             if c_dtd.SystemID:             # <<<<<<<<<<<<<<
@@ -54143,7 +54225,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
   }
 
-  /* "lxml/etree.pyx":624
+  /* "lxml/etree.pyx":625
  *             if c_dtd.SystemID:
  *                 tree.xmlFree(<void*>c_dtd.SystemID)
  *             c_dtd.SystemID = c_value             # <<<<<<<<<<<<<<
@@ -54152,7 +54234,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
  */
   __pyx_v_c_dtd->SystemID = __pyx_v_c_value;
 
-  /* "lxml/etree.pyx":605
+  /* "lxml/etree.pyx":606
  *             return system_url
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -54173,7 +54255,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_10system_url_2__set__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":627
+/* "lxml/etree.pyx":628
  * 
  *     @property
  *     def xml_version(self):             # <<<<<<<<<<<<<<
@@ -54209,14 +54291,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11xml_version___get__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":629
+  /* "lxml/etree.pyx":630
  *     def xml_version(self):
  *         """Returns the XML version as declared by the document."""
  *         xml_version, encoding = self._doc.getxmlinfo()             # <<<<<<<<<<<<<<
  *         return xml_version
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getxmlinfo(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 629, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getxmlinfo(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 630, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -54224,7 +54306,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11xml_version___get__(struct __p
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 629, __pyx_L1_error)
+      __PYX_ERR(0, 630, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -54237,15 +54319,15 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11xml_version___get__(struct __p
     __Pyx_INCREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_t_3);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 630, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 629, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 630, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 629, __pyx_L1_error)
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 630, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
@@ -54253,7 +54335,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11xml_version___get__(struct __p
     __Pyx_GOTREF(__pyx_t_2);
     index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_3);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 629, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 630, __pyx_L1_error)
     __pyx_t_5 = NULL;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L4_unpacking_done;
@@ -54261,7 +54343,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11xml_version___get__(struct __p
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(0, 629, __pyx_L1_error)
+    __PYX_ERR(0, 630, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_xml_version = __pyx_t_2;
@@ -54269,7 +54351,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11xml_version___get__(struct __p
   __pyx_v_encoding = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":630
+  /* "lxml/etree.pyx":631
  *         """Returns the XML version as declared by the document."""
  *         xml_version, encoding = self._doc.getxmlinfo()
  *         return xml_version             # <<<<<<<<<<<<<<
@@ -54281,7 +54363,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11xml_version___get__(struct __p
   __pyx_r = __pyx_v_xml_version;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":627
+  /* "lxml/etree.pyx":628
  * 
  *     @property
  *     def xml_version(self):             # <<<<<<<<<<<<<<
@@ -54305,7 +54387,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11xml_version___get__(struct __p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":633
+/* "lxml/etree.pyx":634
  * 
  *     @property
  *     def encoding(self):             # <<<<<<<<<<<<<<
@@ -54341,14 +54423,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_8encoding___get__(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":635
+  /* "lxml/etree.pyx":636
  *     def encoding(self):
  *         """Returns the encoding name as declared by the document."""
  *         xml_version, encoding = self._doc.getxmlinfo()             # <<<<<<<<<<<<<<
  *         return encoding
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getxmlinfo(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getxmlinfo(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 636, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -54356,7 +54438,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_8encoding___get__(struct __pyx_o
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 635, __pyx_L1_error)
+      __PYX_ERR(0, 636, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -54369,15 +54451,15 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_8encoding___get__(struct __pyx_o
     __Pyx_INCREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_t_3);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 635, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 636, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 635, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 636, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 635, __pyx_L1_error)
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 636, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
@@ -54385,7 +54467,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_8encoding___get__(struct __pyx_o
     __Pyx_GOTREF(__pyx_t_2);
     index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_3);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 635, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 636, __pyx_L1_error)
     __pyx_t_5 = NULL;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L4_unpacking_done;
@@ -54393,7 +54475,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_8encoding___get__(struct __pyx_o
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(0, 635, __pyx_L1_error)
+    __PYX_ERR(0, 636, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_xml_version = __pyx_t_2;
@@ -54401,7 +54483,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_8encoding___get__(struct __pyx_o
   __pyx_v_encoding = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":636
+  /* "lxml/etree.pyx":637
  *         """Returns the encoding name as declared by the document."""
  *         xml_version, encoding = self._doc.getxmlinfo()
  *         return encoding             # <<<<<<<<<<<<<<
@@ -54413,7 +54495,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_8encoding___get__(struct __pyx_o
   __pyx_r = __pyx_v_encoding;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":633
+  /* "lxml/etree.pyx":634
  * 
  *     @property
  *     def encoding(self):             # <<<<<<<<<<<<<<
@@ -54437,7 +54519,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_8encoding___get__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":639
+/* "lxml/etree.pyx":640
  * 
  *     @property
  *     def standalone(self):             # <<<<<<<<<<<<<<
@@ -54467,7 +54549,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10standalone___get__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":647
+  /* "lxml/etree.pyx":648
  *         ``standalone`` flag was set to ``'yes'`` or not.
  *         """
  *         return self._doc.isstandalone()             # <<<<<<<<<<<<<<
@@ -54475,13 +54557,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10standalone___get__(struct __py
  *     property URL:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_isstandalone(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 647, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_isstandalone(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 648, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":639
+  /* "lxml/etree.pyx":640
  * 
  *     @property
  *     def standalone(self):             # <<<<<<<<<<<<<<
@@ -54500,7 +54582,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_10standalone___get__(struct __py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":651
+/* "lxml/etree.pyx":652
  *     property URL:
  *         u"The source URL of the document (or None if unknown)."
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -54531,7 +54613,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_3URL___get__(struct __pyx_obj_4l
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":652
+  /* "lxml/etree.pyx":653
  *         u"The source URL of the document (or None if unknown)."
  *         def __get__(self):
  *             if self._doc._c_doc.URL is NULL:             # <<<<<<<<<<<<<<
@@ -54541,7 +54623,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_3URL___get__(struct __pyx_obj_4l
   __pyx_t_1 = ((__pyx_v_self->_doc->_c_doc->URL == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":653
+    /* "lxml/etree.pyx":654
  *         def __get__(self):
  *             if self._doc._c_doc.URL is NULL:
  *                 return None             # <<<<<<<<<<<<<<
@@ -54552,7 +54634,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_3URL___get__(struct __pyx_obj_4l
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":652
+    /* "lxml/etree.pyx":653
  *         u"The source URL of the document (or None if unknown)."
  *         def __get__(self):
  *             if self._doc._c_doc.URL is NULL:             # <<<<<<<<<<<<<<
@@ -54561,7 +54643,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_3URL___get__(struct __pyx_obj_4l
  */
   }
 
-  /* "lxml/etree.pyx":654
+  /* "lxml/etree.pyx":655
  *             if self._doc._c_doc.URL is NULL:
  *                 return None
  *             return _decodeFilename(self._doc._c_doc.URL)             # <<<<<<<<<<<<<<
@@ -54569,13 +54651,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_3URL___get__(struct __pyx_obj_4l
  *             url = _encodeFilename(url)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__decodeFilename(__pyx_v_self->_doc->_c_doc->URL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 654, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__decodeFilename(__pyx_v_self->_doc->_c_doc->URL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 655, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":651
+  /* "lxml/etree.pyx":652
  *     property URL:
  *         u"The source URL of the document (or None if unknown)."
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -54594,7 +54676,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_3URL___get__(struct __pyx_obj_4l
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":655
+/* "lxml/etree.pyx":656
  *                 return None
  *             return _decodeFilename(self._doc._c_doc.URL)
  *         def __set__(self, url):             # <<<<<<<<<<<<<<
@@ -54629,19 +54711,19 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_3URL_2__set__(struct __pyx_obj_4lxml_5
   __Pyx_RefNannySetupContext("__set__", 0);
   __Pyx_INCREF(__pyx_v_url);
 
-  /* "lxml/etree.pyx":656
+  /* "lxml/etree.pyx":657
  *             return _decodeFilename(self._doc._c_doc.URL)
  *         def __set__(self, url):
  *             url = _encodeFilename(url)             # <<<<<<<<<<<<<<
  *             c_oldurl = self._doc._c_doc.URL
  *             if url is None:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_url); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 656, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_url); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 657, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_url, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":657
+  /* "lxml/etree.pyx":658
  *         def __set__(self, url):
  *             url = _encodeFilename(url)
  *             c_oldurl = self._doc._c_doc.URL             # <<<<<<<<<<<<<<
@@ -54651,7 +54733,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_3URL_2__set__(struct __pyx_obj_4lxml_5
   __pyx_t_2 = __pyx_v_self->_doc->_c_doc->URL;
   __pyx_v_c_oldurl = __pyx_t_2;
 
-  /* "lxml/etree.pyx":658
+  /* "lxml/etree.pyx":659
  *             url = _encodeFilename(url)
  *             c_oldurl = self._doc._c_doc.URL
  *             if url is None:             # <<<<<<<<<<<<<<
@@ -54662,7 +54744,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_3URL_2__set__(struct __pyx_obj_4lxml_5
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":659
+    /* "lxml/etree.pyx":660
  *             c_oldurl = self._doc._c_doc.URL
  *             if url is None:
  *                 self._doc._c_doc.URL = NULL             # <<<<<<<<<<<<<<
@@ -54671,7 +54753,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_3URL_2__set__(struct __pyx_obj_4lxml_5
  */
     __pyx_v_self->_doc->_c_doc->URL = NULL;
 
-    /* "lxml/etree.pyx":658
+    /* "lxml/etree.pyx":659
  *             url = _encodeFilename(url)
  *             c_oldurl = self._doc._c_doc.URL
  *             if url is None:             # <<<<<<<<<<<<<<
@@ -54681,7 +54763,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_3URL_2__set__(struct __pyx_obj_4lxml_5
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":661
+  /* "lxml/etree.pyx":662
  *                 self._doc._c_doc.URL = NULL
  *             else:
  *                 self._doc._c_doc.URL = tree.xmlStrdup(_xcstr(url))             # <<<<<<<<<<<<<<
@@ -54693,7 +54775,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_3URL_2__set__(struct __pyx_obj_4lxml_5
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":662
+  /* "lxml/etree.pyx":663
  *             else:
  *                 self._doc._c_doc.URL = tree.xmlStrdup(_xcstr(url))
  *             if c_oldurl is not NULL:             # <<<<<<<<<<<<<<
@@ -54703,7 +54785,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_3URL_2__set__(struct __pyx_obj_4lxml_5
   __pyx_t_4 = ((__pyx_v_c_oldurl != NULL) != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":663
+    /* "lxml/etree.pyx":664
  *                 self._doc._c_doc.URL = tree.xmlStrdup(_xcstr(url))
  *             if c_oldurl is not NULL:
  *                 tree.xmlFree(<void*>c_oldurl)             # <<<<<<<<<<<<<<
@@ -54712,7 +54794,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_3URL_2__set__(struct __pyx_obj_4lxml_5
  */
     xmlFree(((void *)__pyx_v_c_oldurl));
 
-    /* "lxml/etree.pyx":662
+    /* "lxml/etree.pyx":663
  *             else:
  *                 self._doc._c_doc.URL = tree.xmlStrdup(_xcstr(url))
  *             if c_oldurl is not NULL:             # <<<<<<<<<<<<<<
@@ -54721,7 +54803,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_3URL_2__set__(struct __pyx_obj_4lxml_5
  */
   }
 
-  /* "lxml/etree.pyx":655
+  /* "lxml/etree.pyx":656
  *                 return None
  *             return _decodeFilename(self._doc._c_doc.URL)
  *         def __set__(self, url):             # <<<<<<<<<<<<<<
@@ -54742,7 +54824,7 @@ static int __pyx_pf_4lxml_5etree_7DocInfo_3URL_2__set__(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":666
+/* "lxml/etree.pyx":667
  * 
  *     @property
  *     def doctype(self):             # <<<<<<<<<<<<<<
@@ -54785,14 +54867,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":668
+  /* "lxml/etree.pyx":669
  *     def doctype(self):
  *         """Returns a DOCTYPE declaration string for the document."""
  *         root_name, public_id, system_url = self._doc.getdoctype()             # <<<<<<<<<<<<<<
  *         if system_url:
  *             # If '"' in system_url, we must escape it with single
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getdoctype(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 668, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getdoctype(__pyx_v_self->_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 669, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -54800,7 +54882,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 668, __pyx_L1_error)
+      __PYX_ERR(0, 669, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -54816,17 +54898,17 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_4);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 668, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 669, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 668, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 669, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 668, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 669, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 668, __pyx_L1_error)
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 669, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
@@ -54836,7 +54918,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     __Pyx_GOTREF(__pyx_t_3);
     index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_4);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 668, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 669, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -54844,7 +54926,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(0, 668, __pyx_L1_error)
+    __PYX_ERR(0, 669, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_root_name = __pyx_t_2;
@@ -54854,35 +54936,35 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
   __pyx_v_system_url = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":669
+  /* "lxml/etree.pyx":670
  *         """Returns a DOCTYPE declaration string for the document."""
  *         root_name, public_id, system_url = self._doc.getdoctype()
  *         if system_url:             # <<<<<<<<<<<<<<
  *             # If '"' in system_url, we must escape it with single
  *             # quotes, otherwise escape with double quotes. If url
  */
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_system_url); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 669, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_system_url); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 670, __pyx_L1_error)
   if (__pyx_t_7) {
 
-    /* "lxml/etree.pyx":674
+    /* "lxml/etree.pyx":675
  *             # contains both a single quote and a double quote, XML
  *             # standard is being violated.
  *             if '"' in system_url:             # <<<<<<<<<<<<<<
  *                 quoted_system_url = f"'{system_url}'"
  *             else:
  */
-    __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s__23, __pyx_v_system_url, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 674, __pyx_L1_error)
+    __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s__23, __pyx_v_system_url, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 675, __pyx_L1_error)
     __pyx_t_8 = (__pyx_t_7 != 0);
     if (__pyx_t_8) {
 
-      /* "lxml/etree.pyx":675
+      /* "lxml/etree.pyx":676
  *             # standard is being violated.
  *             if '"' in system_url:
  *                 quoted_system_url = f"'{system_url}'"             # <<<<<<<<<<<<<<
  *             else:
  *                 quoted_system_url = f'"{system_url}"'
  */
-      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 675, __pyx_L1_error)
+      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 676, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_9 = 0;
       __pyx_t_10 = 127;
@@ -54890,7 +54972,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__22);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u__22);
-      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_system_url, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 675, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_system_url, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 676, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_10;
       __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
@@ -54901,13 +54983,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__22);
       PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__22);
-      __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 675, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 676, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_v_quoted_system_url = ((PyObject*)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/etree.pyx":674
+      /* "lxml/etree.pyx":675
  *             # contains both a single quote and a double quote, XML
  *             # standard is being violated.
  *             if '"' in system_url:             # <<<<<<<<<<<<<<
@@ -54917,7 +54999,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       goto __pyx_L6;
     }
 
-    /* "lxml/etree.pyx":677
+    /* "lxml/etree.pyx":678
  *                 quoted_system_url = f"'{system_url}'"
  *             else:
  *                 quoted_system_url = f'"{system_url}"'             # <<<<<<<<<<<<<<
@@ -54925,7 +55007,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
  *             if system_url:
  */
     /*else*/ {
-      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 677, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 678, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_9 = 0;
       __pyx_t_10 = 127;
@@ -54933,7 +55015,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__23);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u__23);
-      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_system_url, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 677, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_system_url, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 678, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_10;
       __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
@@ -54944,7 +55026,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__23);
       PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__23);
-      __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 677, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 678, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_v_quoted_system_url = ((PyObject*)__pyx_t_1);
@@ -54952,7 +55034,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     }
     __pyx_L6:;
 
-    /* "lxml/etree.pyx":669
+    /* "lxml/etree.pyx":670
  *         """Returns a DOCTYPE declaration string for the document."""
  *         root_name, public_id, system_url = self._doc.getdoctype()
  *         if system_url:             # <<<<<<<<<<<<<<
@@ -54961,27 +55043,27 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
  */
   }
 
-  /* "lxml/etree.pyx":678
+  /* "lxml/etree.pyx":679
  *             else:
  *                 quoted_system_url = f'"{system_url}"'
  *         if public_id:             # <<<<<<<<<<<<<<
  *             if system_url:
  *                 return f'<!DOCTYPE {root_name} PUBLIC "{public_id}" {quoted_system_url}>'
  */
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_public_id); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 678, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_public_id); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 679, __pyx_L1_error)
   if (__pyx_t_8) {
 
-    /* "lxml/etree.pyx":679
+    /* "lxml/etree.pyx":680
  *                 quoted_system_url = f'"{system_url}"'
  *         if public_id:
  *             if system_url:             # <<<<<<<<<<<<<<
  *                 return f'<!DOCTYPE {root_name} PUBLIC "{public_id}" {quoted_system_url}>'
  *             else:
  */
-    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_system_url); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 679, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_system_url); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 680, __pyx_L1_error)
     if (__pyx_t_8) {
 
-      /* "lxml/etree.pyx":680
+      /* "lxml/etree.pyx":681
  *         if public_id:
  *             if system_url:
  *                 return f'<!DOCTYPE {root_name} PUBLIC "{public_id}" {quoted_system_url}>'             # <<<<<<<<<<<<<<
@@ -54989,7 +55071,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
  *                 return f'<!DOCTYPE {root_name} PUBLIC "{public_id}">'
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 680, __pyx_L1_error)
+      __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 681, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_9 = 0;
       __pyx_t_10 = 127;
@@ -54997,7 +55079,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 10;
       __Pyx_GIVEREF(__pyx_kp_u_DOCTYPE);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_DOCTYPE);
-      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_root_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 680, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_root_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 681, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_10;
       __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
@@ -55008,7 +55090,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 9;
       __Pyx_GIVEREF(__pyx_kp_u_PUBLIC);
       PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_PUBLIC);
-      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_public_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 680, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_public_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 681, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_10;
       __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
@@ -55019,7 +55101,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 2;
       __Pyx_GIVEREF(__pyx_kp_u__25);
       PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u__25);
-      if (unlikely(!__pyx_v_quoted_system_url)) { __Pyx_RaiseUnboundLocalError("quoted_system_url"); __PYX_ERR(0, 680, __pyx_L1_error) }
+      if (unlikely(!__pyx_v_quoted_system_url)) { __Pyx_RaiseUnboundLocalError("quoted_system_url"); __PYX_ERR(0, 681, __pyx_L1_error) }
       __Pyx_INCREF(__pyx_v_quoted_system_url);
       __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_quoted_system_url) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_quoted_system_url) : __pyx_t_10;
       __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_v_quoted_system_url);
@@ -55029,14 +55111,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__26);
       PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_kp_u__26);
-      __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 7, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 680, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 7, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 681, __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/etree.pyx":679
+      /* "lxml/etree.pyx":680
  *                 quoted_system_url = f'"{system_url}"'
  *         if public_id:
  *             if system_url:             # <<<<<<<<<<<<<<
@@ -55045,7 +55127,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
  */
     }
 
-    /* "lxml/etree.pyx":682
+    /* "lxml/etree.pyx":683
  *                 return f'<!DOCTYPE {root_name} PUBLIC "{public_id}" {quoted_system_url}>'
  *             else:
  *                 return f'<!DOCTYPE {root_name} PUBLIC "{public_id}">'             # <<<<<<<<<<<<<<
@@ -55054,7 +55136,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
  */
     /*else*/ {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 682, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 683, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_9 = 0;
       __pyx_t_10 = 127;
@@ -55062,7 +55144,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 10;
       __Pyx_GIVEREF(__pyx_kp_u_DOCTYPE);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_DOCTYPE);
-      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_root_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 682, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_root_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 683, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_10;
       __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
@@ -55073,7 +55155,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 9;
       __Pyx_GIVEREF(__pyx_kp_u_PUBLIC);
       PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_PUBLIC);
-      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_public_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 682, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_public_id, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 683, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_10;
       __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
@@ -55084,7 +55166,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       __pyx_t_9 += 2;
       __Pyx_GIVEREF(__pyx_kp_u__27);
       PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_kp_u__27);
-      __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_4, 5, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 682, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_4, 5, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 683, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_r = __pyx_t_1;
@@ -55092,7 +55174,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
       goto __pyx_L0;
     }
 
-    /* "lxml/etree.pyx":678
+    /* "lxml/etree.pyx":679
  *             else:
  *                 quoted_system_url = f'"{system_url}"'
  *         if public_id:             # <<<<<<<<<<<<<<
@@ -55101,17 +55183,17 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
  */
   }
 
-  /* "lxml/etree.pyx":683
+  /* "lxml/etree.pyx":684
  *             else:
  *                 return f'<!DOCTYPE {root_name} PUBLIC "{public_id}">'
  *         elif system_url:             # <<<<<<<<<<<<<<
  *             return f'<!DOCTYPE {root_name} SYSTEM {quoted_system_url}>'
  *         elif self._doc.hasdoctype():
  */
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_system_url); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 683, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_system_url); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 684, __pyx_L1_error)
   if (__pyx_t_8) {
 
-    /* "lxml/etree.pyx":684
+    /* "lxml/etree.pyx":685
  *                 return f'<!DOCTYPE {root_name} PUBLIC "{public_id}">'
  *         elif system_url:
  *             return f'<!DOCTYPE {root_name} SYSTEM {quoted_system_url}>'             # <<<<<<<<<<<<<<
@@ -55119,7 +55201,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
  *             return f'<!DOCTYPE {root_name}>'
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 684, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_9 = 0;
     __pyx_t_10 = 127;
@@ -55127,7 +55209,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     __pyx_t_9 += 10;
     __Pyx_GIVEREF(__pyx_kp_u_DOCTYPE);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_DOCTYPE);
-    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_root_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 684, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_root_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 685, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_10;
     __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
@@ -55138,7 +55220,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     __pyx_t_9 += 8;
     __Pyx_GIVEREF(__pyx_kp_u_SYSTEM);
     PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_SYSTEM);
-    if (unlikely(!__pyx_v_quoted_system_url)) { __Pyx_RaiseUnboundLocalError("quoted_system_url"); __PYX_ERR(0, 684, __pyx_L1_error) }
+    if (unlikely(!__pyx_v_quoted_system_url)) { __Pyx_RaiseUnboundLocalError("quoted_system_url"); __PYX_ERR(0, 685, __pyx_L1_error) }
     __Pyx_INCREF(__pyx_v_quoted_system_url);
     __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_quoted_system_url) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_quoted_system_url) : __pyx_t_10;
     __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_v_quoted_system_url);
@@ -55148,14 +55230,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     __pyx_t_9 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__26);
     PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u__26);
-    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 684, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 685, __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/etree.pyx":683
+    /* "lxml/etree.pyx":684
  *             else:
  *                 return f'<!DOCTYPE {root_name} PUBLIC "{public_id}">'
  *         elif system_url:             # <<<<<<<<<<<<<<
@@ -55164,7 +55246,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
  */
   }
 
-  /* "lxml/etree.pyx":685
+  /* "lxml/etree.pyx":686
  *         elif system_url:
  *             return f'<!DOCTYPE {root_name} SYSTEM {quoted_system_url}>'
  *         elif self._doc.hasdoctype():             # <<<<<<<<<<<<<<
@@ -55174,7 +55256,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
   __pyx_t_8 = (__pyx_f_4lxml_5etree_9_Document_hasdoctype(__pyx_v_self->_doc) != 0);
   if (__pyx_t_8) {
 
-    /* "lxml/etree.pyx":686
+    /* "lxml/etree.pyx":687
  *             return f'<!DOCTYPE {root_name} SYSTEM {quoted_system_url}>'
  *         elif self._doc.hasdoctype():
  *             return f'<!DOCTYPE {root_name}>'             # <<<<<<<<<<<<<<
@@ -55182,7 +55264,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
  *             return u''
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 686, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 687, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_9 = 0;
     __pyx_t_10 = 127;
@@ -55190,7 +55272,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     __pyx_t_9 += 10;
     __Pyx_GIVEREF(__pyx_kp_u_DOCTYPE);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_DOCTYPE);
-    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_root_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 686, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_root_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 687, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_10;
     __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
@@ -55201,14 +55283,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     __pyx_t_9 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__26);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__26);
-    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 686, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 687, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":685
+    /* "lxml/etree.pyx":686
  *         elif system_url:
  *             return f'<!DOCTYPE {root_name} SYSTEM {quoted_system_url}>'
  *         elif self._doc.hasdoctype():             # <<<<<<<<<<<<<<
@@ -55217,7 +55299,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
  */
   }
 
-  /* "lxml/etree.pyx":688
+  /* "lxml/etree.pyx":689
  *             return f'<!DOCTYPE {root_name}>'
  *         else:
  *             return u''             # <<<<<<<<<<<<<<
@@ -55231,7 +55313,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
     goto __pyx_L0;
   }
 
-  /* "lxml/etree.pyx":666
+  /* "lxml/etree.pyx":667
  * 
  *     @property
  *     def doctype(self):             # <<<<<<<<<<<<<<
@@ -55258,7 +55340,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_7doctype___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":691
+/* "lxml/etree.pyx":692
  * 
  *     @property
  *     def internalDTD(self):             # <<<<<<<<<<<<<<
@@ -55288,7 +55370,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11internalDTD___get__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":693
+  /* "lxml/etree.pyx":694
  *     def internalDTD(self):
  *         """Returns a DTD validator based on the internal subset of the document."""
  *         return _dtdFactory(self._doc._c_doc.intSubset)             # <<<<<<<<<<<<<<
@@ -55296,13 +55378,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11internalDTD___get__(struct __p
  *     @property
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__dtdFactory(__pyx_v_self->_doc->_c_doc->intSubset)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 693, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__dtdFactory(__pyx_v_self->_doc->_c_doc->intSubset)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 694, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":691
+  /* "lxml/etree.pyx":692
  * 
  *     @property
  *     def internalDTD(self):             # <<<<<<<<<<<<<<
@@ -55321,7 +55403,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11internalDTD___get__(struct __p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":696
+/* "lxml/etree.pyx":697
  * 
  *     @property
  *     def externalDTD(self):             # <<<<<<<<<<<<<<
@@ -55351,7 +55433,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11externalDTD___get__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":698
+  /* "lxml/etree.pyx":699
  *     def externalDTD(self):
  *         """Returns a DTD validator based on the external subset of the document."""
  *         return _dtdFactory(self._doc._c_doc.extSubset)             # <<<<<<<<<<<<<<
@@ -55359,13 +55441,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11externalDTD___get__(struct __p
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__dtdFactory(__pyx_v_self->_doc->_c_doc->extSubset)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 698, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__dtdFactory(__pyx_v_self->_doc->_c_doc->extSubset)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":696
+  /* "lxml/etree.pyx":697
  * 
  *     @property
  *     def externalDTD(self):             # <<<<<<<<<<<<<<
@@ -55384,7 +55466,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7DocInfo_11externalDTD___get__(struct __p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":714
+/* "lxml/etree.pyx":715
  *     cdef object _tag
  * 
  *     def _init(self):             # <<<<<<<<<<<<<<
@@ -55419,7 +55501,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element__init(CYTHON_UNUSED struct Lxml
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":723
+/* "lxml/etree.pyx":724
  *     @cython.linetrace(False)
  *     @cython.profile(False)
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -55447,7 +55529,7 @@ static void __pyx_pf_4lxml_5etree_8_Element_2__dealloc__(struct LxmlElement *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "lxml/etree.pyx":726
+  /* "lxml/etree.pyx":727
  *         #print "trying to free node:", <int>self._c_node
  *         #displayNode(self._c_node, 0)
  *         if self._c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -55457,16 +55539,16 @@ static void __pyx_pf_4lxml_5etree_8_Element_2__dealloc__(struct LxmlElement *__p
   __pyx_t_1 = ((__pyx_v_self->_c_node != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":727
+    /* "lxml/etree.pyx":728
  *         #displayNode(self._c_node, 0)
  *         if self._c_node is not NULL:
  *             _unregisterProxy(self)             # <<<<<<<<<<<<<<
  *             attemptDeallocation(self._c_node)
  * 
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree__unregisterProxy(__pyx_v_self); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 727, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_5etree__unregisterProxy(__pyx_v_self); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 728, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":728
+    /* "lxml/etree.pyx":729
  *         if self._c_node is not NULL:
  *             _unregisterProxy(self)
  *             attemptDeallocation(self._c_node)             # <<<<<<<<<<<<<<
@@ -55475,7 +55557,7 @@ static void __pyx_pf_4lxml_5etree_8_Element_2__dealloc__(struct LxmlElement *__p
  */
     (void)(__pyx_f_4lxml_5etree_attemptDeallocation(__pyx_v_self->_c_node));
 
-    /* "lxml/etree.pyx":726
+    /* "lxml/etree.pyx":727
  *         #print "trying to free node:", <int>self._c_node
  *         #displayNode(self._c_node, 0)
  *         if self._c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -55484,7 +55566,7 @@ static void __pyx_pf_4lxml_5etree_8_Element_2__dealloc__(struct LxmlElement *__p
  */
   }
 
-  /* "lxml/etree.pyx":723
+  /* "lxml/etree.pyx":724
  *     @cython.linetrace(False)
  *     @cython.profile(False)
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -55500,7 +55582,7 @@ static void __pyx_pf_4lxml_5etree_8_Element_2__dealloc__(struct LxmlElement *__p
   __Pyx_RefNannyFinishContext();
 }
 
-/* "lxml/etree.pyx":732
+/* "lxml/etree.pyx":733
  *     # MANIPULATORS
  * 
  *     def __setitem__(self, x, value):             # <<<<<<<<<<<<<<
@@ -55547,7 +55629,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "lxml/etree.pyx":737
+  /* "lxml/etree.pyx":738
  *         Replaces the given subelement index or slice.
  *         """
  *         cdef xmlNode* c_node = NULL             # <<<<<<<<<<<<<<
@@ -55556,7 +55638,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  */
   __pyx_v_c_node = NULL;
 
-  /* "lxml/etree.pyx":742
+  /* "lxml/etree.pyx":743
  *         cdef _Element element
  *         cdef bint left_to_right
  *         cdef Py_ssize_t slicelength = 0, step = 0             # <<<<<<<<<<<<<<
@@ -55566,16 +55648,16 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
   __pyx_v_slicelength = 0;
   __pyx_v_step = 0;
 
-  /* "lxml/etree.pyx":743
+  /* "lxml/etree.pyx":744
  *         cdef bint left_to_right
  *         cdef Py_ssize_t slicelength = 0, step = 0
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         if value is None:
  *             raise ValueError, u"cannot assign None"
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 743, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 744, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":744
+  /* "lxml/etree.pyx":745
  *         cdef Py_ssize_t slicelength = 0, step = 0
  *         _assertValidNode(self)
  *         if value is None:             # <<<<<<<<<<<<<<
@@ -55586,7 +55668,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":745
+    /* "lxml/etree.pyx":746
  *         _assertValidNode(self)
  *         if value is None:
  *             raise ValueError, u"cannot assign None"             # <<<<<<<<<<<<<<
@@ -55594,9 +55676,9 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  *             # slice assignment
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_cannot_assign_None, 0, 0);
-    __PYX_ERR(0, 745, __pyx_L1_error)
+    __PYX_ERR(0, 746, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":744
+    /* "lxml/etree.pyx":745
  *         cdef Py_ssize_t slicelength = 0, step = 0
  *         _assertValidNode(self)
  *         if value is None:             # <<<<<<<<<<<<<<
@@ -55605,7 +55687,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  */
   }
 
-  /* "lxml/etree.pyx":746
+  /* "lxml/etree.pyx":747
  *         if value is None:
  *             raise ValueError, u"cannot assign None"
  *         if isinstance(x, slice):             # <<<<<<<<<<<<<<
@@ -55616,16 +55698,16 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":748
+    /* "lxml/etree.pyx":749
  *         if isinstance(x, slice):
  *             # slice assignment
  *             _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)             # <<<<<<<<<<<<<<
  *             if step > 0:
  *                 left_to_right = 1
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__findChildSlice(((PyObject*)__pyx_v_x), __pyx_v_self->_c_node, (&__pyx_v_c_node), (&__pyx_v_step), (&__pyx_v_slicelength)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 748, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__findChildSlice(((PyObject*)__pyx_v_x), __pyx_v_self->_c_node, (&__pyx_v_c_node), (&__pyx_v_step), (&__pyx_v_slicelength)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 749, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":749
+    /* "lxml/etree.pyx":750
  *             # slice assignment
  *             _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)
  *             if step > 0:             # <<<<<<<<<<<<<<
@@ -55635,7 +55717,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
     __pyx_t_2 = ((__pyx_v_step > 0) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":750
+      /* "lxml/etree.pyx":751
  *             _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)
  *             if step > 0:
  *                 left_to_right = 1             # <<<<<<<<<<<<<<
@@ -55644,7 +55726,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  */
       __pyx_v_left_to_right = 1;
 
-      /* "lxml/etree.pyx":749
+      /* "lxml/etree.pyx":750
  *             # slice assignment
  *             _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)
  *             if step > 0:             # <<<<<<<<<<<<<<
@@ -55654,7 +55736,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
       goto __pyx_L5;
     }
 
-    /* "lxml/etree.pyx":752
+    /* "lxml/etree.pyx":753
  *                 left_to_right = 1
  *             else:
  *                 left_to_right = 0             # <<<<<<<<<<<<<<
@@ -55664,7 +55746,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
     /*else*/ {
       __pyx_v_left_to_right = 0;
 
-      /* "lxml/etree.pyx":753
+      /* "lxml/etree.pyx":754
  *             else:
  *                 left_to_right = 0
  *                 step = -step             # <<<<<<<<<<<<<<
@@ -55675,16 +55757,16 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
     }
     __pyx_L5:;
 
-    /* "lxml/etree.pyx":754
+    /* "lxml/etree.pyx":755
  *                 left_to_right = 0
  *                 step = -step
  *             _replaceSlice(self, c_node, slicelength, step, left_to_right, value)             # <<<<<<<<<<<<<<
  *             return
  *         else:
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__replaceSlice(__pyx_v_self, __pyx_v_c_node, __pyx_v_slicelength, __pyx_v_step, __pyx_v_left_to_right, __pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 754, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__replaceSlice(__pyx_v_self, __pyx_v_c_node, __pyx_v_slicelength, __pyx_v_step, __pyx_v_left_to_right, __pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 755, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":755
+    /* "lxml/etree.pyx":756
  *                 step = -step
  *             _replaceSlice(self, c_node, slicelength, step, left_to_right, value)
  *             return             # <<<<<<<<<<<<<<
@@ -55694,7 +55776,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":746
+    /* "lxml/etree.pyx":747
  *         if value is None:
  *             raise ValueError, u"cannot assign None"
  *         if isinstance(x, slice):             # <<<<<<<<<<<<<<
@@ -55703,7 +55785,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  */
   }
 
-  /* "lxml/etree.pyx":758
+  /* "lxml/etree.pyx":759
  *         else:
  *             # otherwise: normal item assignment
  *             element = value             # <<<<<<<<<<<<<<
@@ -55711,32 +55793,32 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  *             c_node = _findChild(self._c_node, x)
  */
   /*else*/ {
-    if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 758, __pyx_L1_error)
+    if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 759, __pyx_L1_error)
     __pyx_t_4 = __pyx_v_value;
     __Pyx_INCREF(__pyx_t_4);
     __pyx_v_element = ((struct LxmlElement *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":759
+    /* "lxml/etree.pyx":760
  *             # otherwise: normal item assignment
  *             element = value
  *             _assertValidNode(element)             # <<<<<<<<<<<<<<
  *             c_node = _findChild(self._c_node, x)
  *             if c_node is NULL:
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 759, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 760, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":760
+    /* "lxml/etree.pyx":761
  *             element = value
  *             _assertValidNode(element)
  *             c_node = _findChild(self._c_node, x)             # <<<<<<<<<<<<<<
  *             if c_node is NULL:
  *                 raise IndexError, u"list index out of range"
  */
-    __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_x); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 760, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_x); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 761, __pyx_L1_error)
     __pyx_v_c_node = __pyx_f_4lxml_5etree__findChild(__pyx_v_self->_c_node, __pyx_t_5);
 
-    /* "lxml/etree.pyx":761
+    /* "lxml/etree.pyx":762
  *             _assertValidNode(element)
  *             c_node = _findChild(self._c_node, x)
  *             if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -55746,7 +55828,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
     __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0);
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":762
+      /* "lxml/etree.pyx":763
  *             c_node = _findChild(self._c_node, x)
  *             if c_node is NULL:
  *                 raise IndexError, u"list index out of range"             # <<<<<<<<<<<<<<
@@ -55754,9 +55836,9 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  *             c_next = element._c_node.next
  */
       __Pyx_Raise(__pyx_builtin_IndexError, __pyx_kp_u_list_index_out_of_range, 0, 0);
-      __PYX_ERR(0, 762, __pyx_L1_error)
+      __PYX_ERR(0, 763, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":761
+      /* "lxml/etree.pyx":762
  *             _assertValidNode(element)
  *             c_node = _findChild(self._c_node, x)
  *             if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -55765,7 +55847,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  */
     }
 
-    /* "lxml/etree.pyx":763
+    /* "lxml/etree.pyx":764
  *             if c_node is NULL:
  *                 raise IndexError, u"list index out of range"
  *             c_source_doc = element._c_node.doc             # <<<<<<<<<<<<<<
@@ -55775,7 +55857,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
     __pyx_t_6 = __pyx_v_element->_c_node->doc;
     __pyx_v_c_source_doc = __pyx_t_6;
 
-    /* "lxml/etree.pyx":764
+    /* "lxml/etree.pyx":765
  *                 raise IndexError, u"list index out of range"
  *             c_source_doc = element._c_node.doc
  *             c_next = element._c_node.next             # <<<<<<<<<<<<<<
@@ -55785,7 +55867,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
     __pyx_t_7 = __pyx_v_element->_c_node->next;
     __pyx_v_c_next = __pyx_t_7;
 
-    /* "lxml/etree.pyx":765
+    /* "lxml/etree.pyx":766
  *             c_source_doc = element._c_node.doc
  *             c_next = element._c_node.next
  *             _removeText(c_node.next)             # <<<<<<<<<<<<<<
@@ -55794,7 +55876,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  */
     __pyx_f_4lxml_5etree__removeText(__pyx_v_c_node->next);
 
-    /* "lxml/etree.pyx":766
+    /* "lxml/etree.pyx":767
  *             c_next = element._c_node.next
  *             _removeText(c_node.next)
  *             tree.xmlReplaceNode(c_node, element._c_node)             # <<<<<<<<<<<<<<
@@ -55803,7 +55885,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  */
     (void)(xmlReplaceNode(__pyx_v_c_node, __pyx_v_element->_c_node));
 
-    /* "lxml/etree.pyx":767
+    /* "lxml/etree.pyx":768
  *             _removeText(c_node.next)
  *             tree.xmlReplaceNode(c_node, element._c_node)
  *             _moveTail(c_next, element._c_node)             # <<<<<<<<<<<<<<
@@ -55812,7 +55894,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  */
     __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_element->_c_node);
 
-    /* "lxml/etree.pyx":768
+    /* "lxml/etree.pyx":769
  *             tree.xmlReplaceNode(c_node, element._c_node)
  *             _moveTail(c_next, element._c_node)
  *             moveNodeToDocument(self._doc, c_source_doc, element._c_node)             # <<<<<<<<<<<<<<
@@ -55821,10 +55903,10 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  */
     __pyx_t_4 = ((PyObject *)__pyx_v_self->_doc);
     __Pyx_INCREF(__pyx_t_4);
-    __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_element->_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 768, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_element->_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 769, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":769
+    /* "lxml/etree.pyx":770
  *             _moveTail(c_next, element._c_node)
  *             moveNodeToDocument(self._doc, c_source_doc, element._c_node)
  *             if not attemptDeallocation(c_node):             # <<<<<<<<<<<<<<
@@ -55834,7 +55916,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
     __pyx_t_2 = ((!(__pyx_f_4lxml_5etree_attemptDeallocation(__pyx_v_c_node) != 0)) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":770
+      /* "lxml/etree.pyx":771
  *             moveNodeToDocument(self._doc, c_source_doc, element._c_node)
  *             if not attemptDeallocation(c_node):
  *                 moveNodeToDocument(self._doc, c_node.doc, c_node)             # <<<<<<<<<<<<<<
@@ -55843,10 +55925,10 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
  */
       __pyx_t_4 = ((PyObject *)__pyx_v_self->_doc);
       __Pyx_INCREF(__pyx_t_4);
-      __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_node->doc, __pyx_v_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 770, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_node->doc, __pyx_v_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 771, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "lxml/etree.pyx":769
+      /* "lxml/etree.pyx":770
  *             _moveTail(c_next, element._c_node)
  *             moveNodeToDocument(self._doc, c_source_doc, element._c_node)
  *             if not attemptDeallocation(c_node):             # <<<<<<<<<<<<<<
@@ -55856,7 +55938,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
     }
   }
 
-  /* "lxml/etree.pyx":732
+  /* "lxml/etree.pyx":733
  *     # MANIPULATORS
  * 
  *     def __setitem__(self, x, value):             # <<<<<<<<<<<<<<
@@ -55877,7 +55959,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4__setitem__(struct LxmlElement *__py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":772
+/* "lxml/etree.pyx":773
  *                 moveNodeToDocument(self._doc, c_node.doc, c_node)
  * 
  *     def __delitem__(self, x):             # <<<<<<<<<<<<<<
@@ -55921,7 +56003,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__delitem__", 0);
 
-  /* "lxml/etree.pyx":777
+  /* "lxml/etree.pyx":778
  *         Deletes the given subelement or a slice.
  *         """
  *         cdef xmlNode* c_node = NULL             # <<<<<<<<<<<<<<
@@ -55930,7 +56012,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  */
   __pyx_v_c_node = NULL;
 
-  /* "lxml/etree.pyx":779
+  /* "lxml/etree.pyx":780
  *         cdef xmlNode* c_node = NULL
  *         cdef xmlNode* c_next
  *         cdef Py_ssize_t step = 0, slicelength = 0             # <<<<<<<<<<<<<<
@@ -55940,16 +56022,16 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
   __pyx_v_step = 0;
   __pyx_v_slicelength = 0;
 
-  /* "lxml/etree.pyx":780
+  /* "lxml/etree.pyx":781
  *         cdef xmlNode* c_next
  *         cdef Py_ssize_t step = 0, slicelength = 0
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         if isinstance(x, slice):
  *             # slice deletion
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 780, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 781, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":781
+  /* "lxml/etree.pyx":782
  *         cdef Py_ssize_t step = 0, slicelength = 0
  *         _assertValidNode(self)
  *         if isinstance(x, slice):             # <<<<<<<<<<<<<<
@@ -55960,18 +56042,18 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":783
+    /* "lxml/etree.pyx":784
  *         if isinstance(x, slice):
  *             # slice deletion
  *             if _isFullSlice(<slice>x):             # <<<<<<<<<<<<<<
  *                 c_node = self._c_node.children
  *                 if c_node is not NULL:
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__isFullSlice(((PyObject*)__pyx_v_x)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 783, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__isFullSlice(((PyObject*)__pyx_v_x)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 784, __pyx_L1_error)
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":784
+      /* "lxml/etree.pyx":785
  *             # slice deletion
  *             if _isFullSlice(<slice>x):
  *                 c_node = self._c_node.children             # <<<<<<<<<<<<<<
@@ -55981,7 +56063,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
       __pyx_t_4 = __pyx_v_self->_c_node->children;
       __pyx_v_c_node = __pyx_t_4;
 
-      /* "lxml/etree.pyx":785
+      /* "lxml/etree.pyx":786
  *             if _isFullSlice(<slice>x):
  *                 c_node = self._c_node.children
  *                 if c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -55991,7 +56073,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
       __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0);
       if (__pyx_t_2) {
 
-        /* "lxml/etree.pyx":786
+        /* "lxml/etree.pyx":787
  *                 c_node = self._c_node.children
  *                 if c_node is not NULL:
  *                     if not _isElement(c_node):             # <<<<<<<<<<<<<<
@@ -56001,7 +56083,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
         __pyx_t_2 = ((!(_isElement(__pyx_v_c_node) != 0)) != 0);
         if (__pyx_t_2) {
 
-          /* "lxml/etree.pyx":787
+          /* "lxml/etree.pyx":788
  *                 if c_node is not NULL:
  *                     if not _isElement(c_node):
  *                         c_node = _nextElement(c_node)             # <<<<<<<<<<<<<<
@@ -56010,7 +56092,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  */
           __pyx_v_c_node = __pyx_f_4lxml_5etree__nextElement(__pyx_v_c_node);
 
-          /* "lxml/etree.pyx":786
+          /* "lxml/etree.pyx":787
  *                 c_node = self._c_node.children
  *                 if c_node is not NULL:
  *                     if not _isElement(c_node):             # <<<<<<<<<<<<<<
@@ -56019,7 +56101,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  */
         }
 
-        /* "lxml/etree.pyx":788
+        /* "lxml/etree.pyx":789
  *                     if not _isElement(c_node):
  *                         c_node = _nextElement(c_node)
  *                     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -56030,7 +56112,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
           __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0);
           if (!__pyx_t_2) break;
 
-          /* "lxml/etree.pyx":789
+          /* "lxml/etree.pyx":790
  *                         c_node = _nextElement(c_node)
  *                     while c_node is not NULL:
  *                         c_next = _nextElement(c_node)             # <<<<<<<<<<<<<<
@@ -56039,7 +56121,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  */
           __pyx_v_c_next = __pyx_f_4lxml_5etree__nextElement(__pyx_v_c_node);
 
-          /* "lxml/etree.pyx":790
+          /* "lxml/etree.pyx":791
  *                     while c_node is not NULL:
  *                         c_next = _nextElement(c_node)
  *                         _removeNode(self._doc, c_node)             # <<<<<<<<<<<<<<
@@ -56048,10 +56130,10 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  */
           __pyx_t_5 = ((PyObject *)__pyx_v_self->_doc);
           __Pyx_INCREF(__pyx_t_5);
-          __pyx_t_1 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 790, __pyx_L1_error)
+          __pyx_t_1 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 791, __pyx_L1_error)
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-          /* "lxml/etree.pyx":791
+          /* "lxml/etree.pyx":792
  *                         c_next = _nextElement(c_node)
  *                         _removeNode(self._doc, c_node)
  *                         c_node = c_next             # <<<<<<<<<<<<<<
@@ -56061,7 +56143,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
           __pyx_v_c_node = __pyx_v_c_next;
         }
 
-        /* "lxml/etree.pyx":785
+        /* "lxml/etree.pyx":786
  *             if _isFullSlice(<slice>x):
  *                 c_node = self._c_node.children
  *                 if c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -56070,7 +56152,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  */
       }
 
-      /* "lxml/etree.pyx":783
+      /* "lxml/etree.pyx":784
  *         if isinstance(x, slice):
  *             # slice deletion
  *             if _isFullSlice(<slice>x):             # <<<<<<<<<<<<<<
@@ -56080,7 +56162,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
       goto __pyx_L4;
     }
 
-    /* "lxml/etree.pyx":793
+    /* "lxml/etree.pyx":794
  *                         c_node = c_next
  *             else:
  *                 _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)             # <<<<<<<<<<<<<<
@@ -56088,9 +56170,9 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  *         else:
  */
     /*else*/ {
-      __pyx_t_1 = __pyx_f_4lxml_5etree__findChildSlice(((PyObject*)__pyx_v_x), __pyx_v_self->_c_node, (&__pyx_v_c_node), (&__pyx_v_step), (&__pyx_v_slicelength)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 793, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_4lxml_5etree__findChildSlice(((PyObject*)__pyx_v_x), __pyx_v_self->_c_node, (&__pyx_v_c_node), (&__pyx_v_step), (&__pyx_v_slicelength)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 794, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":794
+      /* "lxml/etree.pyx":795
  *             else:
  *                 _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)
  *                 _deleteSlice(self._doc, c_node, slicelength, step)             # <<<<<<<<<<<<<<
@@ -56099,12 +56181,12 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  */
       __pyx_t_5 = ((PyObject *)__pyx_v_self->_doc);
       __Pyx_INCREF(__pyx_t_5);
-      __pyx_t_1 = __pyx_f_4lxml_5etree__deleteSlice(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_node, __pyx_v_slicelength, __pyx_v_step); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 794, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_4lxml_5etree__deleteSlice(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_node, __pyx_v_slicelength, __pyx_v_step); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 795, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     }
     __pyx_L4:;
 
-    /* "lxml/etree.pyx":781
+    /* "lxml/etree.pyx":782
  *         cdef Py_ssize_t step = 0, slicelength = 0
  *         _assertValidNode(self)
  *         if isinstance(x, slice):             # <<<<<<<<<<<<<<
@@ -56114,7 +56196,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":797
+  /* "lxml/etree.pyx":798
  *         else:
  *             # item deletion
  *             c_node = _findChild(self._c_node, x)             # <<<<<<<<<<<<<<
@@ -56122,10 +56204,10 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  *                 raise IndexError, f"index out of range: {x}"
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_x); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 797, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_x); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 798, __pyx_L1_error)
     __pyx_v_c_node = __pyx_f_4lxml_5etree__findChild(__pyx_v_self->_c_node, __pyx_t_6);
 
-    /* "lxml/etree.pyx":798
+    /* "lxml/etree.pyx":799
  *             # item deletion
  *             c_node = _findChild(self._c_node, x)
  *             if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -56135,23 +56217,23 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
     __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0);
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":799
+      /* "lxml/etree.pyx":800
  *             c_node = _findChild(self._c_node, x)
  *             if c_node is NULL:
  *                 raise IndexError, f"index out of range: {x}"             # <<<<<<<<<<<<<<
  *             _removeNode(self._doc, c_node)
  * 
  */
-      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_x, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 799, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_x, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 800, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_kp_u_index_out_of_range, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 799, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_kp_u_index_out_of_range, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 800, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_7, 0, 0);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __PYX_ERR(0, 799, __pyx_L1_error)
+      __PYX_ERR(0, 800, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":798
+      /* "lxml/etree.pyx":799
  *             # item deletion
  *             c_node = _findChild(self._c_node, x)
  *             if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -56160,7 +56242,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  */
     }
 
-    /* "lxml/etree.pyx":800
+    /* "lxml/etree.pyx":801
  *             if c_node is NULL:
  *                 raise IndexError, f"index out of range: {x}"
  *             _removeNode(self._doc, c_node)             # <<<<<<<<<<<<<<
@@ -56169,12 +56251,12 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
  */
     __pyx_t_7 = ((PyObject *)__pyx_v_self->_doc);
     __Pyx_INCREF(__pyx_t_7);
-    __pyx_t_1 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_7), __pyx_v_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 800, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_7), __pyx_v_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 801, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":772
+  /* "lxml/etree.pyx":773
  *                 moveNodeToDocument(self._doc, c_node.doc, c_node)
  * 
  *     def __delitem__(self, x):             # <<<<<<<<<<<<<<
@@ -56195,7 +56277,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_6__delitem__(struct LxmlElement *__py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":802
+/* "lxml/etree.pyx":803
  *             _removeNode(self._doc, c_node)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
@@ -56229,7 +56311,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_8__deepcopy__(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__deepcopy__", 0);
 
-  /* "lxml/etree.pyx":804
+  /* "lxml/etree.pyx":805
  *     def __deepcopy__(self, memo):
  *         u"__deepcopy__(self, memo)"
  *         return self.__copy__()             # <<<<<<<<<<<<<<
@@ -56237,7 +56319,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_8__deepcopy__(struct LxmlElemen
  *     def __copy__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_copy_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 804, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_copy_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -56251,14 +56333,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_8__deepcopy__(struct LxmlElemen
   }
   __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, 804, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __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/etree.pyx":802
+  /* "lxml/etree.pyx":803
  *             _removeNode(self._doc, c_node)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
@@ -56279,7 +56361,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_8__deepcopy__(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":806
+/* "lxml/etree.pyx":807
  *         return self.__copy__()
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
@@ -56321,26 +56403,26 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__copy__", 0);
 
-  /* "lxml/etree.pyx":811
+  /* "lxml/etree.pyx":812
  *         cdef xmlNode* c_node
  *         cdef _Document new_doc
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         c_doc = _copyDocRoot(self._doc._c_doc, self._c_node) # recursive
  *         new_doc = _documentFactory(c_doc, self._doc._parser)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 811, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 812, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":812
+  /* "lxml/etree.pyx":813
  *         cdef _Document new_doc
  *         _assertValidNode(self)
  *         c_doc = _copyDocRoot(self._doc._c_doc, self._c_node) # recursive             # <<<<<<<<<<<<<<
  *         new_doc = _documentFactory(c_doc, self._doc._parser)
  *         root = new_doc.getroot()
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__copyDocRoot(__pyx_v_self->_doc->_c_doc, __pyx_v_self->_c_node); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(0, 812, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__copyDocRoot(__pyx_v_self->_doc->_c_doc, __pyx_v_self->_c_node); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(0, 813, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_2;
 
-  /* "lxml/etree.pyx":813
+  /* "lxml/etree.pyx":814
  *         _assertValidNode(self)
  *         c_doc = _copyDocRoot(self._doc._c_doc, self._c_node) # recursive
  *         new_doc = _documentFactory(c_doc, self._doc._parser)             # <<<<<<<<<<<<<<
@@ -56349,25 +56431,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
  */
   __pyx_t_3 = ((PyObject *)__pyx_v_self->_doc->_parser);
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 813, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 814, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_new_doc = ((struct LxmlDocument *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":814
+  /* "lxml/etree.pyx":815
  *         c_doc = _copyDocRoot(self._doc._c_doc, self._c_node) # recursive
  *         new_doc = _documentFactory(c_doc, self._doc._parser)
  *         root = new_doc.getroot()             # <<<<<<<<<<<<<<
  *         if root is not None:
  *             return root
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_new_doc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 814, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_new_doc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 815, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_root = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":815
+  /* "lxml/etree.pyx":816
  *         new_doc = _documentFactory(c_doc, self._doc._parser)
  *         root = new_doc.getroot()
  *         if root is not None:             # <<<<<<<<<<<<<<
@@ -56378,7 +56460,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
 
-    /* "lxml/etree.pyx":816
+    /* "lxml/etree.pyx":817
  *         root = new_doc.getroot()
  *         if root is not None:
  *             return root             # <<<<<<<<<<<<<<
@@ -56390,7 +56472,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
     __pyx_r = __pyx_v_root;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":815
+    /* "lxml/etree.pyx":816
  *         new_doc = _documentFactory(c_doc, self._doc._parser)
  *         root = new_doc.getroot()
  *         if root is not None:             # <<<<<<<<<<<<<<
@@ -56399,7 +56481,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
  */
   }
 
-  /* "lxml/etree.pyx":818
+  /* "lxml/etree.pyx":819
  *             return root
  *         # Comment/PI
  *         c_node = c_doc.children             # <<<<<<<<<<<<<<
@@ -56409,7 +56491,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
   __pyx_t_7 = __pyx_v_c_doc->children;
   __pyx_v_c_node = __pyx_t_7;
 
-  /* "lxml/etree.pyx":819
+  /* "lxml/etree.pyx":820
  *         # Comment/PI
  *         c_node = c_doc.children
  *         while c_node is not NULL and c_node.type != self._c_node.type:             # <<<<<<<<<<<<<<
@@ -56428,7 +56510,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
     __pyx_L6_bool_binop_done:;
     if (!__pyx_t_6) break;
 
-    /* "lxml/etree.pyx":820
+    /* "lxml/etree.pyx":821
  *         c_node = c_doc.children
  *         while c_node is not NULL and c_node.type != self._c_node.type:
  *             c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -56439,7 +56521,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
     __pyx_v_c_node = __pyx_t_7;
   }
 
-  /* "lxml/etree.pyx":821
+  /* "lxml/etree.pyx":822
  *         while c_node is not NULL and c_node.type != self._c_node.type:
  *             c_node = c_node.next
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -56449,7 +56531,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
   __pyx_t_6 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_6) {
 
-    /* "lxml/etree.pyx":822
+    /* "lxml/etree.pyx":823
  *             c_node = c_node.next
  *         if c_node is NULL:
  *             return None             # <<<<<<<<<<<<<<
@@ -56460,7 +56542,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":821
+    /* "lxml/etree.pyx":822
  *         while c_node is not NULL and c_node.type != self._c_node.type:
  *             c_node = c_node.next
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -56469,7 +56551,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
  */
   }
 
-  /* "lxml/etree.pyx":823
+  /* "lxml/etree.pyx":824
  *         if c_node is NULL:
  *             return None
  *         return _elementFactory(new_doc, c_node)             # <<<<<<<<<<<<<<
@@ -56477,13 +56559,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
  *     def set(self, key, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_new_doc, __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 823, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_new_doc, __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 824, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":806
+  /* "lxml/etree.pyx":807
  *         return self.__copy__()
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
@@ -56505,7 +56587,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10__copy__(struct LxmlElement *
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":825
+/* "lxml/etree.pyx":826
  *         return _elementFactory(new_doc, c_node)
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
@@ -56549,11 +56631,11 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_13set(PyObject *__pyx_v_self, P
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); __PYX_ERR(0, 825, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); __PYX_ERR(0, 826, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) __PYX_ERR(0, 825, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) __PYX_ERR(0, 826, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -56566,7 +56648,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_13set(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 825, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 826, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -56588,25 +56670,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_12set(struct LxmlElement *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set", 0);
 
-  /* "lxml/etree.pyx":832
+  /* "lxml/etree.pyx":833
  *         an attribute without value (just the attribute name).
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         _setAttributeValue(self, key, value)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 832, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 833, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":833
+  /* "lxml/etree.pyx":834
  *         """
  *         _assertValidNode(self)
  *         _setAttributeValue(self, key, value)             # <<<<<<<<<<<<<<
  * 
  *     def append(self, _Element element not None):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__setAttributeValue(__pyx_v_self, __pyx_v_key, __pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 833, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__setAttributeValue(__pyx_v_self, __pyx_v_key, __pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 834, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":825
+  /* "lxml/etree.pyx":826
  *         return _elementFactory(new_doc, c_node)
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
@@ -56626,7 +56708,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_12set(struct LxmlElement *__pyx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":835
+/* "lxml/etree.pyx":836
  *         _setAttributeValue(self, key, value)
  * 
  *     def append(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -56645,7 +56727,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_15append(PyObject *__pyx_v_self
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("append (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 835, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 836, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_8_Element_14append(((struct LxmlElement *)__pyx_v_self), ((struct LxmlElement *)__pyx_v_element));
 
   /* function exit code */
@@ -56666,34 +56748,34 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_14append(struct LxmlElement *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("append", 0);
 
-  /* "lxml/etree.pyx":840
+  /* "lxml/etree.pyx":841
  *         Adds a subelement to the end of this element.
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         _assertValidNode(element)
  *         _appendChild(self, element)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 840, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 841, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":841
+  /* "lxml/etree.pyx":842
  *         """
  *         _assertValidNode(self)
  *         _assertValidNode(element)             # <<<<<<<<<<<<<<
  *         _appendChild(self, element)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 841, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 842, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":842
+  /* "lxml/etree.pyx":843
  *         _assertValidNode(self)
  *         _assertValidNode(element)
  *         _appendChild(self, element)             # <<<<<<<<<<<<<<
  * 
  *     def addnext(self, _Element element not None):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_self, __pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 842, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_self, __pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 843, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":835
+  /* "lxml/etree.pyx":836
  *         _setAttributeValue(self, key, value)
  * 
  *     def append(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -56713,7 +56795,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_14append(struct LxmlElement *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":844
+/* "lxml/etree.pyx":845
  *         _appendChild(self, element)
  * 
  *     def addnext(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -56732,7 +56814,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_17addnext(PyObject *__pyx_v_sel
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("addnext (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 844, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 845, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_8_Element_16addnext(((struct LxmlElement *)__pyx_v_self), ((struct LxmlElement *)__pyx_v_element));
 
   /* function exit code */
@@ -56755,25 +56837,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_16addnext(struct LxmlElement *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("addnext", 0);
 
-  /* "lxml/etree.pyx":854
+  /* "lxml/etree.pyx":855
  *         discarded when adding at the root level.
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         _assertValidNode(element)
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 854, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 855, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":855
+  /* "lxml/etree.pyx":856
  *         """
  *         _assertValidNode(self)
  *         _assertValidNode(element)             # <<<<<<<<<<<<<<
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  *             if element._c_node.type != tree.XML_PI_NODE:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 855, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 856, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":856
+  /* "lxml/etree.pyx":857
  *         _assertValidNode(self)
  *         _assertValidNode(element)
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):             # <<<<<<<<<<<<<<
@@ -56791,7 +56873,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_16addnext(struct LxmlElement *_
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":857
+    /* "lxml/etree.pyx":858
  *         _assertValidNode(element)
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  *             if element._c_node.type != tree.XML_PI_NODE:             # <<<<<<<<<<<<<<
@@ -56801,7 +56883,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_16addnext(struct LxmlElement *_
     __pyx_t_2 = ((__pyx_v_element->_c_node->type != XML_PI_NODE) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":858
+      /* "lxml/etree.pyx":859
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  *             if element._c_node.type != tree.XML_PI_NODE:
  *                 if element._c_node.type != tree.XML_COMMENT_NODE:             # <<<<<<<<<<<<<<
@@ -56811,7 +56893,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_16addnext(struct LxmlElement *_
       __pyx_t_2 = ((__pyx_v_element->_c_node->type != XML_COMMENT_NODE) != 0);
       if (unlikely(__pyx_t_2)) {
 
-        /* "lxml/etree.pyx":859
+        /* "lxml/etree.pyx":860
  *             if element._c_node.type != tree.XML_PI_NODE:
  *                 if element._c_node.type != tree.XML_COMMENT_NODE:
  *                     raise TypeError, u"Only processing instructions and comments can be siblings of the root element"             # <<<<<<<<<<<<<<
@@ -56819,9 +56901,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_16addnext(struct LxmlElement *_
  *         _appendSibling(self, element)
  */
         __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_Only_processing_instructions_and, 0, 0);
-        __PYX_ERR(0, 859, __pyx_L1_error)
+        __PYX_ERR(0, 860, __pyx_L1_error)
 
-        /* "lxml/etree.pyx":858
+        /* "lxml/etree.pyx":859
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  *             if element._c_node.type != tree.XML_PI_NODE:
  *                 if element._c_node.type != tree.XML_COMMENT_NODE:             # <<<<<<<<<<<<<<
@@ -56830,7 +56912,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_16addnext(struct LxmlElement *_
  */
       }
 
-      /* "lxml/etree.pyx":857
+      /* "lxml/etree.pyx":858
  *         _assertValidNode(element)
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  *             if element._c_node.type != tree.XML_PI_NODE:             # <<<<<<<<<<<<<<
@@ -56839,16 +56921,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_16addnext(struct LxmlElement *_
  */
     }
 
-    /* "lxml/etree.pyx":860
+    /* "lxml/etree.pyx":861
  *                 if element._c_node.type != tree.XML_COMMENT_NODE:
  *                     raise TypeError, u"Only processing instructions and comments can be siblings of the root element"
  *             element.tail = None             # <<<<<<<<<<<<<<
  *         _appendSibling(self, element)
  * 
  */
-    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_tail, Py_None) < 0) __PYX_ERR(0, 860, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_tail, Py_None) < 0) __PYX_ERR(0, 861, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":856
+    /* "lxml/etree.pyx":857
  *         _assertValidNode(self)
  *         _assertValidNode(element)
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):             # <<<<<<<<<<<<<<
@@ -56857,16 +56939,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_16addnext(struct LxmlElement *_
  */
   }
 
-  /* "lxml/etree.pyx":861
+  /* "lxml/etree.pyx":862
  *                     raise TypeError, u"Only processing instructions and comments can be siblings of the root element"
  *             element.tail = None
  *         _appendSibling(self, element)             # <<<<<<<<<<<<<<
  * 
  *     def addprevious(self, _Element element not None):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__appendSibling(__pyx_v_self, __pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 861, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__appendSibling(__pyx_v_self, __pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 862, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":844
+  /* "lxml/etree.pyx":845
  *         _appendChild(self, element)
  * 
  *     def addnext(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -56886,7 +56968,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_16addnext(struct LxmlElement *_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":863
+/* "lxml/etree.pyx":864
  *         _appendSibling(self, element)
  * 
  *     def addprevious(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -56905,7 +56987,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_19addprevious(PyObject *__pyx_v
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("addprevious (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 863, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 864, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_8_Element_18addprevious(((struct LxmlElement *)__pyx_v_self), ((struct LxmlElement *)__pyx_v_element));
 
   /* function exit code */
@@ -56928,25 +57010,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_18addprevious(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("addprevious", 0);
 
-  /* "lxml/etree.pyx":873
+  /* "lxml/etree.pyx":874
  *         automatically discarded when adding at the root level.
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         _assertValidNode(element)
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 873, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 874, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":874
+  /* "lxml/etree.pyx":875
  *         """
  *         _assertValidNode(self)
  *         _assertValidNode(element)             # <<<<<<<<<<<<<<
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  *             if element._c_node.type != tree.XML_PI_NODE:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 874, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 875, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":875
+  /* "lxml/etree.pyx":876
  *         _assertValidNode(self)
  *         _assertValidNode(element)
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):             # <<<<<<<<<<<<<<
@@ -56964,7 +57046,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_18addprevious(struct LxmlElemen
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":876
+    /* "lxml/etree.pyx":877
  *         _assertValidNode(element)
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  *             if element._c_node.type != tree.XML_PI_NODE:             # <<<<<<<<<<<<<<
@@ -56974,7 +57056,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_18addprevious(struct LxmlElemen
     __pyx_t_2 = ((__pyx_v_element->_c_node->type != XML_PI_NODE) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":877
+      /* "lxml/etree.pyx":878
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  *             if element._c_node.type != tree.XML_PI_NODE:
  *                 if element._c_node.type != tree.XML_COMMENT_NODE:             # <<<<<<<<<<<<<<
@@ -56984,7 +57066,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_18addprevious(struct LxmlElemen
       __pyx_t_2 = ((__pyx_v_element->_c_node->type != XML_COMMENT_NODE) != 0);
       if (unlikely(__pyx_t_2)) {
 
-        /* "lxml/etree.pyx":878
+        /* "lxml/etree.pyx":879
  *             if element._c_node.type != tree.XML_PI_NODE:
  *                 if element._c_node.type != tree.XML_COMMENT_NODE:
  *                     raise TypeError, u"Only processing instructions and comments can be siblings of the root element"             # <<<<<<<<<<<<<<
@@ -56992,9 +57074,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_18addprevious(struct LxmlElemen
  *         _prependSibling(self, element)
  */
         __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_Only_processing_instructions_and, 0, 0);
-        __PYX_ERR(0, 878, __pyx_L1_error)
+        __PYX_ERR(0, 879, __pyx_L1_error)
 
-        /* "lxml/etree.pyx":877
+        /* "lxml/etree.pyx":878
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  *             if element._c_node.type != tree.XML_PI_NODE:
  *                 if element._c_node.type != tree.XML_COMMENT_NODE:             # <<<<<<<<<<<<<<
@@ -57003,7 +57085,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_18addprevious(struct LxmlElemen
  */
       }
 
-      /* "lxml/etree.pyx":876
+      /* "lxml/etree.pyx":877
  *         _assertValidNode(element)
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):
  *             if element._c_node.type != tree.XML_PI_NODE:             # <<<<<<<<<<<<<<
@@ -57012,16 +57094,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_18addprevious(struct LxmlElemen
  */
     }
 
-    /* "lxml/etree.pyx":879
+    /* "lxml/etree.pyx":880
  *                 if element._c_node.type != tree.XML_COMMENT_NODE:
  *                     raise TypeError, u"Only processing instructions and comments can be siblings of the root element"
  *             element.tail = None             # <<<<<<<<<<<<<<
  *         _prependSibling(self, element)
  * 
  */
-    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_tail, Py_None) < 0) __PYX_ERR(0, 879, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_tail, Py_None) < 0) __PYX_ERR(0, 880, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":875
+    /* "lxml/etree.pyx":876
  *         _assertValidNode(self)
  *         _assertValidNode(element)
  *         if self._c_node.parent != NULL and not _isElement(self._c_node.parent):             # <<<<<<<<<<<<<<
@@ -57030,16 +57112,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_18addprevious(struct LxmlElemen
  */
   }
 
-  /* "lxml/etree.pyx":880
+  /* "lxml/etree.pyx":881
  *                     raise TypeError, u"Only processing instructions and comments can be siblings of the root element"
  *             element.tail = None
  *         _prependSibling(self, element)             # <<<<<<<<<<<<<<
  * 
  *     def extend(self, elements):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__prependSibling(__pyx_v_self, __pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 880, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__prependSibling(__pyx_v_self, __pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 881, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":863
+  /* "lxml/etree.pyx":864
  *         _appendSibling(self, element)
  * 
  *     def addprevious(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -57059,7 +57141,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_18addprevious(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":882
+/* "lxml/etree.pyx":883
  *         _prependSibling(self, element)
  * 
  *     def extend(self, elements):             # <<<<<<<<<<<<<<
@@ -57098,16 +57180,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_20extend(struct LxmlElement *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("extend", 0);
 
-  /* "lxml/etree.pyx":888
+  /* "lxml/etree.pyx":889
  *         """
  *         cdef _Element element
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         for element in elements:
  *             if element is None:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 888, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 889, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":889
+  /* "lxml/etree.pyx":890
  *         cdef _Element element
  *         _assertValidNode(self)
  *         for element in elements:             # <<<<<<<<<<<<<<
@@ -57118,26 +57200,26 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_20extend(struct LxmlElement *__
     __pyx_t_2 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
     __pyx_t_4 = NULL;
   } else {
-    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 889, __pyx_L1_error)
+    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 890, __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(0, 889, __pyx_L1_error)
+    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 890, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_4)) {
       if (likely(PyList_CheckExact(__pyx_t_2))) {
         if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 889, __pyx_L1_error)
+        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 890, __pyx_L1_error)
         #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 889, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 890, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       } else {
         if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 889, __pyx_L1_error)
+        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 890, __pyx_L1_error)
         #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 889, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 890, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       }
@@ -57147,17 +57229,17 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_20extend(struct LxmlElement *__
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 889, __pyx_L1_error)
+          else __PYX_ERR(0, 890, __pyx_L1_error)
         }
         break;
       }
       __Pyx_GOTREF(__pyx_t_5);
     }
-    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 889, __pyx_L1_error)
+    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 890, __pyx_L1_error)
     __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_5));
     __pyx_t_5 = 0;
 
-    /* "lxml/etree.pyx":890
+    /* "lxml/etree.pyx":891
  *         _assertValidNode(self)
  *         for element in elements:
  *             if element is None:             # <<<<<<<<<<<<<<
@@ -57168,7 +57250,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_20extend(struct LxmlElement *__
     __pyx_t_7 = (__pyx_t_6 != 0);
     if (unlikely(__pyx_t_7)) {
 
-      /* "lxml/etree.pyx":891
+      /* "lxml/etree.pyx":892
  *         for element in elements:
  *             if element is None:
  *                 raise TypeError, u"Node must not be None"             # <<<<<<<<<<<<<<
@@ -57176,9 +57258,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_20extend(struct LxmlElement *__
  *             _appendChild(self, element)
  */
       __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_Node_must_not_be_None, 0, 0);
-      __PYX_ERR(0, 891, __pyx_L1_error)
+      __PYX_ERR(0, 892, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":890
+      /* "lxml/etree.pyx":891
  *         _assertValidNode(self)
  *         for element in elements:
  *             if element is None:             # <<<<<<<<<<<<<<
@@ -57187,25 +57269,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_20extend(struct LxmlElement *__
  */
     }
 
-    /* "lxml/etree.pyx":892
+    /* "lxml/etree.pyx":893
  *             if element is None:
  *                 raise TypeError, u"Node must not be None"
  *             _assertValidNode(element)             # <<<<<<<<<<<<<<
  *             _appendChild(self, element)
  * 
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 892, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 893, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":893
+    /* "lxml/etree.pyx":894
  *                 raise TypeError, u"Node must not be None"
  *             _assertValidNode(element)
  *             _appendChild(self, element)             # <<<<<<<<<<<<<<
  * 
  *     def clear(self, bint keep_tail=False):
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_self, __pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 893, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_self, __pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 894, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":889
+    /* "lxml/etree.pyx":890
  *         cdef _Element element
  *         _assertValidNode(self)
  *         for element in elements:             # <<<<<<<<<<<<<<
@@ -57215,7 +57297,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_20extend(struct LxmlElement *__
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":882
+  /* "lxml/etree.pyx":883
  *         _prependSibling(self, element)
  * 
  *     def extend(self, elements):             # <<<<<<<<<<<<<<
@@ -57238,7 +57320,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_20extend(struct LxmlElement *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":895
+/* "lxml/etree.pyx":896
  *             _appendChild(self, element)
  * 
  *     def clear(self, bint keep_tail=False):             # <<<<<<<<<<<<<<
@@ -57279,7 +57361,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_23clear(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clear") < 0)) __PYX_ERR(0, 895, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clear") < 0)) __PYX_ERR(0, 896, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -57290,14 +57372,14 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_23clear(PyObject *__pyx_v_self,
       }
     }
     if (values[0]) {
-      __pyx_v_keep_tail = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_keep_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 895, __pyx_L3_error)
+      __pyx_v_keep_tail = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_keep_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 896, __pyx_L3_error)
     } else {
       __pyx_v_keep_tail = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("clear", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 895, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("clear", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 896, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -57327,16 +57409,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("clear", 0);
 
-  /* "lxml/etree.pyx":907
+  /* "lxml/etree.pyx":908
  *         cdef xmlNode* c_node
  *         cdef xmlNode* c_node_next
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         c_node = self._c_node
  *         # remove self.text and self.tail
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 907, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 908, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":908
+  /* "lxml/etree.pyx":909
  *         cdef xmlNode* c_node_next
  *         _assertValidNode(self)
  *         c_node = self._c_node             # <<<<<<<<<<<<<<
@@ -57346,7 +57428,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
   __pyx_t_2 = __pyx_v_self->_c_node;
   __pyx_v_c_node = __pyx_t_2;
 
-  /* "lxml/etree.pyx":910
+  /* "lxml/etree.pyx":911
  *         c_node = self._c_node
  *         # remove self.text and self.tail
  *         _removeText(c_node.children)             # <<<<<<<<<<<<<<
@@ -57355,7 +57437,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
  */
   __pyx_f_4lxml_5etree__removeText(__pyx_v_c_node->children);
 
-  /* "lxml/etree.pyx":911
+  /* "lxml/etree.pyx":912
  *         # remove self.text and self.tail
  *         _removeText(c_node.children)
  *         if not keep_tail:             # <<<<<<<<<<<<<<
@@ -57365,7 +57447,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
   __pyx_t_3 = ((!(__pyx_v_keep_tail != 0)) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":912
+    /* "lxml/etree.pyx":913
  *         _removeText(c_node.children)
  *         if not keep_tail:
  *             _removeText(c_node.next)             # <<<<<<<<<<<<<<
@@ -57374,7 +57456,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
  */
     __pyx_f_4lxml_5etree__removeText(__pyx_v_c_node->next);
 
-    /* "lxml/etree.pyx":911
+    /* "lxml/etree.pyx":912
  *         # remove self.text and self.tail
  *         _removeText(c_node.children)
  *         if not keep_tail:             # <<<<<<<<<<<<<<
@@ -57383,7 +57465,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
  */
   }
 
-  /* "lxml/etree.pyx":914
+  /* "lxml/etree.pyx":915
  *             _removeText(c_node.next)
  *         # remove all attributes
  *         c_attr = c_node.properties             # <<<<<<<<<<<<<<
@@ -57393,7 +57475,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
   __pyx_t_4 = __pyx_v_c_node->properties;
   __pyx_v_c_attr = __pyx_t_4;
 
-  /* "lxml/etree.pyx":915
+  /* "lxml/etree.pyx":916
  *         # remove all attributes
  *         c_attr = c_node.properties
  *         if c_attr:             # <<<<<<<<<<<<<<
@@ -57403,7 +57485,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
   __pyx_t_3 = (__pyx_v_c_attr != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":916
+    /* "lxml/etree.pyx":917
  *         c_attr = c_node.properties
  *         if c_attr:
  *             c_node.properties = NULL             # <<<<<<<<<<<<<<
@@ -57412,7 +57494,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
  */
     __pyx_v_c_node->properties = NULL;
 
-    /* "lxml/etree.pyx":917
+    /* "lxml/etree.pyx":918
  *         if c_attr:
  *             c_node.properties = NULL
  *             tree.xmlFreePropList(c_attr)             # <<<<<<<<<<<<<<
@@ -57421,7 +57503,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
  */
     xmlFreePropList(__pyx_v_c_attr);
 
-    /* "lxml/etree.pyx":915
+    /* "lxml/etree.pyx":916
  *         # remove all attributes
  *         c_attr = c_node.properties
  *         if c_attr:             # <<<<<<<<<<<<<<
@@ -57430,7 +57512,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
  */
   }
 
-  /* "lxml/etree.pyx":919
+  /* "lxml/etree.pyx":920
  *             tree.xmlFreePropList(c_attr)
  *         # remove all subelements
  *         c_node = c_node.children             # <<<<<<<<<<<<<<
@@ -57440,7 +57522,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
   __pyx_t_2 = __pyx_v_c_node->children;
   __pyx_v_c_node = __pyx_t_2;
 
-  /* "lxml/etree.pyx":920
+  /* "lxml/etree.pyx":921
  *         # remove all subelements
  *         c_node = c_node.children
  *         if c_node and not _isElement(c_node):             # <<<<<<<<<<<<<<
@@ -57458,7 +57540,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
   __pyx_L6_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":921
+    /* "lxml/etree.pyx":922
  *         c_node = c_node.children
  *         if c_node and not _isElement(c_node):
  *             c_node = _nextElement(c_node)             # <<<<<<<<<<<<<<
@@ -57467,7 +57549,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
  */
     __pyx_v_c_node = __pyx_f_4lxml_5etree__nextElement(__pyx_v_c_node);
 
-    /* "lxml/etree.pyx":920
+    /* "lxml/etree.pyx":921
  *         # remove all subelements
  *         c_node = c_node.children
  *         if c_node and not _isElement(c_node):             # <<<<<<<<<<<<<<
@@ -57476,7 +57558,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
  */
   }
 
-  /* "lxml/etree.pyx":922
+  /* "lxml/etree.pyx":923
  *         if c_node and not _isElement(c_node):
  *             c_node = _nextElement(c_node)
  *         while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -57487,7 +57569,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
     __pyx_t_3 = ((__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_3) break;
 
-    /* "lxml/etree.pyx":923
+    /* "lxml/etree.pyx":924
  *             c_node = _nextElement(c_node)
  *         while c_node is not NULL:
  *             c_node_next = _nextElement(c_node)             # <<<<<<<<<<<<<<
@@ -57496,7 +57578,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
  */
     __pyx_v_c_node_next = __pyx_f_4lxml_5etree__nextElement(__pyx_v_c_node);
 
-    /* "lxml/etree.pyx":924
+    /* "lxml/etree.pyx":925
  *         while c_node is not NULL:
  *             c_node_next = _nextElement(c_node)
  *             _removeNode(self._doc, c_node)             # <<<<<<<<<<<<<<
@@ -57505,10 +57587,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
  */
     __pyx_t_6 = ((PyObject *)__pyx_v_self->_doc);
     __Pyx_INCREF(__pyx_t_6);
-    __pyx_t_1 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_6), __pyx_v_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 924, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_6), __pyx_v_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 925, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "lxml/etree.pyx":925
+    /* "lxml/etree.pyx":926
  *             c_node_next = _nextElement(c_node)
  *             _removeNode(self._doc, c_node)
  *             c_node = c_node_next             # <<<<<<<<<<<<<<
@@ -57518,7 +57600,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
     __pyx_v_c_node = __pyx_v_c_node_next;
   }
 
-  /* "lxml/etree.pyx":895
+  /* "lxml/etree.pyx":896
  *             _appendChild(self, element)
  * 
  *     def clear(self, bint keep_tail=False):             # <<<<<<<<<<<<<<
@@ -57539,7 +57621,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_22clear(struct LxmlElement *__p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":927
+/* "lxml/etree.pyx":928
  *             c_node = c_node_next
  * 
  *     def insert(self, index: int, _Element element not None):             # <<<<<<<<<<<<<<
@@ -57583,11 +57665,11 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_25insert(PyObject *__pyx_v_self
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_element)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, 1); __PYX_ERR(0, 927, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, 1); __PYX_ERR(0, 928, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert") < 0)) __PYX_ERR(0, 927, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert") < 0)) __PYX_ERR(0, 928, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -57600,13 +57682,13 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_25insert(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 927, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 928, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 927, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 928, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_8_Element_24insert(((struct LxmlElement *)__pyx_v_self), __pyx_v_index, __pyx_v_element);
 
   /* function exit code */
@@ -57635,35 +57717,35 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_24insert(struct LxmlElement *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("insert", 0);
 
-  /* "lxml/etree.pyx":935
+  /* "lxml/etree.pyx":936
  *         cdef xmlNode* c_next
  *         cdef xmlDoc* c_source_doc
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         _assertValidNode(element)
  *         c_node = _findChild(self._c_node, index)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 935, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 936, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":936
+  /* "lxml/etree.pyx":937
  *         cdef xmlDoc* c_source_doc
  *         _assertValidNode(self)
  *         _assertValidNode(element)             # <<<<<<<<<<<<<<
  *         c_node = _findChild(self._c_node, index)
  *         if c_node is NULL:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 936, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 937, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":937
+  /* "lxml/etree.pyx":938
  *         _assertValidNode(self)
  *         _assertValidNode(element)
  *         c_node = _findChild(self._c_node, index)             # <<<<<<<<<<<<<<
  *         if c_node is NULL:
  *             _appendChild(self, element)
  */
-  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 937, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 938, __pyx_L1_error)
   __pyx_v_c_node = __pyx_f_4lxml_5etree__findChild(__pyx_v_self->_c_node, __pyx_t_2);
 
-  /* "lxml/etree.pyx":938
+  /* "lxml/etree.pyx":939
  *         _assertValidNode(element)
  *         c_node = _findChild(self._c_node, index)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -57673,16 +57755,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_24insert(struct LxmlElement *__
   __pyx_t_3 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":939
+    /* "lxml/etree.pyx":940
  *         c_node = _findChild(self._c_node, index)
  *         if c_node is NULL:
  *             _appendChild(self, element)             # <<<<<<<<<<<<<<
  *             return
  *         c_source_doc = element._c_node.doc
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_self, __pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 939, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_self, __pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 940, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":940
+    /* "lxml/etree.pyx":941
  *         if c_node is NULL:
  *             _appendChild(self, element)
  *             return             # <<<<<<<<<<<<<<
@@ -57693,7 +57775,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_24insert(struct LxmlElement *__
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":938
+    /* "lxml/etree.pyx":939
  *         _assertValidNode(element)
  *         c_node = _findChild(self._c_node, index)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -57702,7 +57784,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_24insert(struct LxmlElement *__
  */
   }
 
-  /* "lxml/etree.pyx":941
+  /* "lxml/etree.pyx":942
  *             _appendChild(self, element)
  *             return
  *         c_source_doc = element._c_node.doc             # <<<<<<<<<<<<<<
@@ -57712,7 +57794,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_24insert(struct LxmlElement *__
   __pyx_t_4 = __pyx_v_element->_c_node->doc;
   __pyx_v_c_source_doc = __pyx_t_4;
 
-  /* "lxml/etree.pyx":942
+  /* "lxml/etree.pyx":943
  *             return
  *         c_source_doc = element._c_node.doc
  *         c_next = element._c_node.next             # <<<<<<<<<<<<<<
@@ -57722,7 +57804,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_24insert(struct LxmlElement *__
   __pyx_t_5 = __pyx_v_element->_c_node->next;
   __pyx_v_c_next = __pyx_t_5;
 
-  /* "lxml/etree.pyx":943
+  /* "lxml/etree.pyx":944
  *         c_source_doc = element._c_node.doc
  *         c_next = element._c_node.next
  *         tree.xmlAddPrevSibling(c_node, element._c_node)             # <<<<<<<<<<<<<<
@@ -57731,7 +57813,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_24insert(struct LxmlElement *__
  */
   (void)(xmlAddPrevSibling(__pyx_v_c_node, __pyx_v_element->_c_node));
 
-  /* "lxml/etree.pyx":944
+  /* "lxml/etree.pyx":945
  *         c_next = element._c_node.next
  *         tree.xmlAddPrevSibling(c_node, element._c_node)
  *         _moveTail(c_next, element._c_node)             # <<<<<<<<<<<<<<
@@ -57740,7 +57822,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_24insert(struct LxmlElement *__
  */
   __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_element->_c_node);
 
-  /* "lxml/etree.pyx":945
+  /* "lxml/etree.pyx":946
  *         tree.xmlAddPrevSibling(c_node, element._c_node)
  *         _moveTail(c_next, element._c_node)
  *         moveNodeToDocument(self._doc, c_source_doc, element._c_node)             # <<<<<<<<<<<<<<
@@ -57749,10 +57831,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_24insert(struct LxmlElement *__
  */
   __pyx_t_6 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_6);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_6), __pyx_v_c_source_doc, __pyx_v_element->_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 945, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_6), __pyx_v_c_source_doc, __pyx_v_element->_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 946, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "lxml/etree.pyx":927
+  /* "lxml/etree.pyx":928
  *             c_node = c_node_next
  * 
  *     def insert(self, index: int, _Element element not None):             # <<<<<<<<<<<<<<
@@ -57773,7 +57855,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_24insert(struct LxmlElement *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":947
+/* "lxml/etree.pyx":948
  *         moveNodeToDocument(self._doc, c_source_doc, element._c_node)
  * 
  *     def remove(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -57792,7 +57874,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_27remove(PyObject *__pyx_v_self
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("remove (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 947, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 948, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_8_Element_26remove(((struct LxmlElement *)__pyx_v_self), ((struct LxmlElement *)__pyx_v_element));
 
   /* function exit code */
@@ -57818,25 +57900,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_26remove(struct LxmlElement *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("remove", 0);
 
-  /* "lxml/etree.pyx":956
+  /* "lxml/etree.pyx":957
  *         cdef xmlNode* c_node
  *         cdef xmlNode* c_next
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         _assertValidNode(element)
  *         c_node = element._c_node
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 956, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 957, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":957
+  /* "lxml/etree.pyx":958
  *         cdef xmlNode* c_next
  *         _assertValidNode(self)
  *         _assertValidNode(element)             # <<<<<<<<<<<<<<
  *         c_node = element._c_node
  *         if c_node.parent is not self._c_node:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 957, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 958, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":958
+  /* "lxml/etree.pyx":959
  *         _assertValidNode(self)
  *         _assertValidNode(element)
  *         c_node = element._c_node             # <<<<<<<<<<<<<<
@@ -57846,7 +57928,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_26remove(struct LxmlElement *__
   __pyx_t_2 = __pyx_v_element->_c_node;
   __pyx_v_c_node = __pyx_t_2;
 
-  /* "lxml/etree.pyx":959
+  /* "lxml/etree.pyx":960
  *         _assertValidNode(element)
  *         c_node = element._c_node
  *         if c_node.parent is not self._c_node:             # <<<<<<<<<<<<<<
@@ -57856,7 +57938,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_26remove(struct LxmlElement *__
   __pyx_t_3 = ((__pyx_v_c_node->parent != __pyx_v_self->_c_node) != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":960
+    /* "lxml/etree.pyx":961
  *         c_node = element._c_node
  *         if c_node.parent is not self._c_node:
  *             raise ValueError, u"Element is not a child of this node."             # <<<<<<<<<<<<<<
@@ -57864,9 +57946,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_26remove(struct LxmlElement *__
  *         tree.xmlUnlinkNode(c_node)
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Element_is_not_a_child_of_this_n, 0, 0);
-    __PYX_ERR(0, 960, __pyx_L1_error)
+    __PYX_ERR(0, 961, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":959
+    /* "lxml/etree.pyx":960
  *         _assertValidNode(element)
  *         c_node = element._c_node
  *         if c_node.parent is not self._c_node:             # <<<<<<<<<<<<<<
@@ -57875,7 +57957,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_26remove(struct LxmlElement *__
  */
   }
 
-  /* "lxml/etree.pyx":961
+  /* "lxml/etree.pyx":962
  *         if c_node.parent is not self._c_node:
  *             raise ValueError, u"Element is not a child of this node."
  *         c_next = element._c_node.next             # <<<<<<<<<<<<<<
@@ -57885,7 +57967,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_26remove(struct LxmlElement *__
   __pyx_t_2 = __pyx_v_element->_c_node->next;
   __pyx_v_c_next = __pyx_t_2;
 
-  /* "lxml/etree.pyx":962
+  /* "lxml/etree.pyx":963
  *             raise ValueError, u"Element is not a child of this node."
  *         c_next = element._c_node.next
  *         tree.xmlUnlinkNode(c_node)             # <<<<<<<<<<<<<<
@@ -57894,7 +57976,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_26remove(struct LxmlElement *__
  */
   xmlUnlinkNode(__pyx_v_c_node);
 
-  /* "lxml/etree.pyx":963
+  /* "lxml/etree.pyx":964
  *         c_next = element._c_node.next
  *         tree.xmlUnlinkNode(c_node)
  *         _moveTail(c_next, c_node)             # <<<<<<<<<<<<<<
@@ -57903,7 +57985,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_26remove(struct LxmlElement *__
  */
   __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_c_node);
 
-  /* "lxml/etree.pyx":965
+  /* "lxml/etree.pyx":966
  *         _moveTail(c_next, c_node)
  *         # fix namespace declarations
  *         moveNodeToDocument(self._doc, c_node.doc, c_node)             # <<<<<<<<<<<<<<
@@ -57912,10 +57994,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_26remove(struct LxmlElement *__
  */
   __pyx_t_4 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_4);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_node->doc, __pyx_v_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 965, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_node->doc, __pyx_v_c_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 966, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":947
+  /* "lxml/etree.pyx":948
  *         moveNodeToDocument(self._doc, c_source_doc, element._c_node)
  * 
  *     def remove(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -57936,7 +58018,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_26remove(struct LxmlElement *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":967
+/* "lxml/etree.pyx":968
  *         moveNodeToDocument(self._doc, c_node.doc, c_node)
  * 
  *     def replace(self, _Element old_element not None,             # <<<<<<<<<<<<<<
@@ -57980,11 +58062,11 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_29replace(PyObject *__pyx_v_sel
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_new_element)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("replace", 1, 2, 2, 1); __PYX_ERR(0, 967, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("replace", 1, 2, 2, 1); __PYX_ERR(0, 968, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "replace") < 0)) __PYX_ERR(0, 967, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "replace") < 0)) __PYX_ERR(0, 968, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -57997,14 +58079,14 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_29replace(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("replace", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 967, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("replace", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 968, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.replace", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_old_element), __pyx_ptype_4lxml_5etree__Element, 0, "old_element", 0))) __PYX_ERR(0, 967, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_new_element), __pyx_ptype_4lxml_5etree__Element, 0, "new_element", 0))) __PYX_ERR(0, 968, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_old_element), __pyx_ptype_4lxml_5etree__Element, 0, "old_element", 0))) __PYX_ERR(0, 968, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_new_element), __pyx_ptype_4lxml_5etree__Element, 0, "new_element", 0))) __PYX_ERR(0, 969, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_8_Element_28replace(((struct LxmlElement *)__pyx_v_self), __pyx_v_old_element, __pyx_v_new_element);
 
   /* function exit code */
@@ -58034,34 +58116,34 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("replace", 0);
 
-  /* "lxml/etree.pyx":978
+  /* "lxml/etree.pyx":979
  *         cdef xmlNode* c_new_next
  *         cdef xmlDoc* c_source_doc
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         _assertValidNode(old_element)
  *         _assertValidNode(new_element)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 978, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 979, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":979
+  /* "lxml/etree.pyx":980
  *         cdef xmlDoc* c_source_doc
  *         _assertValidNode(self)
  *         _assertValidNode(old_element)             # <<<<<<<<<<<<<<
  *         _assertValidNode(new_element)
  *         c_old_node = old_element._c_node
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_old_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 979, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_old_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 980, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":980
+  /* "lxml/etree.pyx":981
  *         _assertValidNode(self)
  *         _assertValidNode(old_element)
  *         _assertValidNode(new_element)             # <<<<<<<<<<<<<<
  *         c_old_node = old_element._c_node
  *         if c_old_node.parent is not self._c_node:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_new_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 980, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_new_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 981, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":981
+  /* "lxml/etree.pyx":982
  *         _assertValidNode(old_element)
  *         _assertValidNode(new_element)
  *         c_old_node = old_element._c_node             # <<<<<<<<<<<<<<
@@ -58071,7 +58153,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
   __pyx_t_2 = __pyx_v_old_element->_c_node;
   __pyx_v_c_old_node = __pyx_t_2;
 
-  /* "lxml/etree.pyx":982
+  /* "lxml/etree.pyx":983
  *         _assertValidNode(new_element)
  *         c_old_node = old_element._c_node
  *         if c_old_node.parent is not self._c_node:             # <<<<<<<<<<<<<<
@@ -58081,7 +58163,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
   __pyx_t_3 = ((__pyx_v_c_old_node->parent != __pyx_v_self->_c_node) != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":983
+    /* "lxml/etree.pyx":984
  *         c_old_node = old_element._c_node
  *         if c_old_node.parent is not self._c_node:
  *             raise ValueError, u"Element is not a child of this node."             # <<<<<<<<<<<<<<
@@ -58089,9 +58171,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
  *         c_new_node = new_element._c_node
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Element_is_not_a_child_of_this_n, 0, 0);
-    __PYX_ERR(0, 983, __pyx_L1_error)
+    __PYX_ERR(0, 984, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":982
+    /* "lxml/etree.pyx":983
  *         _assertValidNode(new_element)
  *         c_old_node = old_element._c_node
  *         if c_old_node.parent is not self._c_node:             # <<<<<<<<<<<<<<
@@ -58100,7 +58182,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
  */
   }
 
-  /* "lxml/etree.pyx":984
+  /* "lxml/etree.pyx":985
  *         if c_old_node.parent is not self._c_node:
  *             raise ValueError, u"Element is not a child of this node."
  *         c_old_next = c_old_node.next             # <<<<<<<<<<<<<<
@@ -58110,7 +58192,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
   __pyx_t_2 = __pyx_v_c_old_node->next;
   __pyx_v_c_old_next = __pyx_t_2;
 
-  /* "lxml/etree.pyx":985
+  /* "lxml/etree.pyx":986
  *             raise ValueError, u"Element is not a child of this node."
  *         c_old_next = c_old_node.next
  *         c_new_node = new_element._c_node             # <<<<<<<<<<<<<<
@@ -58120,7 +58202,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
   __pyx_t_2 = __pyx_v_new_element->_c_node;
   __pyx_v_c_new_node = __pyx_t_2;
 
-  /* "lxml/etree.pyx":986
+  /* "lxml/etree.pyx":987
  *         c_old_next = c_old_node.next
  *         c_new_node = new_element._c_node
  *         c_new_next = c_new_node.next             # <<<<<<<<<<<<<<
@@ -58130,7 +58212,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
   __pyx_t_2 = __pyx_v_c_new_node->next;
   __pyx_v_c_new_next = __pyx_t_2;
 
-  /* "lxml/etree.pyx":987
+  /* "lxml/etree.pyx":988
  *         c_new_node = new_element._c_node
  *         c_new_next = c_new_node.next
  *         c_source_doc = c_new_node.doc             # <<<<<<<<<<<<<<
@@ -58140,7 +58222,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
   __pyx_t_4 = __pyx_v_c_new_node->doc;
   __pyx_v_c_source_doc = __pyx_t_4;
 
-  /* "lxml/etree.pyx":988
+  /* "lxml/etree.pyx":989
  *         c_new_next = c_new_node.next
  *         c_source_doc = c_new_node.doc
  *         tree.xmlReplaceNode(c_old_node, c_new_node)             # <<<<<<<<<<<<<<
@@ -58149,7 +58231,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
  */
   (void)(xmlReplaceNode(__pyx_v_c_old_node, __pyx_v_c_new_node));
 
-  /* "lxml/etree.pyx":989
+  /* "lxml/etree.pyx":990
  *         c_source_doc = c_new_node.doc
  *         tree.xmlReplaceNode(c_old_node, c_new_node)
  *         _moveTail(c_new_next, c_new_node)             # <<<<<<<<<<<<<<
@@ -58158,7 +58240,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
  */
   __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_new_next, __pyx_v_c_new_node);
 
-  /* "lxml/etree.pyx":990
+  /* "lxml/etree.pyx":991
  *         tree.xmlReplaceNode(c_old_node, c_new_node)
  *         _moveTail(c_new_next, c_new_node)
  *         _moveTail(c_old_next, c_old_node)             # <<<<<<<<<<<<<<
@@ -58167,7 +58249,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
  */
   __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_old_next, __pyx_v_c_old_node);
 
-  /* "lxml/etree.pyx":991
+  /* "lxml/etree.pyx":992
  *         _moveTail(c_new_next, c_new_node)
  *         _moveTail(c_old_next, c_old_node)
  *         moveNodeToDocument(self._doc, c_source_doc, c_new_node)             # <<<<<<<<<<<<<<
@@ -58176,10 +58258,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
  */
   __pyx_t_5 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_5);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_source_doc, __pyx_v_c_new_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 991, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_source_doc, __pyx_v_c_new_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 992, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "lxml/etree.pyx":993
+  /* "lxml/etree.pyx":994
  *         moveNodeToDocument(self._doc, c_source_doc, c_new_node)
  *         # fix namespace declarations
  *         moveNodeToDocument(self._doc, c_old_node.doc, c_old_node)             # <<<<<<<<<<<<<<
@@ -58188,10 +58270,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
  */
   __pyx_t_5 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_5);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_old_node->doc, __pyx_v_c_old_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 993, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_old_node->doc, __pyx_v_c_old_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 994, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "lxml/etree.pyx":967
+  /* "lxml/etree.pyx":968
  *         moveNodeToDocument(self._doc, c_node.doc, c_node)
  * 
  *     def replace(self, _Element old_element not None,             # <<<<<<<<<<<<<<
@@ -58212,7 +58294,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_28replace(struct LxmlElement *_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":999
+/* "lxml/etree.pyx":1000
  *         u"""Element tag
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -58245,7 +58327,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_3tag___get__(struct LxmlElement
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1000
+  /* "lxml/etree.pyx":1001
  *         """
  *         def __get__(self):
  *             if self._tag is not None:             # <<<<<<<<<<<<<<
@@ -58256,7 +58338,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_3tag___get__(struct LxmlElement
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1001
+    /* "lxml/etree.pyx":1002
  *         def __get__(self):
  *             if self._tag is not None:
  *                 return self._tag             # <<<<<<<<<<<<<<
@@ -58268,7 +58350,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_3tag___get__(struct LxmlElement
     __pyx_r = __pyx_v_self->_tag;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1000
+    /* "lxml/etree.pyx":1001
  *         """
  *         def __get__(self):
  *             if self._tag is not None:             # <<<<<<<<<<<<<<
@@ -58277,23 +58359,23 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_3tag___get__(struct LxmlElement
  */
   }
 
-  /* "lxml/etree.pyx":1002
+  /* "lxml/etree.pyx":1003
  *             if self._tag is not None:
  *                 return self._tag
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             self._tag = _namespacedName(self._c_node)
  *             return self._tag
  */
-  __pyx_t_3 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1002, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1003, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1003
+  /* "lxml/etree.pyx":1004
  *                 return self._tag
  *             _assertValidNode(self)
  *             self._tag = _namespacedName(self._c_node)             # <<<<<<<<<<<<<<
  *             return self._tag
  * 
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree__namespacedName(__pyx_v_self->_c_node); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1003, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_4lxml_5etree__namespacedName(__pyx_v_self->_c_node); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1004, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __Pyx_GOTREF(__pyx_v_self->_tag);
@@ -58301,7 +58383,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_3tag___get__(struct LxmlElement
   __pyx_v_self->_tag = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":1004
+  /* "lxml/etree.pyx":1005
  *             _assertValidNode(self)
  *             self._tag = _namespacedName(self._c_node)
  *             return self._tag             # <<<<<<<<<<<<<<
@@ -58313,7 +58395,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_3tag___get__(struct LxmlElement
   __pyx_r = __pyx_v_self->_tag;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":999
+  /* "lxml/etree.pyx":1000
  *         u"""Element tag
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -58332,7 +58414,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_3tag___get__(struct LxmlElement
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1006
+/* "lxml/etree.pyx":1007
  *             return self._tag
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -58371,23 +58453,23 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "lxml/etree.pyx":1008
+  /* "lxml/etree.pyx":1009
  *         def __set__(self, value):
  *             cdef _BaseParser parser
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             ns, name = _getNsTag(value)
  *             parser = self._doc._parser
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1008, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1009, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1009
+  /* "lxml/etree.pyx":1010
  *             cdef _BaseParser parser
  *             _assertValidNode(self)
  *             ns, name = _getNsTag(value)             # <<<<<<<<<<<<<<
  *             parser = self._doc._parser
  *             if parser is not None and parser._for_html:
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1009, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1010, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   if (likely(__pyx_t_2 != Py_None)) {
     PyObject* sequence = __pyx_t_2;
@@ -58395,7 +58477,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 1009, __pyx_L1_error)
+      __PYX_ERR(0, 1010, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
@@ -58403,21 +58485,21 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_4);
     #else
-    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1009, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1010, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1009, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1010, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   } else {
-    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 1009, __pyx_L1_error)
+    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 1010, __pyx_L1_error)
   }
   __pyx_v_ns = __pyx_t_3;
   __pyx_t_3 = 0;
   __pyx_v_name = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":1010
+  /* "lxml/etree.pyx":1011
  *             _assertValidNode(self)
  *             ns, name = _getNsTag(value)
  *             parser = self._doc._parser             # <<<<<<<<<<<<<<
@@ -58429,7 +58511,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
   __pyx_v_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":1011
+  /* "lxml/etree.pyx":1012
  *             ns, name = _getNsTag(value)
  *             parser = self._doc._parser
  *             if parser is not None and parser._for_html:             # <<<<<<<<<<<<<<
@@ -58448,16 +58530,16 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":1012
+    /* "lxml/etree.pyx":1013
  *             parser = self._doc._parser
  *             if parser is not None and parser._for_html:
  *                 _htmlTagValidOrRaise(name)             # <<<<<<<<<<<<<<
  *             else:
  *                 _tagValidOrRaise(name)
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__htmlTagValidOrRaise(__pyx_v_name); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1012, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__htmlTagValidOrRaise(__pyx_v_name); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1013, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":1011
+    /* "lxml/etree.pyx":1012
  *             ns, name = _getNsTag(value)
  *             parser = self._doc._parser
  *             if parser is not None and parser._for_html:             # <<<<<<<<<<<<<<
@@ -58467,7 +58549,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":1014
+  /* "lxml/etree.pyx":1015
  *                 _htmlTagValidOrRaise(name)
  *             else:
  *                 _tagValidOrRaise(name)             # <<<<<<<<<<<<<<
@@ -58475,11 +58557,11 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
  *             tree.xmlNodeSetName(self._c_node, _xcstr(name))
  */
   /*else*/ {
-    __pyx_t_1 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_name); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1014, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_name); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1015, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":1015
+  /* "lxml/etree.pyx":1016
  *             else:
  *                 _tagValidOrRaise(name)
  *             self._tag = value             # <<<<<<<<<<<<<<
@@ -58492,7 +58574,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
   __Pyx_DECREF(__pyx_v_self->_tag);
   __pyx_v_self->_tag = __pyx_v_value;
 
-  /* "lxml/etree.pyx":1016
+  /* "lxml/etree.pyx":1017
  *                 _tagValidOrRaise(name)
  *             self._tag = value
  *             tree.xmlNodeSetName(self._c_node, _xcstr(name))             # <<<<<<<<<<<<<<
@@ -58501,7 +58583,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
  */
   xmlNodeSetName(__pyx_v_self->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_name));
 
-  /* "lxml/etree.pyx":1017
+  /* "lxml/etree.pyx":1018
  *             self._tag = value
  *             tree.xmlNodeSetName(self._c_node, _xcstr(name))
  *             if ns is None:             # <<<<<<<<<<<<<<
@@ -58512,7 +58594,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
   __pyx_t_7 = (__pyx_t_5 != 0);
   if (__pyx_t_7) {
 
-    /* "lxml/etree.pyx":1018
+    /* "lxml/etree.pyx":1019
  *             tree.xmlNodeSetName(self._c_node, _xcstr(name))
  *             if ns is None:
  *                 self._c_node.ns = NULL             # <<<<<<<<<<<<<<
@@ -58521,7 +58603,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
  */
     __pyx_v_self->_c_node->ns = NULL;
 
-    /* "lxml/etree.pyx":1017
+    /* "lxml/etree.pyx":1018
  *             self._tag = value
  *             tree.xmlNodeSetName(self._c_node, _xcstr(name))
  *             if ns is None:             # <<<<<<<<<<<<<<
@@ -58531,7 +58613,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
     goto __pyx_L6;
   }
 
-  /* "lxml/etree.pyx":1020
+  /* "lxml/etree.pyx":1021
  *                 self._c_node.ns = NULL
  *             else:
  *                 self._doc._setNodeNs(self._c_node, _xcstr(ns))             # <<<<<<<<<<<<<<
@@ -58539,11 +58621,11 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
  *     @property
  */
   /*else*/ {
-    __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document__setNodeNs(__pyx_v_self->_doc, __pyx_v_self->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1020, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document__setNodeNs(__pyx_v_self->_doc, __pyx_v_self->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1021, __pyx_L1_error)
   }
   __pyx_L6:;
 
-  /* "lxml/etree.pyx":1006
+  /* "lxml/etree.pyx":1007
  *             return self._tag
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -58568,7 +58650,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_3tag_2__set__(struct LxmlElement *__p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1023
+/* "lxml/etree.pyx":1024
  * 
  *     @property
  *     def attrib(self):             # <<<<<<<<<<<<<<
@@ -58599,7 +58681,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6attrib___get__(struct LxmlElem
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1027
+  /* "lxml/etree.pyx":1028
  *         keys(), values() and items() to access element attributes.
  *         """
  *         return _Attrib.__new__(_Attrib, self)             # <<<<<<<<<<<<<<
@@ -58607,19 +58689,19 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6attrib___get__(struct LxmlElem
  *     property text:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1027, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1028, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = ((PyObject *)__pyx_tp_new_4lxml_5etree__Attrib(((PyTypeObject *)__pyx_ptype_4lxml_5etree__Attrib), __pyx_t_1, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1027, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_tp_new_4lxml_5etree__Attrib(((PyTypeObject *)__pyx_ptype_4lxml_5etree__Attrib), __pyx_t_1, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1028, __pyx_L1_error)
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = ((PyObject *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1023
+  /* "lxml/etree.pyx":1024
  * 
  *     @property
  *     def attrib(self):             # <<<<<<<<<<<<<<
@@ -58639,7 +58721,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6attrib___get__(struct LxmlElem
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1033
+/* "lxml/etree.pyx":1034
  *         the value None, if there was no text.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -58670,16 +58752,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4text___get__(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1034
+  /* "lxml/etree.pyx":1035
  *         """
  *         def __get__(self):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             return _collectText(self._c_node.children)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1034, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1035, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1035
+  /* "lxml/etree.pyx":1036
  *         def __get__(self):
  *             _assertValidNode(self)
  *             return _collectText(self._c_node.children)             # <<<<<<<<<<<<<<
@@ -58687,13 +58769,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4text___get__(struct LxmlElemen
  *         def __set__(self, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__collectText(__pyx_v_self->_c_node->children); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1035, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__collectText(__pyx_v_self->_c_node->children); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1036, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1033
+  /* "lxml/etree.pyx":1034
  *         the value None, if there was no text.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -58712,7 +58794,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4text___get__(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1037
+/* "lxml/etree.pyx":1038
  *             return _collectText(self._c_node.children)
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -58747,16 +58829,16 @@ static int __pyx_pf_4lxml_5etree_8_Element_4text_2__set__(struct LxmlElement *__
   __Pyx_RefNannySetupContext("__set__", 0);
   __Pyx_INCREF(__pyx_v_value);
 
-  /* "lxml/etree.pyx":1038
+  /* "lxml/etree.pyx":1039
  * 
  *         def __set__(self, value):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             if isinstance(value, QName):
  *                 value = _resolveQNameText(self, value).decode('utf8')
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1038, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1039, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1039
+  /* "lxml/etree.pyx":1040
  *         def __set__(self, value):
  *             _assertValidNode(self)
  *             if isinstance(value, QName):             # <<<<<<<<<<<<<<
@@ -58767,26 +58849,26 @@ static int __pyx_pf_4lxml_5etree_8_Element_4text_2__set__(struct LxmlElement *__
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1040
+    /* "lxml/etree.pyx":1041
  *             _assertValidNode(self)
  *             if isinstance(value, QName):
  *                 value = _resolveQNameText(self, value).decode('utf8')             # <<<<<<<<<<<<<<
  *             _setNodeText(self._c_node, value)
  * 
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__resolveQNameText(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1040, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__resolveQNameText(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1041, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     if (unlikely(__pyx_t_4 == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
-      __PYX_ERR(0, 1040, __pyx_L1_error)
+      __PYX_ERR(0, 1041, __pyx_L1_error)
     }
-    __pyx_t_5 = __Pyx_decode_bytes(__pyx_t_4, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1040, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_decode_bytes(__pyx_t_4, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1041, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "lxml/etree.pyx":1039
+    /* "lxml/etree.pyx":1040
  *         def __set__(self, value):
  *             _assertValidNode(self)
  *             if isinstance(value, QName):             # <<<<<<<<<<<<<<
@@ -58795,16 +58877,16 @@ static int __pyx_pf_4lxml_5etree_8_Element_4text_2__set__(struct LxmlElement *__
  */
   }
 
-  /* "lxml/etree.pyx":1041
+  /* "lxml/etree.pyx":1042
  *             if isinstance(value, QName):
  *                 value = _resolveQNameText(self, value).decode('utf8')
  *             _setNodeText(self._c_node, value)             # <<<<<<<<<<<<<<
  * 
  *         # using 'del el.text' is the wrong thing to do
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__setNodeText(__pyx_v_self->_c_node, __pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1041, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__setNodeText(__pyx_v_self->_c_node, __pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1042, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1037
+  /* "lxml/etree.pyx":1038
  *             return _collectText(self._c_node.children)
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -58826,7 +58908,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4text_2__set__(struct LxmlElement *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1052
+/* "lxml/etree.pyx":1053
  *         there was no text.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -58857,16 +58939,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4tail___get__(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1053
+  /* "lxml/etree.pyx":1054
  *         """
  *         def __get__(self):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             return _collectText(self._c_node.next)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1053, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1054, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1054
+  /* "lxml/etree.pyx":1055
  *         def __get__(self):
  *             _assertValidNode(self)
  *             return _collectText(self._c_node.next)             # <<<<<<<<<<<<<<
@@ -58874,13 +58956,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4tail___get__(struct LxmlElemen
  *         def __set__(self, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__collectText(__pyx_v_self->_c_node->next); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1054, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__collectText(__pyx_v_self->_c_node->next); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1055, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1052
+  /* "lxml/etree.pyx":1053
  *         there was no text.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -58899,7 +58981,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4tail___get__(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1056
+/* "lxml/etree.pyx":1057
  *             return _collectText(self._c_node.next)
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -58929,25 +59011,25 @@ static int __pyx_pf_4lxml_5etree_8_Element_4tail_2__set__(struct LxmlElement *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "lxml/etree.pyx":1057
+  /* "lxml/etree.pyx":1058
  * 
  *         def __set__(self, value):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             _setTailText(self._c_node, value)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1057, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1058, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1058
+  /* "lxml/etree.pyx":1059
  *         def __set__(self, value):
  *             _assertValidNode(self)
  *             _setTailText(self._c_node, value)             # <<<<<<<<<<<<<<
  * 
  *         # using 'del el.tail' is the wrong thing to do
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__setTailText(__pyx_v_self->_c_node, __pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1058, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__setTailText(__pyx_v_self->_c_node, __pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1059, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1056
+  /* "lxml/etree.pyx":1057
  *             return _collectText(self._c_node.next)
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -58966,7 +59048,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4tail_2__set__(struct LxmlElement *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1066
+/* "lxml/etree.pyx":1067
  *     # not in ElementTree, read-only
  *     @property
  *     def prefix(self):             # <<<<<<<<<<<<<<
@@ -58997,7 +59079,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6prefix___get__(struct LxmlElem
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1069
+  /* "lxml/etree.pyx":1070
  *         """Namespace prefix or None.
  *         """
  *         if self._c_node.ns is not NULL:             # <<<<<<<<<<<<<<
@@ -59007,7 +59089,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6prefix___get__(struct LxmlElem
   __pyx_t_1 = ((__pyx_v_self->_c_node->ns != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1070
+    /* "lxml/etree.pyx":1071
  *         """
  *         if self._c_node.ns is not NULL:
  *             if self._c_node.ns.prefix is not NULL:             # <<<<<<<<<<<<<<
@@ -59017,7 +59099,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6prefix___get__(struct LxmlElem
     __pyx_t_1 = ((__pyx_v_self->_c_node->ns->prefix != NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":1071
+      /* "lxml/etree.pyx":1072
  *         if self._c_node.ns is not NULL:
  *             if self._c_node.ns.prefix is not NULL:
  *                 return funicode(self._c_node.ns.prefix)             # <<<<<<<<<<<<<<
@@ -59025,13 +59107,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6prefix___get__(struct LxmlElem
  * 
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_self->_c_node->ns->prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1071, __pyx_L1_error)
+      __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_self->_c_node->ns->prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1072, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":1070
+      /* "lxml/etree.pyx":1071
  *         """
  *         if self._c_node.ns is not NULL:
  *             if self._c_node.ns.prefix is not NULL:             # <<<<<<<<<<<<<<
@@ -59040,7 +59122,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6prefix___get__(struct LxmlElem
  */
     }
 
-    /* "lxml/etree.pyx":1069
+    /* "lxml/etree.pyx":1070
  *         """Namespace prefix or None.
  *         """
  *         if self._c_node.ns is not NULL:             # <<<<<<<<<<<<<<
@@ -59049,7 +59131,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6prefix___get__(struct LxmlElem
  */
   }
 
-  /* "lxml/etree.pyx":1072
+  /* "lxml/etree.pyx":1073
  *             if self._c_node.ns.prefix is not NULL:
  *                 return funicode(self._c_node.ns.prefix)
  *         return None             # <<<<<<<<<<<<<<
@@ -59060,7 +59142,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6prefix___get__(struct LxmlElem
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1066
+  /* "lxml/etree.pyx":1067
  *     # not in ElementTree, read-only
  *     @property
  *     def prefix(self):             # <<<<<<<<<<<<<<
@@ -59079,7 +59161,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_6prefix___get__(struct LxmlElem
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1078
+/* "lxml/etree.pyx":1079
  *         u"""Original line number as found by the parser or None if unknown.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -59112,16 +59194,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10sourceline___get__(struct Lxm
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1080
+  /* "lxml/etree.pyx":1081
  *         def __get__(self):
  *             cdef long line
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             line = tree.xmlGetLineNo(self._c_node)
  *             return line if line > 0 else None
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1080, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1081, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1081
+  /* "lxml/etree.pyx":1082
  *             cdef long line
  *             _assertValidNode(self)
  *             line = tree.xmlGetLineNo(self._c_node)             # <<<<<<<<<<<<<<
@@ -59130,7 +59212,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10sourceline___get__(struct Lxm
  */
   __pyx_v_line = xmlGetLineNo(__pyx_v_self->_c_node);
 
-  /* "lxml/etree.pyx":1082
+  /* "lxml/etree.pyx":1083
  *             _assertValidNode(self)
  *             line = tree.xmlGetLineNo(self._c_node)
  *             return line if line > 0 else None             # <<<<<<<<<<<<<<
@@ -59139,7 +59221,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10sourceline___get__(struct Lxm
  */
   __Pyx_XDECREF(__pyx_r);
   if (((__pyx_v_line > 0) != 0)) {
-    __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v_line); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1082, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v_line); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1083, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_2 = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -59151,7 +59233,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10sourceline___get__(struct Lxm
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1078
+  /* "lxml/etree.pyx":1079
  *         u"""Original line number as found by the parser or None if unknown.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -59171,7 +59253,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_10sourceline___get__(struct Lxm
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1084
+/* "lxml/etree.pyx":1085
  *             return line if line > 0 else None
  * 
  *         def __set__(self, line):             # <<<<<<<<<<<<<<
@@ -59204,28 +59286,28 @@ static int __pyx_pf_4lxml_5etree_8_Element_10sourceline_2__set__(struct LxmlElem
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "lxml/etree.pyx":1085
+  /* "lxml/etree.pyx":1086
  * 
  *         def __set__(self, line):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             if line <= 0:
  *                 self._c_node.line = 0
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1085, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1086, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1086
+  /* "lxml/etree.pyx":1087
  *         def __set__(self, line):
  *             _assertValidNode(self)
  *             if line <= 0:             # <<<<<<<<<<<<<<
  *                 self._c_node.line = 0
  *             else:
  */
-  __pyx_t_2 = PyObject_RichCompare(__pyx_v_line, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1086, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1086, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_line, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1087, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1087, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1087
+    /* "lxml/etree.pyx":1088
  *             _assertValidNode(self)
  *             if line <= 0:
  *                 self._c_node.line = 0             # <<<<<<<<<<<<<<
@@ -59234,7 +59316,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_10sourceline_2__set__(struct LxmlElem
  */
     __pyx_v_self->_c_node->line = 0;
 
-    /* "lxml/etree.pyx":1086
+    /* "lxml/etree.pyx":1087
  *         def __set__(self, line):
  *             _assertValidNode(self)
  *             if line <= 0:             # <<<<<<<<<<<<<<
@@ -59244,7 +59326,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_10sourceline_2__set__(struct LxmlElem
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":1089
+  /* "lxml/etree.pyx":1090
  *                 self._c_node.line = 0
  *             else:
  *                 self._c_node.line = line             # <<<<<<<<<<<<<<
@@ -59252,12 +59334,12 @@ static int __pyx_pf_4lxml_5etree_8_Element_10sourceline_2__set__(struct LxmlElem
  *     # not in ElementTree, read-only
  */
   /*else*/ {
-    __pyx_t_4 = __Pyx_PyInt_As_unsigned_short(__pyx_v_line); if (unlikely((__pyx_t_4 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1089, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_As_unsigned_short(__pyx_v_line); if (unlikely((__pyx_t_4 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L1_error)
     __pyx_v_self->_c_node->line = __pyx_t_4;
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":1084
+  /* "lxml/etree.pyx":1085
  *             return line if line > 0 else None
  * 
  *         def __set__(self, line):             # <<<<<<<<<<<<<<
@@ -59277,7 +59359,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_10sourceline_2__set__(struct LxmlElem
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1093
+/* "lxml/etree.pyx":1094
  *     # not in ElementTree, read-only
  *     @property
  *     def nsmap(self):             # <<<<<<<<<<<<<<
@@ -59308,16 +59390,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_5nsmap___get__(struct LxmlEleme
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1100
+  /* "lxml/etree.pyx":1101
  *         Note that changing the returned dict has no effect on the Element.
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         return _build_nsmap(self._c_node)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1100, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1101, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1101
+  /* "lxml/etree.pyx":1102
  *         """
  *         _assertValidNode(self)
  *         return _build_nsmap(self._c_node)             # <<<<<<<<<<<<<<
@@ -59325,13 +59407,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_5nsmap___get__(struct LxmlEleme
  *     # not in ElementTree, read-only
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__build_nsmap(__pyx_v_self->_c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1101, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__build_nsmap(__pyx_v_self->_c_node); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1102, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1093
+  /* "lxml/etree.pyx":1094
  *     # not in ElementTree, read-only
  *     @property
  *     def nsmap(self):             # <<<<<<<<<<<<<<
@@ -59350,7 +59432,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_5nsmap___get__(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1115
+/* "lxml/etree.pyx":1116
  *         Element, regardless of the document type (XML or HTML).
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -59392,16 +59474,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1116
+  /* "lxml/etree.pyx":1117
  *         """
  *         def __get__(self):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             c_base = tree.xmlNodeGetBase(self._doc._c_doc, self._c_node)
  *             if c_base is NULL:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1116, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1117, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1117
+  /* "lxml/etree.pyx":1118
  *         def __get__(self):
  *             _assertValidNode(self)
  *             c_base = tree.xmlNodeGetBase(self._doc._c_doc, self._c_node)             # <<<<<<<<<<<<<<
@@ -59410,7 +59492,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
  */
   __pyx_v_c_base = xmlNodeGetBase(__pyx_v_self->_doc->_c_doc, __pyx_v_self->_c_node);
 
-  /* "lxml/etree.pyx":1118
+  /* "lxml/etree.pyx":1119
  *             _assertValidNode(self)
  *             c_base = tree.xmlNodeGetBase(self._doc._c_doc, self._c_node)
  *             if c_base is NULL:             # <<<<<<<<<<<<<<
@@ -59420,7 +59502,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
   __pyx_t_2 = ((__pyx_v_c_base == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1119
+    /* "lxml/etree.pyx":1120
  *             c_base = tree.xmlNodeGetBase(self._doc._c_doc, self._c_node)
  *             if c_base is NULL:
  *                 if self._doc._c_doc.URL is NULL:             # <<<<<<<<<<<<<<
@@ -59430,7 +59512,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
     __pyx_t_2 = ((__pyx_v_self->_doc->_c_doc->URL == NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":1120
+      /* "lxml/etree.pyx":1121
  *             if c_base is NULL:
  *                 if self._doc._c_doc.URL is NULL:
  *                     return None             # <<<<<<<<<<<<<<
@@ -59441,7 +59523,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
       __pyx_r = Py_None; __Pyx_INCREF(Py_None);
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":1119
+      /* "lxml/etree.pyx":1120
  *             c_base = tree.xmlNodeGetBase(self._doc._c_doc, self._c_node)
  *             if c_base is NULL:
  *                 if self._doc._c_doc.URL is NULL:             # <<<<<<<<<<<<<<
@@ -59450,7 +59532,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
  */
     }
 
-    /* "lxml/etree.pyx":1121
+    /* "lxml/etree.pyx":1122
  *                 if self._doc._c_doc.URL is NULL:
  *                     return None
  *                 return _decodeFilename(self._doc._c_doc.URL)             # <<<<<<<<<<<<<<
@@ -59458,13 +59540,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
  *                 base = _decodeFilename(c_base)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __pyx_f_4lxml_5etree__decodeFilename(__pyx_v_self->_doc->_c_doc->URL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__decodeFilename(__pyx_v_self->_doc->_c_doc->URL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1118
+    /* "lxml/etree.pyx":1119
  *             _assertValidNode(self)
  *             c_base = tree.xmlNodeGetBase(self._doc._c_doc, self._c_node)
  *             if c_base is NULL:             # <<<<<<<<<<<<<<
@@ -59473,7 +59555,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
  */
   }
 
-  /* "lxml/etree.pyx":1122
+  /* "lxml/etree.pyx":1123
  *                     return None
  *                 return _decodeFilename(self._doc._c_doc.URL)
  *             try:             # <<<<<<<<<<<<<<
@@ -59482,20 +59564,20 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
  */
   /*try:*/ {
 
-    /* "lxml/etree.pyx":1123
+    /* "lxml/etree.pyx":1124
  *                 return _decodeFilename(self._doc._c_doc.URL)
  *             try:
  *                 base = _decodeFilename(c_base)             # <<<<<<<<<<<<<<
  *             finally:
  *                 tree.xmlFree(c_base)
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__decodeFilename(__pyx_v_c_base); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L6_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__decodeFilename(__pyx_v_c_base); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1124, __pyx_L6_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_base = __pyx_t_3;
     __pyx_t_3 = 0;
   }
 
-  /* "lxml/etree.pyx":1125
+  /* "lxml/etree.pyx":1126
  *                 base = _decodeFilename(c_base)
  *             finally:
  *                 tree.xmlFree(c_base)             # <<<<<<<<<<<<<<
@@ -59542,7 +59624,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
     __pyx_L7:;
   }
 
-  /* "lxml/etree.pyx":1126
+  /* "lxml/etree.pyx":1127
  *             finally:
  *                 tree.xmlFree(c_base)
  *             return base             # <<<<<<<<<<<<<<
@@ -59554,7 +59636,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
   __pyx_r = __pyx_v_base;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1115
+  /* "lxml/etree.pyx":1116
  *         Element, regardless of the document type (XML or HTML).
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -59574,7 +59656,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_4base___get__(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1128
+/* "lxml/etree.pyx":1129
  *             return base
  * 
  *         def __set__(self, url):             # <<<<<<<<<<<<<<
@@ -59609,16 +59691,16 @@ static int __pyx_pf_4lxml_5etree_8_Element_4base_2__set__(struct LxmlElement *__
   __Pyx_RefNannySetupContext("__set__", 0);
   __Pyx_INCREF(__pyx_v_url);
 
-  /* "lxml/etree.pyx":1129
+  /* "lxml/etree.pyx":1130
  * 
  *         def __set__(self, url):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             if url is None:
  *                 c_base = <const_xmlChar*>NULL
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1129, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1130, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1130
+  /* "lxml/etree.pyx":1131
  *         def __set__(self, url):
  *             _assertValidNode(self)
  *             if url is None:             # <<<<<<<<<<<<<<
@@ -59629,7 +59711,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4base_2__set__(struct LxmlElement *__
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1131
+    /* "lxml/etree.pyx":1132
  *             _assertValidNode(self)
  *             if url is None:
  *                 c_base = <const_xmlChar*>NULL             # <<<<<<<<<<<<<<
@@ -59638,7 +59720,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4base_2__set__(struct LxmlElement *__
  */
     __pyx_v_c_base = ((const xmlChar *)NULL);
 
-    /* "lxml/etree.pyx":1130
+    /* "lxml/etree.pyx":1131
  *         def __set__(self, url):
  *             _assertValidNode(self)
  *             if url is None:             # <<<<<<<<<<<<<<
@@ -59648,7 +59730,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4base_2__set__(struct LxmlElement *__
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":1133
+  /* "lxml/etree.pyx":1134
  *                 c_base = <const_xmlChar*>NULL
  *             else:
  *                 url = _encodeFilename(url)             # <<<<<<<<<<<<<<
@@ -59656,12 +59738,12 @@ static int __pyx_pf_4lxml_5etree_8_Element_4base_2__set__(struct LxmlElement *__
  *             tree.xmlNodeSetBase(self._c_node, c_base)
  */
   /*else*/ {
-    __pyx_t_4 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_url); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1133, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_url); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1134, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_url, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1134
+    /* "lxml/etree.pyx":1135
  *             else:
  *                 url = _encodeFilename(url)
  *                 c_base = _xcstr(url)             # <<<<<<<<<<<<<<
@@ -59672,7 +59754,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4base_2__set__(struct LxmlElement *__
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":1135
+  /* "lxml/etree.pyx":1136
  *                 url = _encodeFilename(url)
  *                 c_base = _xcstr(url)
  *             tree.xmlNodeSetBase(self._c_node, c_base)             # <<<<<<<<<<<<<<
@@ -59681,7 +59763,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4base_2__set__(struct LxmlElement *__
  */
   xmlNodeSetBase(__pyx_v_self->_c_node, __pyx_v_c_base);
 
-  /* "lxml/etree.pyx":1128
+  /* "lxml/etree.pyx":1129
  *             return base
  * 
  *         def __set__(self, url):             # <<<<<<<<<<<<<<
@@ -59702,7 +59784,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_4base_2__set__(struct LxmlElement *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1138
+/* "lxml/etree.pyx":1139
  * 
  *     # ACCESSORS
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -59738,7 +59820,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_30__repr__(struct LxmlElement *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "lxml/etree.pyx":1140
+  /* "lxml/etree.pyx":1141
  *     def __repr__(self):
  *         u"__repr__(self)"
  *         return "<Element %s at 0x%x>" % (strrepr(self.tag), id(self))             # <<<<<<<<<<<<<<
@@ -59746,14 +59828,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_30__repr__(struct LxmlElement *
  *     def __getitem__(self, x):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1140, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_strrepr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1140, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_strrepr(__pyx_t_1); 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_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1140, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1140, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
@@ -59761,14 +59843,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_30__repr__(struct LxmlElement *
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
   __pyx_t_2 = 0;
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Element_s_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1140, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Element_s_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1141, __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/etree.pyx":1138
+  /* "lxml/etree.pyx":1139
  * 
  *     # ACCESSORS
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -59789,7 +59871,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_30__repr__(struct LxmlElement *
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1142
+/* "lxml/etree.pyx":1143
  *         return "<Element %s at 0x%x>" % (strrepr(self.tag), id(self))
  * 
  *     def __getitem__(self, x):             # <<<<<<<<<<<<<<
@@ -59838,7 +59920,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "lxml/etree.pyx":1146
+  /* "lxml/etree.pyx":1147
  *         slice.
  *         """
  *         cdef xmlNode* c_node = NULL             # <<<<<<<<<<<<<<
@@ -59847,7 +59929,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
   __pyx_v_c_node = NULL;
 
-  /* "lxml/etree.pyx":1147
+  /* "lxml/etree.pyx":1148
  *         """
  *         cdef xmlNode* c_node = NULL
  *         cdef Py_ssize_t step = 0, slicelength = 0             # <<<<<<<<<<<<<<
@@ -59857,16 +59939,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
   __pyx_v_step = 0;
   __pyx_v_slicelength = 0;
 
-  /* "lxml/etree.pyx":1151
+  /* "lxml/etree.pyx":1152
  *         cdef _node_to_node_function next_element
  *         cdef list result
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         if isinstance(x, slice):
  *             # slicing
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1151, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1152, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1152
+  /* "lxml/etree.pyx":1153
  *         cdef list result
  *         _assertValidNode(self)
  *         if isinstance(x, slice):             # <<<<<<<<<<<<<<
@@ -59877,18 +59959,18 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1154
+    /* "lxml/etree.pyx":1155
  *         if isinstance(x, slice):
  *             # slicing
  *             if _isFullSlice(<slice>x):             # <<<<<<<<<<<<<<
  *                 return _collectChildren(self)
  *             _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__isFullSlice(((PyObject*)__pyx_v_x)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1154, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__isFullSlice(((PyObject*)__pyx_v_x)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1155, __pyx_L1_error)
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":1155
+      /* "lxml/etree.pyx":1156
  *             # slicing
  *             if _isFullSlice(<slice>x):
  *                 return _collectChildren(self)             # <<<<<<<<<<<<<<
@@ -59896,13 +59978,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  *             if c_node is NULL:
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_4 = __pyx_f_4lxml_5etree__collectChildren(__pyx_v_self); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1155, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_4lxml_5etree__collectChildren(__pyx_v_self); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1156, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_r = __pyx_t_4;
       __pyx_t_4 = 0;
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":1154
+      /* "lxml/etree.pyx":1155
  *         if isinstance(x, slice):
  *             # slicing
  *             if _isFullSlice(<slice>x):             # <<<<<<<<<<<<<<
@@ -59911,16 +59993,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
     }
 
-    /* "lxml/etree.pyx":1156
+    /* "lxml/etree.pyx":1157
  *             if _isFullSlice(<slice>x):
  *                 return _collectChildren(self)
  *             _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)             # <<<<<<<<<<<<<<
  *             if c_node is NULL:
  *                 return []
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__findChildSlice(((PyObject*)__pyx_v_x), __pyx_v_self->_c_node, (&__pyx_v_c_node), (&__pyx_v_step), (&__pyx_v_slicelength)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1156, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__findChildSlice(((PyObject*)__pyx_v_x), __pyx_v_self->_c_node, (&__pyx_v_c_node), (&__pyx_v_step), (&__pyx_v_slicelength)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1157, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":1157
+    /* "lxml/etree.pyx":1158
  *                 return _collectChildren(self)
  *             _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)
  *             if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -59930,7 +60012,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
     __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":1158
+      /* "lxml/etree.pyx":1159
  *             _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)
  *             if c_node is NULL:
  *                 return []             # <<<<<<<<<<<<<<
@@ -59938,13 +60020,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  *                 next_element = _nextElement
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1158, __pyx_L1_error)
+      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1159, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_r = __pyx_t_4;
       __pyx_t_4 = 0;
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":1157
+      /* "lxml/etree.pyx":1158
  *                 return _collectChildren(self)
  *             _findChildSlice(<slice>x, self._c_node, &c_node, &step, &slicelength)
  *             if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -59953,7 +60035,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
     }
 
-    /* "lxml/etree.pyx":1159
+    /* "lxml/etree.pyx":1160
  *             if c_node is NULL:
  *                 return []
  *             if step > 0:             # <<<<<<<<<<<<<<
@@ -59963,7 +60045,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
     __pyx_t_2 = ((__pyx_v_step > 0) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":1160
+      /* "lxml/etree.pyx":1161
  *                 return []
  *             if step > 0:
  *                 next_element = _nextElement             # <<<<<<<<<<<<<<
@@ -59972,7 +60054,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
       __pyx_v_next_element = __pyx_f_4lxml_5etree__nextElement;
 
-      /* "lxml/etree.pyx":1159
+      /* "lxml/etree.pyx":1160
  *             if c_node is NULL:
  *                 return []
  *             if step > 0:             # <<<<<<<<<<<<<<
@@ -59982,7 +60064,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
       goto __pyx_L6;
     }
 
-    /* "lxml/etree.pyx":1162
+    /* "lxml/etree.pyx":1163
  *                 next_element = _nextElement
  *             else:
  *                 step = -step             # <<<<<<<<<<<<<<
@@ -59992,7 +60074,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
     /*else*/ {
       __pyx_v_step = (-__pyx_v_step);
 
-      /* "lxml/etree.pyx":1163
+      /* "lxml/etree.pyx":1164
  *             else:
  *                 step = -step
  *                 next_element = _previousElement             # <<<<<<<<<<<<<<
@@ -60003,19 +60085,19 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
     }
     __pyx_L6:;
 
-    /* "lxml/etree.pyx":1164
+    /* "lxml/etree.pyx":1165
  *                 step = -step
  *                 next_element = _previousElement
  *             result = []             # <<<<<<<<<<<<<<
  *             c = 0
  *             while c_node is not NULL and c < slicelength:
  */
-    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1164, __pyx_L1_error)
+    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1165, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_v_result = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1165
+    /* "lxml/etree.pyx":1166
  *                 next_element = _previousElement
  *             result = []
  *             c = 0             # <<<<<<<<<<<<<<
@@ -60024,7 +60106,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
     __pyx_v_c = 0;
 
-    /* "lxml/etree.pyx":1166
+    /* "lxml/etree.pyx":1167
  *             result = []
  *             c = 0
  *             while c_node is not NULL and c < slicelength:             # <<<<<<<<<<<<<<
@@ -60043,7 +60125,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
       __pyx_L9_bool_binop_done:;
       if (!__pyx_t_2) break;
 
-      /* "lxml/etree.pyx":1167
+      /* "lxml/etree.pyx":1168
  *             c = 0
  *             while c_node is not NULL and c < slicelength:
  *                 result.append(_elementFactory(self._doc, c_node))             # <<<<<<<<<<<<<<
@@ -60052,13 +60134,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
       __pyx_t_4 = ((PyObject *)__pyx_v_self->_doc);
       __Pyx_INCREF(__pyx_t_4);
-      __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_node)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1167, __pyx_L1_error)
+      __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_node)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1168, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_5); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1167, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_5); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1168, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "lxml/etree.pyx":1168
+      /* "lxml/etree.pyx":1169
  *             while c_node is not NULL and c < slicelength:
  *                 result.append(_elementFactory(self._doc, c_node))
  *                 c += 1             # <<<<<<<<<<<<<<
@@ -60067,7 +60149,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
       __pyx_v_c = (__pyx_v_c + 1);
 
-      /* "lxml/etree.pyx":1169
+      /* "lxml/etree.pyx":1170
  *                 result.append(_elementFactory(self._doc, c_node))
  *                 c += 1
  *                 for i in range(step):             # <<<<<<<<<<<<<<
@@ -60079,7 +60161,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
       for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
         __pyx_v_i = __pyx_t_9;
 
-        /* "lxml/etree.pyx":1170
+        /* "lxml/etree.pyx":1171
  *                 c += 1
  *                 for i in range(step):
  *                     c_node = next_element(c_node)             # <<<<<<<<<<<<<<
@@ -60088,7 +60170,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
         __pyx_v_c_node = __pyx_v_next_element(__pyx_v_c_node);
 
-        /* "lxml/etree.pyx":1171
+        /* "lxml/etree.pyx":1172
  *                 for i in range(step):
  *                     c_node = next_element(c_node)
  *                     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -60098,7 +60180,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
         __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0);
         if (__pyx_t_2) {
 
-          /* "lxml/etree.pyx":1172
+          /* "lxml/etree.pyx":1173
  *                     c_node = next_element(c_node)
  *                     if c_node is NULL:
  *                         break             # <<<<<<<<<<<<<<
@@ -60107,7 +60189,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
           goto __pyx_L12_break;
 
-          /* "lxml/etree.pyx":1171
+          /* "lxml/etree.pyx":1172
  *                 for i in range(step):
  *                     c_node = next_element(c_node)
  *                     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -60119,7 +60201,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
       __pyx_L12_break:;
     }
 
-    /* "lxml/etree.pyx":1173
+    /* "lxml/etree.pyx":1174
  *                     if c_node is NULL:
  *                         break
  *             return result             # <<<<<<<<<<<<<<
@@ -60131,7 +60213,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
     __pyx_r = __pyx_v_result;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1152
+    /* "lxml/etree.pyx":1153
  *         cdef list result
  *         _assertValidNode(self)
  *         if isinstance(x, slice):             # <<<<<<<<<<<<<<
@@ -60140,7 +60222,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
   }
 
-  /* "lxml/etree.pyx":1176
+  /* "lxml/etree.pyx":1177
  *         else:
  *             # indexing
  *             c_node = _findChild(self._c_node, x)             # <<<<<<<<<<<<<<
@@ -60148,10 +60230,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  *                 raise IndexError, u"list index out of range"
  */
   /*else*/ {
-    __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_x); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1176, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_x); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1177, __pyx_L1_error)
     __pyx_v_c_node = __pyx_f_4lxml_5etree__findChild(__pyx_v_self->_c_node, __pyx_t_7);
 
-    /* "lxml/etree.pyx":1177
+    /* "lxml/etree.pyx":1178
  *             # indexing
  *             c_node = _findChild(self._c_node, x)
  *             if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -60161,7 +60243,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
     __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0);
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":1178
+      /* "lxml/etree.pyx":1179
  *             c_node = _findChild(self._c_node, x)
  *             if c_node is NULL:
  *                 raise IndexError, u"list index out of range"             # <<<<<<<<<<<<<<
@@ -60169,9 +60251,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  * 
  */
       __Pyx_Raise(__pyx_builtin_IndexError, __pyx_kp_u_list_index_out_of_range, 0, 0);
-      __PYX_ERR(0, 1178, __pyx_L1_error)
+      __PYX_ERR(0, 1179, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":1177
+      /* "lxml/etree.pyx":1178
  *             # indexing
  *             c_node = _findChild(self._c_node, x)
  *             if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -60180,7 +60262,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
  */
     }
 
-    /* "lxml/etree.pyx":1179
+    /* "lxml/etree.pyx":1180
  *             if c_node is NULL:
  *                 raise IndexError, u"list index out of range"
  *             return _elementFactory(self._doc, c_node)             # <<<<<<<<<<<<<<
@@ -60190,7 +60272,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
     __Pyx_XDECREF(__pyx_r);
     __pyx_t_5 = ((PyObject *)__pyx_v_self->_doc);
     __Pyx_INCREF(__pyx_t_5);
-    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1180, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_r = __pyx_t_4;
@@ -60198,7 +60280,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
     goto __pyx_L0;
   }
 
-  /* "lxml/etree.pyx":1142
+  /* "lxml/etree.pyx":1143
  *         return "<Element %s at 0x%x>" % (strrepr(self.tag), id(self))
  * 
  *     def __getitem__(self, x):             # <<<<<<<<<<<<<<
@@ -60219,7 +60301,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_32__getitem__(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1181
+/* "lxml/etree.pyx":1182
  *             return _elementFactory(self._doc, c_node)
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -60253,16 +60335,16 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_8_Element_34__len__(struct LxmlElement *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__len__", 0);
 
-  /* "lxml/etree.pyx":1186
+  /* "lxml/etree.pyx":1187
  *         Returns the number of subelements.
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         return _countElements(self._c_node.children)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1186, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1187, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1187
+  /* "lxml/etree.pyx":1188
  *         """
  *         _assertValidNode(self)
  *         return _countElements(self._c_node.children)             # <<<<<<<<<<<<<<
@@ -60272,7 +60354,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_8_Element_34__len__(struct LxmlElement *
   __pyx_r = __pyx_f_4lxml_5etree__countElements(__pyx_v_self->_c_node->children);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1181
+  /* "lxml/etree.pyx":1182
  *             return _elementFactory(self._doc, c_node)
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -60289,7 +60371,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_8_Element_34__len__(struct LxmlElement *
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1189
+/* "lxml/etree.pyx":1190
  *         return _countElements(self._c_node.children)
  * 
  *     def __nonzero__(self):             # <<<<<<<<<<<<<<
@@ -60322,50 +60404,50 @@ static int __pyx_pf_4lxml_5etree_8_Element_36__nonzero__(struct LxmlElement *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__nonzero__", 0);
 
-  /* "lxml/etree.pyx":1191
+  /* "lxml/etree.pyx":1192
  *     def __nonzero__(self):
  *         #u"__nonzero__(self)" # currently fails in Py3.1
  *         import warnings             # <<<<<<<<<<<<<<
  *         warnings.warn(
  *             u"The behavior of this method will change in future versions. "
  */
-  __pyx_t_1 = __Pyx_Import(__pyx_n_s_warnings, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1191, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_warnings, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1192, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_warnings = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":1192
+  /* "lxml/etree.pyx":1193
  *         #u"__nonzero__(self)" # currently fails in Py3.1
  *         import warnings
  *         warnings.warn(             # <<<<<<<<<<<<<<
  *             u"The behavior of this method will change in future versions. "
  *             u"Use specific 'len(elem)' or 'elem is not None' test instead.",
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_warnings, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1192, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_warnings, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1193, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "lxml/etree.pyx":1195
+  /* "lxml/etree.pyx":1196
  *             u"The behavior of this method will change in future versions. "
  *             u"Use specific 'len(elem)' or 'elem is not None' test instead.",
  *             FutureWarning             # <<<<<<<<<<<<<<
  *             )
  *         # emulate old behaviour
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1192, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1193, __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/etree.pyx":1198
+  /* "lxml/etree.pyx":1199
  *             )
  *         # emulate old behaviour
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         return _hasChild(self._c_node)
  * 
  */
-  __pyx_t_3 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1198, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1199, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1199
+  /* "lxml/etree.pyx":1200
  *         # emulate old behaviour
  *         _assertValidNode(self)
  *         return _hasChild(self._c_node)             # <<<<<<<<<<<<<<
@@ -60375,7 +60457,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_36__nonzero__(struct LxmlElement *__p
   __pyx_r = __pyx_f_4lxml_5etree__hasChild(__pyx_v_self->_c_node);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1189
+  /* "lxml/etree.pyx":1190
  *         return _countElements(self._c_node.children)
  * 
  *     def __nonzero__(self):             # <<<<<<<<<<<<<<
@@ -60395,7 +60477,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_36__nonzero__(struct LxmlElement *__p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1201
+/* "lxml/etree.pyx":1202
  *         return _hasChild(self._c_node)
  * 
  *     def __contains__(self, element):             # <<<<<<<<<<<<<<
@@ -60433,16 +60515,16 @@ static int __pyx_pf_4lxml_5etree_8_Element_38__contains__(struct LxmlElement *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__contains__", 0);
 
-  /* "lxml/etree.pyx":1204
+  /* "lxml/etree.pyx":1205
  *         u"__contains__(self, element)"
  *         cdef xmlNode* c_node
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         if not isinstance(element, _Element):
  *             return 0
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1204, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1205, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1205
+  /* "lxml/etree.pyx":1206
  *         cdef xmlNode* c_node
  *         _assertValidNode(self)
  *         if not isinstance(element, _Element):             # <<<<<<<<<<<<<<
@@ -60453,7 +60535,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_38__contains__(struct LxmlElement *__
   __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1206
+    /* "lxml/etree.pyx":1207
  *         _assertValidNode(self)
  *         if not isinstance(element, _Element):
  *             return 0             # <<<<<<<<<<<<<<
@@ -60463,7 +60545,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_38__contains__(struct LxmlElement *__
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1205
+    /* "lxml/etree.pyx":1206
  *         cdef xmlNode* c_node
  *         _assertValidNode(self)
  *         if not isinstance(element, _Element):             # <<<<<<<<<<<<<<
@@ -60472,7 +60554,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_38__contains__(struct LxmlElement *__
  */
   }
 
-  /* "lxml/etree.pyx":1207
+  /* "lxml/etree.pyx":1208
  *         if not isinstance(element, _Element):
  *             return 0
  *         c_node = (<_Element>element)._c_node             # <<<<<<<<<<<<<<
@@ -60482,7 +60564,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_38__contains__(struct LxmlElement *__
   __pyx_t_4 = ((struct LxmlElement *)__pyx_v_element)->_c_node;
   __pyx_v_c_node = __pyx_t_4;
 
-  /* "lxml/etree.pyx":1208
+  /* "lxml/etree.pyx":1209
  *             return 0
  *         c_node = (<_Element>element)._c_node
  *         return c_node is not NULL and c_node.parent is self._c_node             # <<<<<<<<<<<<<<
@@ -60501,7 +60583,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_38__contains__(struct LxmlElement *__
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1201
+  /* "lxml/etree.pyx":1202
  *         return _hasChild(self._c_node)
  * 
  *     def __contains__(self, element):             # <<<<<<<<<<<<<<
@@ -60518,7 +60600,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_38__contains__(struct LxmlElement *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1210
+/* "lxml/etree.pyx":1211
  *         return c_node is not NULL and c_node.parent is self._c_node
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -60552,7 +60634,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_40__iter__(struct LxmlElement *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__iter__", 0);
 
-  /* "lxml/etree.pyx":1212
+  /* "lxml/etree.pyx":1213
  *     def __iter__(self):
  *         u"__iter__(self)"
  *         return ElementChildIterator(self)             # <<<<<<<<<<<<<<
@@ -60560,13 +60642,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_40__iter__(struct LxmlElement *
  *     def __reversed__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree_ElementChildIterator), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1212, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree_ElementChildIterator), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1210
+  /* "lxml/etree.pyx":1211
  *         return c_node is not NULL and c_node.parent is self._c_node
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -60585,7 +60667,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_40__iter__(struct LxmlElement *
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1214
+/* "lxml/etree.pyx":1215
  *         return ElementChildIterator(self)
  * 
  *     def __reversed__(self):             # <<<<<<<<<<<<<<
@@ -60619,7 +60701,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_42__reversed__(struct LxmlEleme
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__reversed__", 0);
 
-  /* "lxml/etree.pyx":1216
+  /* "lxml/etree.pyx":1217
  *     def __reversed__(self):
  *         u"__reversed__(self)"
  *         return ElementChildIterator(self, reversed=True)             # <<<<<<<<<<<<<<
@@ -60627,15 +60709,15 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_42__reversed__(struct LxmlEleme
  *     def index(self, _Element child not None, start: int = None, stop: int = None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1216, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1216, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_reversed, Py_True) < 0) __PYX_ERR(0, 1216, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementChildIterator), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1216, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_reversed, Py_True) < 0) __PYX_ERR(0, 1217, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementChildIterator), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1217, __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;
@@ -60643,7 +60725,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_42__reversed__(struct LxmlEleme
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1214
+  /* "lxml/etree.pyx":1215
  *         return ElementChildIterator(self)
  * 
  *     def __reversed__(self):             # <<<<<<<<<<<<<<
@@ -60664,7 +60746,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_42__reversed__(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1218
+/* "lxml/etree.pyx":1219
  *         return ElementChildIterator(self, reversed=True)
  * 
  *     def index(self, _Element child not None, start: int = None, stop: int = None):             # <<<<<<<<<<<<<<
@@ -60723,7 +60805,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_45index(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "index") < 0)) __PYX_ERR(0, 1218, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "index") < 0)) __PYX_ERR(0, 1219, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -60742,13 +60824,13 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_45index(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("index", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1218, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("index", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1219, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.index", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_child), __pyx_ptype_4lxml_5etree__Element, 0, "child", 0))) __PYX_ERR(0, 1218, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_child), __pyx_ptype_4lxml_5etree__Element, 0, "child", 0))) __PYX_ERR(0, 1219, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_8_Element_44index(((struct LxmlElement *)__pyx_v_self), __pyx_v_child, __pyx_v_start, __pyx_v_stop);
 
   /* function exit code */
@@ -60781,25 +60863,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("index", 0);
 
-  /* "lxml/etree.pyx":1229
+  /* "lxml/etree.pyx":1230
  *         cdef xmlNode* c_child
  *         cdef xmlNode* c_start_node
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         _assertValidNode(child)
  *         c_child = child._c_node
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1229, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1230, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1230
+  /* "lxml/etree.pyx":1231
  *         cdef xmlNode* c_start_node
  *         _assertValidNode(self)
  *         _assertValidNode(child)             # <<<<<<<<<<<<<<
  *         c_child = child._c_node
  *         if c_child.parent is not self._c_node:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_child); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1230, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_child); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1231, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1231
+  /* "lxml/etree.pyx":1232
  *         _assertValidNode(self)
  *         _assertValidNode(child)
  *         c_child = child._c_node             # <<<<<<<<<<<<<<
@@ -60809,7 +60891,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   __pyx_t_2 = __pyx_v_child->_c_node;
   __pyx_v_c_child = __pyx_t_2;
 
-  /* "lxml/etree.pyx":1232
+  /* "lxml/etree.pyx":1233
  *         _assertValidNode(child)
  *         c_child = child._c_node
  *         if c_child.parent is not self._c_node:             # <<<<<<<<<<<<<<
@@ -60819,7 +60901,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   __pyx_t_3 = ((__pyx_v_c_child->parent != __pyx_v_self->_c_node) != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":1233
+    /* "lxml/etree.pyx":1234
  *         c_child = child._c_node
  *         if c_child.parent is not self._c_node:
  *             raise ValueError, u"Element is not a child of this node."             # <<<<<<<<<<<<<<
@@ -60827,9 +60909,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  *         # handle the unbounded search straight away (normal case)
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Element_is_not_a_child_of_this_n, 0, 0);
-    __PYX_ERR(0, 1233, __pyx_L1_error)
+    __PYX_ERR(0, 1234, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":1232
+    /* "lxml/etree.pyx":1233
  *         _assertValidNode(child)
  *         c_child = child._c_node
  *         if c_child.parent is not self._c_node:             # <<<<<<<<<<<<<<
@@ -60838,7 +60920,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
   }
 
-  /* "lxml/etree.pyx":1236
+  /* "lxml/etree.pyx":1237
  * 
  *         # handle the unbounded search straight away (normal case)
  *         if stop is None and (start is None or start == 0):             # <<<<<<<<<<<<<<
@@ -60859,15 +60941,15 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     __pyx_t_3 = __pyx_t_4;
     goto __pyx_L5_bool_binop_done;
   }
-  __pyx_t_6 = __Pyx_PyInt_EqObjC(__pyx_v_start, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1236, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_EqObjC(__pyx_v_start, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1237, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1236, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1237, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_3 = __pyx_t_4;
   __pyx_L5_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1237
+    /* "lxml/etree.pyx":1238
  *         # handle the unbounded search straight away (normal case)
  *         if stop is None and (start is None or start == 0):
  *             k = 0             # <<<<<<<<<<<<<<
@@ -60876,7 +60958,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
     __pyx_v_k = 0;
 
-    /* "lxml/etree.pyx":1238
+    /* "lxml/etree.pyx":1239
  *         if stop is None and (start is None or start == 0):
  *             k = 0
  *             c_child = c_child.prev             # <<<<<<<<<<<<<<
@@ -60886,7 +60968,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     __pyx_t_2 = __pyx_v_c_child->prev;
     __pyx_v_c_child = __pyx_t_2;
 
-    /* "lxml/etree.pyx":1239
+    /* "lxml/etree.pyx":1240
  *             k = 0
  *             c_child = c_child.prev
  *             while c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -60897,7 +60979,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_t_3 = ((__pyx_v_c_child != NULL) != 0);
       if (!__pyx_t_3) break;
 
-      /* "lxml/etree.pyx":1240
+      /* "lxml/etree.pyx":1241
  *             c_child = c_child.prev
  *             while c_child is not NULL:
  *                 if _isElement(c_child):             # <<<<<<<<<<<<<<
@@ -60907,7 +60989,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_t_3 = (_isElement(__pyx_v_c_child) != 0);
       if (__pyx_t_3) {
 
-        /* "lxml/etree.pyx":1241
+        /* "lxml/etree.pyx":1242
  *             while c_child is not NULL:
  *                 if _isElement(c_child):
  *                     k += 1             # <<<<<<<<<<<<<<
@@ -60916,7 +60998,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
         __pyx_v_k = (__pyx_v_k + 1);
 
-        /* "lxml/etree.pyx":1240
+        /* "lxml/etree.pyx":1241
  *             c_child = c_child.prev
  *             while c_child is not NULL:
  *                 if _isElement(c_child):             # <<<<<<<<<<<<<<
@@ -60925,7 +61007,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
       }
 
-      /* "lxml/etree.pyx":1242
+      /* "lxml/etree.pyx":1243
  *                 if _isElement(c_child):
  *                     k += 1
  *                 c_child = c_child.prev             # <<<<<<<<<<<<<<
@@ -60936,7 +61018,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_v_c_child = __pyx_t_2;
     }
 
-    /* "lxml/etree.pyx":1243
+    /* "lxml/etree.pyx":1244
  *                     k += 1
  *                 c_child = c_child.prev
  *             return k             # <<<<<<<<<<<<<<
@@ -60944,13 +61026,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  *         # check indices
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1243, __pyx_L1_error)
+    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1244, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_r = __pyx_t_6;
     __pyx_t_6 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1236
+    /* "lxml/etree.pyx":1237
  * 
  *         # handle the unbounded search straight away (normal case)
  *         if stop is None and (start is None or start == 0):             # <<<<<<<<<<<<<<
@@ -60959,7 +61041,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
   }
 
-  /* "lxml/etree.pyx":1246
+  /* "lxml/etree.pyx":1247
  * 
  *         # check indices
  *         if start is None:             # <<<<<<<<<<<<<<
@@ -60970,7 +61052,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":1247
+    /* "lxml/etree.pyx":1248
  *         # check indices
  *         if start is None:
  *             c_start = 0             # <<<<<<<<<<<<<<
@@ -60979,7 +61061,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
     __pyx_v_c_start = 0;
 
-    /* "lxml/etree.pyx":1246
+    /* "lxml/etree.pyx":1247
  * 
  *         # check indices
  *         if start is None:             # <<<<<<<<<<<<<<
@@ -60989,7 +61071,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     goto __pyx_L11;
   }
 
-  /* "lxml/etree.pyx":1249
+  /* "lxml/etree.pyx":1250
  *             c_start = 0
  *         else:
  *             c_start = start             # <<<<<<<<<<<<<<
@@ -60997,12 +61079,12 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  *             c_stop = 0
  */
   /*else*/ {
-    __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_start); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1249, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_start); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1250, __pyx_L1_error)
     __pyx_v_c_start = __pyx_t_7;
   }
   __pyx_L11:;
 
-  /* "lxml/etree.pyx":1250
+  /* "lxml/etree.pyx":1251
  *         else:
  *             c_start = start
  *         if stop is None:             # <<<<<<<<<<<<<<
@@ -61013,7 +61095,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1251
+    /* "lxml/etree.pyx":1252
  *             c_start = start
  *         if stop is None:
  *             c_stop = 0             # <<<<<<<<<<<<<<
@@ -61022,7 +61104,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
     __pyx_v_c_stop = 0;
 
-    /* "lxml/etree.pyx":1250
+    /* "lxml/etree.pyx":1251
  *         else:
  *             c_start = start
  *         if stop is None:             # <<<<<<<<<<<<<<
@@ -61032,7 +61114,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     goto __pyx_L12;
   }
 
-  /* "lxml/etree.pyx":1253
+  /* "lxml/etree.pyx":1254
  *             c_stop = 0
  *         else:
  *             c_stop = stop             # <<<<<<<<<<<<<<
@@ -61040,10 +61122,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  *                    c_start >= c_stop and (c_stop > 0 or c_start < 0):
  */
   /*else*/ {
-    __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_stop); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1253, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_stop); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1254, __pyx_L1_error)
     __pyx_v_c_stop = __pyx_t_7;
 
-    /* "lxml/etree.pyx":1254
+    /* "lxml/etree.pyx":1255
  *         else:
  *             c_stop = stop
  *             if c_stop == 0 or \             # <<<<<<<<<<<<<<
@@ -61057,7 +61139,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       goto __pyx_L14_bool_binop_done;
     }
 
-    /* "lxml/etree.pyx":1255
+    /* "lxml/etree.pyx":1256
  *             c_stop = stop
  *             if c_stop == 0 or \
  *                    c_start >= c_stop and (c_stop > 0 or c_start < 0):             # <<<<<<<<<<<<<<
@@ -61080,7 +61162,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     __pyx_t_3 = __pyx_t_4;
     __pyx_L14_bool_binop_done:;
 
-    /* "lxml/etree.pyx":1254
+    /* "lxml/etree.pyx":1255
  *         else:
  *             c_stop = stop
  *             if c_stop == 0 or \             # <<<<<<<<<<<<<<
@@ -61089,7 +61171,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
     if (unlikely(__pyx_t_3)) {
 
-      /* "lxml/etree.pyx":1256
+      /* "lxml/etree.pyx":1257
  *             if c_stop == 0 or \
  *                    c_start >= c_stop and (c_stop > 0 or c_start < 0):
  *                 raise ValueError, u"list.index(x): x not in slice"             # <<<<<<<<<<<<<<
@@ -61097,9 +61179,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  *         # for negative slice indices, check slice before searching index
  */
       __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_list_index_x_x_not_in_slice, 0, 0);
-      __PYX_ERR(0, 1256, __pyx_L1_error)
+      __PYX_ERR(0, 1257, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":1254
+      /* "lxml/etree.pyx":1255
  *         else:
  *             c_stop = stop
  *             if c_stop == 0 or \             # <<<<<<<<<<<<<<
@@ -61110,7 +61192,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   }
   __pyx_L12:;
 
-  /* "lxml/etree.pyx":1259
+  /* "lxml/etree.pyx":1260
  * 
  *         # for negative slice indices, check slice before searching index
  *         if c_start < 0 or c_stop < 0:             # <<<<<<<<<<<<<<
@@ -61128,7 +61210,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   __pyx_L19_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1261
+    /* "lxml/etree.pyx":1262
  *         if c_start < 0 or c_stop < 0:
  *             # start from right, at most up to leftmost(c_start, c_stop)
  *             if c_start < c_stop:             # <<<<<<<<<<<<<<
@@ -61138,7 +61220,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     __pyx_t_3 = ((__pyx_v_c_start < __pyx_v_c_stop) != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/etree.pyx":1262
+      /* "lxml/etree.pyx":1263
  *             # start from right, at most up to leftmost(c_start, c_stop)
  *             if c_start < c_stop:
  *                 k = -c_start             # <<<<<<<<<<<<<<
@@ -61147,7 +61229,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
       __pyx_v_k = (-__pyx_v_c_start);
 
-      /* "lxml/etree.pyx":1261
+      /* "lxml/etree.pyx":1262
  *         if c_start < 0 or c_stop < 0:
  *             # start from right, at most up to leftmost(c_start, c_stop)
  *             if c_start < c_stop:             # <<<<<<<<<<<<<<
@@ -61157,7 +61239,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       goto __pyx_L21;
     }
 
-    /* "lxml/etree.pyx":1264
+    /* "lxml/etree.pyx":1265
  *                 k = -c_start
  *             else:
  *                 k = -c_stop             # <<<<<<<<<<<<<<
@@ -61169,7 +61251,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     }
     __pyx_L21:;
 
-    /* "lxml/etree.pyx":1265
+    /* "lxml/etree.pyx":1266
  *             else:
  *                 k = -c_stop
  *             c_start_node = self._c_node.last             # <<<<<<<<<<<<<<
@@ -61179,7 +61261,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     __pyx_t_2 = __pyx_v_self->_c_node->last;
     __pyx_v_c_start_node = __pyx_t_2;
 
-    /* "lxml/etree.pyx":1266
+    /* "lxml/etree.pyx":1267
  *                 k = -c_stop
  *             c_start_node = self._c_node.last
  *             l = 1             # <<<<<<<<<<<<<<
@@ -61188,7 +61270,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
     __pyx_v_l = 1;
 
-    /* "lxml/etree.pyx":1267
+    /* "lxml/etree.pyx":1268
  *             c_start_node = self._c_node.last
  *             l = 1
  *             while c_start_node != c_child and l < k:             # <<<<<<<<<<<<<<
@@ -61207,7 +61289,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_L24_bool_binop_done:;
       if (!__pyx_t_3) break;
 
-      /* "lxml/etree.pyx":1268
+      /* "lxml/etree.pyx":1269
  *             l = 1
  *             while c_start_node != c_child and l < k:
  *                 if _isElement(c_start_node):             # <<<<<<<<<<<<<<
@@ -61217,7 +61299,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_t_3 = (_isElement(__pyx_v_c_start_node) != 0);
       if (__pyx_t_3) {
 
-        /* "lxml/etree.pyx":1269
+        /* "lxml/etree.pyx":1270
  *             while c_start_node != c_child and l < k:
  *                 if _isElement(c_start_node):
  *                     l += 1             # <<<<<<<<<<<<<<
@@ -61226,7 +61308,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
         __pyx_v_l = (__pyx_v_l + 1);
 
-        /* "lxml/etree.pyx":1268
+        /* "lxml/etree.pyx":1269
  *             l = 1
  *             while c_start_node != c_child and l < k:
  *                 if _isElement(c_start_node):             # <<<<<<<<<<<<<<
@@ -61235,7 +61317,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
       }
 
-      /* "lxml/etree.pyx":1270
+      /* "lxml/etree.pyx":1271
  *                 if _isElement(c_start_node):
  *                     l += 1
  *                 c_start_node = c_start_node.prev             # <<<<<<<<<<<<<<
@@ -61246,7 +61328,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_v_c_start_node = __pyx_t_2;
     }
 
-    /* "lxml/etree.pyx":1271
+    /* "lxml/etree.pyx":1272
  *                     l += 1
  *                 c_start_node = c_start_node.prev
  *             if c_start_node == c_child:             # <<<<<<<<<<<<<<
@@ -61256,7 +61338,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     __pyx_t_3 = ((__pyx_v_c_start_node == __pyx_v_c_child) != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/etree.pyx":1273
+      /* "lxml/etree.pyx":1274
  *             if c_start_node == c_child:
  *                 # found! before slice end?
  *                 if c_stop < 0 and l <= -c_stop:             # <<<<<<<<<<<<<<
@@ -61274,7 +61356,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_L29_bool_binop_done:;
       if (unlikely(__pyx_t_3)) {
 
-        /* "lxml/etree.pyx":1274
+        /* "lxml/etree.pyx":1275
  *                 # found! before slice end?
  *                 if c_stop < 0 and l <= -c_stop:
  *                     raise ValueError, u"list.index(x): x not in slice"             # <<<<<<<<<<<<<<
@@ -61282,9 +61364,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  *                 raise ValueError, u"list.index(x): x not in slice"
  */
         __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_list_index_x_x_not_in_slice, 0, 0);
-        __PYX_ERR(0, 1274, __pyx_L1_error)
+        __PYX_ERR(0, 1275, __pyx_L1_error)
 
-        /* "lxml/etree.pyx":1273
+        /* "lxml/etree.pyx":1274
  *             if c_start_node == c_child:
  *                 # found! before slice end?
  *                 if c_stop < 0 and l <= -c_stop:             # <<<<<<<<<<<<<<
@@ -61293,7 +61375,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
       }
 
-      /* "lxml/etree.pyx":1271
+      /* "lxml/etree.pyx":1272
  *                     l += 1
  *                 c_start_node = c_start_node.prev
  *             if c_start_node == c_child:             # <<<<<<<<<<<<<<
@@ -61303,7 +61385,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       goto __pyx_L27;
     }
 
-    /* "lxml/etree.pyx":1275
+    /* "lxml/etree.pyx":1276
  *                 if c_stop < 0 and l <= -c_stop:
  *                     raise ValueError, u"list.index(x): x not in slice"
  *             elif c_start < 0:             # <<<<<<<<<<<<<<
@@ -61313,7 +61395,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     __pyx_t_3 = ((__pyx_v_c_start < 0) != 0);
     if (unlikely(__pyx_t_3)) {
 
-      /* "lxml/etree.pyx":1276
+      /* "lxml/etree.pyx":1277
  *                     raise ValueError, u"list.index(x): x not in slice"
  *             elif c_start < 0:
  *                 raise ValueError, u"list.index(x): x not in slice"             # <<<<<<<<<<<<<<
@@ -61321,9 +61403,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  *         # now determine the index backwards from child
  */
       __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_list_index_x_x_not_in_slice, 0, 0);
-      __PYX_ERR(0, 1276, __pyx_L1_error)
+      __PYX_ERR(0, 1277, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":1275
+      /* "lxml/etree.pyx":1276
  *                 if c_stop < 0 and l <= -c_stop:
  *                     raise ValueError, u"list.index(x): x not in slice"
  *             elif c_start < 0:             # <<<<<<<<<<<<<<
@@ -61333,7 +61415,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     }
     __pyx_L27:;
 
-    /* "lxml/etree.pyx":1259
+    /* "lxml/etree.pyx":1260
  * 
  *         # for negative slice indices, check slice before searching index
  *         if c_start < 0 or c_stop < 0:             # <<<<<<<<<<<<<<
@@ -61342,7 +61424,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
   }
 
-  /* "lxml/etree.pyx":1279
+  /* "lxml/etree.pyx":1280
  * 
  *         # now determine the index backwards from child
  *         c_child = c_child.prev             # <<<<<<<<<<<<<<
@@ -61352,7 +61434,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   __pyx_t_2 = __pyx_v_c_child->prev;
   __pyx_v_c_child = __pyx_t_2;
 
-  /* "lxml/etree.pyx":1280
+  /* "lxml/etree.pyx":1281
  *         # now determine the index backwards from child
  *         c_child = c_child.prev
  *         k = 0             # <<<<<<<<<<<<<<
@@ -61361,7 +61443,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
   __pyx_v_k = 0;
 
-  /* "lxml/etree.pyx":1281
+  /* "lxml/etree.pyx":1282
  *         c_child = c_child.prev
  *         k = 0
  *         if c_stop > 0:             # <<<<<<<<<<<<<<
@@ -61371,7 +61453,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   __pyx_t_3 = ((__pyx_v_c_stop > 0) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1283
+    /* "lxml/etree.pyx":1284
  *         if c_stop > 0:
  *             # we can optimize: stop after c_stop elements if not found
  *             while c_child != NULL and k < c_stop:             # <<<<<<<<<<<<<<
@@ -61390,7 +61472,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_L34_bool_binop_done:;
       if (!__pyx_t_3) break;
 
-      /* "lxml/etree.pyx":1284
+      /* "lxml/etree.pyx":1285
  *             # we can optimize: stop after c_stop elements if not found
  *             while c_child != NULL and k < c_stop:
  *                 if _isElement(c_child):             # <<<<<<<<<<<<<<
@@ -61400,7 +61482,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_t_3 = (_isElement(__pyx_v_c_child) != 0);
       if (__pyx_t_3) {
 
-        /* "lxml/etree.pyx":1285
+        /* "lxml/etree.pyx":1286
  *             while c_child != NULL and k < c_stop:
  *                 if _isElement(c_child):
  *                     k += 1             # <<<<<<<<<<<<<<
@@ -61409,7 +61491,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
         __pyx_v_k = (__pyx_v_k + 1);
 
-        /* "lxml/etree.pyx":1284
+        /* "lxml/etree.pyx":1285
  *             # we can optimize: stop after c_stop elements if not found
  *             while c_child != NULL and k < c_stop:
  *                 if _isElement(c_child):             # <<<<<<<<<<<<<<
@@ -61418,7 +61500,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
       }
 
-      /* "lxml/etree.pyx":1286
+      /* "lxml/etree.pyx":1287
  *                 if _isElement(c_child):
  *                     k += 1
  *                 c_child = c_child.prev             # <<<<<<<<<<<<<<
@@ -61429,7 +61511,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_v_c_child = __pyx_t_2;
     }
 
-    /* "lxml/etree.pyx":1287
+    /* "lxml/etree.pyx":1288
  *                     k += 1
  *                 c_child = c_child.prev
  *             if k < c_stop:             # <<<<<<<<<<<<<<
@@ -61439,7 +61521,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     __pyx_t_3 = ((__pyx_v_k < __pyx_v_c_stop) != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/etree.pyx":1288
+      /* "lxml/etree.pyx":1289
  *                 c_child = c_child.prev
  *             if k < c_stop:
  *                 return k             # <<<<<<<<<<<<<<
@@ -61447,13 +61529,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  *             # traverse all
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1288, __pyx_L1_error)
+      __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1289, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_r = __pyx_t_6;
       __pyx_t_6 = 0;
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":1287
+      /* "lxml/etree.pyx":1288
  *                     k += 1
  *                 c_child = c_child.prev
  *             if k < c_stop:             # <<<<<<<<<<<<<<
@@ -61462,7 +61544,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
     }
 
-    /* "lxml/etree.pyx":1281
+    /* "lxml/etree.pyx":1282
  *         c_child = c_child.prev
  *         k = 0
  *         if c_stop > 0:             # <<<<<<<<<<<<<<
@@ -61472,7 +61554,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     goto __pyx_L31;
   }
 
-  /* "lxml/etree.pyx":1291
+  /* "lxml/etree.pyx":1292
  *         else:
  *             # traverse all
  *             while c_child != NULL:             # <<<<<<<<<<<<<<
@@ -61484,7 +61566,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_t_3 = ((__pyx_v_c_child != NULL) != 0);
       if (!__pyx_t_3) break;
 
-      /* "lxml/etree.pyx":1292
+      /* "lxml/etree.pyx":1293
  *             # traverse all
  *             while c_child != NULL:
  *                 if _isElement(c_child):             # <<<<<<<<<<<<<<
@@ -61494,7 +61576,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_t_3 = (_isElement(__pyx_v_c_child) != 0);
       if (__pyx_t_3) {
 
-        /* "lxml/etree.pyx":1293
+        /* "lxml/etree.pyx":1294
  *             while c_child != NULL:
  *                 if _isElement(c_child):
  *                     k = k + 1             # <<<<<<<<<<<<<<
@@ -61503,7 +61585,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
         __pyx_v_k = (__pyx_v_k + 1);
 
-        /* "lxml/etree.pyx":1292
+        /* "lxml/etree.pyx":1293
  *             # traverse all
  *             while c_child != NULL:
  *                 if _isElement(c_child):             # <<<<<<<<<<<<<<
@@ -61512,7 +61594,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
       }
 
-      /* "lxml/etree.pyx":1294
+      /* "lxml/etree.pyx":1295
  *                 if _isElement(c_child):
  *                     k = k + 1
  *                 c_child = c_child.prev             # <<<<<<<<<<<<<<
@@ -61523,7 +61605,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_v_c_child = __pyx_t_2;
     }
 
-    /* "lxml/etree.pyx":1295
+    /* "lxml/etree.pyx":1296
  *                     k = k + 1
  *                 c_child = c_child.prev
  *             if c_start > 0:             # <<<<<<<<<<<<<<
@@ -61533,7 +61615,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
     __pyx_t_3 = ((__pyx_v_c_start > 0) != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/etree.pyx":1296
+      /* "lxml/etree.pyx":1297
  *                 c_child = c_child.prev
  *             if c_start > 0:
  *                 if k >= c_start:             # <<<<<<<<<<<<<<
@@ -61543,7 +61625,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       __pyx_t_3 = ((__pyx_v_k >= __pyx_v_c_start) != 0);
       if (__pyx_t_3) {
 
-        /* "lxml/etree.pyx":1297
+        /* "lxml/etree.pyx":1298
  *             if c_start > 0:
  *                 if k >= c_start:
  *                     return k             # <<<<<<<<<<<<<<
@@ -61551,13 +61633,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  *                 return k
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1297, __pyx_L1_error)
+        __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1298, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_r = __pyx_t_6;
         __pyx_t_6 = 0;
         goto __pyx_L0;
 
-        /* "lxml/etree.pyx":1296
+        /* "lxml/etree.pyx":1297
  *                 c_child = c_child.prev
  *             if c_start > 0:
  *                 if k >= c_start:             # <<<<<<<<<<<<<<
@@ -61566,7 +61648,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
       }
 
-      /* "lxml/etree.pyx":1295
+      /* "lxml/etree.pyx":1296
  *                     k = k + 1
  *                 c_child = c_child.prev
  *             if c_start > 0:             # <<<<<<<<<<<<<<
@@ -61576,7 +61658,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
       goto __pyx_L41;
     }
 
-    /* "lxml/etree.pyx":1299
+    /* "lxml/etree.pyx":1300
  *                     return k
  *             else:
  *                 return k             # <<<<<<<<<<<<<<
@@ -61585,7 +61667,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
     /*else*/ {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1299, __pyx_L1_error)
+      __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_k); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1300, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_r = __pyx_t_6;
       __pyx_t_6 = 0;
@@ -61595,7 +61677,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   }
   __pyx_L31:;
 
-  /* "lxml/etree.pyx":1300
+  /* "lxml/etree.pyx":1301
  *             else:
  *                 return k
  *         if c_start != 0 or c_stop != 0:             # <<<<<<<<<<<<<<
@@ -61613,7 +61695,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   __pyx_L44_bool_binop_done:;
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":1301
+    /* "lxml/etree.pyx":1302
  *                 return k
  *         if c_start != 0 or c_stop != 0:
  *             raise ValueError, u"list.index(x): x not in slice"             # <<<<<<<<<<<<<<
@@ -61621,9 +61703,9 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  *             raise ValueError, u"list.index(x): x not in list"
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_list_index_x_x_not_in_slice, 0, 0);
-    __PYX_ERR(0, 1301, __pyx_L1_error)
+    __PYX_ERR(0, 1302, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":1300
+    /* "lxml/etree.pyx":1301
  *             else:
  *                 return k
  *         if c_start != 0 or c_stop != 0:             # <<<<<<<<<<<<<<
@@ -61632,7 +61714,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
   }
 
-  /* "lxml/etree.pyx":1303
+  /* "lxml/etree.pyx":1304
  *             raise ValueError, u"list.index(x): x not in slice"
  *         else:
  *             raise ValueError, u"list.index(x): x not in list"             # <<<<<<<<<<<<<<
@@ -61641,10 +61723,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
  */
   /*else*/ {
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_list_index_x_x_not_in_list, 0, 0);
-    __PYX_ERR(0, 1303, __pyx_L1_error)
+    __PYX_ERR(0, 1304, __pyx_L1_error)
   }
 
-  /* "lxml/etree.pyx":1218
+  /* "lxml/etree.pyx":1219
  *         return ElementChildIterator(self, reversed=True)
  * 
  *     def index(self, _Element child not None, start: int = None, stop: int = None):             # <<<<<<<<<<<<<<
@@ -61663,7 +61745,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_44index(struct LxmlElement *__p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1305
+/* "lxml/etree.pyx":1306
  *             raise ValueError, u"list.index(x): x not in list"
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
@@ -61712,7 +61794,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_47get(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) __PYX_ERR(0, 1305, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) __PYX_ERR(0, 1306, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -61728,7 +61810,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_47get(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1305, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1306, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -61751,16 +61833,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_46get(struct LxmlElement *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get", 0);
 
-  /* "lxml/etree.pyx":1310
+  /* "lxml/etree.pyx":1311
  *         Gets an element attribute.
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         return _getAttributeValue(self, key, default)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1310, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1311, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1311
+  /* "lxml/etree.pyx":1312
  *         """
  *         _assertValidNode(self)
  *         return _getAttributeValue(self, key, default)             # <<<<<<<<<<<<<<
@@ -61768,13 +61850,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_46get(struct LxmlElement *__pyx
  *     def keys(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__getAttributeValue(__pyx_v_self, __pyx_v_key, __pyx_v_default); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1311, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__getAttributeValue(__pyx_v_self, __pyx_v_key, __pyx_v_default); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1312, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1305
+  /* "lxml/etree.pyx":1306
  *             raise ValueError, u"list.index(x): x not in list"
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
@@ -61793,7 +61875,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_46get(struct LxmlElement *__pyx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1313
+/* "lxml/etree.pyx":1314
  *         return _getAttributeValue(self, key, default)
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -61826,16 +61908,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_48keys(struct LxmlElement *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("keys", 0);
 
-  /* "lxml/etree.pyx":1319
+  /* "lxml/etree.pyx":1320
  *         arbitrary order (just like for an ordinary Python dictionary).
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         return _collectAttributes(self._c_node, 1)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1319, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1320, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1320
+  /* "lxml/etree.pyx":1321
  *         """
  *         _assertValidNode(self)
  *         return _collectAttributes(self._c_node, 1)             # <<<<<<<<<<<<<<
@@ -61843,13 +61925,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_48keys(struct LxmlElement *__py
  *     def values(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_c_node, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1320, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_c_node, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1321, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1313
+  /* "lxml/etree.pyx":1314
  *         return _getAttributeValue(self, key, default)
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -61868,7 +61950,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_48keys(struct LxmlElement *__py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1322
+/* "lxml/etree.pyx":1323
  *         return _collectAttributes(self._c_node, 1)
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
@@ -61901,16 +61983,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_50values(struct LxmlElement *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("values", 0);
 
-  /* "lxml/etree.pyx":1328
+  /* "lxml/etree.pyx":1329
  *         attributes are returned in an arbitrary order.
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         return _collectAttributes(self._c_node, 2)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1328, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1329, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1329
+  /* "lxml/etree.pyx":1330
  *         """
  *         _assertValidNode(self)
  *         return _collectAttributes(self._c_node, 2)             # <<<<<<<<<<<<<<
@@ -61918,13 +62000,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_50values(struct LxmlElement *__
  *     def items(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_c_node, 2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1329, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_c_node, 2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1330, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1322
+  /* "lxml/etree.pyx":1323
  *         return _collectAttributes(self._c_node, 1)
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
@@ -61943,7 +62025,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_50values(struct LxmlElement *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1331
+/* "lxml/etree.pyx":1332
  *         return _collectAttributes(self._c_node, 2)
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
@@ -61976,16 +62058,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_52items(struct LxmlElement *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("items", 0);
 
-  /* "lxml/etree.pyx":1337
+  /* "lxml/etree.pyx":1338
  *         an arbitrary order.
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         return _collectAttributes(self._c_node, 3)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1337, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1338, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1338
+  /* "lxml/etree.pyx":1339
  *         """
  *         _assertValidNode(self)
  *         return _collectAttributes(self._c_node, 3)             # <<<<<<<<<<<<<<
@@ -61993,13 +62075,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_52items(struct LxmlElement *__p
  *     def getchildren(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_c_node, 3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1338, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_c_node, 3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1339, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1331
+  /* "lxml/etree.pyx":1332
  *         return _collectAttributes(self._c_node, 2)
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
@@ -62018,7 +62100,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_52items(struct LxmlElement *__p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1340
+/* "lxml/etree.pyx":1341
  *         return _collectAttributes(self._c_node, 3)
  * 
  *     def getchildren(self):             # <<<<<<<<<<<<<<
@@ -62051,16 +62133,16 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_54getchildren(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getchildren", 0);
 
-  /* "lxml/etree.pyx":1350
+  /* "lxml/etree.pyx":1351
  *           ``list(element)`` or simply iterate over elements.
  *         """
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         return _collectChildren(self)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1350, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1351, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1351
+  /* "lxml/etree.pyx":1352
  *         """
  *         _assertValidNode(self)
  *         return _collectChildren(self)             # <<<<<<<<<<<<<<
@@ -62068,13 +62150,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_54getchildren(struct LxmlElemen
  *     def getparent(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__collectChildren(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1351, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__collectChildren(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1352, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1340
+  /* "lxml/etree.pyx":1341
  *         return _collectAttributes(self._c_node, 3)
  * 
  *     def getchildren(self):             # <<<<<<<<<<<<<<
@@ -62093,7 +62175,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_54getchildren(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1353
+/* "lxml/etree.pyx":1354
  *         return _collectChildren(self)
  * 
  *     def getparent(self):             # <<<<<<<<<<<<<<
@@ -62128,7 +62210,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_56getparent(struct LxmlElement
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getparent", 0);
 
-  /* "lxml/etree.pyx":1360
+  /* "lxml/etree.pyx":1361
  *         cdef xmlNode* c_node
  *         #_assertValidNode(self) # not needed
  *         c_node = _parentElement(self._c_node)             # <<<<<<<<<<<<<<
@@ -62137,7 +62219,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_56getparent(struct LxmlElement
  */
   __pyx_v_c_node = __pyx_f_4lxml_5etree__parentElement(__pyx_v_self->_c_node);
 
-  /* "lxml/etree.pyx":1361
+  /* "lxml/etree.pyx":1362
  *         #_assertValidNode(self) # not needed
  *         c_node = _parentElement(self._c_node)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -62147,7 +62229,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_56getparent(struct LxmlElement
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1362
+    /* "lxml/etree.pyx":1363
  *         c_node = _parentElement(self._c_node)
  *         if c_node is NULL:
  *             return None             # <<<<<<<<<<<<<<
@@ -62158,7 +62240,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_56getparent(struct LxmlElement
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1361
+    /* "lxml/etree.pyx":1362
  *         #_assertValidNode(self) # not needed
  *         c_node = _parentElement(self._c_node)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -62167,7 +62249,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_56getparent(struct LxmlElement
  */
   }
 
-  /* "lxml/etree.pyx":1363
+  /* "lxml/etree.pyx":1364
  *         if c_node is NULL:
  *             return None
  *         return _elementFactory(self._doc, c_node)             # <<<<<<<<<<<<<<
@@ -62177,14 +62259,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_56getparent(struct LxmlElement
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_2), __pyx_v_c_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1363, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_2), __pyx_v_c_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1364, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1353
+  /* "lxml/etree.pyx":1354
  *         return _collectChildren(self)
  * 
  *     def getparent(self):             # <<<<<<<<<<<<<<
@@ -62204,7 +62286,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_56getparent(struct LxmlElement
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1365
+/* "lxml/etree.pyx":1366
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def getnext(self):             # <<<<<<<<<<<<<<
@@ -62239,7 +62321,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_58getnext(struct LxmlElement *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getnext", 0);
 
-  /* "lxml/etree.pyx":1372
+  /* "lxml/etree.pyx":1373
  *         cdef xmlNode* c_node
  *         #_assertValidNode(self) # not needed
  *         c_node = _nextElement(self._c_node)             # <<<<<<<<<<<<<<
@@ -62248,7 +62330,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_58getnext(struct LxmlElement *_
  */
   __pyx_v_c_node = __pyx_f_4lxml_5etree__nextElement(__pyx_v_self->_c_node);
 
-  /* "lxml/etree.pyx":1373
+  /* "lxml/etree.pyx":1374
  *         #_assertValidNode(self) # not needed
  *         c_node = _nextElement(self._c_node)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -62258,7 +62340,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_58getnext(struct LxmlElement *_
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1374
+    /* "lxml/etree.pyx":1375
  *         c_node = _nextElement(self._c_node)
  *         if c_node is NULL:
  *             return None             # <<<<<<<<<<<<<<
@@ -62269,7 +62351,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_58getnext(struct LxmlElement *_
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1373
+    /* "lxml/etree.pyx":1374
  *         #_assertValidNode(self) # not needed
  *         c_node = _nextElement(self._c_node)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -62278,7 +62360,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_58getnext(struct LxmlElement *_
  */
   }
 
-  /* "lxml/etree.pyx":1375
+  /* "lxml/etree.pyx":1376
  *         if c_node is NULL:
  *             return None
  *         return _elementFactory(self._doc, c_node)             # <<<<<<<<<<<<<<
@@ -62288,14 +62370,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_58getnext(struct LxmlElement *_
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_2), __pyx_v_c_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1375, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_2), __pyx_v_c_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1376, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1365
+  /* "lxml/etree.pyx":1366
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def getnext(self):             # <<<<<<<<<<<<<<
@@ -62315,7 +62397,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_58getnext(struct LxmlElement *_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1377
+/* "lxml/etree.pyx":1378
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def getprevious(self):             # <<<<<<<<<<<<<<
@@ -62350,7 +62432,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_60getprevious(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getprevious", 0);
 
-  /* "lxml/etree.pyx":1384
+  /* "lxml/etree.pyx":1385
  *         cdef xmlNode* c_node
  *         #_assertValidNode(self) # not needed
  *         c_node = _previousElement(self._c_node)             # <<<<<<<<<<<<<<
@@ -62359,7 +62441,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_60getprevious(struct LxmlElemen
  */
   __pyx_v_c_node = __pyx_f_4lxml_5etree__previousElement(__pyx_v_self->_c_node);
 
-  /* "lxml/etree.pyx":1385
+  /* "lxml/etree.pyx":1386
  *         #_assertValidNode(self) # not needed
  *         c_node = _previousElement(self._c_node)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -62369,7 +62451,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_60getprevious(struct LxmlElemen
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1386
+    /* "lxml/etree.pyx":1387
  *         c_node = _previousElement(self._c_node)
  *         if c_node is NULL:
  *             return None             # <<<<<<<<<<<<<<
@@ -62380,7 +62462,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_60getprevious(struct LxmlElemen
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1385
+    /* "lxml/etree.pyx":1386
  *         #_assertValidNode(self) # not needed
  *         c_node = _previousElement(self._c_node)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -62389,7 +62471,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_60getprevious(struct LxmlElemen
  */
   }
 
-  /* "lxml/etree.pyx":1387
+  /* "lxml/etree.pyx":1388
  *         if c_node is NULL:
  *             return None
  *         return _elementFactory(self._doc, c_node)             # <<<<<<<<<<<<<<
@@ -62399,14 +62481,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_60getprevious(struct LxmlElemen
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_2), __pyx_v_c_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1387, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_2), __pyx_v_c_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1388, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1377
+  /* "lxml/etree.pyx":1378
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def getprevious(self):             # <<<<<<<<<<<<<<
@@ -62426,7 +62508,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_60getprevious(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1389
+/* "lxml/etree.pyx":1390
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def itersiblings(self, tag=None, *tags, preceding=False):             # <<<<<<<<<<<<<<
@@ -62487,7 +62569,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_63itersiblings(PyObject *__pyx_
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "itersiblings") < 0)) __PYX_ERR(0, 1389, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "itersiblings") < 0)) __PYX_ERR(0, 1390, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -62529,17 +62611,17 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
   __Pyx_RefNannySetupContext("itersiblings", 0);
   __Pyx_INCREF(__pyx_v_tags);
 
-  /* "lxml/etree.pyx":1403
+  /* "lxml/etree.pyx":1404
  *         see `iter`.
  *         """
  *         if preceding:             # <<<<<<<<<<<<<<
  *             if self._c_node and not self._c_node.prev:
  *                 return ITER_EMPTY
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_preceding); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1403, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_preceding); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1404, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1404
+    /* "lxml/etree.pyx":1405
  *         """
  *         if preceding:
  *             if self._c_node and not self._c_node.prev:             # <<<<<<<<<<<<<<
@@ -62557,7 +62639,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":1405
+      /* "lxml/etree.pyx":1406
  *         if preceding:
  *             if self._c_node and not self._c_node.prev:
  *                 return ITER_EMPTY             # <<<<<<<<<<<<<<
@@ -62569,7 +62651,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
       __pyx_r = __pyx_v_4lxml_5etree_ITER_EMPTY;
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":1404
+      /* "lxml/etree.pyx":1405
  *         """
  *         if preceding:
  *             if self._c_node and not self._c_node.prev:             # <<<<<<<<<<<<<<
@@ -62578,7 +62660,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
  */
     }
 
-    /* "lxml/etree.pyx":1403
+    /* "lxml/etree.pyx":1404
  *         see `iter`.
  *         """
  *         if preceding:             # <<<<<<<<<<<<<<
@@ -62588,7 +62670,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":1406
+  /* "lxml/etree.pyx":1407
  *             if self._c_node and not self._c_node.prev:
  *                 return ITER_EMPTY
  *         elif self._c_node and not self._c_node.next:             # <<<<<<<<<<<<<<
@@ -62606,7 +62688,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
   __pyx_L7_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1407
+    /* "lxml/etree.pyx":1408
  *                 return ITER_EMPTY
  *         elif self._c_node and not self._c_node.next:
  *             return ITER_EMPTY             # <<<<<<<<<<<<<<
@@ -62618,7 +62700,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
     __pyx_r = __pyx_v_4lxml_5etree_ITER_EMPTY;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1406
+    /* "lxml/etree.pyx":1407
  *             if self._c_node and not self._c_node.prev:
  *                 return ITER_EMPTY
  *         elif self._c_node and not self._c_node.next:             # <<<<<<<<<<<<<<
@@ -62628,7 +62710,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":1408
+  /* "lxml/etree.pyx":1409
  *         elif self._c_node and not self._c_node.next:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -62639,25 +62721,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1409
+    /* "lxml/etree.pyx":1410
  *             return ITER_EMPTY
  *         if tag is not None:
  *             tags += (tag,)             # <<<<<<<<<<<<<<
  *         return SiblingsIterator(self, tags, preceding=preceding)
  * 
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1409, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1410, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_tag);
-    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1409, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1410, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_tags, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1408
+    /* "lxml/etree.pyx":1409
  *         elif self._c_node and not self._c_node.next:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -62666,7 +62748,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
  */
   }
 
-  /* "lxml/etree.pyx":1410
+  /* "lxml/etree.pyx":1411
  *         if tag is not None:
  *             tags += (tag,)
  *         return SiblingsIterator(self, tags, preceding=preceding)             # <<<<<<<<<<<<<<
@@ -62674,7 +62756,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
  *     def iterancestors(self, tag=None, *tags):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1410, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -62682,10 +62764,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
   __Pyx_INCREF(__pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_tags);
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1410, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_preceding, __pyx_v_preceding) < 0) __PYX_ERR(0, 1410, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_SiblingsIterator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1410, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_preceding, __pyx_v_preceding) < 0) __PYX_ERR(0, 1411, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_SiblingsIterator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -62693,7 +62775,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1389
+  /* "lxml/etree.pyx":1390
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def itersiblings(self, tag=None, *tags, preceding=False):             # <<<<<<<<<<<<<<
@@ -62715,7 +62797,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1412
+/* "lxml/etree.pyx":1413
  *         return SiblingsIterator(self, tags, preceding=preceding)
  * 
  *     def iterancestors(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -62769,7 +62851,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_65iterancestors(PyObject *__pyx
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "iterancestors") < 0)) __PYX_ERR(0, 1412, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "iterancestors") < 0)) __PYX_ERR(0, 1413, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -62809,7 +62891,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_64iterancestors(struct LxmlElem
   __Pyx_RefNannySetupContext("iterancestors", 0);
   __Pyx_INCREF(__pyx_v_tags);
 
-  /* "lxml/etree.pyx":1420
+  /* "lxml/etree.pyx":1421
  *         see `iter`.
  *         """
  *         if self._c_node and not self._c_node.parent:             # <<<<<<<<<<<<<<
@@ -62827,7 +62909,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_64iterancestors(struct LxmlElem
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1421
+    /* "lxml/etree.pyx":1422
  *         """
  *         if self._c_node and not self._c_node.parent:
  *             return ITER_EMPTY             # <<<<<<<<<<<<<<
@@ -62839,7 +62921,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_64iterancestors(struct LxmlElem
     __pyx_r = __pyx_v_4lxml_5etree_ITER_EMPTY;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1420
+    /* "lxml/etree.pyx":1421
  *         see `iter`.
  *         """
  *         if self._c_node and not self._c_node.parent:             # <<<<<<<<<<<<<<
@@ -62848,7 +62930,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_64iterancestors(struct LxmlElem
  */
   }
 
-  /* "lxml/etree.pyx":1422
+  /* "lxml/etree.pyx":1423
  *         if self._c_node and not self._c_node.parent:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -62859,25 +62941,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_64iterancestors(struct LxmlElem
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1423
+    /* "lxml/etree.pyx":1424
  *             return ITER_EMPTY
  *         if tag is not None:
  *             tags += (tag,)             # <<<<<<<<<<<<<<
  *         return AncestorsIterator(self, tags)
  * 
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1423, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1424, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_tag);
-    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1423, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1424, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_tags, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1422
+    /* "lxml/etree.pyx":1423
  *         if self._c_node and not self._c_node.parent:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -62886,7 +62968,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_64iterancestors(struct LxmlElem
  */
   }
 
-  /* "lxml/etree.pyx":1424
+  /* "lxml/etree.pyx":1425
  *         if tag is not None:
  *             tags += (tag,)
  *         return AncestorsIterator(self, tags)             # <<<<<<<<<<<<<<
@@ -62894,7 +62976,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_64iterancestors(struct LxmlElem
  *     def iterdescendants(self, tag=None, *tags):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1424, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1425, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -62902,14 +62984,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_64iterancestors(struct LxmlElem
   __Pyx_INCREF(__pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_tags);
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_AncestorsIterator), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1424, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_AncestorsIterator), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1425, __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;
 
-  /* "lxml/etree.pyx":1412
+  /* "lxml/etree.pyx":1413
  *         return SiblingsIterator(self, tags, preceding=preceding)
  * 
  *     def iterancestors(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -62930,7 +63012,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_64iterancestors(struct LxmlElem
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1426
+/* "lxml/etree.pyx":1427
  *         return AncestorsIterator(self, tags)
  * 
  *     def iterdescendants(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -62984,7 +63066,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_67iterdescendants(PyObject *__p
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "iterdescendants") < 0)) __PYX_ERR(0, 1426, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "iterdescendants") < 0)) __PYX_ERR(0, 1427, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -63025,7 +63107,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
   __Pyx_RefNannySetupContext("iterdescendants", 0);
   __Pyx_INCREF(__pyx_v_tags);
 
-  /* "lxml/etree.pyx":1435
+  /* "lxml/etree.pyx":1436
  *         with specific tags, see `iter`.
  *         """
  *         if self._c_node and not self._c_node.children:             # <<<<<<<<<<<<<<
@@ -63043,7 +63125,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1436
+    /* "lxml/etree.pyx":1437
  *         """
  *         if self._c_node and not self._c_node.children:
  *             return ITER_EMPTY             # <<<<<<<<<<<<<<
@@ -63055,7 +63137,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
     __pyx_r = __pyx_v_4lxml_5etree_ITER_EMPTY;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1435
+    /* "lxml/etree.pyx":1436
  *         with specific tags, see `iter`.
  *         """
  *         if self._c_node and not self._c_node.children:             # <<<<<<<<<<<<<<
@@ -63064,7 +63146,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
  */
   }
 
-  /* "lxml/etree.pyx":1437
+  /* "lxml/etree.pyx":1438
  *         if self._c_node and not self._c_node.children:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -63075,25 +63157,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1438
+    /* "lxml/etree.pyx":1439
  *             return ITER_EMPTY
  *         if tag is not None:
  *             tags += (tag,)             # <<<<<<<<<<<<<<
  *         return ElementDepthFirstIterator(self, tags, inclusive=False)
  * 
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1438, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1439, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_tag);
-    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1438, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1439, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_tags, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1437
+    /* "lxml/etree.pyx":1438
  *         if self._c_node and not self._c_node.children:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -63102,7 +63184,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
  */
   }
 
-  /* "lxml/etree.pyx":1439
+  /* "lxml/etree.pyx":1440
  *         if tag is not None:
  *             tags += (tag,)
  *         return ElementDepthFirstIterator(self, tags, inclusive=False)             # <<<<<<<<<<<<<<
@@ -63110,7 +63192,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
  *     def iterchildren(self, tag=None, *tags, reversed=False):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1439, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1440, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -63118,10 +63200,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
   __Pyx_INCREF(__pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_tags);
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1439, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1440, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_inclusive, Py_False) < 0) __PYX_ERR(0, 1439, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1439, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_inclusive, Py_False) < 0) __PYX_ERR(0, 1440, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1440, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -63129,7 +63211,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1426
+  /* "lxml/etree.pyx":1427
  *         return AncestorsIterator(self, tags)
  * 
  *     def iterdescendants(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -63151,7 +63233,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1441
+/* "lxml/etree.pyx":1442
  *         return ElementDepthFirstIterator(self, tags, inclusive=False)
  * 
  *     def iterchildren(self, tag=None, *tags, reversed=False):             # <<<<<<<<<<<<<<
@@ -63212,7 +63294,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_69iterchildren(PyObject *__pyx_
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "iterchildren") < 0)) __PYX_ERR(0, 1441, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "iterchildren") < 0)) __PYX_ERR(0, 1442, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -63254,7 +63336,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
   __Pyx_RefNannySetupContext("iterchildren", 0);
   __Pyx_INCREF(__pyx_v_tags);
 
-  /* "lxml/etree.pyx":1450
+  /* "lxml/etree.pyx":1451
  *         to find only elements with specific tags, see `iter`.
  *         """
  *         if self._c_node and not self._c_node.children:             # <<<<<<<<<<<<<<
@@ -63272,7 +63354,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1451
+    /* "lxml/etree.pyx":1452
  *         """
  *         if self._c_node and not self._c_node.children:
  *             return ITER_EMPTY             # <<<<<<<<<<<<<<
@@ -63284,7 +63366,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
     __pyx_r = __pyx_v_4lxml_5etree_ITER_EMPTY;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1450
+    /* "lxml/etree.pyx":1451
  *         to find only elements with specific tags, see `iter`.
  *         """
  *         if self._c_node and not self._c_node.children:             # <<<<<<<<<<<<<<
@@ -63293,7 +63375,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
  */
   }
 
-  /* "lxml/etree.pyx":1452
+  /* "lxml/etree.pyx":1453
  *         if self._c_node and not self._c_node.children:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -63304,25 +63386,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1453
+    /* "lxml/etree.pyx":1454
  *             return ITER_EMPTY
  *         if tag is not None:
  *             tags += (tag,)             # <<<<<<<<<<<<<<
  *         return ElementChildIterator(self, tags, reversed=reversed)
  * 
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1453, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1454, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_tag);
-    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1453, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1454, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_tags, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1452
+    /* "lxml/etree.pyx":1453
  *         if self._c_node and not self._c_node.children:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -63331,7 +63413,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
  */
   }
 
-  /* "lxml/etree.pyx":1454
+  /* "lxml/etree.pyx":1455
  *         if tag is not None:
  *             tags += (tag,)
  *         return ElementChildIterator(self, tags, reversed=reversed)             # <<<<<<<<<<<<<<
@@ -63339,7 +63421,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
  *     def getroottree(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1454, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1455, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -63347,10 +63429,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
   __Pyx_INCREF(__pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_tags);
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1454, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1455, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_reversed, __pyx_v_reversed) < 0) __PYX_ERR(0, 1454, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementChildIterator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1454, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_reversed, __pyx_v_reversed) < 0) __PYX_ERR(0, 1455, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementChildIterator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1455, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -63358,7 +63440,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1441
+  /* "lxml/etree.pyx":1442
  *         return ElementDepthFirstIterator(self, tags, inclusive=False)
  * 
  *     def iterchildren(self, tag=None, *tags, reversed=False):             # <<<<<<<<<<<<<<
@@ -63380,7 +63462,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1456
+/* "lxml/etree.pyx":1457
  *         return ElementChildIterator(self, tags, reversed=reversed)
  * 
  *     def getroottree(self):             # <<<<<<<<<<<<<<
@@ -63414,7 +63496,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_70getroottree(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getroottree", 0);
 
-  /* "lxml/etree.pyx":1465
+  /* "lxml/etree.pyx":1466
  *         returns None (for the root element) and then build an ElementTree for
  *         the last parent that was returned."""
  *         _assertValidDoc(self._doc)             # <<<<<<<<<<<<<<
@@ -63423,10 +63505,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_70getroottree(struct LxmlElemen
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidDoc(((struct LxmlDocument *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1465, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidDoc(((struct LxmlDocument *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1466, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":1466
+  /* "lxml/etree.pyx":1467
  *         the last parent that was returned."""
  *         _assertValidDoc(self._doc)
  *         return _elementTreeFactory(self._doc, None)             # <<<<<<<<<<<<<<
@@ -63436,14 +63518,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_70getroottree(struct LxmlElemen
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(((struct LxmlDocument *)__pyx_t_1), ((struct LxmlElement *)Py_None))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1466, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(((struct LxmlDocument *)__pyx_t_1), ((struct LxmlElement *)Py_None))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1467, __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/etree.pyx":1456
+  /* "lxml/etree.pyx":1457
  *         return ElementChildIterator(self, tags, reversed=reversed)
  * 
  *     def getroottree(self):             # <<<<<<<<<<<<<<
@@ -63463,7 +63545,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_70getroottree(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1468
+/* "lxml/etree.pyx":1469
  *         return _elementTreeFactory(self._doc, None)
  * 
  *     def getiterator(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -63517,7 +63599,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_73getiterator(PyObject *__pyx_v
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "getiterator") < 0)) __PYX_ERR(0, 1468, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "getiterator") < 0)) __PYX_ERR(0, 1469, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -63557,7 +63639,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_72getiterator(struct LxmlElemen
   __Pyx_RefNannySetupContext("getiterator", 0);
   __Pyx_INCREF(__pyx_v_tags);
 
-  /* "lxml/etree.pyx":1486
+  /* "lxml/etree.pyx":1487
  *           with older versions of lxml or ElementTree.
  *         """
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -63568,25 +63650,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_72getiterator(struct LxmlElemen
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1487
+    /* "lxml/etree.pyx":1488
  *         """
  *         if tag is not None:
  *             tags += (tag,)             # <<<<<<<<<<<<<<
  *         return ElementDepthFirstIterator(self, tags)
  * 
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1487, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1488, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_tag);
-    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1487, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1488, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_tags, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1486
+    /* "lxml/etree.pyx":1487
  *           with older versions of lxml or ElementTree.
  *         """
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -63595,7 +63677,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_72getiterator(struct LxmlElemen
  */
   }
 
-  /* "lxml/etree.pyx":1488
+  /* "lxml/etree.pyx":1489
  *         if tag is not None:
  *             tags += (tag,)
  *         return ElementDepthFirstIterator(self, tags)             # <<<<<<<<<<<<<<
@@ -63603,7 +63685,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_72getiterator(struct LxmlElemen
  *     def iter(self, tag=None, *tags):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1488, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1489, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -63611,14 +63693,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_72getiterator(struct LxmlElemen
   __Pyx_INCREF(__pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_tags);
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1488, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1489, __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;
 
-  /* "lxml/etree.pyx":1468
+  /* "lxml/etree.pyx":1469
  *         return _elementTreeFactory(self._doc, None)
  * 
  *     def getiterator(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -63639,7 +63721,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_72getiterator(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1490
+/* "lxml/etree.pyx":1491
  *         return ElementDepthFirstIterator(self, tags)
  * 
  *     def iter(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -63693,7 +63775,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_75iter(PyObject *__pyx_v_self,
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "iter") < 0)) __PYX_ERR(0, 1490, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "iter") < 0)) __PYX_ERR(0, 1491, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -63733,7 +63815,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_74iter(struct LxmlElement *__py
   __Pyx_RefNannySetupContext("iter", 0);
   __Pyx_INCREF(__pyx_v_tags);
 
-  /* "lxml/etree.pyx":1510
+  /* "lxml/etree.pyx":1511
  *         in document order.
  *         """
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -63744,25 +63826,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_74iter(struct LxmlElement *__py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1511
+    /* "lxml/etree.pyx":1512
  *         """
  *         if tag is not None:
  *             tags += (tag,)             # <<<<<<<<<<<<<<
  *         return ElementDepthFirstIterator(self, tags)
  * 
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1511, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_tag);
-    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1511, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_tags, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1510
+    /* "lxml/etree.pyx":1511
  *         in document order.
  *         """
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -63771,7 +63853,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_74iter(struct LxmlElement *__py
  */
   }
 
-  /* "lxml/etree.pyx":1512
+  /* "lxml/etree.pyx":1513
  *         if tag is not None:
  *             tags += (tag,)
  *         return ElementDepthFirstIterator(self, tags)             # <<<<<<<<<<<<<<
@@ -63779,7 +63861,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_74iter(struct LxmlElement *__py
  *     def itertext(self, tag=None, *tags, with_tail=True):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1512, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1513, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -63787,14 +63869,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_74iter(struct LxmlElement *__py
   __Pyx_INCREF(__pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_tags);
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1512, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1513, __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;
 
-  /* "lxml/etree.pyx":1490
+  /* "lxml/etree.pyx":1491
  *         return ElementDepthFirstIterator(self, tags)
  * 
  *     def iter(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -63815,7 +63897,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_74iter(struct LxmlElement *__py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1514
+/* "lxml/etree.pyx":1515
  *         return ElementDepthFirstIterator(self, tags)
  * 
  *     def itertext(self, tag=None, *tags, with_tail=True):             # <<<<<<<<<<<<<<
@@ -63876,7 +63958,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_77itertext(PyObject *__pyx_v_se
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "itertext") < 0)) __PYX_ERR(0, 1514, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "itertext") < 0)) __PYX_ERR(0, 1515, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -63918,7 +64000,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_76itertext(struct LxmlElement *
   __Pyx_RefNannySetupContext("itertext", 0);
   __Pyx_INCREF(__pyx_v_tags);
 
-  /* "lxml/etree.pyx":1525
+  /* "lxml/etree.pyx":1526
  *         over tail text.
  *         """
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -63929,25 +64011,25 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_76itertext(struct LxmlElement *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1526
+    /* "lxml/etree.pyx":1527
  *         """
  *         if tag is not None:
  *             tags += (tag,)             # <<<<<<<<<<<<<<
  *         return ElementTextIterator(self, tags, with_tail=with_tail)
  * 
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1526, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1527, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_tag);
-    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1526, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1527, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_tags, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1525
+    /* "lxml/etree.pyx":1526
  *         over tail text.
  *         """
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -63956,7 +64038,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_76itertext(struct LxmlElement *
  */
   }
 
-  /* "lxml/etree.pyx":1527
+  /* "lxml/etree.pyx":1528
  *         if tag is not None:
  *             tags += (tag,)
  *         return ElementTextIterator(self, tags, with_tail=with_tail)             # <<<<<<<<<<<<<<
@@ -63964,7 +64046,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_76itertext(struct LxmlElement *
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1527, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -63972,10 +64054,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_76itertext(struct LxmlElement *
   __Pyx_INCREF(__pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_tags);
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1527, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_with_tail, __pyx_v_with_tail) < 0) __PYX_ERR(0, 1527, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementTextIterator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1527, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_with_tail, __pyx_v_with_tail) < 0) __PYX_ERR(0, 1528, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_ElementTextIterator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -63983,7 +64065,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_76itertext(struct LxmlElement *
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1514
+  /* "lxml/etree.pyx":1515
  *         return ElementDepthFirstIterator(self, tags)
  * 
  *     def itertext(self, tag=None, *tags, with_tail=True):             # <<<<<<<<<<<<<<
@@ -64005,7 +64087,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_76itertext(struct LxmlElement *
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1529
+/* "lxml/etree.pyx":1530
  *         return ElementTextIterator(self, tags, with_tail=with_tail)
  * 
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
@@ -64067,7 +64149,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_79makeelement(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "makeelement") < 0)) __PYX_ERR(0, 1529, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "makeelement") < 0)) __PYX_ERR(0, 1530, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -64086,7 +64168,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_79makeelement(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("makeelement", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1529, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("makeelement", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1530, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__extra); __pyx_v__extra = 0;
   __Pyx_AddTraceback("lxml.etree._Element.makeelement", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -64112,7 +64194,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_78makeelement(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("makeelement", 0);
 
-  /* "lxml/etree.pyx":1534
+  /* "lxml/etree.pyx":1535
  *         Creates a new element associated with the same document.
  *         """
  *         _assertValidDoc(self._doc)             # <<<<<<<<<<<<<<
@@ -64121,10 +64203,10 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_78makeelement(struct LxmlElemen
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidDoc(((struct LxmlDocument *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1534, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidDoc(((struct LxmlDocument *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1535, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":1535
+  /* "lxml/etree.pyx":1536
  *         """
  *         _assertValidDoc(self._doc)
  *         return _makeElement(_tag, NULL, self._doc, None, None, None,             # <<<<<<<<<<<<<<
@@ -64135,21 +64217,21 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_78makeelement(struct LxmlElemen
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_doc);
   __Pyx_INCREF(__pyx_t_1);
 
-  /* "lxml/etree.pyx":1536
+  /* "lxml/etree.pyx":1537
  *         _assertValidDoc(self._doc)
  *         return _makeElement(_tag, NULL, self._doc, None, None, None,
  *                             attrib, nsmap, _extra)             # <<<<<<<<<<<<<<
  * 
  *     def find(self, path, namespaces=None):
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__makeElement(__pyx_v__tag, NULL, ((struct LxmlDocument *)__pyx_t_1), ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None), Py_None, Py_None, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1535, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__makeElement(__pyx_v__tag, NULL, ((struct LxmlDocument *)__pyx_t_1), ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None), Py_None, Py_None, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1536, __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/etree.pyx":1529
+  /* "lxml/etree.pyx":1530
  *         return ElementTextIterator(self, tags, with_tail=with_tail)
  * 
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
@@ -64169,7 +64251,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_78makeelement(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1538
+/* "lxml/etree.pyx":1539
  *                             attrib, nsmap, _extra)
  * 
  *     def find(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -64218,7 +64300,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_81find(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "find") < 0)) __PYX_ERR(0, 1538, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "find") < 0)) __PYX_ERR(0, 1539, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -64234,7 +64316,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_81find(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("find", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1538, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("find", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1539, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.find", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -64263,7 +64345,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
   __Pyx_RefNannySetupContext("find", 0);
   __Pyx_INCREF(__pyx_v_path);
 
-  /* "lxml/etree.pyx":1547
+  /* "lxml/etree.pyx":1548
  *         prefixes in the path expression.
  *         """
  *         if isinstance(path, QName):             # <<<<<<<<<<<<<<
@@ -64274,7 +64356,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1548
+    /* "lxml/etree.pyx":1549
  *         """
  *         if isinstance(path, QName):
  *             path = (<QName>path).text             # <<<<<<<<<<<<<<
@@ -64286,7 +64368,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
     __Pyx_DECREF_SET(__pyx_v_path, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":1547
+    /* "lxml/etree.pyx":1548
  *         prefixes in the path expression.
  *         """
  *         if isinstance(path, QName):             # <<<<<<<<<<<<<<
@@ -64295,7 +64377,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
  */
   }
 
-  /* "lxml/etree.pyx":1549
+  /* "lxml/etree.pyx":1550
  *         if isinstance(path, QName):
  *             path = (<QName>path).text
  *         return _elementpath.find(self, path, namespaces)             # <<<<<<<<<<<<<<
@@ -64303,7 +64385,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
  *     def findtext(self, path, default=None, namespaces=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__elementpath, __pyx_n_s_find); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1549, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__elementpath, __pyx_n_s_find); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1550, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   __pyx_t_6 = 0;
@@ -64320,7 +64402,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1549, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1550, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_3);
   } else
@@ -64328,13 +64410,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1549, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1550, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_3);
   } else
   #endif
   {
-    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1549, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1550, __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;
@@ -64348,7 +64430,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
     __Pyx_INCREF(__pyx_v_namespaces);
     __Pyx_GIVEREF(__pyx_v_namespaces);
     PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_namespaces);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1549, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1550, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
@@ -64357,7 +64439,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1538
+  /* "lxml/etree.pyx":1539
  *                             attrib, nsmap, _extra)
  * 
  *     def find(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -64380,7 +64462,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1551
+/* "lxml/etree.pyx":1552
  *         return _elementpath.find(self, path, namespaces)
  * 
  *     def findtext(self, path, default=None, namespaces=None):             # <<<<<<<<<<<<<<
@@ -64439,7 +64521,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_83findtext(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "findtext") < 0)) __PYX_ERR(0, 1551, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "findtext") < 0)) __PYX_ERR(0, 1552, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -64458,7 +64540,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_83findtext(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("findtext", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1551, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("findtext", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1552, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.findtext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -64487,7 +64569,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
   __Pyx_RefNannySetupContext("findtext", 0);
   __Pyx_INCREF(__pyx_v_path);
 
-  /* "lxml/etree.pyx":1560
+  /* "lxml/etree.pyx":1561
  *         prefixes in the path expression.
  *         """
  *         if isinstance(path, QName):             # <<<<<<<<<<<<<<
@@ -64498,7 +64580,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1561
+    /* "lxml/etree.pyx":1562
  *         """
  *         if isinstance(path, QName):
  *             path = (<QName>path).text             # <<<<<<<<<<<<<<
@@ -64510,7 +64592,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
     __Pyx_DECREF_SET(__pyx_v_path, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":1560
+    /* "lxml/etree.pyx":1561
  *         prefixes in the path expression.
  *         """
  *         if isinstance(path, QName):             # <<<<<<<<<<<<<<
@@ -64519,7 +64601,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
  */
   }
 
-  /* "lxml/etree.pyx":1562
+  /* "lxml/etree.pyx":1563
  *         if isinstance(path, QName):
  *             path = (<QName>path).text
  *         return _elementpath.findtext(self, path, default, namespaces)             # <<<<<<<<<<<<<<
@@ -64527,7 +64609,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
  *     def findall(self, path, namespaces=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__elementpath, __pyx_n_s_findtext); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1562, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__elementpath, __pyx_n_s_findtext); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1563, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   __pyx_t_6 = 0;
@@ -64544,7 +64626,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[5] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_path, __pyx_v_default, __pyx_v_namespaces};
-    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1562, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1563, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_3);
   } else
@@ -64552,13 +64634,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[5] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_path, __pyx_v_default, __pyx_v_namespaces};
-    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1562, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1563, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_3);
   } else
   #endif
   {
-    __pyx_t_7 = PyTuple_New(4+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1562, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(4+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1563, __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;
@@ -64575,7 +64657,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
     __Pyx_INCREF(__pyx_v_namespaces);
     __Pyx_GIVEREF(__pyx_v_namespaces);
     PyTuple_SET_ITEM(__pyx_t_7, 3+__pyx_t_6, __pyx_v_namespaces);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1562, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1563, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
@@ -64584,7 +64666,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1551
+  /* "lxml/etree.pyx":1552
  *         return _elementpath.find(self, path, namespaces)
  * 
  *     def findtext(self, path, default=None, namespaces=None):             # <<<<<<<<<<<<<<
@@ -64607,7 +64689,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1564
+/* "lxml/etree.pyx":1565
  *         return _elementpath.findtext(self, path, default, namespaces)
  * 
  *     def findall(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -64656,7 +64738,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_85findall(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "findall") < 0)) __PYX_ERR(0, 1564, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "findall") < 0)) __PYX_ERR(0, 1565, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -64672,7 +64754,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_85findall(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("findall", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1564, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("findall", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1565, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.findall", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -64701,7 +64783,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
   __Pyx_RefNannySetupContext("findall", 0);
   __Pyx_INCREF(__pyx_v_path);
 
-  /* "lxml/etree.pyx":1573
+  /* "lxml/etree.pyx":1574
  *         prefixes in the path expression.
  *         """
  *         if isinstance(path, QName):             # <<<<<<<<<<<<<<
@@ -64712,7 +64794,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1574
+    /* "lxml/etree.pyx":1575
  *         """
  *         if isinstance(path, QName):
  *             path = (<QName>path).text             # <<<<<<<<<<<<<<
@@ -64724,7 +64806,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
     __Pyx_DECREF_SET(__pyx_v_path, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":1573
+    /* "lxml/etree.pyx":1574
  *         prefixes in the path expression.
  *         """
  *         if isinstance(path, QName):             # <<<<<<<<<<<<<<
@@ -64733,7 +64815,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
  */
   }
 
-  /* "lxml/etree.pyx":1575
+  /* "lxml/etree.pyx":1576
  *         if isinstance(path, QName):
  *             path = (<QName>path).text
  *         return _elementpath.findall(self, path, namespaces)             # <<<<<<<<<<<<<<
@@ -64741,7 +64823,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
  *     def iterfind(self, path, namespaces=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__elementpath, __pyx_n_s_findall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1575, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__elementpath, __pyx_n_s_findall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1576, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   __pyx_t_6 = 0;
@@ -64758,7 +64840,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1575, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1576, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_3);
   } else
@@ -64766,13 +64848,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1575, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1576, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_3);
   } else
   #endif
   {
-    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1575, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1576, __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;
@@ -64786,7 +64868,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
     __Pyx_INCREF(__pyx_v_namespaces);
     __Pyx_GIVEREF(__pyx_v_namespaces);
     PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_namespaces);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1575, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1576, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
@@ -64795,7 +64877,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1564
+  /* "lxml/etree.pyx":1565
  *         return _elementpath.findtext(self, path, default, namespaces)
  * 
  *     def findall(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -64818,7 +64900,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1577
+/* "lxml/etree.pyx":1578
  *         return _elementpath.findall(self, path, namespaces)
  * 
  *     def iterfind(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -64867,7 +64949,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_87iterfind(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "iterfind") < 0)) __PYX_ERR(0, 1577, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "iterfind") < 0)) __PYX_ERR(0, 1578, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -64883,7 +64965,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_87iterfind(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("iterfind", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1577, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("iterfind", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1578, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.iterfind", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -64912,7 +64994,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
   __Pyx_RefNannySetupContext("iterfind", 0);
   __Pyx_INCREF(__pyx_v_path);
 
-  /* "lxml/etree.pyx":1586
+  /* "lxml/etree.pyx":1587
  *         prefixes in the path expression.
  *         """
  *         if isinstance(path, QName):             # <<<<<<<<<<<<<<
@@ -64923,7 +65005,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1587
+    /* "lxml/etree.pyx":1588
  *         """
  *         if isinstance(path, QName):
  *             path = (<QName>path).text             # <<<<<<<<<<<<<<
@@ -64935,7 +65017,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
     __Pyx_DECREF_SET(__pyx_v_path, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":1586
+    /* "lxml/etree.pyx":1587
  *         prefixes in the path expression.
  *         """
  *         if isinstance(path, QName):             # <<<<<<<<<<<<<<
@@ -64944,7 +65026,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
  */
   }
 
-  /* "lxml/etree.pyx":1588
+  /* "lxml/etree.pyx":1589
  *         if isinstance(path, QName):
  *             path = (<QName>path).text
  *         return _elementpath.iterfind(self, path, namespaces)             # <<<<<<<<<<<<<<
@@ -64952,7 +65034,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
  *     def xpath(self, _path, *, namespaces=None, extensions=None,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__elementpath, __pyx_n_s_iterfind); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1588, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__elementpath, __pyx_n_s_iterfind); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1589, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   __pyx_t_6 = 0;
@@ -64969,7 +65051,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1588, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1589, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_3);
   } else
@@ -64977,13 +65059,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1588, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1589, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_3);
   } else
   #endif
   {
-    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1588, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1589, __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;
@@ -64997,7 +65079,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
     __Pyx_INCREF(__pyx_v_namespaces);
     __Pyx_GIVEREF(__pyx_v_namespaces);
     PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_namespaces);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1588, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1589, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
@@ -65006,7 +65088,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1577
+  /* "lxml/etree.pyx":1578
  *         return _elementpath.findall(self, path, namespaces)
  * 
  *     def iterfind(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -65029,7 +65111,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1590
+/* "lxml/etree.pyx":1591
  *         return _elementpath.iterfind(self, path, namespaces)
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,             # <<<<<<<<<<<<<<
@@ -65061,7 +65143,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_89xpath(PyObject *__pyx_v_self,
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
 
-    /* "lxml/etree.pyx":1591
+    /* "lxml/etree.pyx":1592
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,
  *               smart_strings=True, **_variables):             # <<<<<<<<<<<<<<
@@ -65092,7 +65174,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_89xpath(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__variables, values, pos_args, "xpath") < 0)) __PYX_ERR(0, 1590, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__variables, values, pos_args, "xpath") < 0)) __PYX_ERR(0, 1591, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -65106,7 +65188,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_89xpath(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("xpath", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1590, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("xpath", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1591, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__variables); __pyx_v__variables = 0;
   __Pyx_AddTraceback("lxml.etree._Element.xpath", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -65115,7 +65197,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_89xpath(PyObject *__pyx_v_self,
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_5etree_8_Element_88xpath(((struct LxmlElement *)__pyx_v_self), __pyx_v__path, __pyx_v_namespaces, __pyx_v_extensions, __pyx_v_smart_strings, __pyx_v__variables);
 
-  /* "lxml/etree.pyx":1590
+  /* "lxml/etree.pyx":1591
  *         return _elementpath.iterfind(self, path, namespaces)
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,             # <<<<<<<<<<<<<<
@@ -65141,55 +65223,55 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_88xpath(struct LxmlElement *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("xpath", 0);
 
-  /* "lxml/etree.pyx":1596
+  /* "lxml/etree.pyx":1597
  *         Evaluate an xpath expression using the element as context node.
  *         """
  *         evaluator = XPathElementEvaluator(self, namespaces=namespaces,             # <<<<<<<<<<<<<<
  *                                           extensions=extensions,
  *                                           smart_strings=smart_strings)
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1596, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1597, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1596, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1597, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_namespaces, __pyx_v_namespaces) < 0) __PYX_ERR(0, 1596, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_namespaces, __pyx_v_namespaces) < 0) __PYX_ERR(0, 1597, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1597
+  /* "lxml/etree.pyx":1598
  *         """
  *         evaluator = XPathElementEvaluator(self, namespaces=namespaces,
  *                                           extensions=extensions,             # <<<<<<<<<<<<<<
  *                                           smart_strings=smart_strings)
  *         return evaluator(_path, **_variables)
  */
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_extensions, __pyx_v_extensions) < 0) __PYX_ERR(0, 1596, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_extensions, __pyx_v_extensions) < 0) __PYX_ERR(0, 1597, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1598
+  /* "lxml/etree.pyx":1599
  *         evaluator = XPathElementEvaluator(self, namespaces=namespaces,
  *                                           extensions=extensions,
  *                                           smart_strings=smart_strings)             # <<<<<<<<<<<<<<
  *         return evaluator(_path, **_variables)
  * 
  */
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_smart_strings, __pyx_v_smart_strings) < 0) __PYX_ERR(0, 1596, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_smart_strings, __pyx_v_smart_strings) < 0) __PYX_ERR(0, 1597, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1596
+  /* "lxml/etree.pyx":1597
  *         Evaluate an xpath expression using the element as context node.
  *         """
  *         evaluator = XPathElementEvaluator(self, namespaces=namespaces,             # <<<<<<<<<<<<<<
  *                                           extensions=extensions,
  *                                           smart_strings=smart_strings)
  */
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XPathElementEvaluator), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1596, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XPathElementEvaluator), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1597, __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_v_evaluator = ((struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":1599
+  /* "lxml/etree.pyx":1600
  *                                           extensions=extensions,
  *                                           smart_strings=smart_strings)
  *         return evaluator(_path, **_variables)             # <<<<<<<<<<<<<<
@@ -65197,14 +65279,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_88xpath(struct LxmlElement *__p
  *     def cssselect(self, expr, *, translator='xml'):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1599, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1600, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v__path);
   __Pyx_GIVEREF(__pyx_v__path);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__path);
-  __pyx_t_2 = PyDict_Copy(__pyx_v__variables); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1599, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Copy(__pyx_v__variables); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1600, __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, 1599, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_evaluator), __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1600, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -65212,7 +65294,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_88xpath(struct LxmlElement *__p
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1590
+  /* "lxml/etree.pyx":1591
  *         return _elementpath.iterfind(self, path, namespaces)
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,             # <<<<<<<<<<<<<<
@@ -65234,7 +65316,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_88xpath(struct LxmlElement *__p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1601
+/* "lxml/etree.pyx":1602
  *         return evaluator(_path, **_variables)
  * 
  *     def cssselect(self, expr, *, translator='xml'):             # <<<<<<<<<<<<<<
@@ -65280,7 +65362,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_91cssselect(PyObject *__pyx_v_s
         if (value) { values[index] = value; kw_args--; }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cssselect") < 0)) __PYX_ERR(0, 1601, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cssselect") < 0)) __PYX_ERR(0, 1602, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -65292,7 +65374,7 @@ static PyObject *__pyx_pw_4lxml_5etree_8_Element_91cssselect(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("cssselect", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1601, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("cssselect", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1602, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Element.cssselect", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -65318,29 +65400,29 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_90cssselect(struct LxmlElement
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("cssselect", 0);
 
-  /* "lxml/etree.pyx":1611
+  /* "lxml/etree.pyx":1612
  *         """
  *         # Do the import here to make the dependency optional.
  *         from lxml.cssselect import CSSSelector             # <<<<<<<<<<<<<<
  *         return CSSSelector(expr, translator=translator)(self)
  * 
  */
-  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1611, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1612, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_n_s_CSSSelector);
   __Pyx_GIVEREF(__pyx_n_s_CSSSelector);
   PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_CSSSelector);
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_lxml_cssselect, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1611, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_lxml_cssselect, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1612, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_CSSSelector); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1611, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_CSSSelector); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1612, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_CSSSelector = __pyx_t_1;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":1612
+  /* "lxml/etree.pyx":1613
  *         # Do the import here to make the dependency optional.
  *         from lxml.cssselect import CSSSelector
  *         return CSSSelector(expr, translator=translator)(self)             # <<<<<<<<<<<<<<
@@ -65348,15 +65430,15 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_90cssselect(struct LxmlElement
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1612, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1613, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_expr);
   __Pyx_GIVEREF(__pyx_v_expr);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_expr);
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1612, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1613, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_translator, __pyx_v_translator) < 0) __PYX_ERR(0, 1612, __pyx_L1_error)
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_CSSSelector, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_translator, __pyx_v_translator) < 0) __PYX_ERR(0, 1613, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_CSSSelector, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1613, __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;
@@ -65372,14 +65454,14 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_90cssselect(struct LxmlElement
   }
   __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, ((PyObject *)__pyx_v_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_self));
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1612, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1613, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1601
+  /* "lxml/etree.pyx":1602
  *         return evaluator(_path, **_variables)
  * 
  *     def cssselect(self, expr, *, translator='xml'):             # <<<<<<<<<<<<<<
@@ -65402,7 +65484,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_90cssselect(struct LxmlElement
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1621
+/* "lxml/etree.pyx":1622
  * 
  * @cython.linetrace(False)
  * cdef _Element _elementFactory(_Document doc, xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -65426,19 +65508,19 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_elementFactory", 0);
 
-  /* "lxml/etree.pyx":1623
+  /* "lxml/etree.pyx":1624
  * cdef _Element _elementFactory(_Document doc, xmlNode* c_node):
  *     cdef _Element result
  *     result = getProxy(c_node)             # <<<<<<<<<<<<<<
  *     if result is not None:
  *         return result
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_getProxy(__pyx_v_c_node)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1623, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_getProxy(__pyx_v_c_node)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1624, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_result = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":1624
+  /* "lxml/etree.pyx":1625
  *     cdef _Element result
  *     result = getProxy(c_node)
  *     if result is not None:             # <<<<<<<<<<<<<<
@@ -65449,7 +65531,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1625
+    /* "lxml/etree.pyx":1626
  *     result = getProxy(c_node)
  *     if result is not None:
  *         return result             # <<<<<<<<<<<<<<
@@ -65461,7 +65543,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
     __pyx_r = __pyx_v_result;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1624
+    /* "lxml/etree.pyx":1625
  *     cdef _Element result
  *     result = getProxy(c_node)
  *     if result is not None:             # <<<<<<<<<<<<<<
@@ -65470,7 +65552,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
  */
   }
 
-  /* "lxml/etree.pyx":1626
+  /* "lxml/etree.pyx":1627
  *     if result is not None:
  *         return result
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -65480,7 +65562,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
   __pyx_t_3 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1627
+    /* "lxml/etree.pyx":1628
  *         return result
  *     if c_node is NULL:
  *         return None             # <<<<<<<<<<<<<<
@@ -65491,7 +65573,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
     __pyx_r = ((struct LxmlElement *)Py_None); __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1626
+    /* "lxml/etree.pyx":1627
  *     if result is not None:
  *         return result
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -65500,7 +65582,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
  */
   }
 
-  /* "lxml/etree.pyx":1630
+  /* "lxml/etree.pyx":1631
  * 
  *     element_class = LOOKUP_ELEMENT_CLASS(
  *         ELEMENT_CLASS_LOOKUP_STATE, doc, c_node)             # <<<<<<<<<<<<<<
@@ -65510,20 +65592,20 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
   __pyx_t_1 = __pyx_v_4lxml_5etree_ELEMENT_CLASS_LOOKUP_STATE;
   __Pyx_INCREF(__pyx_t_1);
 
-  /* "lxml/etree.pyx":1629
+  /* "lxml/etree.pyx":1630
  *         return None
  * 
  *     element_class = LOOKUP_ELEMENT_CLASS(             # <<<<<<<<<<<<<<
  *         ELEMENT_CLASS_LOOKUP_STATE, doc, c_node)
  *     if hasProxy(c_node):
  */
-  __pyx_t_4 = __pyx_v_4lxml_5etree_LOOKUP_ELEMENT_CLASS(__pyx_t_1, __pyx_v_doc, __pyx_v_c_node); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1629, __pyx_L1_error)
+  __pyx_t_4 = __pyx_v_4lxml_5etree_LOOKUP_ELEMENT_CLASS(__pyx_t_1, __pyx_v_doc, __pyx_v_c_node); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1630, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_element_class = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":1631
+  /* "lxml/etree.pyx":1632
  *     element_class = LOOKUP_ELEMENT_CLASS(
  *         ELEMENT_CLASS_LOOKUP_STATE, doc, c_node)
  *     if hasProxy(c_node):             # <<<<<<<<<<<<<<
@@ -65533,7 +65615,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
   __pyx_t_3 = (__pyx_f_4lxml_5etree_hasProxy(__pyx_v_c_node) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1633
+    /* "lxml/etree.pyx":1634
  *     if hasProxy(c_node):
  *         # prevent re-entry race condition - we just called into Python
  *         return getProxy(c_node)             # <<<<<<<<<<<<<<
@@ -65541,13 +65623,13 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
  *     if hasProxy(c_node):
  */
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree_getProxy(__pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1633, __pyx_L1_error)
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree_getProxy(__pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1634, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = ((struct LxmlElement *)__pyx_t_4);
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1631
+    /* "lxml/etree.pyx":1632
  *     element_class = LOOKUP_ELEMENT_CLASS(
  *         ELEMENT_CLASS_LOOKUP_STATE, doc, c_node)
  *     if hasProxy(c_node):             # <<<<<<<<<<<<<<
@@ -65556,20 +65638,20 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
  */
   }
 
-  /* "lxml/etree.pyx":1634
+  /* "lxml/etree.pyx":1635
  *         # prevent re-entry race condition - we just called into Python
  *         return getProxy(c_node)
  *     result = NEW_ELEMENT(element_class)             # <<<<<<<<<<<<<<
  *     if hasProxy(c_node):
  *         # prevent re-entry race condition - we just called into Python
  */
-  __pyx_t_4 = PY_NEW(__pyx_v_element_class); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1634, __pyx_L1_error)
+  __pyx_t_4 = PY_NEW(__pyx_v_element_class); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1635, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 1634, __pyx_L1_error)
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 1635, __pyx_L1_error)
   __Pyx_DECREF_SET(__pyx_v_result, ((struct LxmlElement *)__pyx_t_4));
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":1635
+  /* "lxml/etree.pyx":1636
  *         return getProxy(c_node)
  *     result = NEW_ELEMENT(element_class)
  *     if hasProxy(c_node):             # <<<<<<<<<<<<<<
@@ -65579,7 +65661,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
   __pyx_t_3 = (__pyx_f_4lxml_5etree_hasProxy(__pyx_v_c_node) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1637
+    /* "lxml/etree.pyx":1638
  *     if hasProxy(c_node):
  *         # prevent re-entry race condition - we just called into Python
  *         result._c_node = NULL             # <<<<<<<<<<<<<<
@@ -65588,7 +65670,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
  */
     __pyx_v_result->_c_node = NULL;
 
-    /* "lxml/etree.pyx":1638
+    /* "lxml/etree.pyx":1639
  *         # prevent re-entry race condition - we just called into Python
  *         result._c_node = NULL
  *         return getProxy(c_node)             # <<<<<<<<<<<<<<
@@ -65596,13 +65678,13 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
  *     _registerProxy(result, doc, c_node)
  */
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree_getProxy(__pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1638, __pyx_L1_error)
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree_getProxy(__pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1639, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = ((struct LxmlElement *)__pyx_t_4);
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1635
+    /* "lxml/etree.pyx":1636
  *         return getProxy(c_node)
  *     result = NEW_ELEMENT(element_class)
  *     if hasProxy(c_node):             # <<<<<<<<<<<<<<
@@ -65611,16 +65693,16 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
  */
   }
 
-  /* "lxml/etree.pyx":1640
+  /* "lxml/etree.pyx":1641
  *         return getProxy(c_node)
  * 
  *     _registerProxy(result, doc, c_node)             # <<<<<<<<<<<<<<
  *     if element_class is not _Element:
  *         result._init()
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree__registerProxy(__pyx_v_result, __pyx_v_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1640, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree__registerProxy(__pyx_v_result, __pyx_v_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1641, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1641
+  /* "lxml/etree.pyx":1642
  * 
  *     _registerProxy(result, doc, c_node)
  *     if element_class is not _Element:             # <<<<<<<<<<<<<<
@@ -65631,14 +65713,14 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1642
+    /* "lxml/etree.pyx":1643
  *     _registerProxy(result, doc, c_node)
  *     if element_class is not _Element:
  *         result._init()             # <<<<<<<<<<<<<<
  *     return result
  * 
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_result), __pyx_n_s_init_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1642, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_result), __pyx_n_s_init_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1643, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_6 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -65652,12 +65734,12 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
     }
     __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1642, __pyx_L1_error)
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1643, __pyx_L1_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/etree.pyx":1641
+    /* "lxml/etree.pyx":1642
  * 
  *     _registerProxy(result, doc, c_node)
  *     if element_class is not _Element:             # <<<<<<<<<<<<<<
@@ -65666,7 +65748,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
  */
   }
 
-  /* "lxml/etree.pyx":1643
+  /* "lxml/etree.pyx":1644
  *     if element_class is not _Element:
  *         result._init()
  *     return result             # <<<<<<<<<<<<<<
@@ -65678,7 +65760,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1621
+  /* "lxml/etree.pyx":1622
  * 
  * @cython.linetrace(False)
  * cdef _Element _elementFactory(_Document doc, xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -65701,7 +65783,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1648
+/* "lxml/etree.pyx":1649
  * @cython.internal
  * cdef class __ContentOnlyElement(_Element):
  *     cdef int _raiseImmutable(self) except -1:             # <<<<<<<<<<<<<<
@@ -65717,7 +65799,7 @@ static int __pyx_f_4lxml_5etree_20__ContentOnlyElement__raiseImmutable(CYTHON_UN
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_raiseImmutable", 0);
 
-  /* "lxml/etree.pyx":1649
+  /* "lxml/etree.pyx":1650
  * cdef class __ContentOnlyElement(_Element):
  *     cdef int _raiseImmutable(self) except -1:
  *         raise TypeError, u"this element does not have children or attributes"             # <<<<<<<<<<<<<<
@@ -65725,9 +65807,9 @@ static int __pyx_f_4lxml_5etree_20__ContentOnlyElement__raiseImmutable(CYTHON_UN
  *     def set(self, key, value):
  */
   __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_this_element_does_not_have_child, 0, 0);
-  __PYX_ERR(0, 1649, __pyx_L1_error)
+  __PYX_ERR(0, 1650, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1648
+  /* "lxml/etree.pyx":1649
  * @cython.internal
  * cdef class __ContentOnlyElement(_Element):
  *     cdef int _raiseImmutable(self) except -1:             # <<<<<<<<<<<<<<
@@ -65743,7 +65825,7 @@ static int __pyx_f_4lxml_5etree_20__ContentOnlyElement__raiseImmutable(CYTHON_UN
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1651
+/* "lxml/etree.pyx":1652
  *         raise TypeError, u"this element does not have children or attributes"
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
@@ -65787,11 +65869,11 @@ static PyObject *__pyx_pw_4lxml_5etree_20__ContentOnlyElement_1set(PyObject *__p
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); __PYX_ERR(0, 1651, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); __PYX_ERR(0, 1652, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) __PYX_ERR(0, 1651, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) __PYX_ERR(0, 1652, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -65804,7 +65886,7 @@ static PyObject *__pyx_pw_4lxml_5etree_20__ContentOnlyElement_1set(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1651, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1652, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.__ContentOnlyElement.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -65826,16 +65908,16 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_set(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set", 0);
 
-  /* "lxml/etree.pyx":1653
+  /* "lxml/etree.pyx":1654
  *     def set(self, key, value):
  *         u"set(self, key, value)"
  *         self._raiseImmutable()             # <<<<<<<<<<<<<<
  * 
  *     def append(self, value):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement *)__pyx_v_self->__pyx_vtab)->_raiseImmutable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1653, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement *)__pyx_v_self->__pyx_vtab)->_raiseImmutable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1654, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1651
+  /* "lxml/etree.pyx":1652
  *         raise TypeError, u"this element does not have children or attributes"
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
@@ -65855,7 +65937,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_set(struct __pyx_o
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1655
+/* "lxml/etree.pyx":1656
  *         self._raiseImmutable()
  * 
  *     def append(self, value):             # <<<<<<<<<<<<<<
@@ -65887,16 +65969,16 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_2append(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("append", 0);
 
-  /* "lxml/etree.pyx":1657
+  /* "lxml/etree.pyx":1658
  *     def append(self, value):
  *         u"append(self, value)"
  *         self._raiseImmutable()             # <<<<<<<<<<<<<<
  * 
  *     def insert(self, index, value):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement *)__pyx_v_self->__pyx_vtab)->_raiseImmutable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1657, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement *)__pyx_v_self->__pyx_vtab)->_raiseImmutable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1658, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1655
+  /* "lxml/etree.pyx":1656
  *         self._raiseImmutable()
  * 
  *     def append(self, value):             # <<<<<<<<<<<<<<
@@ -65916,7 +65998,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_2append(struct __p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1659
+/* "lxml/etree.pyx":1660
  *         self._raiseImmutable()
  * 
  *     def insert(self, index, value):             # <<<<<<<<<<<<<<
@@ -65960,11 +66042,11 @@ static PyObject *__pyx_pw_4lxml_5etree_20__ContentOnlyElement_5insert(PyObject *
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, 1); __PYX_ERR(0, 1659, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, 1); __PYX_ERR(0, 1660, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert") < 0)) __PYX_ERR(0, 1659, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert") < 0)) __PYX_ERR(0, 1660, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -65977,7 +66059,7 @@ static PyObject *__pyx_pw_4lxml_5etree_20__ContentOnlyElement_5insert(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1659, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1660, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.__ContentOnlyElement.insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -65999,16 +66081,16 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_4insert(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("insert", 0);
 
-  /* "lxml/etree.pyx":1661
+  /* "lxml/etree.pyx":1662
  *     def insert(self, index, value):
  *         u"insert(self, index, value)"
  *         self._raiseImmutable()             # <<<<<<<<<<<<<<
  * 
  *     def __setitem__(self, index, value):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement *)__pyx_v_self->__pyx_vtab)->_raiseImmutable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1661, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement *)__pyx_v_self->__pyx_vtab)->_raiseImmutable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1662, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1659
+  /* "lxml/etree.pyx":1660
  *         self._raiseImmutable()
  * 
  *     def insert(self, index, value):             # <<<<<<<<<<<<<<
@@ -66028,7 +66110,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_4insert(struct __p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1663
+/* "lxml/etree.pyx":1664
  *         self._raiseImmutable()
  * 
  *     def __setitem__(self, index, value):             # <<<<<<<<<<<<<<
@@ -66062,16 +66144,16 @@ static int __pyx_pf_4lxml_5etree_20__ContentOnlyElement_6__setitem__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "lxml/etree.pyx":1665
+  /* "lxml/etree.pyx":1666
  *     def __setitem__(self, index, value):
  *         u"__setitem__(self, index, value)"
  *         self._raiseImmutable()             # <<<<<<<<<<<<<<
  * 
  *     @property
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement *)__pyx_v_self->__pyx_vtab)->_raiseImmutable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1665, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement *)__pyx_v_self->__pyx_vtab)->_raiseImmutable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1666, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1663
+  /* "lxml/etree.pyx":1664
  *         self._raiseImmutable()
  * 
  *     def __setitem__(self, index, value):             # <<<<<<<<<<<<<<
@@ -66090,7 +66172,7 @@ static int __pyx_pf_4lxml_5etree_20__ContentOnlyElement_6__setitem__(struct __py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1668
+/* "lxml/etree.pyx":1669
  * 
  *     @property
  *     def attrib(self):             # <<<<<<<<<<<<<<
@@ -66116,7 +66198,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_6attrib___get__(CY
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1669
+  /* "lxml/etree.pyx":1670
  *     @property
  *     def attrib(self):
  *         return IMMUTABLE_EMPTY_MAPPING             # <<<<<<<<<<<<<<
@@ -66128,7 +66210,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_6attrib___get__(CY
   __pyx_r = __pyx_v_4lxml_5etree_IMMUTABLE_EMPTY_MAPPING;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1668
+  /* "lxml/etree.pyx":1669
  * 
  *     @property
  *     def attrib(self):             # <<<<<<<<<<<<<<
@@ -66143,7 +66225,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_6attrib___get__(CY
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1672
+/* "lxml/etree.pyx":1673
  * 
  *     property text:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -66174,16 +66256,16 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text___get__(stru
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1673
+  /* "lxml/etree.pyx":1674
  *     property text:
  *         def __get__(self):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             return funicodeOrEmpty(self._c_node.content)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1673, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1674, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1674
+  /* "lxml/etree.pyx":1675
  *         def __get__(self):
  *             _assertValidNode(self)
  *             return funicodeOrEmpty(self._c_node.content)             # <<<<<<<<<<<<<<
@@ -66191,13 +66273,13 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text___get__(stru
  *         def __set__(self, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_funicodeOrEmpty(__pyx_v_self->__pyx_base._c_node->content); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1674, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_funicodeOrEmpty(__pyx_v_self->__pyx_base._c_node->content); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1675, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1672
+  /* "lxml/etree.pyx":1673
  * 
  *     property text:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -66216,7 +66298,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text___get__(stru
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1676
+/* "lxml/etree.pyx":1677
  *             return funicodeOrEmpty(self._c_node.content)
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -66251,16 +66333,16 @@ static int __pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text_2__set__(struct __
   __Pyx_RefNannySetupContext("__set__", 0);
   __Pyx_INCREF(__pyx_v_value);
 
-  /* "lxml/etree.pyx":1678
+  /* "lxml/etree.pyx":1679
  *         def __set__(self, value):
  *             cdef tree.xmlDict* c_dict
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             if value is None:
  *                 c_text = <const_xmlChar*>NULL
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1678, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1679, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1679
+  /* "lxml/etree.pyx":1680
  *             cdef tree.xmlDict* c_dict
  *             _assertValidNode(self)
  *             if value is None:             # <<<<<<<<<<<<<<
@@ -66271,7 +66353,7 @@ static int __pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text_2__set__(struct __
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":1680
+    /* "lxml/etree.pyx":1681
  *             _assertValidNode(self)
  *             if value is None:
  *                 c_text = <const_xmlChar*>NULL             # <<<<<<<<<<<<<<
@@ -66280,7 +66362,7 @@ static int __pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text_2__set__(struct __
  */
     __pyx_v_c_text = ((const xmlChar *)NULL);
 
-    /* "lxml/etree.pyx":1679
+    /* "lxml/etree.pyx":1680
  *             cdef tree.xmlDict* c_dict
  *             _assertValidNode(self)
  *             if value is None:             # <<<<<<<<<<<<<<
@@ -66290,7 +66372,7 @@ static int __pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text_2__set__(struct __
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":1682
+  /* "lxml/etree.pyx":1683
  *                 c_text = <const_xmlChar*>NULL
  *             else:
  *                 value = _utf8(value)             # <<<<<<<<<<<<<<
@@ -66298,12 +66380,12 @@ static int __pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text_2__set__(struct __
  *             tree.xmlNodeSetContent(self._c_node, c_text)
  */
   /*else*/ {
-    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1682, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1683, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1683
+    /* "lxml/etree.pyx":1684
  *             else:
  *                 value = _utf8(value)
  *                 c_text = _xcstr(value)             # <<<<<<<<<<<<<<
@@ -66314,7 +66396,7 @@ static int __pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text_2__set__(struct __
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":1684
+  /* "lxml/etree.pyx":1685
  *                 value = _utf8(value)
  *                 c_text = _xcstr(value)
  *             tree.xmlNodeSetContent(self._c_node, c_text)             # <<<<<<<<<<<<<<
@@ -66323,7 +66405,7 @@ static int __pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text_2__set__(struct __
  */
   xmlNodeSetContent(__pyx_v_self->__pyx_base._c_node, __pyx_v_c_text);
 
-  /* "lxml/etree.pyx":1676
+  /* "lxml/etree.pyx":1677
  *             return funicodeOrEmpty(self._c_node.content)
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -66344,7 +66426,7 @@ static int __pyx_pf_4lxml_5etree_20__ContentOnlyElement_4text_2__set__(struct __
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1687
+/* "lxml/etree.pyx":1688
  * 
  *     # ACCESSORS
  *     def __getitem__(self, x):             # <<<<<<<<<<<<<<
@@ -66380,7 +66462,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_8__getitem__(CYTHO
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "lxml/etree.pyx":1689
+  /* "lxml/etree.pyx":1690
  *     def __getitem__(self, x):
  *         u"__getitem__(self, x)"
  *         if isinstance(x, slice):             # <<<<<<<<<<<<<<
@@ -66391,7 +66473,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_8__getitem__(CYTHO
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (likely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":1690
+    /* "lxml/etree.pyx":1691
  *         u"__getitem__(self, x)"
  *         if isinstance(x, slice):
  *             return []             # <<<<<<<<<<<<<<
@@ -66399,13 +66481,13 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_8__getitem__(CYTHO
  *             raise IndexError, u"list index out of range"
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1690, __pyx_L1_error)
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1691, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1689
+    /* "lxml/etree.pyx":1690
  *     def __getitem__(self, x):
  *         u"__getitem__(self, x)"
  *         if isinstance(x, slice):             # <<<<<<<<<<<<<<
@@ -66414,7 +66496,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_8__getitem__(CYTHO
  */
   }
 
-  /* "lxml/etree.pyx":1692
+  /* "lxml/etree.pyx":1693
  *             return []
  *         else:
  *             raise IndexError, u"list index out of range"             # <<<<<<<<<<<<<<
@@ -66423,10 +66505,10 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_8__getitem__(CYTHO
  */
   /*else*/ {
     __Pyx_Raise(__pyx_builtin_IndexError, __pyx_kp_u_list_index_out_of_range, 0, 0);
-    __PYX_ERR(0, 1692, __pyx_L1_error)
+    __PYX_ERR(0, 1693, __pyx_L1_error)
   }
 
-  /* "lxml/etree.pyx":1687
+  /* "lxml/etree.pyx":1688
  * 
  *     # ACCESSORS
  *     def __getitem__(self, x):             # <<<<<<<<<<<<<<
@@ -66445,7 +66527,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_8__getitem__(CYTHO
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1694
+/* "lxml/etree.pyx":1695
  *             raise IndexError, u"list index out of range"
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -66475,7 +66557,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_20__ContentOnlyElement_10__len__(CYTHON_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__len__", 0);
 
-  /* "lxml/etree.pyx":1696
+  /* "lxml/etree.pyx":1697
  *     def __len__(self):
  *         u"__len__(self)"
  *         return 0             # <<<<<<<<<<<<<<
@@ -66485,7 +66567,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_20__ContentOnlyElement_10__len__(CYTHON_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1694
+  /* "lxml/etree.pyx":1695
  *             raise IndexError, u"list index out of range"
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -66499,7 +66581,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_20__ContentOnlyElement_10__len__(CYTHON_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1698
+/* "lxml/etree.pyx":1699
  *         return 0
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
@@ -66548,7 +66630,7 @@ static PyObject *__pyx_pw_4lxml_5etree_20__ContentOnlyElement_13get(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) __PYX_ERR(0, 1698, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) __PYX_ERR(0, 1699, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -66564,7 +66646,7 @@ static PyObject *__pyx_pw_4lxml_5etree_20__ContentOnlyElement_13get(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1698, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1699, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.__ContentOnlyElement.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -66582,7 +66664,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_12get(CYTHON_UNUSE
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get", 0);
 
-  /* "lxml/etree.pyx":1700
+  /* "lxml/etree.pyx":1701
  *     def get(self, key, default=None):
  *         u"get(self, key, default=None)"
  *         return None             # <<<<<<<<<<<<<<
@@ -66593,7 +66675,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_12get(CYTHON_UNUSE
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1698
+  /* "lxml/etree.pyx":1699
  *         return 0
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
@@ -66608,7 +66690,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_12get(CYTHON_UNUSE
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1702
+/* "lxml/etree.pyx":1703
  *         return None
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -66640,7 +66722,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_14keys(CYTHON_UNUS
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("keys", 0);
 
-  /* "lxml/etree.pyx":1704
+  /* "lxml/etree.pyx":1705
  *     def keys(self):
  *         u"keys(self)"
  *         return []             # <<<<<<<<<<<<<<
@@ -66648,13 +66730,13 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_14keys(CYTHON_UNUS
  *     def items(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1704, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1705, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1702
+  /* "lxml/etree.pyx":1703
  *         return None
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -66673,7 +66755,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_14keys(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1706
+/* "lxml/etree.pyx":1707
  *         return []
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
@@ -66705,7 +66787,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_16items(CYTHON_UNU
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("items", 0);
 
-  /* "lxml/etree.pyx":1708
+  /* "lxml/etree.pyx":1709
  *     def items(self):
  *         u"items(self)"
  *         return []             # <<<<<<<<<<<<<<
@@ -66713,13 +66795,13 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_16items(CYTHON_UNU
  *     def values(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1708, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1709, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1706
+  /* "lxml/etree.pyx":1707
  *         return []
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
@@ -66738,7 +66820,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_16items(CYTHON_UNU
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1710
+/* "lxml/etree.pyx":1711
  *         return []
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
@@ -66770,7 +66852,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_18values(CYTHON_UN
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("values", 0);
 
-  /* "lxml/etree.pyx":1712
+  /* "lxml/etree.pyx":1713
  *     def values(self):
  *         u"values(self)"
  *         return []             # <<<<<<<<<<<<<<
@@ -66778,13 +66860,13 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_18values(CYTHON_UN
  * cdef class _Comment(__ContentOnlyElement):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1712, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1713, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1710
+  /* "lxml/etree.pyx":1711
  *         return []
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
@@ -66803,7 +66885,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20__ContentOnlyElement_18values(CYTHON_UN
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1716
+/* "lxml/etree.pyx":1717
  * cdef class _Comment(__ContentOnlyElement):
  *     @property
  *     def tag(self):             # <<<<<<<<<<<<<<
@@ -66833,7 +66915,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Comment_3tag___get__(CYTHON_UNUSED stru
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1717
+  /* "lxml/etree.pyx":1718
  *     @property
  *     def tag(self):
  *         return Comment             # <<<<<<<<<<<<<<
@@ -66841,13 +66923,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Comment_3tag___get__(CYTHON_UNUSED stru
  *     def __repr__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Comment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1717, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Comment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1718, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1716
+  /* "lxml/etree.pyx":1717
  * cdef class _Comment(__ContentOnlyElement):
  *     @property
  *     def tag(self):             # <<<<<<<<<<<<<<
@@ -66866,7 +66948,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Comment_3tag___get__(CYTHON_UNUSED stru
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1719
+/* "lxml/etree.pyx":1720
  *         return Comment
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -66897,7 +66979,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Comment___repr__(struct __pyx_obj_4lxml
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "lxml/etree.pyx":1720
+  /* "lxml/etree.pyx":1721
  * 
  *     def __repr__(self):
  *         return "<!--%s-->" % strrepr(self.text)             # <<<<<<<<<<<<<<
@@ -66905,19 +66987,19 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Comment___repr__(struct __pyx_obj_4lxml
  * cdef class _ProcessingInstruction(__ContentOnlyElement):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1720, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1721, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_strrepr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1720, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_strrepr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1721, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1720, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1721, __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/etree.pyx":1719
+  /* "lxml/etree.pyx":1720
  *         return Comment
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -66937,7 +67019,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Comment___repr__(struct __pyx_obj_4lxml
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1724
+/* "lxml/etree.pyx":1725
  * cdef class _ProcessingInstruction(__ContentOnlyElement):
  *     @property
  *     def tag(self):             # <<<<<<<<<<<<<<
@@ -66967,7 +67049,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_3tag___get__(CYT
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1725
+  /* "lxml/etree.pyx":1726
  *     @property
  *     def tag(self):
  *         return ProcessingInstruction             # <<<<<<<<<<<<<<
@@ -66975,13 +67057,13 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_3tag___get__(CYT
  *     property target:
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ProcessingInstruction); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1725, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ProcessingInstruction); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1726, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1724
+  /* "lxml/etree.pyx":1725
  * cdef class _ProcessingInstruction(__ContentOnlyElement):
  *     @property
  *     def tag(self):             # <<<<<<<<<<<<<<
@@ -67000,7 +67082,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_3tag___get__(CYT
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1729
+/* "lxml/etree.pyx":1730
  *     property target:
  *         # not in ElementTree
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67031,16 +67113,16 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6target___get__(
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1730
+  /* "lxml/etree.pyx":1731
  *         # not in ElementTree
  *         def __get__(self):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             return funicode(self._c_node.name)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1730, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1731, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1731
+  /* "lxml/etree.pyx":1732
  *         def __get__(self):
  *             _assertValidNode(self)
  *             return funicode(self._c_node.name)             # <<<<<<<<<<<<<<
@@ -67048,13 +67130,13 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6target___get__(
  *         def __set__(self, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_self->__pyx_base.__pyx_base._c_node->name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1731, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_self->__pyx_base.__pyx_base._c_node->name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1732, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1729
+  /* "lxml/etree.pyx":1730
  *     property target:
  *         # not in ElementTree
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67073,7 +67155,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6target___get__(
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1733
+/* "lxml/etree.pyx":1734
  *             return funicode(self._c_node.name)
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -67106,28 +67188,28 @@ static int __pyx_pf_4lxml_5etree_22_ProcessingInstruction_6target_2__set__(struc
   __Pyx_RefNannySetupContext("__set__", 0);
   __Pyx_INCREF(__pyx_v_value);
 
-  /* "lxml/etree.pyx":1734
+  /* "lxml/etree.pyx":1735
  * 
  *         def __set__(self, value):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             value = _utf8(value)
  *             c_text = _xcstr(value)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1734, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1735, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1735
+  /* "lxml/etree.pyx":1736
  *         def __set__(self, value):
  *             _assertValidNode(self)
  *             value = _utf8(value)             # <<<<<<<<<<<<<<
  *             c_text = _xcstr(value)
  *             tree.xmlNodeSetName(self._c_node, c_text)
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1735, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1736, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":1736
+  /* "lxml/etree.pyx":1737
  *             _assertValidNode(self)
  *             value = _utf8(value)
  *             c_text = _xcstr(value)             # <<<<<<<<<<<<<<
@@ -67136,7 +67218,7 @@ static int __pyx_pf_4lxml_5etree_22_ProcessingInstruction_6target_2__set__(struc
  */
   __pyx_v_c_text = (const xmlChar*)PyBytes_AS_STRING(__pyx_v_value);
 
-  /* "lxml/etree.pyx":1737
+  /* "lxml/etree.pyx":1738
  *             value = _utf8(value)
  *             c_text = _xcstr(value)
  *             tree.xmlNodeSetName(self._c_node, c_text)             # <<<<<<<<<<<<<<
@@ -67145,7 +67227,7 @@ static int __pyx_pf_4lxml_5etree_22_ProcessingInstruction_6target_2__set__(struc
  */
   xmlNodeSetName(__pyx_v_self->__pyx_base.__pyx_base._c_node, __pyx_v_c_text);
 
-  /* "lxml/etree.pyx":1733
+  /* "lxml/etree.pyx":1734
  *             return funicode(self._c_node.name)
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -67166,7 +67248,7 @@ static int __pyx_pf_4lxml_5etree_22_ProcessingInstruction_6target_2__set__(struc
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1739
+/* "lxml/etree.pyx":1740
  *             tree.xmlNodeSetName(self._c_node, c_text)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -67200,29 +67282,29 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction___repr__(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "lxml/etree.pyx":1740
+  /* "lxml/etree.pyx":1741
  * 
  *     def __repr__(self):
  *         text = self.text             # <<<<<<<<<<<<<<
  *         if text:
  *             return "<?%s %s?>" % (strrepr(self.target),
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1740, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1741, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_text = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":1741
+  /* "lxml/etree.pyx":1742
  *     def __repr__(self):
  *         text = self.text
  *         if text:             # <<<<<<<<<<<<<<
  *             return "<?%s %s?>" % (strrepr(self.target),
  *                                   strrepr(text))
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_text); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1741, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_text); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1742, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1742
+    /* "lxml/etree.pyx":1743
  *         text = self.text
  *         if text:
  *             return "<?%s %s?>" % (strrepr(self.target),             # <<<<<<<<<<<<<<
@@ -67230,30 +67312,30 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction___repr__(struct
  *         else:
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1742, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1743, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __pyx_f_4lxml_5etree_strrepr(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1742, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree_strrepr(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1743, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "lxml/etree.pyx":1743
+    /* "lxml/etree.pyx":1744
  *         if text:
  *             return "<?%s %s?>" % (strrepr(self.target),
  *                                   strrepr(text))             # <<<<<<<<<<<<<<
  *         else:
  *             return "<?%s?>" % strrepr(self.target)
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree_strrepr(__pyx_v_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1743, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree_strrepr(__pyx_v_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1744, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
 
-    /* "lxml/etree.pyx":1742
+    /* "lxml/etree.pyx":1743
  *         text = self.text
  *         if text:
  *             return "<?%s %s?>" % (strrepr(self.target),             # <<<<<<<<<<<<<<
  *                                   strrepr(text))
  *         else:
  */
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1742, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1743, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
@@ -67261,14 +67343,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction___repr__(struct
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
     __pyx_t_3 = 0;
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_s, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1742, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_s, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1743, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1741
+    /* "lxml/etree.pyx":1742
  *     def __repr__(self):
  *         text = self.text
  *         if text:             # <<<<<<<<<<<<<<
@@ -67277,7 +67359,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction___repr__(struct
  */
   }
 
-  /* "lxml/etree.pyx":1745
+  /* "lxml/etree.pyx":1746
  *                                   strrepr(text))
  *         else:
  *             return "<?%s?>" % strrepr(self.target)             # <<<<<<<<<<<<<<
@@ -67286,12 +67368,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction___repr__(struct
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1745, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1746, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __pyx_f_4lxml_5etree_strrepr(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1745, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree_strrepr(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1746, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_s_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1745, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_s_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1746, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_1;
@@ -67299,7 +67381,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction___repr__(struct
     goto __pyx_L0;
   }
 
-  /* "lxml/etree.pyx":1739
+  /* "lxml/etree.pyx":1740
  *             tree.xmlNodeSetName(self._c_node, c_text)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -67321,7 +67403,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction___repr__(struct
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1747
+/* "lxml/etree.pyx":1748
  *             return "<?%s?>" % strrepr(self.target)
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
@@ -67370,7 +67452,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_ProcessingInstruction_3get(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) __PYX_ERR(0, 1747, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) __PYX_ERR(0, 1748, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -67386,7 +67468,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_ProcessingInstruction_3get(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1747, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1748, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ProcessingInstruction.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -67412,7 +67494,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_2get(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get", 0);
 
-  /* "lxml/etree.pyx":1759
+  /* "lxml/etree.pyx":1760
  *         It is not guaranteed to work for all possible text content.
  *         """
  *         return self.attrib.get(key, default)             # <<<<<<<<<<<<<<
@@ -67420,9 +67502,9 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_2get(struct __py
  *     @property
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_attrib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1759, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_attrib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1760, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1759, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1760, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -67440,7 +67522,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_2get(struct __py
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_key, __pyx_v_default};
-    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1759, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1760, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else
@@ -67448,13 +67530,13 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_2get(struct __py
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_key, __pyx_v_default};
-    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1759, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1760, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else
   #endif
   {
-    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1759, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1760, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     if (__pyx_t_2) {
       __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
@@ -67465,7 +67547,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_2get(struct __py
     __Pyx_INCREF(__pyx_v_default);
     __Pyx_GIVEREF(__pyx_v_default);
     PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_default);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1759, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1760, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
@@ -67474,7 +67556,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_2get(struct __py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1747
+  /* "lxml/etree.pyx":1748
  *             return "<?%s?>" % strrepr(self.target)
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
@@ -67496,7 +67578,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_2get(struct __py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1762
+/* "lxml/etree.pyx":1763
  * 
  *     @property
  *     def attrib(self):             # <<<<<<<<<<<<<<
@@ -67539,7 +67621,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1768
+  /* "lxml/etree.pyx":1769
  *         XML node, although this is not guaranteed to stay this way.
  *         """
  *         return { attr : (value1 or value2)             # <<<<<<<<<<<<<<
@@ -67548,19 +67630,19 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
  */
   __Pyx_XDECREF(__pyx_r);
   { /* enter inner scope */
-    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1768, __pyx_L5_error)
+    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1769, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_1);
 
-    /* "lxml/etree.pyx":1769
+    /* "lxml/etree.pyx":1770
  *         """
  *         return { attr : (value1 or value2)
  *                  for attr, value1, value2 in _FIND_PI_ATTRIBUTES(u' ' + self.text) }             # <<<<<<<<<<<<<<
  * 
  * cdef object _FIND_PI_ATTRIBUTES = re.compile(ur'\s+(\w+)\s*=\s*(?:\'([^\']*)\'|"([^"]*)")', re.U).findall
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1769, __pyx_L5_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1770, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyNumber_Add(__pyx_kp_u__11, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1769, __pyx_L5_error)
+    __pyx_t_4 = PyNumber_Add(__pyx_kp_u__11, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1770, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_INCREF(__pyx_v_4lxml_5etree__FIND_PI_ATTRIBUTES);
@@ -67577,16 +67659,16 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
     __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1769, __pyx_L5_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1770, __pyx_L5_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(0, 1769, __pyx_L5_error)
+      __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1770, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1769, __pyx_L5_error)
+      __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1770, __pyx_L5_error)
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     for (;;) {
@@ -67594,17 +67676,17 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
         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(0, 1769, __pyx_L5_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(0, 1770, __pyx_L5_error)
           #else
-          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1769, __pyx_L5_error)
+          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1770, __pyx_L5_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(0, 1769, __pyx_L5_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(0, 1770, __pyx_L5_error)
           #else
-          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1769, __pyx_L5_error)
+          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1770, __pyx_L5_error)
           __Pyx_GOTREF(__pyx_t_2);
           #endif
         }
@@ -67614,7 +67696,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1769, __pyx_L5_error)
+            else __PYX_ERR(0, 1770, __pyx_L5_error)
           }
           break;
         }
@@ -67626,7 +67708,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
         if (unlikely(size != 3)) {
           if (size > 3) __Pyx_RaiseTooManyValuesError(3);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(0, 1769, __pyx_L5_error)
+          __PYX_ERR(0, 1770, __pyx_L5_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -67642,17 +67724,17 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
         __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(__pyx_t_8);
         #else
-        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1769, __pyx_L5_error)
+        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1770, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1769, __pyx_L5_error)
+        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1770, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1769, __pyx_L5_error)
+        __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1770, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_8);
         #endif
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1769, __pyx_L5_error)
+        __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1770, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
@@ -67662,7 +67744,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
         __Pyx_GOTREF(__pyx_t_5);
         index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) __PYX_ERR(0, 1769, __pyx_L5_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) __PYX_ERR(0, 1770, __pyx_L5_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L9_unpacking_done;
@@ -67670,7 +67752,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(0, 1769, __pyx_L5_error)
+        __PYX_ERR(0, 1770, __pyx_L5_error)
         __pyx_L9_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_attr, __pyx_t_4);
@@ -67680,14 +67762,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
       __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_value2, __pyx_t_8);
       __pyx_t_8 = 0;
 
-      /* "lxml/etree.pyx":1768
+      /* "lxml/etree.pyx":1769
  *         XML node, although this is not guaranteed to stay this way.
  *         """
  *         return { attr : (value1 or value2)             # <<<<<<<<<<<<<<
  *                  for attr, value1, value2 in _FIND_PI_ATTRIBUTES(u' ' + self.text) }
  * 
  */
-      __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_8genexpr1__pyx_v_value1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1768, __pyx_L5_error)
+      __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_8genexpr1__pyx_v_value1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1769, __pyx_L5_error)
       if (!__pyx_t_11) {
       } else {
         __Pyx_INCREF(__pyx_8genexpr1__pyx_v_value1);
@@ -67697,10 +67779,10 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
       __Pyx_INCREF(__pyx_8genexpr1__pyx_v_value2);
       __pyx_t_2 = __pyx_8genexpr1__pyx_v_value2;
       __pyx_L10_bool_binop_done:;
-      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_8genexpr1__pyx_v_attr, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 1768, __pyx_L5_error)
+      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_8genexpr1__pyx_v_attr, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 1769, __pyx_L5_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "lxml/etree.pyx":1769
+      /* "lxml/etree.pyx":1770
  *         """
  *         return { attr : (value1 or value2)
  *                  for attr, value1, value2 in _FIND_PI_ATTRIBUTES(u' ' + self.text) }             # <<<<<<<<<<<<<<
@@ -67724,7 +67806,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1762
+  /* "lxml/etree.pyx":1763
  * 
  *     @property
  *     def attrib(self):             # <<<<<<<<<<<<<<
@@ -67752,7 +67834,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1775
+/* "lxml/etree.pyx":1776
  * cdef class _Entity(__ContentOnlyElement):
  *     @property
  *     def tag(self):             # <<<<<<<<<<<<<<
@@ -67782,7 +67864,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_3tag___get__(CYTHON_UNUSED struc
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1776
+  /* "lxml/etree.pyx":1777
  *     @property
  *     def tag(self):
  *         return Entity             # <<<<<<<<<<<<<<
@@ -67790,13 +67872,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_3tag___get__(CYTHON_UNUSED struc
  *     property name:
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Entity); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1776, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Entity); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1777, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1775
+  /* "lxml/etree.pyx":1776
  * cdef class _Entity(__ContentOnlyElement):
  *     @property
  *     def tag(self):             # <<<<<<<<<<<<<<
@@ -67815,7 +67897,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_3tag___get__(CYTHON_UNUSED struc
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1780
+/* "lxml/etree.pyx":1781
  *     property name:
  *         # not in ElementTree
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67846,16 +67928,16 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_4name___get__(struct __pyx_obj_4
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1781
+  /* "lxml/etree.pyx":1782
  *         # not in ElementTree
  *         def __get__(self):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             return funicode(self._c_node.name)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1781, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1782, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1782
+  /* "lxml/etree.pyx":1783
  *         def __get__(self):
  *             _assertValidNode(self)
  *             return funicode(self._c_node.name)             # <<<<<<<<<<<<<<
@@ -67863,13 +67945,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_4name___get__(struct __pyx_obj_4
  *         def __set__(self, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_self->__pyx_base.__pyx_base._c_node->name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1782, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_self->__pyx_base.__pyx_base._c_node->name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1783, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1780
+  /* "lxml/etree.pyx":1781
  *     property name:
  *         # not in ElementTree
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67888,7 +67970,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_4name___get__(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1784
+/* "lxml/etree.pyx":1785
  *             return funicode(self._c_node.name)
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -67926,55 +68008,55 @@ static int __pyx_pf_4lxml_5etree_7_Entity_4name_2__set__(struct __pyx_obj_4lxml_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "lxml/etree.pyx":1785
+  /* "lxml/etree.pyx":1786
  * 
  *         def __set__(self, value):
  *             _assertValidNode(self)             # <<<<<<<<<<<<<<
  *             value_utf = _utf8(value)
  *             if b'&' in value_utf or b';' in value_utf:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1785, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1786, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1786
+  /* "lxml/etree.pyx":1787
  *         def __set__(self, value):
  *             _assertValidNode(self)
  *             value_utf = _utf8(value)             # <<<<<<<<<<<<<<
  *             if b'&' in value_utf or b';' in value_utf:
  *                 raise ValueError, f"Invalid entity name '{value}'"
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1786, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1787, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_value_utf = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":1787
+  /* "lxml/etree.pyx":1788
  *             _assertValidNode(self)
  *             value_utf = _utf8(value)
  *             if b'&' in value_utf or b';' in value_utf:             # <<<<<<<<<<<<<<
  *                 raise ValueError, f"Invalid entity name '{value}'"
  *             tree.xmlNodeSetName(self._c_node, _xcstr(value_utf))
  */
-  __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__29, __pyx_v_value_utf, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1787, __pyx_L1_error)
+  __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__29, __pyx_v_value_utf, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1788, __pyx_L1_error)
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (!__pyx_t_5) {
   } else {
     __pyx_t_3 = __pyx_t_5;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__30, __pyx_v_value_utf, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1787, __pyx_L1_error)
+  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__30, __pyx_v_value_utf, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1788, __pyx_L1_error)
   __pyx_t_4 = (__pyx_t_5 != 0);
   __pyx_t_3 = __pyx_t_4;
   __pyx_L4_bool_binop_done:;
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":1788
+    /* "lxml/etree.pyx":1789
  *             value_utf = _utf8(value)
  *             if b'&' in value_utf or b';' in value_utf:
  *                 raise ValueError, f"Invalid entity name '{value}'"             # <<<<<<<<<<<<<<
  *             tree.xmlNodeSetName(self._c_node, _xcstr(value_utf))
  * 
  */
-    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1788, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1789, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_6 = 0;
     __pyx_t_7 = 127;
@@ -67982,7 +68064,7 @@ static int __pyx_pf_4lxml_5etree_7_Entity_4name_2__set__(struct __pyx_obj_4lxml_
     __pyx_t_6 += 21;
     __Pyx_GIVEREF(__pyx_kp_u_Invalid_entity_name);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Invalid_entity_name);
-    __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1788, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1789, __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);
@@ -67993,14 +68075,14 @@ static int __pyx_pf_4lxml_5etree_7_Entity_4name_2__set__(struct __pyx_obj_4lxml_
     __pyx_t_6 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__22);
     PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__22);
-    __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1788, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1789, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_8, 0, 0);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __PYX_ERR(0, 1788, __pyx_L1_error)
+    __PYX_ERR(0, 1789, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":1787
+    /* "lxml/etree.pyx":1788
  *             _assertValidNode(self)
  *             value_utf = _utf8(value)
  *             if b'&' in value_utf or b';' in value_utf:             # <<<<<<<<<<<<<<
@@ -68009,7 +68091,7 @@ static int __pyx_pf_4lxml_5etree_7_Entity_4name_2__set__(struct __pyx_obj_4lxml_
  */
   }
 
-  /* "lxml/etree.pyx":1789
+  /* "lxml/etree.pyx":1790
  *             if b'&' in value_utf or b';' in value_utf:
  *                 raise ValueError, f"Invalid entity name '{value}'"
  *             tree.xmlNodeSetName(self._c_node, _xcstr(value_utf))             # <<<<<<<<<<<<<<
@@ -68018,7 +68100,7 @@ static int __pyx_pf_4lxml_5etree_7_Entity_4name_2__set__(struct __pyx_obj_4lxml_
  */
   xmlNodeSetName(__pyx_v_self->__pyx_base.__pyx_base._c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_value_utf));
 
-  /* "lxml/etree.pyx":1784
+  /* "lxml/etree.pyx":1785
  *             return funicode(self._c_node.name)
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -68040,7 +68122,7 @@ static int __pyx_pf_4lxml_5etree_7_Entity_4name_2__set__(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1792
+/* "lxml/etree.pyx":1793
  * 
  *     @property
  *     def text(self):             # <<<<<<<<<<<<<<
@@ -68075,16 +68157,16 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_4text___get__(struct __pyx_obj_4
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1795
+  /* "lxml/etree.pyx":1796
  *         # FIXME: should this be None or '&[VALUE];' or the resolved
  *         # entity value ?
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         return f'&{funicode(self._c_node.name)};'
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1795, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1796, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1796
+  /* "lxml/etree.pyx":1797
  *         # entity value ?
  *         _assertValidNode(self)
  *         return f'&{funicode(self._c_node.name)};'             # <<<<<<<<<<<<<<
@@ -68092,7 +68174,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_4text___get__(struct __pyx_obj_4
  *     def __repr__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1796, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = 0;
   __pyx_t_4 = 127;
@@ -68100,9 +68182,9 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_4text___get__(struct __pyx_obj_4
   __pyx_t_3 += 1;
   __Pyx_GIVEREF(__pyx_kp_u__29);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u__29);
-  __pyx_t_5 = __pyx_f_4lxml_5etree_funicode(__pyx_v_self->__pyx_base.__pyx_base._c_node->name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1796, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree_funicode(__pyx_v_self->__pyx_base.__pyx_base._c_node->name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1796, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1797, __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;
@@ -68114,14 +68196,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_4text___get__(struct __pyx_obj_4
   __pyx_t_3 += 1;
   __Pyx_GIVEREF(__pyx_kp_u__30);
   PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__30);
-  __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1796, __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(0, 1797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_6;
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1792
+  /* "lxml/etree.pyx":1793
  * 
  *     @property
  *     def text(self):             # <<<<<<<<<<<<<<
@@ -68142,7 +68224,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity_4text___get__(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1798
+/* "lxml/etree.pyx":1799
  *         return f'&{funicode(self._c_node.name)};'
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -68173,7 +68255,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity___repr__(struct __pyx_obj_4lxml_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "lxml/etree.pyx":1799
+  /* "lxml/etree.pyx":1800
  * 
  *     def __repr__(self):
  *         return "&%s;" % strrepr(self.name)             # <<<<<<<<<<<<<<
@@ -68181,19 +68263,19 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity___repr__(struct __pyx_obj_4lxml_
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1799, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_strrepr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1799, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_strrepr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_s_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1799, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_s_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1800, __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/etree.pyx":1798
+  /* "lxml/etree.pyx":1799
  *         return f'&{funicode(self._c_node.name)};'
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -68213,7 +68295,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Entity___repr__(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1826
+/* "lxml/etree.pyx":1827
  *     cdef readonly unicode localname
  *     cdef readonly unicode namespace
  *     def __init__(self, text_or_uri_or_element, tag=None):             # <<<<<<<<<<<<<<
@@ -68260,7 +68342,7 @@ static int __pyx_pw_4lxml_5etree_5QName_1__init__(PyObject *__pyx_v_self, PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1826, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1827, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -68276,7 +68358,7 @@ static int __pyx_pw_4lxml_5etree_5QName_1__init__(PyObject *__pyx_v_self, PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1826, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1827, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.QName.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -68309,7 +68391,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
   __Pyx_INCREF(__pyx_v_text_or_uri_or_element);
   __Pyx_INCREF(__pyx_v_tag);
 
-  /* "lxml/etree.pyx":1827
+  /* "lxml/etree.pyx":1828
  *     cdef readonly unicode namespace
  *     def __init__(self, text_or_uri_or_element, tag=None):
  *         if text_or_uri_or_element is None:             # <<<<<<<<<<<<<<
@@ -68320,7 +68402,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1829
+    /* "lxml/etree.pyx":1830
  *         if text_or_uri_or_element is None:
  *             # Allow None as no namespace.
  *             text_or_uri_or_element, tag = tag, None             # <<<<<<<<<<<<<<
@@ -68336,7 +68418,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __Pyx_DECREF_SET(__pyx_v_tag, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1827
+    /* "lxml/etree.pyx":1828
  *     cdef readonly unicode namespace
  *     def __init__(self, text_or_uri_or_element, tag=None):
  *         if text_or_uri_or_element is None:             # <<<<<<<<<<<<<<
@@ -68345,7 +68427,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
  */
   }
 
-  /* "lxml/etree.pyx":1830
+  /* "lxml/etree.pyx":1831
  *             # Allow None as no namespace.
  *             text_or_uri_or_element, tag = tag, None
  *         if not _isString(text_or_uri_or_element):             # <<<<<<<<<<<<<<
@@ -68355,7 +68437,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
   __pyx_t_2 = ((!(_isString(__pyx_v_text_or_uri_or_element) != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1831
+    /* "lxml/etree.pyx":1832
  *             text_or_uri_or_element, tag = tag, None
  *         if not _isString(text_or_uri_or_element):
  *             if isinstance(text_or_uri_or_element, _Element):             # <<<<<<<<<<<<<<
@@ -68366,19 +68448,19 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":1832
+      /* "lxml/etree.pyx":1833
  *         if not _isString(text_or_uri_or_element):
  *             if isinstance(text_or_uri_or_element, _Element):
  *                 text_or_uri_or_element = (<_Element>text_or_uri_or_element).tag             # <<<<<<<<<<<<<<
  *                 if not _isString(text_or_uri_or_element):
  *                     raise ValueError, f"Invalid input tag of type {type(text_or_uri_or_element)!r}"
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_text_or_uri_or_element, __pyx_n_s_tag); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1832, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_text_or_uri_or_element, __pyx_n_s_tag); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1833, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_text_or_uri_or_element, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/etree.pyx":1833
+      /* "lxml/etree.pyx":1834
  *             if isinstance(text_or_uri_or_element, _Element):
  *                 text_or_uri_or_element = (<_Element>text_or_uri_or_element).tag
  *                 if not _isString(text_or_uri_or_element):             # <<<<<<<<<<<<<<
@@ -68388,23 +68470,23 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
       __pyx_t_1 = ((!(_isString(__pyx_v_text_or_uri_or_element) != 0)) != 0);
       if (unlikely(__pyx_t_1)) {
 
-        /* "lxml/etree.pyx":1834
+        /* "lxml/etree.pyx":1835
  *                 text_or_uri_or_element = (<_Element>text_or_uri_or_element).tag
  *                 if not _isString(text_or_uri_or_element):
  *                     raise ValueError, f"Invalid input tag of type {type(text_or_uri_or_element)!r}"             # <<<<<<<<<<<<<<
  *             elif isinstance(text_or_uri_or_element, QName):
  *                 text_or_uri_or_element = (<QName>text_or_uri_or_element).text
  */
-        __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(((PyObject *)Py_TYPE(__pyx_v_text_or_uri_or_element))), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1834, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(((PyObject *)Py_TYPE(__pyx_v_text_or_uri_or_element))), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1835, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_input_tag_of_type, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1834, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_input_tag_of_type, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1835, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_3, 0, 0);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __PYX_ERR(0, 1834, __pyx_L1_error)
+        __PYX_ERR(0, 1835, __pyx_L1_error)
 
-        /* "lxml/etree.pyx":1833
+        /* "lxml/etree.pyx":1834
  *             if isinstance(text_or_uri_or_element, _Element):
  *                 text_or_uri_or_element = (<_Element>text_or_uri_or_element).tag
  *                 if not _isString(text_or_uri_or_element):             # <<<<<<<<<<<<<<
@@ -68413,7 +68495,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
  */
       }
 
-      /* "lxml/etree.pyx":1831
+      /* "lxml/etree.pyx":1832
  *             text_or_uri_or_element, tag = tag, None
  *         if not _isString(text_or_uri_or_element):
  *             if isinstance(text_or_uri_or_element, _Element):             # <<<<<<<<<<<<<<
@@ -68423,7 +68505,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
       goto __pyx_L5;
     }
 
-    /* "lxml/etree.pyx":1835
+    /* "lxml/etree.pyx":1836
  *                 if not _isString(text_or_uri_or_element):
  *                     raise ValueError, f"Invalid input tag of type {type(text_or_uri_or_element)!r}"
  *             elif isinstance(text_or_uri_or_element, QName):             # <<<<<<<<<<<<<<
@@ -68434,7 +68516,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":1836
+      /* "lxml/etree.pyx":1837
  *                     raise ValueError, f"Invalid input tag of type {type(text_or_uri_or_element)!r}"
  *             elif isinstance(text_or_uri_or_element, QName):
  *                 text_or_uri_or_element = (<QName>text_or_uri_or_element).text             # <<<<<<<<<<<<<<
@@ -68446,7 +68528,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
       __Pyx_DECREF_SET(__pyx_v_text_or_uri_or_element, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/etree.pyx":1835
+      /* "lxml/etree.pyx":1836
  *                 if not _isString(text_or_uri_or_element):
  *                     raise ValueError, f"Invalid input tag of type {type(text_or_uri_or_element)!r}"
  *             elif isinstance(text_or_uri_or_element, QName):             # <<<<<<<<<<<<<<
@@ -68456,7 +68538,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
       goto __pyx_L5;
     }
 
-    /* "lxml/etree.pyx":1837
+    /* "lxml/etree.pyx":1838
  *             elif isinstance(text_or_uri_or_element, QName):
  *                 text_or_uri_or_element = (<QName>text_or_uri_or_element).text
  *             elif text_or_uri_or_element is not None:             # <<<<<<<<<<<<<<
@@ -68467,19 +68549,19 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (likely(__pyx_t_1)) {
 
-      /* "lxml/etree.pyx":1838
+      /* "lxml/etree.pyx":1839
  *                 text_or_uri_or_element = (<QName>text_or_uri_or_element).text
  *             elif text_or_uri_or_element is not None:
  *                 text_or_uri_or_element = unicode(text_or_uri_or_element)             # <<<<<<<<<<<<<<
  *             else:
  *                 raise ValueError, f"Invalid input tag of type {type(text_or_uri_or_element)!r}"
  */
-      __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_v_text_or_uri_or_element); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1838, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_v_text_or_uri_or_element); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1839, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_text_or_uri_or_element, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/etree.pyx":1837
+      /* "lxml/etree.pyx":1838
  *             elif isinstance(text_or_uri_or_element, QName):
  *                 text_or_uri_or_element = (<QName>text_or_uri_or_element).text
  *             elif text_or_uri_or_element is not None:             # <<<<<<<<<<<<<<
@@ -68489,7 +68571,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
       goto __pyx_L5;
     }
 
-    /* "lxml/etree.pyx":1840
+    /* "lxml/etree.pyx":1841
  *                 text_or_uri_or_element = unicode(text_or_uri_or_element)
  *             else:
  *                 raise ValueError, f"Invalid input tag of type {type(text_or_uri_or_element)!r}"             # <<<<<<<<<<<<<<
@@ -68497,18 +68579,18 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
  *         ns_utf, tag_utf = _getNsTag(text_or_uri_or_element)
  */
     /*else*/ {
-      __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(((PyObject *)Py_TYPE(__pyx_v_text_or_uri_or_element))), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1840, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(((PyObject *)Py_TYPE(__pyx_v_text_or_uri_or_element))), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1841, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_input_tag_of_type, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1840, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_input_tag_of_type, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1841, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_4, 0, 0);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __PYX_ERR(0, 1840, __pyx_L1_error)
+      __PYX_ERR(0, 1841, __pyx_L1_error)
     }
     __pyx_L5:;
 
-    /* "lxml/etree.pyx":1830
+    /* "lxml/etree.pyx":1831
  *             # Allow None as no namespace.
  *             text_or_uri_or_element, tag = tag, None
  *         if not _isString(text_or_uri_or_element):             # <<<<<<<<<<<<<<
@@ -68517,14 +68599,14 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
  */
   }
 
-  /* "lxml/etree.pyx":1842
+  /* "lxml/etree.pyx":1843
  *                 raise ValueError, f"Invalid input tag of type {type(text_or_uri_or_element)!r}"
  * 
  *         ns_utf, tag_utf = _getNsTag(text_or_uri_or_element)             # <<<<<<<<<<<<<<
  *         if tag is not None:
  *             # either ('ns', 'tag') or ('{ns}oldtag', 'newtag')
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_text_or_uri_or_element); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1842, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_text_or_uri_or_element); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1843, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   if (likely(__pyx_t_4 != Py_None)) {
     PyObject* sequence = __pyx_t_4;
@@ -68532,7 +68614,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 1842, __pyx_L1_error)
+      __PYX_ERR(0, 1843, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
@@ -68540,21 +68622,21 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_5);
     #else
-    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1842, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1843, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1842, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1843, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     #endif
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 1842, __pyx_L1_error)
+    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 1843, __pyx_L1_error)
   }
   __pyx_v_ns_utf = __pyx_t_3;
   __pyx_t_3 = 0;
   __pyx_v_tag_utf = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "lxml/etree.pyx":1843
+  /* "lxml/etree.pyx":1844
  * 
  *         ns_utf, tag_utf = _getNsTag(text_or_uri_or_element)
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -68565,7 +68647,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1845
+    /* "lxml/etree.pyx":1846
  *         if tag is not None:
  *             # either ('ns', 'tag') or ('{ns}oldtag', 'newtag')
  *             if ns_utf is None:             # <<<<<<<<<<<<<<
@@ -68576,7 +68658,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":1846
+      /* "lxml/etree.pyx":1847
  *             # either ('ns', 'tag') or ('{ns}oldtag', 'newtag')
  *             if ns_utf is None:
  *                 ns_utf = tag_utf # case 1: namespace ended up as tag name             # <<<<<<<<<<<<<<
@@ -68586,7 +68668,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
       __Pyx_INCREF(__pyx_v_tag_utf);
       __Pyx_DECREF_SET(__pyx_v_ns_utf, __pyx_v_tag_utf);
 
-      /* "lxml/etree.pyx":1845
+      /* "lxml/etree.pyx":1846
  *         if tag is not None:
  *             # either ('ns', 'tag') or ('{ns}oldtag', 'newtag')
  *             if ns_utf is None:             # <<<<<<<<<<<<<<
@@ -68595,19 +68677,19 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
  */
     }
 
-    /* "lxml/etree.pyx":1847
+    /* "lxml/etree.pyx":1848
  *             if ns_utf is None:
  *                 ns_utf = tag_utf # case 1: namespace ended up as tag name
  *             tag_utf = _utf8(tag)             # <<<<<<<<<<<<<<
  *         _tagValidOrRaise(tag_utf)
  *         self.localname = (<bytes>tag_utf).decode('utf8')
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_tag); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1847, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_tag); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1848, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_tag_utf, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1843
+    /* "lxml/etree.pyx":1844
  * 
  *         ns_utf, tag_utf = _getNsTag(text_or_uri_or_element)
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -68616,16 +68698,16 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
  */
   }
 
-  /* "lxml/etree.pyx":1848
+  /* "lxml/etree.pyx":1849
  *                 ns_utf = tag_utf # case 1: namespace ended up as tag name
  *             tag_utf = _utf8(tag)
  *         _tagValidOrRaise(tag_utf)             # <<<<<<<<<<<<<<
  *         self.localname = (<bytes>tag_utf).decode('utf8')
  *         if ns_utf is None:
  */
-  __pyx_t_6 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_tag_utf); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1848, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_tag_utf); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1849, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1849
+  /* "lxml/etree.pyx":1850
  *             tag_utf = _utf8(tag)
  *         _tagValidOrRaise(tag_utf)
  *         self.localname = (<bytes>tag_utf).decode('utf8')             # <<<<<<<<<<<<<<
@@ -68634,9 +68716,9 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
  */
   if (unlikely(__pyx_v_tag_utf == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
-    __PYX_ERR(0, 1849, __pyx_L1_error)
+    __PYX_ERR(0, 1850, __pyx_L1_error)
   }
-  __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_v_tag_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1849, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_v_tag_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1850, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __Pyx_GOTREF(__pyx_v_self->localname);
@@ -68644,7 +68726,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
   __pyx_v_self->localname = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":1850
+  /* "lxml/etree.pyx":1851
  *         _tagValidOrRaise(tag_utf)
  *         self.localname = (<bytes>tag_utf).decode('utf8')
  *         if ns_utf is None:             # <<<<<<<<<<<<<<
@@ -68655,7 +68737,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1851
+    /* "lxml/etree.pyx":1852
  *         self.localname = (<bytes>tag_utf).decode('utf8')
  *         if ns_utf is None:
  *             self.namespace = None             # <<<<<<<<<<<<<<
@@ -68668,7 +68750,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __Pyx_DECREF(__pyx_v_self->namespace);
     __pyx_v_self->namespace = ((PyObject*)Py_None);
 
-    /* "lxml/etree.pyx":1852
+    /* "lxml/etree.pyx":1853
  *         if ns_utf is None:
  *             self.namespace = None
  *             self.text = self.localname             # <<<<<<<<<<<<<<
@@ -68683,7 +68765,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __pyx_v_self->text = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1850
+    /* "lxml/etree.pyx":1851
  *         _tagValidOrRaise(tag_utf)
  *         self.localname = (<bytes>tag_utf).decode('utf8')
  *         if ns_utf is None:             # <<<<<<<<<<<<<<
@@ -68693,7 +68775,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     goto __pyx_L9;
   }
 
-  /* "lxml/etree.pyx":1854
+  /* "lxml/etree.pyx":1855
  *             self.text = self.localname
  *         else:
  *             self.namespace = (<bytes>ns_utf).decode('utf8')             # <<<<<<<<<<<<<<
@@ -68703,9 +68785,9 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
   /*else*/ {
     if (unlikely(__pyx_v_ns_utf == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
-      __PYX_ERR(0, 1854, __pyx_L1_error)
+      __PYX_ERR(0, 1855, __pyx_L1_error)
     }
-    __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_v_ns_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1854, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_v_ns_utf), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1855, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     __Pyx_GOTREF(__pyx_v_self->namespace);
@@ -68713,14 +68795,14 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __pyx_v_self->namespace = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1855
+    /* "lxml/etree.pyx":1856
  *         else:
  *             self.namespace = (<bytes>ns_utf).decode('utf8')
  *             self.text = u"{%s}%s" % (self.namespace, self.localname)             # <<<<<<<<<<<<<<
  *     def __str__(self):
  *         return self.text
  */
-    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1855, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1856, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_7 = 0;
     __pyx_t_8 = 127;
@@ -68728,7 +68810,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __pyx_t_7 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__31);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u__31);
-    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_self->namespace); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1855, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_self->namespace); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1856, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_8;
     __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
@@ -68739,14 +68821,14 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
     __pyx_t_7 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__32);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__32);
-    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_self->localname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1855, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_self->localname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1856, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_8;
     __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1855, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1856, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GIVEREF(__pyx_t_5);
@@ -68757,7 +68839,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
   }
   __pyx_L9:;
 
-  /* "lxml/etree.pyx":1826
+  /* "lxml/etree.pyx":1827
  *     cdef readonly unicode localname
  *     cdef readonly unicode namespace
  *     def __init__(self, text_or_uri_or_element, tag=None):             # <<<<<<<<<<<<<<
@@ -68783,7 +68865,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1856
+/* "lxml/etree.pyx":1857
  *             self.namespace = (<bytes>ns_utf).decode('utf8')
  *             self.text = u"{%s}%s" % (self.namespace, self.localname)
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -68809,7 +68891,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_2__str__(struct __pyx_obj_4lxml_5e
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__str__", 0);
 
-  /* "lxml/etree.pyx":1857
+  /* "lxml/etree.pyx":1858
  *             self.text = u"{%s}%s" % (self.namespace, self.localname)
  *     def __str__(self):
  *         return self.text             # <<<<<<<<<<<<<<
@@ -68821,7 +68903,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_2__str__(struct __pyx_obj_4lxml_5e
   __pyx_r = __pyx_v_self->text;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1856
+  /* "lxml/etree.pyx":1857
  *             self.namespace = (<bytes>ns_utf).decode('utf8')
  *             self.text = u"{%s}%s" % (self.namespace, self.localname)
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -68836,7 +68918,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_2__str__(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1858
+/* "lxml/etree.pyx":1859
  *     def __str__(self):
  *         return self.text
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -68867,7 +68949,7 @@ static Py_hash_t __pyx_pf_4lxml_5etree_5QName_4__hash__(struct __pyx_obj_4lxml_5
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__hash__", 0);
 
-  /* "lxml/etree.pyx":1859
+  /* "lxml/etree.pyx":1860
  *         return self.text
  *     def __hash__(self):
  *         return hash(self.text)             # <<<<<<<<<<<<<<
@@ -68876,12 +68958,12 @@ static Py_hash_t __pyx_pf_4lxml_5etree_5QName_4__hash__(struct __pyx_obj_4lxml_5
  */
   __pyx_t_1 = __pyx_v_self->text;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(0, 1859, __pyx_L1_error)
+  __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(0, 1860, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1858
+  /* "lxml/etree.pyx":1859
  *     def __str__(self):
  *         return self.text
  *     def __hash__(self):             # <<<<<<<<<<<<<<
@@ -68900,7 +68982,7 @@ static Py_hash_t __pyx_pf_4lxml_5etree_5QName_4__hash__(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1860
+/* "lxml/etree.pyx":1861
  *     def __hash__(self):
  *         return hash(self.text)
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
@@ -68939,7 +69021,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
   __Pyx_RefNannySetupContext("__richcmp__", 0);
   __Pyx_INCREF(__pyx_v_other);
 
-  /* "lxml/etree.pyx":1861
+  /* "lxml/etree.pyx":1862
  *         return hash(self.text)
  *     def __richcmp__(self, other, int op):
  *         try:             # <<<<<<<<<<<<<<
@@ -68955,7 +69037,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "lxml/etree.pyx":1862
+      /* "lxml/etree.pyx":1863
  *     def __richcmp__(self, other, int op):
  *         try:
  *             if type(other) is QName:             # <<<<<<<<<<<<<<
@@ -68966,7 +69048,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
       __pyx_t_5 = (__pyx_t_4 != 0);
       if (__pyx_t_5) {
 
-        /* "lxml/etree.pyx":1863
+        /* "lxml/etree.pyx":1864
  *         try:
  *             if type(other) is QName:
  *                 other = (<QName>other).text             # <<<<<<<<<<<<<<
@@ -68978,7 +69060,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
         __Pyx_DECREF_SET(__pyx_v_other, __pyx_t_6);
         __pyx_t_6 = 0;
 
-        /* "lxml/etree.pyx":1862
+        /* "lxml/etree.pyx":1863
  *     def __richcmp__(self, other, int op):
  *         try:
  *             if type(other) is QName:             # <<<<<<<<<<<<<<
@@ -68988,7 +69070,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
         goto __pyx_L9;
       }
 
-      /* "lxml/etree.pyx":1864
+      /* "lxml/etree.pyx":1865
  *             if type(other) is QName:
  *                 other = (<QName>other).text
  *             elif not isinstance(other, unicode):             # <<<<<<<<<<<<<<
@@ -68999,19 +69081,19 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
       __pyx_t_4 = ((!(__pyx_t_5 != 0)) != 0);
       if (__pyx_t_4) {
 
-        /* "lxml/etree.pyx":1865
+        /* "lxml/etree.pyx":1866
  *                 other = (<QName>other).text
  *             elif not isinstance(other, unicode):
  *                 other = unicode(other)             # <<<<<<<<<<<<<<
  *         except (ValueError, UnicodeDecodeError):
  *             return NotImplemented
  */
-        __pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_v_other); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1865, __pyx_L3_error)
+        __pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_v_other); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1866, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF_SET(__pyx_v_other, __pyx_t_6);
         __pyx_t_6 = 0;
 
-        /* "lxml/etree.pyx":1864
+        /* "lxml/etree.pyx":1865
  *             if type(other) is QName:
  *                 other = (<QName>other).text
  *             elif not isinstance(other, unicode):             # <<<<<<<<<<<<<<
@@ -69021,7 +69103,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
       }
       __pyx_L9:;
 
-      /* "lxml/etree.pyx":1861
+      /* "lxml/etree.pyx":1862
  *         return hash(self.text)
  *     def __richcmp__(self, other, int op):
  *         try:             # <<<<<<<<<<<<<<
@@ -69036,7 +69118,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
     __pyx_L3_error:;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "lxml/etree.pyx":1866
+    /* "lxml/etree.pyx":1867
  *             elif not isinstance(other, unicode):
  *                 other = unicode(other)
  *         except (ValueError, UnicodeDecodeError):             # <<<<<<<<<<<<<<
@@ -69046,12 +69128,12 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
     __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_UnicodeDecodeError);
     if (__pyx_t_7) {
       __Pyx_AddTraceback("lxml.etree.QName.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(0, 1866, __pyx_L5_except_error)
+      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(0, 1867, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "lxml/etree.pyx":1867
+      /* "lxml/etree.pyx":1868
  *                 other = unicode(other)
  *         except (ValueError, UnicodeDecodeError):
  *             return NotImplemented             # <<<<<<<<<<<<<<
@@ -69069,7 +69151,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
 
-    /* "lxml/etree.pyx":1861
+    /* "lxml/etree.pyx":1862
  *         return hash(self.text)
  *     def __richcmp__(self, other, int op):
  *         try:             # <<<<<<<<<<<<<<
@@ -69090,7 +69172,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
     __pyx_L8_try_end:;
   }
 
-  /* "lxml/etree.pyx":1868
+  /* "lxml/etree.pyx":1869
  *         except (ValueError, UnicodeDecodeError):
  *             return NotImplemented
  *         return python.PyObject_RichCompare(self.text, other, op)             # <<<<<<<<<<<<<<
@@ -69100,14 +69182,14 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_9 = __pyx_v_self->text;
   __Pyx_INCREF(__pyx_t_9);
-  __pyx_t_8 = PyObject_RichCompare(__pyx_t_9, __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1868, __pyx_L1_error)
+  __pyx_t_8 = PyObject_RichCompare(__pyx_t_9, __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1869, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __pyx_r = __pyx_t_8;
   __pyx_t_8 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1860
+  /* "lxml/etree.pyx":1861
  *     def __hash__(self):
  *         return hash(self.text)
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
@@ -69129,7 +69211,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1823
+/* "lxml/etree.pyx":1824
  *     their text content.
  *     """
  *     cdef readonly unicode text             # <<<<<<<<<<<<<<
@@ -69166,7 +69248,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_4text___get__(struct __pyx_obj_4lx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1824
+/* "lxml/etree.pyx":1825
  *     """
  *     cdef readonly unicode text
  *     cdef readonly unicode localname             # <<<<<<<<<<<<<<
@@ -69203,7 +69285,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_9localname___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1825
+/* "lxml/etree.pyx":1826
  *     cdef readonly unicode text
  *     cdef readonly unicode localname
  *     cdef readonly unicode namespace             # <<<<<<<<<<<<<<
@@ -69240,7 +69322,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_9namespace___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1881
+/* "lxml/etree.pyx":1882
  * 
  *     @cython.final
  *     cdef int _assertHasRoot(self) except -1:             # <<<<<<<<<<<<<<
@@ -69257,7 +69339,7 @@ static int __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(struct LxmlElement
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_assertHasRoot", 0);
 
-  /* "lxml/etree.pyx":1887
+  /* "lxml/etree.pyx":1888
  *         the caller program.
  *         """
  *         assert self._context_node is not None, \             # <<<<<<<<<<<<<<
@@ -69265,16 +69347,16 @@ static int __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(struct LxmlElement
  *         return 0
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_1 = (((PyObject *)__pyx_v_self->_context_node) != Py_None);
     if (unlikely(!(__pyx_t_1 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_ElementTree_not_initialized_miss);
-      __PYX_ERR(0, 1887, __pyx_L1_error)
+      __PYX_ERR(0, 1888, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "lxml/etree.pyx":1889
+  /* "lxml/etree.pyx":1890
  *         assert self._context_node is not None, \
  *                u"ElementTree not initialized, missing root"
  *         return 0             # <<<<<<<<<<<<<<
@@ -69284,7 +69366,7 @@ static int __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(struct LxmlElement
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1881
+  /* "lxml/etree.pyx":1882
  * 
  *     @cython.final
  *     cdef int _assertHasRoot(self) except -1:             # <<<<<<<<<<<<<<
@@ -69301,7 +69383,7 @@ static int __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(struct LxmlElement
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1891
+/* "lxml/etree.pyx":1892
  *         return 0
  * 
  *     def parse(self, source, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -69357,7 +69439,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_1parse(PyObject *__pyx_v_s
         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, 1891, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "parse") < 0)) __PYX_ERR(0, 1892, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -69374,13 +69456,13 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_1parse(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("parse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1891, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("parse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1892, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ElementTree.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 1891, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 1892, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_12_ElementTree_parse(((struct LxmlElementTree *)__pyx_v_self), __pyx_v_source, __pyx_v_parser, __pyx_v_base_url);
 
   /* function exit code */
@@ -69411,7 +69493,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("parse", 0);
 
-  /* "lxml/etree.pyx":1896
+  /* "lxml/etree.pyx":1897
  *         Updates self with the content of source and returns its root.
  *         """
  *         cdef _Document doc = None             # <<<<<<<<<<<<<<
@@ -69421,7 +69503,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
   __Pyx_INCREF(Py_None);
   __pyx_v_doc = ((struct LxmlDocument *)Py_None);
 
-  /* "lxml/etree.pyx":1897
+  /* "lxml/etree.pyx":1898
  *         """
  *         cdef _Document doc = None
  *         try:             # <<<<<<<<<<<<<<
@@ -69437,19 +69519,19 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "lxml/etree.pyx":1898
+      /* "lxml/etree.pyx":1899
  *         cdef _Document doc = None
  *         try:
  *             doc = _parseDocument(source, parser, base_url)             # <<<<<<<<<<<<<<
  *         except _TargetParserResult as result_container:
  *             # raises a TypeError if we don't get an _Element
  */
-      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocument(__pyx_v_source, __pyx_v_parser, __pyx_v_base_url)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1898, __pyx_L3_error)
+      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocument(__pyx_v_source, __pyx_v_parser, __pyx_v_base_url)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1899, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_doc, ((struct LxmlDocument *)__pyx_t_4));
       __pyx_t_4 = 0;
 
-      /* "lxml/etree.pyx":1897
+      /* "lxml/etree.pyx":1898
  *         """
  *         cdef _Document doc = None
  *         try:             # <<<<<<<<<<<<<<
@@ -69458,7 +69540,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
  */
     }
 
-    /* "lxml/etree.pyx":1903
+    /* "lxml/etree.pyx":1904
  *             self._context_node = result_container.result
  *         else:
  *             self._context_node = doc.getroot()             # <<<<<<<<<<<<<<
@@ -69466,9 +69548,9 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
  *         return self._context_node
  */
     /*else:*/ {
-      __pyx_t_4 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1903, __pyx_L5_except_error)
+      __pyx_t_4 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1904, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_4);
-      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 1903, __pyx_L5_except_error)
+      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 1904, __pyx_L5_except_error)
       __Pyx_GIVEREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_v_self->_context_node);
       __Pyx_DECREF(((PyObject *)__pyx_v_self->_context_node));
@@ -69482,7 +69564,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
     __pyx_L3_error:;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1899
+    /* "lxml/etree.pyx":1900
  *         try:
  *             doc = _parseDocument(source, parser, base_url)
  *         except _TargetParserResult as result_container:             # <<<<<<<<<<<<<<
@@ -69490,7 +69572,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
  *             self._context_node = result_container.result
  */
     __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
-    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1899, __pyx_L5_except_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1900, __pyx_L5_except_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_t_7);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -69498,23 +69580,23 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
     __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
     if (__pyx_t_8) {
       __Pyx_AddTraceback("lxml.etree._ElementTree.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 1899, __pyx_L5_except_error)
+      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 1900, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_5);
       __pyx_v_result_container = __pyx_t_5;
 
-      /* "lxml/etree.pyx":1901
+      /* "lxml/etree.pyx":1902
  *         except _TargetParserResult as result_container:
  *             # raises a TypeError if we don't get an _Element
  *             self._context_node = result_container.result             # <<<<<<<<<<<<<<
  *         else:
  *             self._context_node = doc.getroot()
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1901, __pyx_L5_except_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1902, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_7);
-      if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 1901, __pyx_L5_except_error)
+      if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 1902, __pyx_L5_except_error)
       __Pyx_GIVEREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_v_self->_context_node);
       __Pyx_DECREF(((PyObject *)__pyx_v_self->_context_node));
@@ -69528,7 +69610,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
 
-    /* "lxml/etree.pyx":1897
+    /* "lxml/etree.pyx":1898
  *         """
  *         cdef _Document doc = None
  *         try:             # <<<<<<<<<<<<<<
@@ -69548,7 +69630,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
     __pyx_L8_try_end:;
   }
 
-  /* "lxml/etree.pyx":1904
+  /* "lxml/etree.pyx":1905
  *         else:
  *             self._context_node = doc.getroot()
  *         self._doc = None if self._context_node is not None else doc             # <<<<<<<<<<<<<<
@@ -69569,7 +69651,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
   __pyx_v_self->_doc = ((struct LxmlDocument *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":1905
+  /* "lxml/etree.pyx":1906
  *             self._context_node = doc.getroot()
  *         self._doc = None if self._context_node is not None else doc
  *         return self._context_node             # <<<<<<<<<<<<<<
@@ -69581,7 +69663,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
   __pyx_r = ((PyObject *)__pyx_v_self->_context_node);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1891
+  /* "lxml/etree.pyx":1892
  *         return 0
  * 
  *     def parse(self, source, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -69605,7 +69687,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_parse(struct LxmlElementTr
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1907
+/* "lxml/etree.pyx":1908
  *         return self._context_node
  * 
  *     def _setroot(self, _Element root not None):             # <<<<<<<<<<<<<<
@@ -69624,7 +69706,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_3_setroot(PyObject *__pyx_
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_setroot (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_root), __pyx_ptype_4lxml_5etree__Element, 0, "root", 0))) __PYX_ERR(0, 1907, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_root), __pyx_ptype_4lxml_5etree__Element, 0, "root", 0))) __PYX_ERR(0, 1908, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_12_ElementTree_2_setroot(((struct LxmlElementTree *)__pyx_v_self), ((struct LxmlElement *)__pyx_v_root));
 
   /* function exit code */
@@ -69646,16 +69728,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_2_setroot(struct LxmlEleme
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_setroot", 0);
 
-  /* "lxml/etree.pyx":1912
+  /* "lxml/etree.pyx":1913
  *         Relocate the ElementTree to a new root node.
  *         """
  *         _assertValidNode(root)             # <<<<<<<<<<<<<<
  *         if root._c_node.type != tree.XML_ELEMENT_NODE:
  *             raise TypeError, u"Only elements can be the root of an ElementTree"
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_root); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1912, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_root); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1913, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1913
+  /* "lxml/etree.pyx":1914
  *         """
  *         _assertValidNode(root)
  *         if root._c_node.type != tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -69665,7 +69747,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_2_setroot(struct LxmlEleme
   __pyx_t_2 = ((__pyx_v_root->_c_node->type != XML_ELEMENT_NODE) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":1914
+    /* "lxml/etree.pyx":1915
  *         _assertValidNode(root)
  *         if root._c_node.type != tree.XML_ELEMENT_NODE:
  *             raise TypeError, u"Only elements can be the root of an ElementTree"             # <<<<<<<<<<<<<<
@@ -69673,9 +69755,9 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_2_setroot(struct LxmlEleme
  *         self._doc = None
  */
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_Only_elements_can_be_the_root_of, 0, 0);
-    __PYX_ERR(0, 1914, __pyx_L1_error)
+    __PYX_ERR(0, 1915, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":1913
+    /* "lxml/etree.pyx":1914
  *         """
  *         _assertValidNode(root)
  *         if root._c_node.type != tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -69684,7 +69766,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_2_setroot(struct LxmlEleme
  */
   }
 
-  /* "lxml/etree.pyx":1915
+  /* "lxml/etree.pyx":1916
  *         if root._c_node.type != tree.XML_ELEMENT_NODE:
  *             raise TypeError, u"Only elements can be the root of an ElementTree"
  *         self._context_node = root             # <<<<<<<<<<<<<<
@@ -69697,7 +69779,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_2_setroot(struct LxmlEleme
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_context_node));
   __pyx_v_self->_context_node = __pyx_v_root;
 
-  /* "lxml/etree.pyx":1916
+  /* "lxml/etree.pyx":1917
  *             raise TypeError, u"Only elements can be the root of an ElementTree"
  *         self._context_node = root
  *         self._doc = None             # <<<<<<<<<<<<<<
@@ -69710,7 +69792,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_2_setroot(struct LxmlEleme
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_doc));
   __pyx_v_self->_doc = ((struct LxmlDocument *)Py_None);
 
-  /* "lxml/etree.pyx":1907
+  /* "lxml/etree.pyx":1908
  *         return self._context_node
  * 
  *     def _setroot(self, _Element root not None):             # <<<<<<<<<<<<<<
@@ -69730,7 +69812,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_2_setroot(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1918
+/* "lxml/etree.pyx":1919
  *         self._doc = None
  * 
  *     def getroot(self):             # <<<<<<<<<<<<<<
@@ -69758,7 +69840,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_4getroot(struct LxmlElemen
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getroot", 0);
 
-  /* "lxml/etree.pyx":1923
+  /* "lxml/etree.pyx":1924
  *         Gets the root element for this tree.
  *         """
  *         return self._context_node             # <<<<<<<<<<<<<<
@@ -69770,7 +69852,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_4getroot(struct LxmlElemen
   __pyx_r = ((PyObject *)__pyx_v_self->_context_node);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1918
+  /* "lxml/etree.pyx":1919
  *         self._doc = None
  * 
  *     def getroot(self):             # <<<<<<<<<<<<<<
@@ -69785,7 +69867,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_4getroot(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1925
+/* "lxml/etree.pyx":1926
  *         return self._context_node
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
@@ -69818,7 +69900,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6__copy__(struct LxmlEleme
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__copy__", 0);
 
-  /* "lxml/etree.pyx":1926
+  /* "lxml/etree.pyx":1927
  * 
  *     def __copy__(self):
  *         return _elementTreeFactory(self._doc, self._context_node)             # <<<<<<<<<<<<<<
@@ -69830,7 +69912,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6__copy__(struct LxmlEleme
   __Pyx_INCREF(__pyx_t_1);
   __pyx_t_2 = ((PyObject *)__pyx_v_self->_context_node);
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(((struct LxmlDocument *)__pyx_t_1), ((struct LxmlElement *)__pyx_t_2))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1926, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(((struct LxmlDocument *)__pyx_t_1), ((struct LxmlElement *)__pyx_t_2))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1927, __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;
@@ -69838,7 +69920,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6__copy__(struct LxmlEleme
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1925
+  /* "lxml/etree.pyx":1926
  *         return self._context_node
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
@@ -69859,7 +69941,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6__copy__(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1928
+/* "lxml/etree.pyx":1929
  *         return _elementTreeFactory(self._doc, self._context_node)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
@@ -69898,7 +69980,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__deepcopy__", 0);
 
-  /* "lxml/etree.pyx":1932
+  /* "lxml/etree.pyx":1933
  *         cdef _Document doc
  *         cdef xmlDoc* c_doc
  *         if self._context_node is not None:             # <<<<<<<<<<<<<<
@@ -69909,14 +69991,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1933
+    /* "lxml/etree.pyx":1934
  *         cdef xmlDoc* c_doc
  *         if self._context_node is not None:
  *             root = self._context_node.__copy__()             # <<<<<<<<<<<<<<
  *             assert root is not None
  *             _assertValidNode(root)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_context_node), __pyx_n_s_copy_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1933, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_context_node), __pyx_n_s_copy_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1934, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -69930,14 +70012,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
     }
     __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(0, 1933, __pyx_L1_error)
+    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1934, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 1933, __pyx_L1_error)
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 1934, __pyx_L1_error)
     __pyx_v_root = ((struct LxmlElement *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":1934
+    /* "lxml/etree.pyx":1935
  *         if self._context_node is not None:
  *             root = self._context_node.__copy__()
  *             assert root is not None             # <<<<<<<<<<<<<<
@@ -69945,34 +70027,34 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
  *             _copyNonElementSiblings(self._context_node._c_node, root._c_node)
  */
     #ifndef CYTHON_WITHOUT_ASSERTIONS
-    if (unlikely(!Py_OptimizeFlag)) {
+    if (unlikely(__pyx_assertions_enabled())) {
       __pyx_t_2 = (((PyObject *)__pyx_v_root) != Py_None);
       if (unlikely(!(__pyx_t_2 != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        __PYX_ERR(0, 1934, __pyx_L1_error)
+        __PYX_ERR(0, 1935, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "lxml/etree.pyx":1935
+    /* "lxml/etree.pyx":1936
  *             root = self._context_node.__copy__()
  *             assert root is not None
  *             _assertValidNode(root)             # <<<<<<<<<<<<<<
  *             _copyNonElementSiblings(self._context_node._c_node, root._c_node)
  *             return _elementTreeFactory(None, root)
  */
-    __pyx_t_6 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_root); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1935, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_root); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1936, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":1936
+    /* "lxml/etree.pyx":1937
  *             assert root is not None
  *             _assertValidNode(root)
  *             _copyNonElementSiblings(self._context_node._c_node, root._c_node)             # <<<<<<<<<<<<<<
  *             return _elementTreeFactory(None, root)
  *         elif self._doc is not None:
  */
-    __pyx_t_6 = __pyx_f_4lxml_5etree__copyNonElementSiblings(__pyx_v_self->_context_node->_c_node, __pyx_v_root->_c_node); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1936, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_5etree__copyNonElementSiblings(__pyx_v_self->_context_node->_c_node, __pyx_v_root->_c_node); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1937, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":1937
+    /* "lxml/etree.pyx":1938
  *             _assertValidNode(root)
  *             _copyNonElementSiblings(self._context_node._c_node, root._c_node)
  *             return _elementTreeFactory(None, root)             # <<<<<<<<<<<<<<
@@ -69980,13 +70062,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
  *             _assertValidDoc(self._doc)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(((struct LxmlDocument *)Py_None), __pyx_v_root)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1937, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(((struct LxmlDocument *)Py_None), __pyx_v_root)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1938, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1932
+    /* "lxml/etree.pyx":1933
  *         cdef _Document doc
  *         cdef xmlDoc* c_doc
  *         if self._context_node is not None:             # <<<<<<<<<<<<<<
@@ -69995,7 +70077,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
  */
   }
 
-  /* "lxml/etree.pyx":1938
+  /* "lxml/etree.pyx":1939
  *             _copyNonElementSiblings(self._context_node._c_node, root._c_node)
  *             return _elementTreeFactory(None, root)
  *         elif self._doc is not None:             # <<<<<<<<<<<<<<
@@ -70006,7 +70088,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1939
+    /* "lxml/etree.pyx":1940
  *             return _elementTreeFactory(None, root)
  *         elif self._doc is not None:
  *             _assertValidDoc(self._doc)             # <<<<<<<<<<<<<<
@@ -70015,10 +70097,10 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
  */
     __pyx_t_3 = ((PyObject *)__pyx_v_self->_doc);
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_6 = __pyx_f_4lxml_5etree__assertValidDoc(((struct LxmlDocument *)__pyx_t_3)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1939, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_5etree__assertValidDoc(((struct LxmlDocument *)__pyx_t_3)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1940, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":1940
+    /* "lxml/etree.pyx":1941
  *         elif self._doc is not None:
  *             _assertValidDoc(self._doc)
  *             c_doc = tree.xmlCopyDoc(self._doc._c_doc, 1)             # <<<<<<<<<<<<<<
@@ -70027,7 +70109,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
  */
     __pyx_v_c_doc = xmlCopyDoc(__pyx_v_self->_doc->_c_doc, 1);
 
-    /* "lxml/etree.pyx":1941
+    /* "lxml/etree.pyx":1942
  *             _assertValidDoc(self._doc)
  *             c_doc = tree.xmlCopyDoc(self._doc._c_doc, 1)
  *             if c_doc is NULL:             # <<<<<<<<<<<<<<
@@ -70037,16 +70119,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
     __pyx_t_1 = ((__pyx_v_c_doc == NULL) != 0);
     if (unlikely(__pyx_t_1)) {
 
-      /* "lxml/etree.pyx":1942
+      /* "lxml/etree.pyx":1943
  *             c_doc = tree.xmlCopyDoc(self._doc._c_doc, 1)
  *             if c_doc is NULL:
  *                 raise MemoryError()             # <<<<<<<<<<<<<<
  *             doc = _documentFactory(c_doc, self._doc._parser)
  *             return _elementTreeFactory(doc, None)
  */
-      PyErr_NoMemory(); __PYX_ERR(0, 1942, __pyx_L1_error)
+      PyErr_NoMemory(); __PYX_ERR(0, 1943, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":1941
+      /* "lxml/etree.pyx":1942
  *             _assertValidDoc(self._doc)
  *             c_doc = tree.xmlCopyDoc(self._doc._c_doc, 1)
  *             if c_doc is NULL:             # <<<<<<<<<<<<<<
@@ -70055,7 +70137,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
  */
     }
 
-    /* "lxml/etree.pyx":1943
+    /* "lxml/etree.pyx":1944
  *             if c_doc is NULL:
  *                 raise MemoryError()
  *             doc = _documentFactory(c_doc, self._doc._parser)             # <<<<<<<<<<<<<<
@@ -70064,13 +70146,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
  */
     __pyx_t_3 = ((PyObject *)__pyx_v_self->_doc->_parser);
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1943, __pyx_L1_error)
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1944, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":1944
+    /* "lxml/etree.pyx":1945
  *                 raise MemoryError()
  *             doc = _documentFactory(c_doc, self._doc._parser)
  *             return _elementTreeFactory(doc, None)             # <<<<<<<<<<<<<<
@@ -70078,13 +70160,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
  *             # so what ...
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(__pyx_v_doc, ((struct LxmlElement *)Py_None))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1944, __pyx_L1_error)
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(__pyx_v_doc, ((struct LxmlElement *)Py_None))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1945, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1938
+    /* "lxml/etree.pyx":1939
  *             _copyNonElementSiblings(self._context_node._c_node, root._c_node)
  *             return _elementTreeFactory(None, root)
  *         elif self._doc is not None:             # <<<<<<<<<<<<<<
@@ -70093,7 +70175,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
  */
   }
 
-  /* "lxml/etree.pyx":1947
+  /* "lxml/etree.pyx":1948
  *         else:
  *             # so what ...
  *             return self             # <<<<<<<<<<<<<<
@@ -70107,7 +70189,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
     goto __pyx_L0;
   }
 
-  /* "lxml/etree.pyx":1928
+  /* "lxml/etree.pyx":1929
  *         return _elementTreeFactory(self._doc, self._context_node)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
@@ -70130,7 +70212,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1951
+/* "lxml/etree.pyx":1952
  *     # not in ElementTree
  *     @property
  *     def docinfo(self) -> DocInfo:             # <<<<<<<<<<<<<<
@@ -70161,16 +70243,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_7docinfo___get__(struct Lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1953
+  /* "lxml/etree.pyx":1954
  *     def docinfo(self) -> DocInfo:
  *         """Information about the document provided by parser and DTD."""
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         return DocInfo(self._context_node._doc)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1953, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1954, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1954
+  /* "lxml/etree.pyx":1955
  *         """Information about the document provided by parser and DTD."""
  *         self._assertHasRoot()
  *         return DocInfo(self._context_node._doc)             # <<<<<<<<<<<<<<
@@ -70178,13 +70260,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_7docinfo___get__(struct Lx
  *     # not in ElementTree, read-only
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree_DocInfo), ((PyObject *)__pyx_v_self->_context_node->_doc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1954, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree_DocInfo), ((PyObject *)__pyx_v_self->_context_node->_doc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1955, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1951
+  /* "lxml/etree.pyx":1952
  *     # not in ElementTree
  *     @property
  *     def docinfo(self) -> DocInfo:             # <<<<<<<<<<<<<<
@@ -70203,7 +70285,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_7docinfo___get__(struct Lx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1958
+/* "lxml/etree.pyx":1959
  *     # not in ElementTree, read-only
  *     @property
  *     def parser(self):             # <<<<<<<<<<<<<<
@@ -70232,7 +70314,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":1961
+  /* "lxml/etree.pyx":1962
  *         """The parser that was used to parse the document in this ElementTree.
  *         """
  *         if self._context_node is not None and \             # <<<<<<<<<<<<<<
@@ -70247,7 +70329,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
     goto __pyx_L4_bool_binop_done;
   }
 
-  /* "lxml/etree.pyx":1962
+  /* "lxml/etree.pyx":1963
  *         """
  *         if self._context_node is not None and \
  *                self._context_node._doc is not None:             # <<<<<<<<<<<<<<
@@ -70259,7 +70341,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
   __pyx_t_1 = __pyx_t_2;
   __pyx_L4_bool_binop_done:;
 
-  /* "lxml/etree.pyx":1961
+  /* "lxml/etree.pyx":1962
  *         """The parser that was used to parse the document in this ElementTree.
  *         """
  *         if self._context_node is not None and \             # <<<<<<<<<<<<<<
@@ -70268,7 +70350,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
  */
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":1963
+    /* "lxml/etree.pyx":1964
  *         if self._context_node is not None and \
  *                self._context_node._doc is not None:
  *             return self._context_node._doc._parser             # <<<<<<<<<<<<<<
@@ -70280,7 +70362,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
     __pyx_r = ((PyObject *)__pyx_v_self->_context_node->_doc->_parser);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1961
+    /* "lxml/etree.pyx":1962
  *         """The parser that was used to parse the document in this ElementTree.
  *         """
  *         if self._context_node is not None and \             # <<<<<<<<<<<<<<
@@ -70289,7 +70371,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
  */
   }
 
-  /* "lxml/etree.pyx":1964
+  /* "lxml/etree.pyx":1965
  *                self._context_node._doc is not None:
  *             return self._context_node._doc._parser
  *         if self._doc is not None:             # <<<<<<<<<<<<<<
@@ -70300,7 +70382,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":1965
+    /* "lxml/etree.pyx":1966
  *             return self._context_node._doc._parser
  *         if self._doc is not None:
  *             return self._doc._parser             # <<<<<<<<<<<<<<
@@ -70312,7 +70394,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
     __pyx_r = ((PyObject *)__pyx_v_self->_doc->_parser);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":1964
+    /* "lxml/etree.pyx":1965
  *                self._context_node._doc is not None:
  *             return self._context_node._doc._parser
  *         if self._doc is not None:             # <<<<<<<<<<<<<<
@@ -70321,7 +70403,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
  */
   }
 
-  /* "lxml/etree.pyx":1966
+  /* "lxml/etree.pyx":1967
  *         if self._doc is not None:
  *             return self._doc._parser
  *         return None             # <<<<<<<<<<<<<<
@@ -70332,7 +70414,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":1958
+  /* "lxml/etree.pyx":1959
  *     # not in ElementTree, read-only
  *     @property
  *     def parser(self):             # <<<<<<<<<<<<<<
@@ -70347,7 +70429,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_6parser___get__(struct Lxm
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":1968
+/* "lxml/etree.pyx":1969
  *         return None
  * 
  *     def write(self, file, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
@@ -70386,7 +70468,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)__pyx_n_s_xml);
 
-    /* "lxml/etree.pyx":1969
+    /* "lxml/etree.pyx":1970
  * 
  *     def write(self, file, *, encoding=None, method="xml",
  *               bint pretty_print=False, xml_declaration=None, bint with_tail=True,             # <<<<<<<<<<<<<<
@@ -70395,7 +70477,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
  */
     values[4] = ((PyObject *)Py_None);
 
-    /* "lxml/etree.pyx":1970
+    /* "lxml/etree.pyx":1971
  *     def write(self, file, *, encoding=None, method="xml",
  *               bint pretty_print=False, xml_declaration=None, bint with_tail=True,
  *               standalone=None, doctype=None, compression=0,             # <<<<<<<<<<<<<<
@@ -70406,7 +70488,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
     values[7] = ((PyObject *)Py_None);
     values[8] = ((PyObject *)__pyx_int_0);
 
-    /* "lxml/etree.pyx":1971
+    /* "lxml/etree.pyx":1972
  *               bint pretty_print=False, xml_declaration=None, bint with_tail=True,
  *               standalone=None, doctype=None, compression=0,
  *               bint exclusive=False, inclusive_ns_prefixes=None,             # <<<<<<<<<<<<<<
@@ -70415,7 +70497,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
  */
     values[10] = ((PyObject *)Py_None);
 
-    /* "lxml/etree.pyx":1973
+    /* "lxml/etree.pyx":1974
  *               bint exclusive=False, inclusive_ns_prefixes=None,
  *               bint with_comments=True, bint strip_text=False,
  *               docstring=None):             # <<<<<<<<<<<<<<
@@ -70446,7 +70528,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) __PYX_ERR(0, 1968, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) __PYX_ERR(0, 1969, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -70457,10 +70539,10 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
     __pyx_v_encoding = values[1];
     __pyx_v_method = values[2];
     if (values[3]) {
-      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1969, __pyx_L3_error)
+      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1970, __pyx_L3_error)
     } else {
 
-      /* "lxml/etree.pyx":1969
+      /* "lxml/etree.pyx":1970
  * 
  *     def write(self, file, *, encoding=None, method="xml",
  *               bint pretty_print=False, xml_declaration=None, bint with_tail=True,             # <<<<<<<<<<<<<<
@@ -70471,7 +70553,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
     }
     __pyx_v_xml_declaration = values[4];
     if (values[5]) {
-      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1969, __pyx_L3_error)
+      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1970, __pyx_L3_error)
     } else {
       __pyx_v_with_tail = ((int)1);
     }
@@ -70479,10 +70561,10 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
     __pyx_v_doctype = values[7];
     __pyx_v_compression = values[8];
     if (values[9]) {
-      __pyx_v_exclusive = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_exclusive == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1971, __pyx_L3_error)
+      __pyx_v_exclusive = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_exclusive == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1972, __pyx_L3_error)
     } else {
 
-      /* "lxml/etree.pyx":1971
+      /* "lxml/etree.pyx":1972
  *               bint pretty_print=False, xml_declaration=None, bint with_tail=True,
  *               standalone=None, doctype=None, compression=0,
  *               bint exclusive=False, inclusive_ns_prefixes=None,             # <<<<<<<<<<<<<<
@@ -70493,10 +70575,10 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
     }
     __pyx_v_inclusive_ns_prefixes = values[10];
     if (values[11]) {
-      __pyx_v_with_comments = __Pyx_PyObject_IsTrue(values[11]); if (unlikely((__pyx_v_with_comments == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1972, __pyx_L3_error)
+      __pyx_v_with_comments = __Pyx_PyObject_IsTrue(values[11]); if (unlikely((__pyx_v_with_comments == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1973, __pyx_L3_error)
     } else {
 
-      /* "lxml/etree.pyx":1972
+      /* "lxml/etree.pyx":1973
  *               standalone=None, doctype=None, compression=0,
  *               bint exclusive=False, inclusive_ns_prefixes=None,
  *               bint with_comments=True, bint strip_text=False,             # <<<<<<<<<<<<<<
@@ -70506,7 +70588,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
       __pyx_v_with_comments = ((int)1);
     }
     if (values[12]) {
-      __pyx_v_strip_text = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_strip_text == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1972, __pyx_L3_error)
+      __pyx_v_strip_text = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_strip_text == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1973, __pyx_L3_error)
     } else {
       __pyx_v_strip_text = ((int)0);
     }
@@ -70514,7 +70596,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1968, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1969, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ElementTree.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -70522,7 +70604,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_11write(PyObject *__pyx_v_
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_5etree_12_ElementTree_10write(((struct LxmlElementTree *)__pyx_v_self), __pyx_v_file, __pyx_v_encoding, __pyx_v_method, __pyx_v_pretty_print, __pyx_v_xml_declaration, __pyx_v_with_tail, __pyx_v_standalone, __pyx_v_doctype, __pyx_v_compression, __pyx_v_exclusive, __pyx_v_inclusive_ns_prefixes, __pyx_v_with_comments, __pyx_v_strip_text, __pyx_v_docstring);
 
-  /* "lxml/etree.pyx":1968
+  /* "lxml/etree.pyx":1969
  *         return None
  * 
  *     def write(self, file, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
@@ -70564,16 +70646,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   __Pyx_INCREF(__pyx_v_doctype);
   __Pyx_INCREF(__pyx_v_compression);
 
-  /* "lxml/etree.pyx":2020
+  /* "lxml/etree.pyx":2021
  *         cdef int is_standalone
  * 
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._context_node)
  *         if compression is None or compression < 0:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2020, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2021, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2021
+  /* "lxml/etree.pyx":2022
  * 
  *         self._assertHasRoot()
  *         _assertValidNode(self._context_node)             # <<<<<<<<<<<<<<
@@ -70582,10 +70664,10 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
   __pyx_t_2 = ((PyObject *)__pyx_v_self->_context_node);
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_2)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2021, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_2)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2022, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2022
+  /* "lxml/etree.pyx":2023
  *         self._assertHasRoot()
  *         _assertValidNode(self._context_node)
  *         if compression is None or compression < 0:             # <<<<<<<<<<<<<<
@@ -70599,14 +70681,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     __pyx_t_3 = __pyx_t_5;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_2 = PyObject_RichCompare(__pyx_v_compression, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2022, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2022, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_compression, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2023, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2023, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_3 = __pyx_t_5;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2023
+    /* "lxml/etree.pyx":2024
  *         _assertValidNode(self._context_node)
  *         if compression is None or compression < 0:
  *             compression = 0             # <<<<<<<<<<<<<<
@@ -70616,7 +70698,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     __Pyx_INCREF(__pyx_int_0);
     __Pyx_DECREF_SET(__pyx_v_compression, __pyx_int_0);
 
-    /* "lxml/etree.pyx":2022
+    /* "lxml/etree.pyx":2023
  *         self._assertHasRoot()
  *         _assertValidNode(self._context_node)
  *         if compression is None or compression < 0:             # <<<<<<<<<<<<<<
@@ -70625,7 +70707,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
   }
 
-  /* "lxml/etree.pyx":2026
+  /* "lxml/etree.pyx":2027
  * 
  *         # C14N serialisation
  *         if method in ('c14n', 'c14n2'):             # <<<<<<<<<<<<<<
@@ -70634,20 +70716,20 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
   __Pyx_INCREF(__pyx_v_method);
   __pyx_t_2 = __pyx_v_method;
-  __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_c14n, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2026, __pyx_L1_error)
+  __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_c14n, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2027, __pyx_L1_error)
   if (!__pyx_t_5) {
   } else {
     __pyx_t_3 = __pyx_t_5;
     goto __pyx_L7_bool_binop_done;
   }
-  __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_c14n2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2026, __pyx_L1_error)
+  __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_c14n2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2027, __pyx_L1_error)
   __pyx_t_3 = __pyx_t_5;
   __pyx_L7_bool_binop_done:;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_5 = (__pyx_t_3 != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2027
+    /* "lxml/etree.pyx":2028
  *         # C14N serialisation
  *         if method in ('c14n', 'c14n2'):
  *             if encoding is not None:             # <<<<<<<<<<<<<<
@@ -70658,20 +70740,20 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     __pyx_t_3 = (__pyx_t_5 != 0);
     if (unlikely(__pyx_t_3)) {
 
-      /* "lxml/etree.pyx":2028
+      /* "lxml/etree.pyx":2029
  *         if method in ('c14n', 'c14n2'):
  *             if encoding is not None:
  *                 raise ValueError("Cannot specify encoding with C14N")             # <<<<<<<<<<<<<<
  *             if xml_declaration:
  *                 raise ValueError("Cannot enable XML declaration in C14N")
  */
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2028, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2029, __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(0, 2028, __pyx_L1_error)
+      __PYX_ERR(0, 2029, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":2027
+      /* "lxml/etree.pyx":2028
  *         # C14N serialisation
  *         if method in ('c14n', 'c14n2'):
  *             if encoding is not None:             # <<<<<<<<<<<<<<
@@ -70680,30 +70762,30 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
     }
 
-    /* "lxml/etree.pyx":2029
+    /* "lxml/etree.pyx":2030
  *             if encoding is not None:
  *                 raise ValueError("Cannot specify encoding with C14N")
  *             if xml_declaration:             # <<<<<<<<<<<<<<
  *                 raise ValueError("Cannot enable XML declaration in C14N")
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_xml_declaration); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2029, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_xml_declaration); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2030, __pyx_L1_error)
     if (unlikely(__pyx_t_3)) {
 
-      /* "lxml/etree.pyx":2030
+      /* "lxml/etree.pyx":2031
  *                 raise ValueError("Cannot specify encoding with C14N")
  *             if xml_declaration:
  *                 raise ValueError("Cannot enable XML declaration in C14N")             # <<<<<<<<<<<<<<
  * 
  *             if method == 'c14n':
  */
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2030, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2031, __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(0, 2030, __pyx_L1_error)
+      __PYX_ERR(0, 2031, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":2029
+      /* "lxml/etree.pyx":2030
  *             if encoding is not None:
  *                 raise ValueError("Cannot specify encoding with C14N")
  *             if xml_declaration:             # <<<<<<<<<<<<<<
@@ -70712,17 +70794,17 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
     }
 
-    /* "lxml/etree.pyx":2032
+    /* "lxml/etree.pyx":2033
  *                 raise ValueError("Cannot enable XML declaration in C14N")
  * 
  *             if method == 'c14n':             # <<<<<<<<<<<<<<
  *                 _tofilelikeC14N(file, self._context_node, exclusive, with_comments,
  *                                 compression, inclusive_ns_prefixes)
  */
-    __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_c14n, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2032, __pyx_L1_error)
+    __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_c14n, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2033, __pyx_L1_error)
     if (__pyx_t_3) {
 
-      /* "lxml/etree.pyx":2033
+      /* "lxml/etree.pyx":2034
  * 
  *             if method == 'c14n':
  *                 _tofilelikeC14N(file, self._context_node, exclusive, with_comments,             # <<<<<<<<<<<<<<
@@ -70732,28 +70814,28 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
       __pyx_t_2 = ((PyObject *)__pyx_v_self->_context_node);
       __Pyx_INCREF(__pyx_t_2);
 
-      /* "lxml/etree.pyx":2034
+      /* "lxml/etree.pyx":2035
  *             if method == 'c14n':
  *                 _tofilelikeC14N(file, self._context_node, exclusive, with_comments,
  *                                 compression, inclusive_ns_prefixes)             # <<<<<<<<<<<<<<
  *             else:  # c14n2
  *                 with _open_utf8_file(file, compression=compression) as f:
  */
-      __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2034, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2035, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":2033
+      /* "lxml/etree.pyx":2034
  * 
  *             if method == 'c14n':
  *                 _tofilelikeC14N(file, self._context_node, exclusive, with_comments,             # <<<<<<<<<<<<<<
  *                                 compression, inclusive_ns_prefixes)
  *             else:  # c14n2
  */
-      __pyx_t_6 = __pyx_f_4lxml_5etree__tofilelikeC14N(__pyx_v_file, ((struct LxmlElement *)__pyx_t_2), __pyx_v_exclusive, __pyx_v_with_comments, __pyx_t_1, __pyx_v_inclusive_ns_prefixes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2033, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_4lxml_5etree__tofilelikeC14N(__pyx_v_file, ((struct LxmlElement *)__pyx_t_2), __pyx_v_exclusive, __pyx_v_with_comments, __pyx_t_1, __pyx_v_inclusive_ns_prefixes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2034, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "lxml/etree.pyx":2032
+      /* "lxml/etree.pyx":2033
  *                 raise ValueError("Cannot enable XML declaration in C14N")
  * 
  *             if method == 'c14n':             # <<<<<<<<<<<<<<
@@ -70763,7 +70845,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
       goto __pyx_L11;
     }
 
-    /* "lxml/etree.pyx":2036
+    /* "lxml/etree.pyx":2037
  *                                 compression, inclusive_ns_prefixes)
  *             else:  # c14n2
  *                 with _open_utf8_file(file, compression=compression) as f:             # <<<<<<<<<<<<<<
@@ -70772,21 +70854,21 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
     /*else*/ {
       /*with:*/ {
-        __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2036, __pyx_L1_error)
+        __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2037, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_INCREF(__pyx_v_file);
         __Pyx_GIVEREF(__pyx_v_file);
         PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_file);
-        __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2036, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2037, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_compression, __pyx_v_compression) < 0) __PYX_ERR(0, 2036, __pyx_L1_error)
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree__open_utf8_file, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2036, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_compression, __pyx_v_compression) < 0) __PYX_ERR(0, 2037, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree__open_utf8_file, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2037, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-        __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_7, __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2036, __pyx_L1_error)
+        __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_7, __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2037, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_8);
-        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_7, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2036, __pyx_L12_error)
+        __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_7, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2037, __pyx_L12_error)
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_9 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -70800,7 +70882,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
         }
         __pyx_t_2 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
         __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
-        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2036, __pyx_L12_error)
+        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2037, __pyx_L12_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_t_6 = __pyx_t_2;
@@ -70818,73 +70900,73 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
               __pyx_v_f = __pyx_t_6;
               __pyx_t_6 = 0;
 
-              /* "lxml/etree.pyx":2038
+              /* "lxml/etree.pyx":2039
  *                 with _open_utf8_file(file, compression=compression) as f:
  *                     target = C14NWriterTarget(
  *                         f.write, with_comments=with_comments, strip_text=strip_text)             # <<<<<<<<<<<<<<
  *                     _tree_to_target(self, target)
  *             return
  */
-              __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2038, __pyx_L16_error)
+              __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2039, __pyx_L16_error)
               __Pyx_GOTREF(__pyx_t_6);
 
-              /* "lxml/etree.pyx":2037
+              /* "lxml/etree.pyx":2038
  *             else:  # c14n2
  *                 with _open_utf8_file(file, compression=compression) as f:
  *                     target = C14NWriterTarget(             # <<<<<<<<<<<<<<
  *                         f.write, with_comments=with_comments, strip_text=strip_text)
  *                     _tree_to_target(self, target)
  */
-              __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2037, __pyx_L16_error)
+              __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2038, __pyx_L16_error)
               __Pyx_GOTREF(__pyx_t_7);
               __Pyx_GIVEREF(__pyx_t_6);
               PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
               __pyx_t_6 = 0;
 
-              /* "lxml/etree.pyx":2038
+              /* "lxml/etree.pyx":2039
  *                 with _open_utf8_file(file, compression=compression) as f:
  *                     target = C14NWriterTarget(
  *                         f.write, with_comments=with_comments, strip_text=strip_text)             # <<<<<<<<<<<<<<
  *                     _tree_to_target(self, target)
  *             return
  */
-              __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2038, __pyx_L16_error)
+              __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2039, __pyx_L16_error)
               __Pyx_GOTREF(__pyx_t_6);
-              __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_with_comments); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2038, __pyx_L16_error)
+              __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_with_comments); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2039, __pyx_L16_error)
               __Pyx_GOTREF(__pyx_t_2);
-              if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_with_comments, __pyx_t_2) < 0) __PYX_ERR(0, 2038, __pyx_L16_error)
+              if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_with_comments, __pyx_t_2) < 0) __PYX_ERR(0, 2039, __pyx_L16_error)
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-              __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_strip_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2038, __pyx_L16_error)
+              __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_strip_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2039, __pyx_L16_error)
               __Pyx_GOTREF(__pyx_t_2);
-              if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_strip_text, __pyx_t_2) < 0) __PYX_ERR(0, 2038, __pyx_L16_error)
+              if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_strip_text, __pyx_t_2) < 0) __PYX_ERR(0, 2039, __pyx_L16_error)
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-              /* "lxml/etree.pyx":2037
+              /* "lxml/etree.pyx":2038
  *             else:  # c14n2
  *                 with _open_utf8_file(file, compression=compression) as f:
  *                     target = C14NWriterTarget(             # <<<<<<<<<<<<<<
  *                         f.write, with_comments=with_comments, strip_text=strip_text)
  *                     _tree_to_target(self, target)
  */
-              __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget), __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2037, __pyx_L16_error)
+              __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget), __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2038, __pyx_L16_error)
               __Pyx_GOTREF(__pyx_t_2);
               __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
               __pyx_v_target = ((struct __pyx_obj_4lxml_5etree_C14NWriterTarget *)__pyx_t_2);
               __pyx_t_2 = 0;
 
-              /* "lxml/etree.pyx":2039
+              /* "lxml/etree.pyx":2040
  *                     target = C14NWriterTarget(
  *                         f.write, with_comments=with_comments, strip_text=strip_text)
  *                     _tree_to_target(self, target)             # <<<<<<<<<<<<<<
  *             return
  * 
  */
-              __pyx_t_2 = __pyx_f_4lxml_5etree__tree_to_target(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_target)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2039, __pyx_L16_error)
+              __pyx_t_2 = __pyx_f_4lxml_5etree__tree_to_target(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_target)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2040, __pyx_L16_error)
               __Pyx_GOTREF(__pyx_t_2);
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-              /* "lxml/etree.pyx":2036
+              /* "lxml/etree.pyx":2037
  *                                 compression, inclusive_ns_prefixes)
  *             else:  # c14n2
  *                 with _open_utf8_file(file, compression=compression) as f:             # <<<<<<<<<<<<<<
@@ -70903,20 +70985,20 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
             __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
             /*except:*/ {
               __Pyx_AddTraceback("lxml.etree._ElementTree.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
-              if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 2036, __pyx_L18_except_error)
+              if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 2037, __pyx_L18_except_error)
               __Pyx_GOTREF(__pyx_t_2);
               __Pyx_GOTREF(__pyx_t_6);
               __Pyx_GOTREF(__pyx_t_7);
-              __pyx_t_9 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2036, __pyx_L18_except_error)
+              __pyx_t_9 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2037, __pyx_L18_except_error)
               __Pyx_GOTREF(__pyx_t_9);
               __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, NULL);
               __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
               __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-              if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2036, __pyx_L18_except_error)
+              if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2037, __pyx_L18_except_error)
               __Pyx_GOTREF(__pyx_t_13);
               __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_13);
               __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-              if (__pyx_t_3 < 0) __PYX_ERR(0, 2036, __pyx_L18_except_error)
+              if (__pyx_t_3 < 0) __PYX_ERR(0, 2037, __pyx_L18_except_error)
               __pyx_t_5 = ((!(__pyx_t_3 != 0)) != 0);
               if (__pyx_t_5) {
                 __Pyx_GIVEREF(__pyx_t_2);
@@ -70924,7 +71006,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
                 __Pyx_XGIVEREF(__pyx_t_7);
                 __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_6, __pyx_t_7);
                 __pyx_t_2 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; 
-                __PYX_ERR(0, 2036, __pyx_L18_except_error)
+                __PYX_ERR(0, 2037, __pyx_L18_except_error)
               }
               __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
               __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -70950,7 +71032,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
             if (__pyx_t_8) {
               __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__35, NULL);
               __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-              if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2036, __pyx_L1_error)
+              if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2037, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_12);
               __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
             }
@@ -70967,7 +71049,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     }
     __pyx_L11:;
 
-    /* "lxml/etree.pyx":2040
+    /* "lxml/etree.pyx":2041
  *                         f.write, with_comments=with_comments, strip_text=strip_text)
  *                     _tree_to_target(self, target)
  *             return             # <<<<<<<<<<<<<<
@@ -70978,7 +71060,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2026
+    /* "lxml/etree.pyx":2027
  * 
  *         # C14N serialisation
  *         if method in ('c14n', 'c14n2'):             # <<<<<<<<<<<<<<
@@ -70987,7 +71069,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
   }
 
-  /* "lxml/etree.pyx":2042
+  /* "lxml/etree.pyx":2043
  *             return
  * 
  *         if not with_comments:             # <<<<<<<<<<<<<<
@@ -70997,20 +71079,20 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   __pyx_t_5 = ((!(__pyx_v_with_comments != 0)) != 0);
   if (unlikely(__pyx_t_5)) {
 
-    /* "lxml/etree.pyx":2043
+    /* "lxml/etree.pyx":2044
  * 
  *         if not with_comments:
  *             raise ValueError("Can only discard comments in C14N serialisation")             # <<<<<<<<<<<<<<
  *         # suppress decl. in default case (purely for ElementTree compatibility)
  *         if xml_declaration is not None:
  */
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2043, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2044, __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(0, 2043, __pyx_L1_error)
+    __PYX_ERR(0, 2044, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2042
+    /* "lxml/etree.pyx":2043
  *             return
  * 
  *         if not with_comments:             # <<<<<<<<<<<<<<
@@ -71019,7 +71101,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
   }
 
-  /* "lxml/etree.pyx":2045
+  /* "lxml/etree.pyx":2046
  *             raise ValueError("Can only discard comments in C14N serialisation")
  *         # suppress decl. in default case (purely for ElementTree compatibility)
  *         if xml_declaration is not None:             # <<<<<<<<<<<<<<
@@ -71030,17 +71112,17 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   __pyx_t_3 = (__pyx_t_5 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2046
+    /* "lxml/etree.pyx":2047
  *         # suppress decl. in default case (purely for ElementTree compatibility)
  *         if xml_declaration is not None:
  *             write_declaration = xml_declaration             # <<<<<<<<<<<<<<
  *             if encoding is None:
  *                 encoding = 'ASCII'
  */
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_xml_declaration); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2046, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_xml_declaration); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2047, __pyx_L1_error)
     __pyx_v_write_declaration = __pyx_t_3;
 
-    /* "lxml/etree.pyx":2047
+    /* "lxml/etree.pyx":2048
  *         if xml_declaration is not None:
  *             write_declaration = xml_declaration
  *             if encoding is None:             # <<<<<<<<<<<<<<
@@ -71051,7 +71133,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     __pyx_t_5 = (__pyx_t_3 != 0);
     if (__pyx_t_5) {
 
-      /* "lxml/etree.pyx":2048
+      /* "lxml/etree.pyx":2049
  *             write_declaration = xml_declaration
  *             if encoding is None:
  *                 encoding = 'ASCII'             # <<<<<<<<<<<<<<
@@ -71061,7 +71143,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
       __Pyx_INCREF(__pyx_n_s_ASCII);
       __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_n_s_ASCII);
 
-      /* "lxml/etree.pyx":2047
+      /* "lxml/etree.pyx":2048
  *         if xml_declaration is not None:
  *             write_declaration = xml_declaration
  *             if encoding is None:             # <<<<<<<<<<<<<<
@@ -71071,7 +71153,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
       goto __pyx_L28;
     }
 
-    /* "lxml/etree.pyx":2050
+    /* "lxml/etree.pyx":2051
  *                 encoding = 'ASCII'
  *             else:
  *                 encoding = encoding.upper()             # <<<<<<<<<<<<<<
@@ -71079,7 +71161,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  *             encoding = 'ASCII'
  */
     /*else*/ {
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_upper); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2050, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_upper); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2051, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_2 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -71093,7 +71175,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
       }
       __pyx_t_7 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2050, __pyx_L1_error)
+      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2051, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_7);
@@ -71101,7 +71183,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     }
     __pyx_L28:;
 
-    /* "lxml/etree.pyx":2045
+    /* "lxml/etree.pyx":2046
  *             raise ValueError("Can only discard comments in C14N serialisation")
  *         # suppress decl. in default case (purely for ElementTree compatibility)
  *         if xml_declaration is not None:             # <<<<<<<<<<<<<<
@@ -71111,7 +71193,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     goto __pyx_L27;
   }
 
-  /* "lxml/etree.pyx":2051
+  /* "lxml/etree.pyx":2052
  *             else:
  *                 encoding = encoding.upper()
  *         elif encoding is None:             # <<<<<<<<<<<<<<
@@ -71122,7 +71204,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   __pyx_t_3 = (__pyx_t_5 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2052
+    /* "lxml/etree.pyx":2053
  *                 encoding = encoding.upper()
  *         elif encoding is None:
  *             encoding = 'ASCII'             # <<<<<<<<<<<<<<
@@ -71132,7 +71214,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     __Pyx_INCREF(__pyx_n_s_ASCII);
     __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_n_s_ASCII);
 
-    /* "lxml/etree.pyx":2053
+    /* "lxml/etree.pyx":2054
  *         elif encoding is None:
  *             encoding = 'ASCII'
  *             write_declaration = 0             # <<<<<<<<<<<<<<
@@ -71141,7 +71223,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
     __pyx_v_write_declaration = 0;
 
-    /* "lxml/etree.pyx":2051
+    /* "lxml/etree.pyx":2052
  *             else:
  *                 encoding = encoding.upper()
  *         elif encoding is None:             # <<<<<<<<<<<<<<
@@ -71151,7 +71233,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     goto __pyx_L27;
   }
 
-  /* "lxml/etree.pyx":2055
+  /* "lxml/etree.pyx":2056
  *             write_declaration = 0
  *         else:
  *             encoding = encoding.upper()             # <<<<<<<<<<<<<<
@@ -71159,7 +71241,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  *                 'US-ASCII', 'ASCII', 'UTF8', 'UTF-8')
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_upper); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2055, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_upper); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2056, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_2 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -71173,13 +71255,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     }
     __pyx_t_7 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2055, __pyx_L1_error)
+    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2056, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_7);
     __pyx_t_7 = 0;
 
-    /* "lxml/etree.pyx":2056
+    /* "lxml/etree.pyx":2057
  *         else:
  *             encoding = encoding.upper()
  *             write_declaration = encoding not in (             # <<<<<<<<<<<<<<
@@ -71188,25 +71270,25 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
     __Pyx_INCREF(__pyx_v_encoding);
     __pyx_t_7 = __pyx_v_encoding;
-    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_kp_s_US_ASCII, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2056, __pyx_L1_error)
+    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_kp_s_US_ASCII, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2057, __pyx_L1_error)
     if (__pyx_t_5) {
     } else {
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L29_bool_binop_done;
     }
-    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_ASCII, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2056, __pyx_L1_error)
+    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_ASCII, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2057, __pyx_L1_error)
     if (__pyx_t_5) {
     } else {
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L29_bool_binop_done;
     }
-    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_UTF8, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2056, __pyx_L1_error)
+    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_UTF8, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2057, __pyx_L1_error)
     if (__pyx_t_5) {
     } else {
       __pyx_t_3 = __pyx_t_5;
       goto __pyx_L29_bool_binop_done;
     }
-    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_kp_s_UTF_8, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2056, __pyx_L1_error)
+    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_kp_s_UTF_8, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2057, __pyx_L1_error)
     __pyx_t_3 = __pyx_t_5;
     __pyx_L29_bool_binop_done:;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -71214,7 +71296,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   }
   __pyx_L27:;
 
-  /* "lxml/etree.pyx":2058
+  /* "lxml/etree.pyx":2059
  *             write_declaration = encoding not in (
  *                 'US-ASCII', 'ASCII', 'UTF8', 'UTF-8')
  *         if standalone is None:             # <<<<<<<<<<<<<<
@@ -71225,7 +71307,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   __pyx_t_5 = (__pyx_t_3 != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2059
+    /* "lxml/etree.pyx":2060
  *                 'US-ASCII', 'ASCII', 'UTF8', 'UTF-8')
  *         if standalone is None:
  *             is_standalone = -1             # <<<<<<<<<<<<<<
@@ -71234,7 +71316,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
     __pyx_v_is_standalone = -1;
 
-    /* "lxml/etree.pyx":2058
+    /* "lxml/etree.pyx":2059
  *             write_declaration = encoding not in (
  *                 'US-ASCII', 'ASCII', 'UTF8', 'UTF-8')
  *         if standalone is None:             # <<<<<<<<<<<<<<
@@ -71244,17 +71326,17 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     goto __pyx_L33;
   }
 
-  /* "lxml/etree.pyx":2060
+  /* "lxml/etree.pyx":2061
  *         if standalone is None:
  *             is_standalone = -1
  *         elif standalone:             # <<<<<<<<<<<<<<
  *             write_declaration = 1
  *             is_standalone = 1
  */
-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_standalone); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2060, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_standalone); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2061, __pyx_L1_error)
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2061
+    /* "lxml/etree.pyx":2062
  *             is_standalone = -1
  *         elif standalone:
  *             write_declaration = 1             # <<<<<<<<<<<<<<
@@ -71263,7 +71345,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
     __pyx_v_write_declaration = 1;
 
-    /* "lxml/etree.pyx":2062
+    /* "lxml/etree.pyx":2063
  *         elif standalone:
  *             write_declaration = 1
  *             is_standalone = 1             # <<<<<<<<<<<<<<
@@ -71272,7 +71354,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
     __pyx_v_is_standalone = 1;
 
-    /* "lxml/etree.pyx":2060
+    /* "lxml/etree.pyx":2061
  *         if standalone is None:
  *             is_standalone = -1
  *         elif standalone:             # <<<<<<<<<<<<<<
@@ -71282,7 +71364,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     goto __pyx_L33;
   }
 
-  /* "lxml/etree.pyx":2064
+  /* "lxml/etree.pyx":2065
  *             is_standalone = 1
  *         else:
  *             write_declaration = 1             # <<<<<<<<<<<<<<
@@ -71292,7 +71374,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   /*else*/ {
     __pyx_v_write_declaration = 1;
 
-    /* "lxml/etree.pyx":2065
+    /* "lxml/etree.pyx":2066
  *         else:
  *             write_declaration = 1
  *             is_standalone = 0             # <<<<<<<<<<<<<<
@@ -71303,7 +71385,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   }
   __pyx_L33:;
 
-  /* "lxml/etree.pyx":2067
+  /* "lxml/etree.pyx":2068
  *             is_standalone = 0
  * 
  *         if docstring is not None and doctype is None:             # <<<<<<<<<<<<<<
@@ -71323,41 +71405,41 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   __pyx_L35_bool_binop_done:;
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2068
+    /* "lxml/etree.pyx":2069
  * 
  *         if docstring is not None and doctype is None:
  *             import warnings             # <<<<<<<<<<<<<<
  *             warnings.warn(
  *                 "The 'docstring' option is deprecated. Use 'doctype' instead.",
  */
-    __pyx_t_7 = __Pyx_Import(__pyx_n_s_warnings, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2068, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_Import(__pyx_n_s_warnings, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2069, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_v_warnings = __pyx_t_7;
     __pyx_t_7 = 0;
 
-    /* "lxml/etree.pyx":2069
+    /* "lxml/etree.pyx":2070
  *         if docstring is not None and doctype is None:
  *             import warnings
  *             warnings.warn(             # <<<<<<<<<<<<<<
  *                 "The 'docstring' option is deprecated. Use 'doctype' instead.",
  *                 DeprecationWarning)
  */
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_warnings, __pyx_n_s_warn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2069, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_warnings, __pyx_n_s_warn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2070, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
 
-    /* "lxml/etree.pyx":2071
+    /* "lxml/etree.pyx":2072
  *             warnings.warn(
  *                 "The 'docstring' option is deprecated. Use 'doctype' instead.",
  *                 DeprecationWarning)             # <<<<<<<<<<<<<<
  *             doctype = docstring
  * 
  */
-    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2069, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2070, __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/etree.pyx":2072
+    /* "lxml/etree.pyx":2073
  *                 "The 'docstring' option is deprecated. Use 'doctype' instead.",
  *                 DeprecationWarning)
  *             doctype = docstring             # <<<<<<<<<<<<<<
@@ -71367,7 +71449,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
     __Pyx_INCREF(__pyx_v_docstring);
     __Pyx_DECREF_SET(__pyx_v_doctype, __pyx_v_docstring);
 
-    /* "lxml/etree.pyx":2067
+    /* "lxml/etree.pyx":2068
  *             is_standalone = 0
  * 
  *         if docstring is not None and doctype is None:             # <<<<<<<<<<<<<<
@@ -71376,7 +71458,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
   }
 
-  /* "lxml/etree.pyx":2074
+  /* "lxml/etree.pyx":2075
  *             doctype = docstring
  * 
  *         _tofilelike(file, self._context_node, encoding, doctype, method,             # <<<<<<<<<<<<<<
@@ -71386,28 +71468,28 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   __pyx_t_6 = ((PyObject *)__pyx_v_self->_context_node);
   __Pyx_INCREF(__pyx_t_6);
 
-  /* "lxml/etree.pyx":2076
+  /* "lxml/etree.pyx":2077
  *         _tofilelike(file, self._context_node, encoding, doctype, method,
  *                     write_declaration, 1, pretty_print, with_tail,
  *                     is_standalone, compression)             # <<<<<<<<<<<<<<
  * 
  *     def getpath(self, _Element element not None):
  */
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2076, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2077, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2074
+  /* "lxml/etree.pyx":2075
  *             doctype = docstring
  * 
  *         _tofilelike(file, self._context_node, encoding, doctype, method,             # <<<<<<<<<<<<<<
  *                     write_declaration, 1, pretty_print, with_tail,
  *                     is_standalone, compression)
  */
-  __pyx_t_7 = __pyx_f_4lxml_5etree__tofilelike(__pyx_v_file, ((struct LxmlElement *)__pyx_t_6), __pyx_v_encoding, __pyx_v_doctype, __pyx_v_method, __pyx_v_write_declaration, 1, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_is_standalone, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2074, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_4lxml_5etree__tofilelike(__pyx_v_file, ((struct LxmlElement *)__pyx_t_6), __pyx_v_encoding, __pyx_v_doctype, __pyx_v_method, __pyx_v_write_declaration, 1, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_is_standalone, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2075, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":1968
+  /* "lxml/etree.pyx":1969
  *         return None
  * 
  *     def write(self, file, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
@@ -71437,7 +71519,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2078
+/* "lxml/etree.pyx":2079
  *                     is_standalone, compression)
  * 
  *     def getpath(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -71456,7 +71538,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_13getpath(PyObject *__pyx_
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getpath (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 2078, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 2079, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_12_ElementTree_12getpath(((struct LxmlElementTree *)__pyx_v_self), ((struct LxmlElement *)__pyx_v_element));
 
   /* function exit code */
@@ -71486,16 +71568,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getpath", 0);
 
-  /* "lxml/etree.pyx":2093
+  /* "lxml/etree.pyx":2094
  *         cdef _Element root
  *         cdef xmlDoc* c_doc
  *         _assertValidNode(element)             # <<<<<<<<<<<<<<
  *         if self._context_node is not None:
  *             root = self._context_node
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2093, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2094, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2094
+  /* "lxml/etree.pyx":2095
  *         cdef xmlDoc* c_doc
  *         _assertValidNode(element)
  *         if self._context_node is not None:             # <<<<<<<<<<<<<<
@@ -71506,7 +71588,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2095
+    /* "lxml/etree.pyx":2096
  *         _assertValidNode(element)
  *         if self._context_node is not None:
  *             root = self._context_node             # <<<<<<<<<<<<<<
@@ -71518,7 +71600,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
     __pyx_v_root = ((struct LxmlElement *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":2096
+    /* "lxml/etree.pyx":2097
  *         if self._context_node is not None:
  *             root = self._context_node
  *             doc = root._doc             # <<<<<<<<<<<<<<
@@ -71530,7 +71612,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":2094
+    /* "lxml/etree.pyx":2095
  *         cdef xmlDoc* c_doc
  *         _assertValidNode(element)
  *         if self._context_node is not None:             # <<<<<<<<<<<<<<
@@ -71540,7 +71622,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2097
+  /* "lxml/etree.pyx":2098
  *             root = self._context_node
  *             doc = root._doc
  *         elif self._doc is not None:             # <<<<<<<<<<<<<<
@@ -71551,7 +71633,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (likely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":2098
+    /* "lxml/etree.pyx":2099
  *             doc = root._doc
  *         elif self._doc is not None:
  *             doc = self._doc             # <<<<<<<<<<<<<<
@@ -71563,20 +71645,20 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":2099
+    /* "lxml/etree.pyx":2100
  *         elif self._doc is not None:
  *             doc = self._doc
  *             root = doc.getroot()             # <<<<<<<<<<<<<<
  *         else:
  *             raise ValueError, u"Element is not in this tree."
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2099, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2100, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 2099, __pyx_L1_error)
+    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 2100, __pyx_L1_error)
     __pyx_v_root = ((struct LxmlElement *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":2097
+    /* "lxml/etree.pyx":2098
  *             root = self._context_node
  *             doc = root._doc
  *         elif self._doc is not None:             # <<<<<<<<<<<<<<
@@ -71586,7 +71668,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2101
+  /* "lxml/etree.pyx":2102
  *             root = doc.getroot()
  *         else:
  *             raise ValueError, u"Element is not in this tree."             # <<<<<<<<<<<<<<
@@ -71595,29 +71677,29 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
  */
   /*else*/ {
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Element_is_not_in_this_tree, 0, 0);
-    __PYX_ERR(0, 2101, __pyx_L1_error)
+    __PYX_ERR(0, 2102, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":2102
+  /* "lxml/etree.pyx":2103
  *         else:
  *             raise ValueError, u"Element is not in this tree."
  *         _assertValidDoc(doc)             # <<<<<<<<<<<<<<
  *         _assertValidNode(root)
  *         if element._doc is not doc:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidDoc(__pyx_v_doc); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2102, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidDoc(__pyx_v_doc); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2103, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2103
+  /* "lxml/etree.pyx":2104
  *             raise ValueError, u"Element is not in this tree."
  *         _assertValidDoc(doc)
  *         _assertValidNode(root)             # <<<<<<<<<<<<<<
  *         if element._doc is not doc:
  *             raise ValueError, u"Element is not in this tree."
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_root); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2103, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_root); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2104, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2104
+  /* "lxml/etree.pyx":2105
  *         _assertValidDoc(doc)
  *         _assertValidNode(root)
  *         if element._doc is not doc:             # <<<<<<<<<<<<<<
@@ -71628,7 +71710,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":2105
+    /* "lxml/etree.pyx":2106
  *         _assertValidNode(root)
  *         if element._doc is not doc:
  *             raise ValueError, u"Element is not in this tree."             # <<<<<<<<<<<<<<
@@ -71636,9 +71718,9 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
  *         c_doc = _fakeRootDoc(doc._c_doc, root._c_node)
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Element_is_not_in_this_tree, 0, 0);
-    __PYX_ERR(0, 2105, __pyx_L1_error)
+    __PYX_ERR(0, 2106, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2104
+    /* "lxml/etree.pyx":2105
  *         _assertValidDoc(doc)
  *         _assertValidNode(root)
  *         if element._doc is not doc:             # <<<<<<<<<<<<<<
@@ -71647,17 +71729,17 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
  */
   }
 
-  /* "lxml/etree.pyx":2107
+  /* "lxml/etree.pyx":2108
  *             raise ValueError, u"Element is not in this tree."
  * 
  *         c_doc = _fakeRootDoc(doc._c_doc, root._c_node)             # <<<<<<<<<<<<<<
  *         c_path = tree.xmlGetNodePath(element._c_node)
  *         _destroyFakeDoc(doc._c_doc, c_doc)
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree__fakeRootDoc(__pyx_v_doc->_c_doc, __pyx_v_root->_c_node); if (unlikely(__pyx_t_5 == ((xmlDoc *)NULL))) __PYX_ERR(0, 2107, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree__fakeRootDoc(__pyx_v_doc->_c_doc, __pyx_v_root->_c_node); if (unlikely(__pyx_t_5 == ((xmlDoc *)NULL))) __PYX_ERR(0, 2108, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_5;
 
-  /* "lxml/etree.pyx":2108
+  /* "lxml/etree.pyx":2109
  * 
  *         c_doc = _fakeRootDoc(doc._c_doc, root._c_node)
  *         c_path = tree.xmlGetNodePath(element._c_node)             # <<<<<<<<<<<<<<
@@ -71666,7 +71748,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
  */
   __pyx_v_c_path = xmlGetNodePath(__pyx_v_element->_c_node);
 
-  /* "lxml/etree.pyx":2109
+  /* "lxml/etree.pyx":2110
  *         c_doc = _fakeRootDoc(doc._c_doc, root._c_node)
  *         c_path = tree.xmlGetNodePath(element._c_node)
  *         _destroyFakeDoc(doc._c_doc, c_doc)             # <<<<<<<<<<<<<<
@@ -71675,7 +71757,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
  */
   __pyx_f_4lxml_5etree__destroyFakeDoc(__pyx_v_doc->_c_doc, __pyx_v_c_doc);
 
-  /* "lxml/etree.pyx":2110
+  /* "lxml/etree.pyx":2111
  *         c_path = tree.xmlGetNodePath(element._c_node)
  *         _destroyFakeDoc(doc._c_doc, c_doc)
  *         if c_path is NULL:             # <<<<<<<<<<<<<<
@@ -71685,16 +71767,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
   __pyx_t_3 = ((__pyx_v_c_path == NULL) != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":2111
+    /* "lxml/etree.pyx":2112
  *         _destroyFakeDoc(doc._c_doc, c_doc)
  *         if c_path is NULL:
  *             raise MemoryError()             # <<<<<<<<<<<<<<
  *         path = funicode(c_path)
  *         tree.xmlFree(c_path)
  */
-    PyErr_NoMemory(); __PYX_ERR(0, 2111, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(0, 2112, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2110
+    /* "lxml/etree.pyx":2111
  *         c_path = tree.xmlGetNodePath(element._c_node)
  *         _destroyFakeDoc(doc._c_doc, c_doc)
  *         if c_path is NULL:             # <<<<<<<<<<<<<<
@@ -71703,19 +71785,19 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
  */
   }
 
-  /* "lxml/etree.pyx":2112
+  /* "lxml/etree.pyx":2113
  *         if c_path is NULL:
  *             raise MemoryError()
  *         path = funicode(c_path)             # <<<<<<<<<<<<<<
  *         tree.xmlFree(c_path)
  *         return path
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2112, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_path = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":2113
+  /* "lxml/etree.pyx":2114
  *             raise MemoryError()
  *         path = funicode(c_path)
  *         tree.xmlFree(c_path)             # <<<<<<<<<<<<<<
@@ -71724,7 +71806,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
  */
   xmlFree(__pyx_v_c_path);
 
-  /* "lxml/etree.pyx":2114
+  /* "lxml/etree.pyx":2115
  *         path = funicode(c_path)
  *         tree.xmlFree(c_path)
  *         return path             # <<<<<<<<<<<<<<
@@ -71736,7 +71818,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
   __pyx_r = __pyx_v_path;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2078
+  /* "lxml/etree.pyx":2079
  *                     is_standalone, compression)
  * 
  *     def getpath(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -71758,7 +71840,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_12getpath(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2116
+/* "lxml/etree.pyx":2117
  *         return path
  * 
  *     def getelementpath(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -71777,7 +71859,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_15getelementpath(PyObject
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getelementpath (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 2116, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 2117, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(((struct LxmlElementTree *)__pyx_v_self), ((struct LxmlElement *)__pyx_v_element));
 
   /* function exit code */
@@ -71815,16 +71897,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getelementpath", 0);
 
-  /* "lxml/etree.pyx":2130
+  /* "lxml/etree.pyx":2131
  *         cdef _Element root
  *         cdef Py_ssize_t count
  *         _assertValidNode(element)             # <<<<<<<<<<<<<<
  *         if element._c_node.type != tree.XML_ELEMENT_NODE:
  *             raise ValueError, u"input is not an Element"
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2130, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2131, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2131
+  /* "lxml/etree.pyx":2132
  *         cdef Py_ssize_t count
  *         _assertValidNode(element)
  *         if element._c_node.type != tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -71834,7 +71916,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
   __pyx_t_2 = ((__pyx_v_element->_c_node->type != XML_ELEMENT_NODE) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":2132
+    /* "lxml/etree.pyx":2133
  *         _assertValidNode(element)
  *         if element._c_node.type != tree.XML_ELEMENT_NODE:
  *             raise ValueError, u"input is not an Element"             # <<<<<<<<<<<<<<
@@ -71842,9 +71924,9 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  *             root = self._context_node
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_input_is_not_an_Element, 0, 0);
-    __PYX_ERR(0, 2132, __pyx_L1_error)
+    __PYX_ERR(0, 2133, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2131
+    /* "lxml/etree.pyx":2132
  *         cdef Py_ssize_t count
  *         _assertValidNode(element)
  *         if element._c_node.type != tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -71853,7 +71935,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
   }
 
-  /* "lxml/etree.pyx":2133
+  /* "lxml/etree.pyx":2134
  *         if element._c_node.type != tree.XML_ELEMENT_NODE:
  *             raise ValueError, u"input is not an Element"
  *         if self._context_node is not None:             # <<<<<<<<<<<<<<
@@ -71864,7 +71946,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2134
+    /* "lxml/etree.pyx":2135
  *             raise ValueError, u"input is not an Element"
  *         if self._context_node is not None:
  *             root = self._context_node             # <<<<<<<<<<<<<<
@@ -71876,7 +71958,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     __pyx_v_root = ((struct LxmlElement *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":2133
+    /* "lxml/etree.pyx":2134
  *         if element._c_node.type != tree.XML_ELEMENT_NODE:
  *             raise ValueError, u"input is not an Element"
  *         if self._context_node is not None:             # <<<<<<<<<<<<<<
@@ -71886,7 +71968,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     goto __pyx_L4;
   }
 
-  /* "lxml/etree.pyx":2135
+  /* "lxml/etree.pyx":2136
  *         if self._context_node is not None:
  *             root = self._context_node
  *         elif self._doc is not None:             # <<<<<<<<<<<<<<
@@ -71897,20 +71979,20 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (likely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":2136
+    /* "lxml/etree.pyx":2137
  *             root = self._context_node
  *         elif self._doc is not None:
  *             root = self._doc.getroot()             # <<<<<<<<<<<<<<
  *         else:
  *             raise ValueError, u"Element is not in this tree"
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_self->_doc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2136, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_self->_doc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2137, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 2136, __pyx_L1_error)
+    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 2137, __pyx_L1_error)
     __pyx_v_root = ((struct LxmlElement *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":2135
+    /* "lxml/etree.pyx":2136
  *         if self._context_node is not None:
  *             root = self._context_node
  *         elif self._doc is not None:             # <<<<<<<<<<<<<<
@@ -71920,7 +72002,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     goto __pyx_L4;
   }
 
-  /* "lxml/etree.pyx":2138
+  /* "lxml/etree.pyx":2139
  *             root = self._doc.getroot()
  *         else:
  *             raise ValueError, u"Element is not in this tree"             # <<<<<<<<<<<<<<
@@ -71929,20 +72011,20 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
   /*else*/ {
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Element_is_not_in_this_tree_2, 0, 0);
-    __PYX_ERR(0, 2138, __pyx_L1_error)
+    __PYX_ERR(0, 2139, __pyx_L1_error)
   }
   __pyx_L4:;
 
-  /* "lxml/etree.pyx":2139
+  /* "lxml/etree.pyx":2140
  *         else:
  *             raise ValueError, u"Element is not in this tree"
  *         _assertValidNode(root)             # <<<<<<<<<<<<<<
  *         if element._doc is not root._doc:
  *             raise ValueError, u"Element is not in this tree"
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_root); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2139, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_root); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2140, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2140
+  /* "lxml/etree.pyx":2141
  *             raise ValueError, u"Element is not in this tree"
  *         _assertValidNode(root)
  *         if element._doc is not root._doc:             # <<<<<<<<<<<<<<
@@ -71953,7 +72035,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":2141
+    /* "lxml/etree.pyx":2142
  *         _assertValidNode(root)
  *         if element._doc is not root._doc:
  *             raise ValueError, u"Element is not in this tree"             # <<<<<<<<<<<<<<
@@ -71961,9 +72043,9 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  *         path = []
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Element_is_not_in_this_tree_2, 0, 0);
-    __PYX_ERR(0, 2141, __pyx_L1_error)
+    __PYX_ERR(0, 2142, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2140
+    /* "lxml/etree.pyx":2141
  *             raise ValueError, u"Element is not in this tree"
  *         _assertValidNode(root)
  *         if element._doc is not root._doc:             # <<<<<<<<<<<<<<
@@ -71972,19 +72054,19 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
   }
 
-  /* "lxml/etree.pyx":2143
+  /* "lxml/etree.pyx":2144
  *             raise ValueError, u"Element is not in this tree"
  * 
  *         path = []             # <<<<<<<<<<<<<<
  *         c_element = element._c_node
  *         while c_element is not root._c_node:
  */
-  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2143, __pyx_L1_error)
+  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_path = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":2144
+  /* "lxml/etree.pyx":2145
  * 
  *         path = []
  *         c_element = element._c_node             # <<<<<<<<<<<<<<
@@ -71994,7 +72076,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
   __pyx_t_5 = __pyx_v_element->_c_node;
   __pyx_v_c_element = __pyx_t_5;
 
-  /* "lxml/etree.pyx":2145
+  /* "lxml/etree.pyx":2146
  *         path = []
  *         c_element = element._c_node
  *         while c_element is not root._c_node:             # <<<<<<<<<<<<<<
@@ -72005,7 +72087,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     __pyx_t_3 = ((__pyx_v_c_element != __pyx_v_root->_c_node) != 0);
     if (!__pyx_t_3) break;
 
-    /* "lxml/etree.pyx":2146
+    /* "lxml/etree.pyx":2147
  *         c_element = element._c_node
  *         while c_element is not root._c_node:
  *             c_name = c_element.name             # <<<<<<<<<<<<<<
@@ -72015,7 +72097,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     __pyx_t_6 = __pyx_v_c_element->name;
     __pyx_v_c_name = __pyx_t_6;
 
-    /* "lxml/etree.pyx":2147
+    /* "lxml/etree.pyx":2148
  *         while c_element is not root._c_node:
  *             c_name = c_element.name
  *             c_href = _getNs(c_element)             # <<<<<<<<<<<<<<
@@ -72024,19 +72106,19 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
     __pyx_v_c_href = _getNs(__pyx_v_c_element);
 
-    /* "lxml/etree.pyx":2148
+    /* "lxml/etree.pyx":2149
  *             c_name = c_element.name
  *             c_href = _getNs(c_element)
  *             tag = _namespacedNameFromNsName(c_href, c_name)             # <<<<<<<<<<<<<<
  *             if c_href is NULL:
  *                 c_href = <const_xmlChar*>b''  # no namespace (NULL is wildcard)
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__namespacedNameFromNsName(__pyx_v_c_href, __pyx_v_c_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2148, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__namespacedNameFromNsName(__pyx_v_c_href, __pyx_v_c_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2149, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_XDECREF_SET(__pyx_v_tag, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":2149
+    /* "lxml/etree.pyx":2150
  *             c_href = _getNs(c_element)
  *             tag = _namespacedNameFromNsName(c_href, c_name)
  *             if c_href is NULL:             # <<<<<<<<<<<<<<
@@ -72046,7 +72128,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     __pyx_t_3 = ((__pyx_v_c_href == NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/etree.pyx":2150
+      /* "lxml/etree.pyx":2151
  *             tag = _namespacedNameFromNsName(c_href, c_name)
  *             if c_href is NULL:
  *                 c_href = <const_xmlChar*>b''  # no namespace (NULL is wildcard)             # <<<<<<<<<<<<<<
@@ -72055,7 +72137,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
       __pyx_v_c_href = ((const xmlChar *)((const xmlChar *)((char const *)"")));
 
-      /* "lxml/etree.pyx":2149
+      /* "lxml/etree.pyx":2150
  *             c_href = _getNs(c_element)
  *             tag = _namespacedNameFromNsName(c_href, c_name)
  *             if c_href is NULL:             # <<<<<<<<<<<<<<
@@ -72064,7 +72146,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
     }
 
-    /* "lxml/etree.pyx":2152
+    /* "lxml/etree.pyx":2153
  *                 c_href = <const_xmlChar*>b''  # no namespace (NULL is wildcard)
  *             # use tag[N] if there are preceding siblings with the same tag
  *             count = 0             # <<<<<<<<<<<<<<
@@ -72073,7 +72155,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
     __pyx_v_count = 0;
 
-    /* "lxml/etree.pyx":2153
+    /* "lxml/etree.pyx":2154
  *             # use tag[N] if there are preceding siblings with the same tag
  *             count = 0
  *             c_node = c_element.prev             # <<<<<<<<<<<<<<
@@ -72083,7 +72165,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     __pyx_t_5 = __pyx_v_c_element->prev;
     __pyx_v_c_node = __pyx_t_5;
 
-    /* "lxml/etree.pyx":2154
+    /* "lxml/etree.pyx":2155
  *             count = 0
  *             c_node = c_element.prev
  *             while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -72094,7 +72176,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
       __pyx_t_3 = ((__pyx_v_c_node != NULL) != 0);
       if (!__pyx_t_3) break;
 
-      /* "lxml/etree.pyx":2155
+      /* "lxml/etree.pyx":2156
  *             c_node = c_element.prev
  *             while c_node is not NULL:
  *                 if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -72104,7 +72186,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
       __pyx_t_3 = ((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0);
       if (__pyx_t_3) {
 
-        /* "lxml/etree.pyx":2156
+        /* "lxml/etree.pyx":2157
  *             while c_node is not NULL:
  *                 if c_node.type == tree.XML_ELEMENT_NODE:
  *                     if _tagMatches(c_node, c_href, c_name):             # <<<<<<<<<<<<<<
@@ -72114,7 +72196,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
         __pyx_t_3 = (__pyx_f_4lxml_5etree__tagMatches(__pyx_v_c_node, __pyx_v_c_href, __pyx_v_c_name) != 0);
         if (__pyx_t_3) {
 
-          /* "lxml/etree.pyx":2157
+          /* "lxml/etree.pyx":2158
  *                 if c_node.type == tree.XML_ELEMENT_NODE:
  *                     if _tagMatches(c_node, c_href, c_name):
  *                         count += 1             # <<<<<<<<<<<<<<
@@ -72123,7 +72205,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
           __pyx_v_count = (__pyx_v_count + 1);
 
-          /* "lxml/etree.pyx":2156
+          /* "lxml/etree.pyx":2157
  *             while c_node is not NULL:
  *                 if c_node.type == tree.XML_ELEMENT_NODE:
  *                     if _tagMatches(c_node, c_href, c_name):             # <<<<<<<<<<<<<<
@@ -72132,7 +72214,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
         }
 
-        /* "lxml/etree.pyx":2155
+        /* "lxml/etree.pyx":2156
  *             c_node = c_element.prev
  *             while c_node is not NULL:
  *                 if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -72141,7 +72223,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
       }
 
-      /* "lxml/etree.pyx":2158
+      /* "lxml/etree.pyx":2159
  *                     if _tagMatches(c_node, c_href, c_name):
  *                         count += 1
  *                 c_node = c_node.prev             # <<<<<<<<<<<<<<
@@ -72152,7 +72234,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
       __pyx_v_c_node = __pyx_t_5;
     }
 
-    /* "lxml/etree.pyx":2159
+    /* "lxml/etree.pyx":2160
  *                         count += 1
  *                 c_node = c_node.prev
  *             if count:             # <<<<<<<<<<<<<<
@@ -72162,18 +72244,18 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     __pyx_t_3 = (__pyx_v_count != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/etree.pyx":2160
+      /* "lxml/etree.pyx":2161
  *                 c_node = c_node.prev
  *             if count:
  *                 tag = f'{tag}[{count+1}]'             # <<<<<<<<<<<<<<
  *             else:
  *                 # use tag[1] if there are following siblings with the same tag
  */
-      __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2160, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2161, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_7 = 0;
       __pyx_t_8 = 127;
-      __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_tag, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2160, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_tag, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2161, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_8;
       __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
@@ -72184,7 +72266,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
       __pyx_t_7 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__38);
       PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_kp_u__38);
-      __pyx_t_9 = __Pyx_PyUnicode_From_Py_ssize_t((__pyx_v_count + 1), 0, ' ', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2160, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyUnicode_From_Py_ssize_t((__pyx_v_count + 1), 0, ' ', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2161, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
       __Pyx_GIVEREF(__pyx_t_9);
@@ -72194,13 +72276,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
       __pyx_t_7 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__39);
       PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_kp_u__39);
-      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2160, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2161, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF_SET(__pyx_v_tag, __pyx_t_9);
       __pyx_t_9 = 0;
 
-      /* "lxml/etree.pyx":2159
+      /* "lxml/etree.pyx":2160
  *                         count += 1
  *                 c_node = c_node.prev
  *             if count:             # <<<<<<<<<<<<<<
@@ -72210,7 +72292,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
       goto __pyx_L13;
     }
 
-    /* "lxml/etree.pyx":2163
+    /* "lxml/etree.pyx":2164
  *             else:
  *                 # use tag[1] if there are following siblings with the same tag
  *                 c_node = c_element.next             # <<<<<<<<<<<<<<
@@ -72221,7 +72303,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
       __pyx_t_5 = __pyx_v_c_element->next;
       __pyx_v_c_node = __pyx_t_5;
 
-      /* "lxml/etree.pyx":2164
+      /* "lxml/etree.pyx":2165
  *                 # use tag[1] if there are following siblings with the same tag
  *                 c_node = c_element.next
  *                 while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -72232,7 +72314,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
         __pyx_t_3 = ((__pyx_v_c_node != NULL) != 0);
         if (!__pyx_t_3) break;
 
-        /* "lxml/etree.pyx":2165
+        /* "lxml/etree.pyx":2166
  *                 c_node = c_element.next
  *                 while c_node is not NULL:
  *                     if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -72242,7 +72324,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
         __pyx_t_3 = ((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0);
         if (__pyx_t_3) {
 
-          /* "lxml/etree.pyx":2166
+          /* "lxml/etree.pyx":2167
  *                 while c_node is not NULL:
  *                     if c_node.type == tree.XML_ELEMENT_NODE:
  *                         if _tagMatches(c_node, c_href, c_name):             # <<<<<<<<<<<<<<
@@ -72252,19 +72334,19 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
           __pyx_t_3 = (__pyx_f_4lxml_5etree__tagMatches(__pyx_v_c_node, __pyx_v_c_href, __pyx_v_c_name) != 0);
           if (__pyx_t_3) {
 
-            /* "lxml/etree.pyx":2167
+            /* "lxml/etree.pyx":2168
  *                     if c_node.type == tree.XML_ELEMENT_NODE:
  *                         if _tagMatches(c_node, c_href, c_name):
  *                             tag += '[1]'             # <<<<<<<<<<<<<<
  *                             break
  *                     c_node = c_node.next
  */
-            __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_v_tag, __pyx_kp_s_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2167, __pyx_L1_error)
+            __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_v_tag, __pyx_kp_s_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2168, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_9);
             __Pyx_DECREF_SET(__pyx_v_tag, __pyx_t_9);
             __pyx_t_9 = 0;
 
-            /* "lxml/etree.pyx":2168
+            /* "lxml/etree.pyx":2169
  *                         if _tagMatches(c_node, c_href, c_name):
  *                             tag += '[1]'
  *                             break             # <<<<<<<<<<<<<<
@@ -72273,7 +72355,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
             goto __pyx_L15_break;
 
-            /* "lxml/etree.pyx":2166
+            /* "lxml/etree.pyx":2167
  *                 while c_node is not NULL:
  *                     if c_node.type == tree.XML_ELEMENT_NODE:
  *                         if _tagMatches(c_node, c_href, c_name):             # <<<<<<<<<<<<<<
@@ -72282,7 +72364,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
           }
 
-          /* "lxml/etree.pyx":2165
+          /* "lxml/etree.pyx":2166
  *                 c_node = c_element.next
  *                 while c_node is not NULL:
  *                     if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -72291,7 +72373,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
         }
 
-        /* "lxml/etree.pyx":2169
+        /* "lxml/etree.pyx":2170
  *                             tag += '[1]'
  *                             break
  *                     c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -72305,16 +72387,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     }
     __pyx_L13:;
 
-    /* "lxml/etree.pyx":2171
+    /* "lxml/etree.pyx":2172
  *                     c_node = c_node.next
  * 
  *             path.append(tag)             # <<<<<<<<<<<<<<
  *             c_element = c_element.parent
  *             if c_element is NULL or c_element.type != tree.XML_ELEMENT_NODE:
  */
-    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_path, __pyx_v_tag); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 2171, __pyx_L1_error)
+    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_path, __pyx_v_tag); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 2172, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2172
+    /* "lxml/etree.pyx":2173
  * 
  *             path.append(tag)
  *             c_element = c_element.parent             # <<<<<<<<<<<<<<
@@ -72324,7 +72406,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     __pyx_t_5 = __pyx_v_c_element->parent;
     __pyx_v_c_element = __pyx_t_5;
 
-    /* "lxml/etree.pyx":2173
+    /* "lxml/etree.pyx":2174
  *             path.append(tag)
  *             c_element = c_element.parent
  *             if c_element is NULL or c_element.type != tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -72342,7 +72424,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     __pyx_L19_bool_binop_done:;
     if (unlikely(__pyx_t_3)) {
 
-      /* "lxml/etree.pyx":2174
+      /* "lxml/etree.pyx":2175
  *             c_element = c_element.parent
  *             if c_element is NULL or c_element.type != tree.XML_ELEMENT_NODE:
  *                 raise ValueError, u"Element is not in this tree."             # <<<<<<<<<<<<<<
@@ -72350,9 +72432,9 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  *             return '.'
  */
       __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Element_is_not_in_this_tree, 0, 0);
-      __PYX_ERR(0, 2174, __pyx_L1_error)
+      __PYX_ERR(0, 2175, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":2173
+      /* "lxml/etree.pyx":2174
  *             path.append(tag)
  *             c_element = c_element.parent
  *             if c_element is NULL or c_element.type != tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -72362,7 +72444,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     }
   }
 
-  /* "lxml/etree.pyx":2175
+  /* "lxml/etree.pyx":2176
  *             if c_element is NULL or c_element.type != tree.XML_ELEMENT_NODE:
  *                 raise ValueError, u"Element is not in this tree."
  *         if not path:             # <<<<<<<<<<<<<<
@@ -72373,7 +72455,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
   __pyx_t_2 = ((!__pyx_t_3) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2176
+    /* "lxml/etree.pyx":2177
  *                 raise ValueError, u"Element is not in this tree."
  *         if not path:
  *             return '.'             # <<<<<<<<<<<<<<
@@ -72385,7 +72467,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
     __pyx_r = __pyx_kp_s__4;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2175
+    /* "lxml/etree.pyx":2176
  *             if c_element is NULL or c_element.type != tree.XML_ELEMENT_NODE:
  *                 raise ValueError, u"Element is not in this tree."
  *         if not path:             # <<<<<<<<<<<<<<
@@ -72394,16 +72476,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  */
   }
 
-  /* "lxml/etree.pyx":2177
+  /* "lxml/etree.pyx":2178
  *         if not path:
  *             return '.'
  *         path.reverse()             # <<<<<<<<<<<<<<
  *         return '/'.join(path)
  * 
  */
-  __pyx_t_10 = PyList_Reverse(__pyx_v_path); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 2177, __pyx_L1_error)
+  __pyx_t_10 = PyList_Reverse(__pyx_v_path); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 2178, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2178
+  /* "lxml/etree.pyx":2179
  *             return '.'
  *         path.reverse()
  *         return '/'.join(path)             # <<<<<<<<<<<<<<
@@ -72411,13 +72493,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
  *     def getiterator(self, tag=None, *tags):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_9 = __Pyx_PyString_Join(__pyx_kp_s__40, __pyx_v_path); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2178, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyString_Join(__pyx_kp_s__40, __pyx_v_path); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __pyx_r = __pyx_t_9;
   __pyx_t_9 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2116
+  /* "lxml/etree.pyx":2117
  *         return path
  * 
  *     def getelementpath(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -72440,7 +72522,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getelementpath(struct Lx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2180
+/* "lxml/etree.pyx":2181
  *         return '/'.join(path)
  * 
  *     def getiterator(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -72494,7 +72576,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_17getiterator(PyObject *__
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "getiterator") < 0)) __PYX_ERR(0, 2180, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "getiterator") < 0)) __PYX_ERR(0, 2181, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -72536,14 +72618,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16getiterator(struct LxmlE
   __Pyx_RefNannySetupContext("getiterator", 0);
   __Pyx_INCREF(__pyx_v_tags);
 
-  /* "lxml/etree.pyx":2197
+  /* "lxml/etree.pyx":2198
  *           with older versions of lxml or ElementTree.
  *         """
  *         root = self.getroot()             # <<<<<<<<<<<<<<
  *         if root is None:
  *             return ITER_EMPTY
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2197, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -72557,13 +72639,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16getiterator(struct LxmlE
   }
   __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, 2197, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_root = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2198
+  /* "lxml/etree.pyx":2199
  *         """
  *         root = self.getroot()
  *         if root is None:             # <<<<<<<<<<<<<<
@@ -72574,7 +72656,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16getiterator(struct LxmlE
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2199
+    /* "lxml/etree.pyx":2200
  *         root = self.getroot()
  *         if root is None:
  *             return ITER_EMPTY             # <<<<<<<<<<<<<<
@@ -72586,7 +72668,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16getiterator(struct LxmlE
     __pyx_r = __pyx_v_4lxml_5etree_ITER_EMPTY;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2198
+    /* "lxml/etree.pyx":2199
  *         """
  *         root = self.getroot()
  *         if root is None:             # <<<<<<<<<<<<<<
@@ -72595,7 +72677,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16getiterator(struct LxmlE
  */
   }
 
-  /* "lxml/etree.pyx":2200
+  /* "lxml/etree.pyx":2201
  *         if root is None:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -72606,25 +72688,25 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16getiterator(struct LxmlE
   __pyx_t_4 = (__pyx_t_5 != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":2201
+    /* "lxml/etree.pyx":2202
  *             return ITER_EMPTY
  *         if tag is not None:
  *             tags += (tag,)             # <<<<<<<<<<<<<<
  *         return root.getiterator(*tags)
  * 
  */
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2201, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2202, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tag);
-    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2201, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2202, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_tags, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "lxml/etree.pyx":2200
+    /* "lxml/etree.pyx":2201
  *         if root is None:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -72633,7 +72715,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16getiterator(struct LxmlE
  */
   }
 
-  /* "lxml/etree.pyx":2202
+  /* "lxml/etree.pyx":2203
  *         if tag is not None:
  *             tags += (tag,)
  *         return root.getiterator(*tags)             # <<<<<<<<<<<<<<
@@ -72641,16 +72723,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16getiterator(struct LxmlE
  *     def iter(self, tag=None, *tags):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_getiterator); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2202, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_getiterator); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2203, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_v_tags, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2202, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_v_tags, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2203, __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/etree.pyx":2180
+  /* "lxml/etree.pyx":2181
  *         return '/'.join(path)
  * 
  *     def getiterator(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -72673,7 +72755,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16getiterator(struct LxmlE
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2204
+/* "lxml/etree.pyx":2205
  *         return root.getiterator(*tags)
  * 
  *     def iter(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -72727,7 +72809,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_19iter(PyObject *__pyx_v_s
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "iter") < 0)) __PYX_ERR(0, 2204, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "iter") < 0)) __PYX_ERR(0, 2205, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -72769,14 +72851,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18iter(struct LxmlElementT
   __Pyx_RefNannySetupContext("iter", 0);
   __Pyx_INCREF(__pyx_v_tags);
 
-  /* "lxml/etree.pyx":2215
+  /* "lxml/etree.pyx":2216
  *         see `_Element.iter`.
  *         """
  *         root = self.getroot()             # <<<<<<<<<<<<<<
  *         if root is None:
  *             return ITER_EMPTY
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2215, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -72790,13 +72872,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18iter(struct LxmlElementT
   }
   __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, 2215, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_root = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2216
+  /* "lxml/etree.pyx":2217
  *         """
  *         root = self.getroot()
  *         if root is None:             # <<<<<<<<<<<<<<
@@ -72807,7 +72889,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18iter(struct LxmlElementT
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2217
+    /* "lxml/etree.pyx":2218
  *         root = self.getroot()
  *         if root is None:
  *             return ITER_EMPTY             # <<<<<<<<<<<<<<
@@ -72819,7 +72901,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18iter(struct LxmlElementT
     __pyx_r = __pyx_v_4lxml_5etree_ITER_EMPTY;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2216
+    /* "lxml/etree.pyx":2217
  *         """
  *         root = self.getroot()
  *         if root is None:             # <<<<<<<<<<<<<<
@@ -72828,7 +72910,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18iter(struct LxmlElementT
  */
   }
 
-  /* "lxml/etree.pyx":2218
+  /* "lxml/etree.pyx":2219
  *         if root is None:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -72839,25 +72921,25 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18iter(struct LxmlElementT
   __pyx_t_4 = (__pyx_t_5 != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":2219
+    /* "lxml/etree.pyx":2220
  *             return ITER_EMPTY
  *         if tag is not None:
  *             tags += (tag,)             # <<<<<<<<<<<<<<
  *         return root.iter(*tags)
  * 
  */
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2219, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tag);
-    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2219, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_tags, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2220, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_tags, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "lxml/etree.pyx":2218
+    /* "lxml/etree.pyx":2219
  *         if root is None:
  *             return ITER_EMPTY
  *         if tag is not None:             # <<<<<<<<<<<<<<
@@ -72866,7 +72948,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18iter(struct LxmlElementT
  */
   }
 
-  /* "lxml/etree.pyx":2220
+  /* "lxml/etree.pyx":2221
  *         if tag is not None:
  *             tags += (tag,)
  *         return root.iter(*tags)             # <<<<<<<<<<<<<<
@@ -72874,16 +72956,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18iter(struct LxmlElementT
  *     def find(self, path, namespaces=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_iter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2220, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_iter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_v_tags, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2220, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_v_tags, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2221, __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/etree.pyx":2204
+  /* "lxml/etree.pyx":2205
  *         return root.getiterator(*tags)
  * 
  *     def iter(self, tag=None, *tags):             # <<<<<<<<<<<<<<
@@ -72906,7 +72988,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18iter(struct LxmlElementT
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2222
+/* "lxml/etree.pyx":2223
  *         return root.iter(*tags)
  * 
  *     def find(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -72955,7 +73037,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_21find(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "find") < 0)) __PYX_ERR(0, 2222, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "find") < 0)) __PYX_ERR(0, 2223, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -72971,7 +73053,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_21find(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("find", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2222, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("find", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2223, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ElementTree.find", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -73000,23 +73082,23 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
   __Pyx_RefNannySetupContext("find", 0);
   __Pyx_INCREF(__pyx_v_path);
 
-  /* "lxml/etree.pyx":2232
+  /* "lxml/etree.pyx":2233
  *         prefixes in the path expression.
  *         """
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         root = self.getroot()
  *         if _isString(path):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2232, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2233, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2233
+  /* "lxml/etree.pyx":2234
  *         """
  *         self._assertHasRoot()
  *         root = self.getroot()             # <<<<<<<<<<<<<<
  *         if _isString(path):
  *             if path[:1] == "/":
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2233, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2234, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -73030,13 +73112,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
   }
   __pyx_t_2 = (__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_2)) __PYX_ERR(0, 2233, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2234, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_root = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2234
+  /* "lxml/etree.pyx":2235
  *         self._assertHasRoot()
  *         root = self.getroot()
  *         if _isString(path):             # <<<<<<<<<<<<<<
@@ -73046,32 +73128,32 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
   __pyx_t_5 = (_isString(__pyx_v_path) != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2235
+    /* "lxml/etree.pyx":2236
  *         root = self.getroot()
  *         if _isString(path):
  *             if path[:1] == "/":             # <<<<<<<<<<<<<<
  *                 path = "." + path
  *         return root.find(path, namespaces)
  */
-    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_path, 0, 1, NULL, NULL, &__pyx_slice__41, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2235, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_path, 0, 1, NULL, NULL, &__pyx_slice__41, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2236, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s__40, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2235, __pyx_L1_error)
+    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s__40, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2236, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_5) {
 
-      /* "lxml/etree.pyx":2236
+      /* "lxml/etree.pyx":2237
  *         if _isString(path):
  *             if path[:1] == "/":
  *                 path = "." + path             # <<<<<<<<<<<<<<
  *         return root.find(path, namespaces)
  * 
  */
-      __pyx_t_2 = PyNumber_Add(__pyx_kp_s__4, __pyx_v_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2236, __pyx_L1_error)
+      __pyx_t_2 = PyNumber_Add(__pyx_kp_s__4, __pyx_v_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2237, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF_SET(__pyx_v_path, __pyx_t_2);
       __pyx_t_2 = 0;
 
-      /* "lxml/etree.pyx":2235
+      /* "lxml/etree.pyx":2236
  *         root = self.getroot()
  *         if _isString(path):
  *             if path[:1] == "/":             # <<<<<<<<<<<<<<
@@ -73080,7 +73162,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
  */
     }
 
-    /* "lxml/etree.pyx":2234
+    /* "lxml/etree.pyx":2235
  *         self._assertHasRoot()
  *         root = self.getroot()
  *         if _isString(path):             # <<<<<<<<<<<<<<
@@ -73089,7 +73171,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
  */
   }
 
-  /* "lxml/etree.pyx":2237
+  /* "lxml/etree.pyx":2238
  *             if path[:1] == "/":
  *                 path = "." + path
  *         return root.find(path, namespaces)             # <<<<<<<<<<<<<<
@@ -73097,7 +73179,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
  *     def findtext(self, path, default=None, namespaces=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_find); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2237, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_find); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2238, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   __pyx_t_1 = 0;
@@ -73114,7 +73196,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2237, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2238, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else
@@ -73122,13 +73204,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2237, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2238, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else
   #endif
   {
-    __pyx_t_6 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2237, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2238, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -73139,7 +73221,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
     __Pyx_INCREF(__pyx_v_namespaces);
     __Pyx_GIVEREF(__pyx_v_namespaces);
     PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_1, __pyx_v_namespaces);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2237, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2238, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
@@ -73148,7 +73230,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2222
+  /* "lxml/etree.pyx":2223
  *         return root.iter(*tags)
  * 
  *     def find(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -73172,7 +73254,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20find(struct LxmlElementT
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2239
+/* "lxml/etree.pyx":2240
  *         return root.find(path, namespaces)
  * 
  *     def findtext(self, path, default=None, namespaces=None):             # <<<<<<<<<<<<<<
@@ -73231,7 +73313,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_23findtext(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "findtext") < 0)) __PYX_ERR(0, 2239, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "findtext") < 0)) __PYX_ERR(0, 2240, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -73250,7 +73332,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_23findtext(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("findtext", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2239, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("findtext", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2240, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ElementTree.findtext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -73279,23 +73361,23 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
   __Pyx_RefNannySetupContext("findtext", 0);
   __Pyx_INCREF(__pyx_v_path);
 
-  /* "lxml/etree.pyx":2249
+  /* "lxml/etree.pyx":2250
  *         prefixes in the path expression.
  *         """
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         root = self.getroot()
  *         if _isString(path):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2249, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2250, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2250
+  /* "lxml/etree.pyx":2251
  *         """
  *         self._assertHasRoot()
  *         root = self.getroot()             # <<<<<<<<<<<<<<
  *         if _isString(path):
  *             if path[:1] == "/":
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2250, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2251, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -73309,13 +73391,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
   }
   __pyx_t_2 = (__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_2)) __PYX_ERR(0, 2250, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2251, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_root = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2251
+  /* "lxml/etree.pyx":2252
  *         self._assertHasRoot()
  *         root = self.getroot()
  *         if _isString(path):             # <<<<<<<<<<<<<<
@@ -73325,32 +73407,32 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
   __pyx_t_5 = (_isString(__pyx_v_path) != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2252
+    /* "lxml/etree.pyx":2253
  *         root = self.getroot()
  *         if _isString(path):
  *             if path[:1] == "/":             # <<<<<<<<<<<<<<
  *                 path = "." + path
  *         return root.findtext(path, default, namespaces)
  */
-    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_path, 0, 1, NULL, NULL, &__pyx_slice__41, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2252, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_path, 0, 1, NULL, NULL, &__pyx_slice__41, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2253, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s__40, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2252, __pyx_L1_error)
+    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s__40, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2253, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_5) {
 
-      /* "lxml/etree.pyx":2253
+      /* "lxml/etree.pyx":2254
  *         if _isString(path):
  *             if path[:1] == "/":
  *                 path = "." + path             # <<<<<<<<<<<<<<
  *         return root.findtext(path, default, namespaces)
  * 
  */
-      __pyx_t_2 = PyNumber_Add(__pyx_kp_s__4, __pyx_v_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2253, __pyx_L1_error)
+      __pyx_t_2 = PyNumber_Add(__pyx_kp_s__4, __pyx_v_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2254, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF_SET(__pyx_v_path, __pyx_t_2);
       __pyx_t_2 = 0;
 
-      /* "lxml/etree.pyx":2252
+      /* "lxml/etree.pyx":2253
  *         root = self.getroot()
  *         if _isString(path):
  *             if path[:1] == "/":             # <<<<<<<<<<<<<<
@@ -73359,7 +73441,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
  */
     }
 
-    /* "lxml/etree.pyx":2251
+    /* "lxml/etree.pyx":2252
  *         self._assertHasRoot()
  *         root = self.getroot()
  *         if _isString(path):             # <<<<<<<<<<<<<<
@@ -73368,7 +73450,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
  */
   }
 
-  /* "lxml/etree.pyx":2254
+  /* "lxml/etree.pyx":2255
  *             if path[:1] == "/":
  *                 path = "." + path
  *         return root.findtext(path, default, namespaces)             # <<<<<<<<<<<<<<
@@ -73376,7 +73458,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
  *     def findall(self, path, namespaces=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_findtext); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2254, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_findtext); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2255, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   __pyx_t_1 = 0;
@@ -73393,7 +73475,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_path, __pyx_v_default, __pyx_v_namespaces};
-    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 3+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2254, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 3+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2255, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else
@@ -73401,13 +73483,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_path, __pyx_v_default, __pyx_v_namespaces};
-    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 3+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2254, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 3+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2255, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else
   #endif
   {
-    __pyx_t_6 = PyTuple_New(3+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2254, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(3+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2255, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -73421,7 +73503,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
     __Pyx_INCREF(__pyx_v_namespaces);
     __Pyx_GIVEREF(__pyx_v_namespaces);
     PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_1, __pyx_v_namespaces);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2254, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2255, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
@@ -73430,7 +73512,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2239
+  /* "lxml/etree.pyx":2240
  *         return root.find(path, namespaces)
  * 
  *     def findtext(self, path, default=None, namespaces=None):             # <<<<<<<<<<<<<<
@@ -73454,7 +73536,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findtext(struct LxmlElem
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2256
+/* "lxml/etree.pyx":2257
  *         return root.findtext(path, default, namespaces)
  * 
  *     def findall(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -73503,7 +73585,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_25findall(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "findall") < 0)) __PYX_ERR(0, 2256, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "findall") < 0)) __PYX_ERR(0, 2257, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -73519,7 +73601,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_25findall(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("findall", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2256, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("findall", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2257, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ElementTree.findall", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -73548,23 +73630,23 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
   __Pyx_RefNannySetupContext("findall", 0);
   __Pyx_INCREF(__pyx_v_path);
 
-  /* "lxml/etree.pyx":2266
+  /* "lxml/etree.pyx":2267
  *         prefixes in the path expression.
  *         """
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         root = self.getroot()
  *         if _isString(path):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2266, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2267, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2267
+  /* "lxml/etree.pyx":2268
  *         """
  *         self._assertHasRoot()
  *         root = self.getroot()             # <<<<<<<<<<<<<<
  *         if _isString(path):
  *             if path[:1] == "/":
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2267, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2268, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -73578,13 +73660,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
   }
   __pyx_t_2 = (__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_2)) __PYX_ERR(0, 2267, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2268, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_root = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2268
+  /* "lxml/etree.pyx":2269
  *         self._assertHasRoot()
  *         root = self.getroot()
  *         if _isString(path):             # <<<<<<<<<<<<<<
@@ -73594,32 +73676,32 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
   __pyx_t_5 = (_isString(__pyx_v_path) != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2269
+    /* "lxml/etree.pyx":2270
  *         root = self.getroot()
  *         if _isString(path):
  *             if path[:1] == "/":             # <<<<<<<<<<<<<<
  *                 path = "." + path
  *         return root.findall(path, namespaces)
  */
-    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_path, 0, 1, NULL, NULL, &__pyx_slice__41, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2269, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_path, 0, 1, NULL, NULL, &__pyx_slice__41, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2270, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s__40, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2269, __pyx_L1_error)
+    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s__40, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2270, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_5) {
 
-      /* "lxml/etree.pyx":2270
+      /* "lxml/etree.pyx":2271
  *         if _isString(path):
  *             if path[:1] == "/":
  *                 path = "." + path             # <<<<<<<<<<<<<<
  *         return root.findall(path, namespaces)
  * 
  */
-      __pyx_t_2 = PyNumber_Add(__pyx_kp_s__4, __pyx_v_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2270, __pyx_L1_error)
+      __pyx_t_2 = PyNumber_Add(__pyx_kp_s__4, __pyx_v_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2271, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF_SET(__pyx_v_path, __pyx_t_2);
       __pyx_t_2 = 0;
 
-      /* "lxml/etree.pyx":2269
+      /* "lxml/etree.pyx":2270
  *         root = self.getroot()
  *         if _isString(path):
  *             if path[:1] == "/":             # <<<<<<<<<<<<<<
@@ -73628,7 +73710,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
  */
     }
 
-    /* "lxml/etree.pyx":2268
+    /* "lxml/etree.pyx":2269
  *         self._assertHasRoot()
  *         root = self.getroot()
  *         if _isString(path):             # <<<<<<<<<<<<<<
@@ -73637,7 +73719,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
  */
   }
 
-  /* "lxml/etree.pyx":2271
+  /* "lxml/etree.pyx":2272
  *             if path[:1] == "/":
  *                 path = "." + path
  *         return root.findall(path, namespaces)             # <<<<<<<<<<<<<<
@@ -73645,7 +73727,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
  *     def iterfind(self, path, namespaces=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_findall); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2271, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_findall); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2272, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   __pyx_t_1 = 0;
@@ -73662,7 +73744,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2271, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2272, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else
@@ -73670,13 +73752,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2271, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2272, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else
   #endif
   {
-    __pyx_t_6 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2271, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2272, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -73687,7 +73769,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
     __Pyx_INCREF(__pyx_v_namespaces);
     __Pyx_GIVEREF(__pyx_v_namespaces);
     PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_1, __pyx_v_namespaces);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2271, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2272, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
@@ -73696,7 +73778,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2256
+  /* "lxml/etree.pyx":2257
  *         return root.findtext(path, default, namespaces)
  * 
  *     def findall(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -73720,7 +73802,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24findall(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2273
+/* "lxml/etree.pyx":2274
  *         return root.findall(path, namespaces)
  * 
  *     def iterfind(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -73769,7 +73851,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_27iterfind(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "iterfind") < 0)) __PYX_ERR(0, 2273, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "iterfind") < 0)) __PYX_ERR(0, 2274, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -73785,7 +73867,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_27iterfind(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("iterfind", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2273, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("iterfind", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2274, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ElementTree.iterfind", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -73814,23 +73896,23 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
   __Pyx_RefNannySetupContext("iterfind", 0);
   __Pyx_INCREF(__pyx_v_path);
 
-  /* "lxml/etree.pyx":2283
+  /* "lxml/etree.pyx":2284
  *         prefixes in the path expression.
  *         """
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         root = self.getroot()
  *         if _isString(path):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2283, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2284, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2284
+  /* "lxml/etree.pyx":2285
  *         """
  *         self._assertHasRoot()
  *         root = self.getroot()             # <<<<<<<<<<<<<<
  *         if _isString(path):
  *             if path[:1] == "/":
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2284, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2285, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -73844,13 +73926,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
   }
   __pyx_t_2 = (__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_2)) __PYX_ERR(0, 2284, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2285, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_root = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2285
+  /* "lxml/etree.pyx":2286
  *         self._assertHasRoot()
  *         root = self.getroot()
  *         if _isString(path):             # <<<<<<<<<<<<<<
@@ -73860,32 +73942,32 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
   __pyx_t_5 = (_isString(__pyx_v_path) != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2286
+    /* "lxml/etree.pyx":2287
  *         root = self.getroot()
  *         if _isString(path):
  *             if path[:1] == "/":             # <<<<<<<<<<<<<<
  *                 path = "." + path
  *         return root.iterfind(path, namespaces)
  */
-    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_path, 0, 1, NULL, NULL, &__pyx_slice__41, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2286, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_path, 0, 1, NULL, NULL, &__pyx_slice__41, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2287, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s__40, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2286, __pyx_L1_error)
+    __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s__40, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2287, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_5) {
 
-      /* "lxml/etree.pyx":2287
+      /* "lxml/etree.pyx":2288
  *         if _isString(path):
  *             if path[:1] == "/":
  *                 path = "." + path             # <<<<<<<<<<<<<<
  *         return root.iterfind(path, namespaces)
  * 
  */
-      __pyx_t_2 = PyNumber_Add(__pyx_kp_s__4, __pyx_v_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2287, __pyx_L1_error)
+      __pyx_t_2 = PyNumber_Add(__pyx_kp_s__4, __pyx_v_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2288, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF_SET(__pyx_v_path, __pyx_t_2);
       __pyx_t_2 = 0;
 
-      /* "lxml/etree.pyx":2286
+      /* "lxml/etree.pyx":2287
  *         root = self.getroot()
  *         if _isString(path):
  *             if path[:1] == "/":             # <<<<<<<<<<<<<<
@@ -73894,7 +73976,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
  */
     }
 
-    /* "lxml/etree.pyx":2285
+    /* "lxml/etree.pyx":2286
  *         self._assertHasRoot()
  *         root = self.getroot()
  *         if _isString(path):             # <<<<<<<<<<<<<<
@@ -73903,7 +73985,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
  */
   }
 
-  /* "lxml/etree.pyx":2288
+  /* "lxml/etree.pyx":2289
  *             if path[:1] == "/":
  *                 path = "." + path
  *         return root.iterfind(path, namespaces)             # <<<<<<<<<<<<<<
@@ -73911,7 +73993,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
  *     def xpath(self, _path, *, namespaces=None, extensions=None,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_iterfind); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2288, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_root, __pyx_n_s_iterfind); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   __pyx_t_1 = 0;
@@ -73928,7 +74010,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2288, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2289, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else
@@ -73936,13 +74018,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
     PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_path, __pyx_v_namespaces};
-    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2288, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2289, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else
   #endif
   {
-    __pyx_t_6 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2288, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2289, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -73953,7 +74035,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
     __Pyx_INCREF(__pyx_v_namespaces);
     __Pyx_GIVEREF(__pyx_v_namespaces);
     PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_1, __pyx_v_namespaces);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2288, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2289, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
@@ -73962,7 +74044,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2273
+  /* "lxml/etree.pyx":2274
  *         return root.findall(path, namespaces)
  * 
  *     def iterfind(self, path, namespaces=None):             # <<<<<<<<<<<<<<
@@ -73986,7 +74068,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26iterfind(struct LxmlElem
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2290
+/* "lxml/etree.pyx":2291
  *         return root.iterfind(path, namespaces)
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,             # <<<<<<<<<<<<<<
@@ -74018,7 +74100,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_29xpath(PyObject *__pyx_v_
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
 
-    /* "lxml/etree.pyx":2291
+    /* "lxml/etree.pyx":2292
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,
  *               smart_strings=True, **_variables):             # <<<<<<<<<<<<<<
@@ -74049,7 +74131,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_29xpath(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__variables, values, pos_args, "xpath") < 0)) __PYX_ERR(0, 2290, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__variables, values, pos_args, "xpath") < 0)) __PYX_ERR(0, 2291, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -74063,7 +74145,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_29xpath(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("xpath", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2290, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("xpath", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2291, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__variables); __pyx_v__variables = 0;
   __Pyx_AddTraceback("lxml.etree._ElementTree.xpath", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -74072,7 +74154,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_29xpath(PyObject *__pyx_v_
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_5etree_12_ElementTree_28xpath(((struct LxmlElementTree *)__pyx_v_self), __pyx_v__path, __pyx_v_namespaces, __pyx_v_extensions, __pyx_v_smart_strings, __pyx_v__variables);
 
-  /* "lxml/etree.pyx":2290
+  /* "lxml/etree.pyx":2291
  *         return root.iterfind(path, namespaces)
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,             # <<<<<<<<<<<<<<
@@ -74099,64 +74181,64 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_28xpath(struct LxmlElement
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("xpath", 0);
 
-  /* "lxml/etree.pyx":2309
+  /* "lxml/etree.pyx":2310
  *         XPathEvaluator directly.
  *         """
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         evaluator = XPathDocumentEvaluator(self, namespaces=namespaces,
  *                                            extensions=extensions,
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2309, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2310, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2310
+  /* "lxml/etree.pyx":2311
  *         """
  *         self._assertHasRoot()
  *         evaluator = XPathDocumentEvaluator(self, namespaces=namespaces,             # <<<<<<<<<<<<<<
  *                                            extensions=extensions,
  *                                            smart_strings=smart_strings)
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2310, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __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_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2310, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_namespaces, __pyx_v_namespaces) < 0) __PYX_ERR(0, 2310, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_namespaces, __pyx_v_namespaces) < 0) __PYX_ERR(0, 2311, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2311
+  /* "lxml/etree.pyx":2312
  *         self._assertHasRoot()
  *         evaluator = XPathDocumentEvaluator(self, namespaces=namespaces,
  *                                            extensions=extensions,             # <<<<<<<<<<<<<<
  *                                            smart_strings=smart_strings)
  *         return evaluator(_path, **_variables)
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_extensions, __pyx_v_extensions) < 0) __PYX_ERR(0, 2310, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_extensions, __pyx_v_extensions) < 0) __PYX_ERR(0, 2311, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2312
+  /* "lxml/etree.pyx":2313
  *         evaluator = XPathDocumentEvaluator(self, namespaces=namespaces,
  *                                            extensions=extensions,
  *                                            smart_strings=smart_strings)             # <<<<<<<<<<<<<<
  *         return evaluator(_path, **_variables)
  * 
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_smart_strings, __pyx_v_smart_strings) < 0) __PYX_ERR(0, 2310, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_smart_strings, __pyx_v_smart_strings) < 0) __PYX_ERR(0, 2311, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2310
+  /* "lxml/etree.pyx":2311
  *         """
  *         self._assertHasRoot()
  *         evaluator = XPathDocumentEvaluator(self, namespaces=namespaces,             # <<<<<<<<<<<<<<
  *                                            extensions=extensions,
  *                                            smart_strings=smart_strings)
  */
-  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XPathDocumentEvaluator), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2310, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XPathDocumentEvaluator), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_evaluator = ((struct __pyx_obj_4lxml_5etree_XPathDocumentEvaluator *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":2313
+  /* "lxml/etree.pyx":2314
  *                                            extensions=extensions,
  *                                            smart_strings=smart_strings)
  *         return evaluator(_path, **_variables)             # <<<<<<<<<<<<<<
@@ -74164,14 +74246,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_28xpath(struct LxmlElement
  *     def xslt(self, _xslt, extensions=None, access_control=None, **_kw):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2313, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2314, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v__path);
   __Pyx_GIVEREF(__pyx_v__path);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v__path);
-  __pyx_t_3 = PyDict_Copy(__pyx_v__variables); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2313, __pyx_L1_error)
+  __pyx_t_3 = PyDict_Copy(__pyx_v__variables); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2314, __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, 2313, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_evaluator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2314, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -74179,7 +74261,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_28xpath(struct LxmlElement
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2290
+  /* "lxml/etree.pyx":2291
  *         return root.iterfind(path, namespaces)
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,             # <<<<<<<<<<<<<<
@@ -74201,7 +74283,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_28xpath(struct LxmlElement
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2315
+/* "lxml/etree.pyx":2316
  *         return evaluator(_path, **_variables)
  * 
  *     def xslt(self, _xslt, extensions=None, access_control=None, **_kw):             # <<<<<<<<<<<<<<
@@ -74263,7 +74345,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_31xslt(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__kw, values, pos_args, "xslt") < 0)) __PYX_ERR(0, 2315, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__kw, values, pos_args, "xslt") < 0)) __PYX_ERR(0, 2316, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -74282,7 +74364,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_31xslt(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("xslt", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2315, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("xslt", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2316, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__kw); __pyx_v__kw = 0;
   __Pyx_AddTraceback("lxml.etree._ElementTree.xslt", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -74310,55 +74392,55 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_30xslt(struct LxmlElementT
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("xslt", 0);
 
-  /* "lxml/etree.pyx":2329
+  /* "lxml/etree.pyx":2330
  *         class directly.
  *         """
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         style = XSLT(_xslt, extensions=extensions,
  *                      access_control=access_control)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2329, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2330, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2330
+  /* "lxml/etree.pyx":2331
  *         """
  *         self._assertHasRoot()
  *         style = XSLT(_xslt, extensions=extensions,             # <<<<<<<<<<<<<<
  *                      access_control=access_control)
  *         return style(self, **_kw)
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2330, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2331, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v__xslt);
   __Pyx_GIVEREF(__pyx_v__xslt);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__xslt);
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2330, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2331, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_extensions, __pyx_v_extensions) < 0) __PYX_ERR(0, 2330, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_extensions, __pyx_v_extensions) < 0) __PYX_ERR(0, 2331, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2331
+  /* "lxml/etree.pyx":2332
  *         self._assertHasRoot()
  *         style = XSLT(_xslt, extensions=extensions,
  *                      access_control=access_control)             # <<<<<<<<<<<<<<
  *         return style(self, **_kw)
  * 
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_access_control, __pyx_v_access_control) < 0) __PYX_ERR(0, 2330, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_access_control, __pyx_v_access_control) < 0) __PYX_ERR(0, 2331, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2330
+  /* "lxml/etree.pyx":2331
  *         """
  *         self._assertHasRoot()
  *         style = XSLT(_xslt, extensions=extensions,             # <<<<<<<<<<<<<<
  *                      access_control=access_control)
  *         return style(self, **_kw)
  */
-  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XSLT), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2330, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XSLT), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2331, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_style = ((struct __pyx_obj_4lxml_5etree_XSLT *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":2332
+  /* "lxml/etree.pyx":2333
  *         style = XSLT(_xslt, extensions=extensions,
  *                      access_control=access_control)
  *         return style(self, **_kw)             # <<<<<<<<<<<<<<
@@ -74366,14 +74448,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_30xslt(struct LxmlElementT
  *     def relaxng(self, relaxng):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2332, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2333, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __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 = PyDict_Copy(__pyx_v__kw); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2332, __pyx_L1_error)
+  __pyx_t_3 = PyDict_Copy(__pyx_v__kw); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2333, __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, 2332, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_style), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2333, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -74381,7 +74463,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_30xslt(struct LxmlElementT
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2315
+  /* "lxml/etree.pyx":2316
  *         return evaluator(_path, **_variables)
  * 
  *     def xslt(self, _xslt, extensions=None, access_control=None, **_kw):             # <<<<<<<<<<<<<<
@@ -74403,7 +74485,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_30xslt(struct LxmlElementT
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2334
+/* "lxml/etree.pyx":2335
  *         return style(self, **_kw)
  * 
  *     def relaxng(self, relaxng):             # <<<<<<<<<<<<<<
@@ -74439,28 +74521,28 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_32relaxng(struct LxmlEleme
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("relaxng", 0);
 
-  /* "lxml/etree.pyx":2348
+  /* "lxml/etree.pyx":2349
  *         class directly.
  *         """
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         schema = RelaxNG(relaxng)
  *         return schema.validate(self)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2348, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2349, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2349
+  /* "lxml/etree.pyx":2350
  *         """
  *         self._assertHasRoot()
  *         schema = RelaxNG(relaxng)             # <<<<<<<<<<<<<<
  *         return schema.validate(self)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree_RelaxNG), __pyx_v_relaxng); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2349, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree_RelaxNG), __pyx_v_relaxng); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2350, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_schema = ((struct __pyx_obj_4lxml_5etree_RelaxNG *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2350
+  /* "lxml/etree.pyx":2351
  *         self._assertHasRoot()
  *         schema = RelaxNG(relaxng)
  *         return schema.validate(self)             # <<<<<<<<<<<<<<
@@ -74468,7 +74550,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_32relaxng(struct LxmlEleme
  *     def xmlschema(self, xmlschema):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_schema), __pyx_n_s_validate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2350, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_schema), __pyx_n_s_validate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2351, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -74482,14 +74564,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_32relaxng(struct LxmlEleme
   }
   __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, ((PyObject *)__pyx_v_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_self));
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2350, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2351, __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;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2334
+  /* "lxml/etree.pyx":2335
  *         return style(self, **_kw)
  * 
  *     def relaxng(self, relaxng):             # <<<<<<<<<<<<<<
@@ -74511,7 +74593,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_32relaxng(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2352
+/* "lxml/etree.pyx":2353
  *         return schema.validate(self)
  * 
  *     def xmlschema(self, xmlschema):             # <<<<<<<<<<<<<<
@@ -74547,28 +74629,28 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_34xmlschema(struct LxmlEle
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("xmlschema", 0);
 
-  /* "lxml/etree.pyx":2366
+  /* "lxml/etree.pyx":2367
  *         class directly.
  *         """
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         schema = XMLSchema(xmlschema)
  *         return schema.validate(self)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2366, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2367, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2367
+  /* "lxml/etree.pyx":2368
  *         """
  *         self._assertHasRoot()
  *         schema = XMLSchema(xmlschema)             # <<<<<<<<<<<<<<
  *         return schema.validate(self)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree_XMLSchema), __pyx_v_xmlschema); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2367, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree_XMLSchema), __pyx_v_xmlschema); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2368, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_schema = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2368
+  /* "lxml/etree.pyx":2369
  *         self._assertHasRoot()
  *         schema = XMLSchema(xmlschema)
  *         return schema.validate(self)             # <<<<<<<<<<<<<<
@@ -74576,7 +74658,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_34xmlschema(struct LxmlEle
  *     def xinclude(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_schema), __pyx_n_s_validate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2368, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_schema), __pyx_n_s_validate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2369, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -74590,14 +74672,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_34xmlschema(struct LxmlEle
   }
   __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, ((PyObject *)__pyx_v_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_self));
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2368, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2369, __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;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2352
+  /* "lxml/etree.pyx":2353
  *         return schema.validate(self)
  * 
  *     def xmlschema(self, xmlschema):             # <<<<<<<<<<<<<<
@@ -74619,7 +74701,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_34xmlschema(struct LxmlEle
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2370
+/* "lxml/etree.pyx":2371
  *         return schema.validate(self)
  * 
  *     def xinclude(self):             # <<<<<<<<<<<<<<
@@ -74654,23 +74736,23 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_36xinclude(struct LxmlElem
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("xinclude", 0);
 
-  /* "lxml/etree.pyx":2382
+  /* "lxml/etree.pyx":2383
  *         due to restrictions of libxml2 <= 2.6.29.
  *         """
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         XInclude()(self._context_node)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2382, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2383, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2383
+  /* "lxml/etree.pyx":2384
  *         """
  *         self._assertHasRoot()
  *         XInclude()(self._context_node)             # <<<<<<<<<<<<<<
  * 
  *     def write_c14n(self, file, *, bint exclusive=False, bint with_comments=True,
  */
-  __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree_XInclude)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2383, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree_XInclude)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2384, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -74684,12 +74766,12 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_36xinclude(struct LxmlElem
   }
   __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, ((PyObject *)__pyx_v_self->_context_node)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_self->_context_node));
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2383, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2384, __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/etree.pyx":2370
+  /* "lxml/etree.pyx":2371
  *         return schema.validate(self)
  * 
  *     def xinclude(self):             # <<<<<<<<<<<<<<
@@ -74712,7 +74794,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_36xinclude(struct LxmlElem
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2385
+/* "lxml/etree.pyx":2386
  *         XInclude()(self._context_node)
  * 
  *     def write_c14n(self, file, *, bint exclusive=False, bint with_comments=True,             # <<<<<<<<<<<<<<
@@ -74741,7 +74823,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_39write_c14n(PyObject *__p
     PyObject* values[5] = {0,0,0,0,0};
     values[3] = ((PyObject *)__pyx_int_0);
 
-    /* "lxml/etree.pyx":2386
+    /* "lxml/etree.pyx":2387
  * 
  *     def write_c14n(self, file, *, bint exclusive=False, bint with_comments=True,
  *                    compression=0, inclusive_ns_prefixes=None):             # <<<<<<<<<<<<<<
@@ -74772,7 +74854,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_39write_c14n(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_c14n") < 0)) __PYX_ERR(0, 2385, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_c14n") < 0)) __PYX_ERR(0, 2386, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -74781,10 +74863,10 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_39write_c14n(PyObject *__p
     }
     __pyx_v_file = values[0];
     if (values[1]) {
-      __pyx_v_exclusive = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_exclusive == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2385, __pyx_L3_error)
+      __pyx_v_exclusive = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_exclusive == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2386, __pyx_L3_error)
     } else {
 
-      /* "lxml/etree.pyx":2385
+      /* "lxml/etree.pyx":2386
  *         XInclude()(self._context_node)
  * 
  *     def write_c14n(self, file, *, bint exclusive=False, bint with_comments=True,             # <<<<<<<<<<<<<<
@@ -74794,7 +74876,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_39write_c14n(PyObject *__p
       __pyx_v_exclusive = ((int)0);
     }
     if (values[2]) {
-      __pyx_v_with_comments = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_with_comments == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2385, __pyx_L3_error)
+      __pyx_v_with_comments = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_with_comments == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2386, __pyx_L3_error)
     } else {
       __pyx_v_with_comments = ((int)1);
     }
@@ -74803,7 +74885,7 @@ static PyObject *__pyx_pw_4lxml_5etree_12_ElementTree_39write_c14n(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_c14n", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2385, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_c14n", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2386, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._ElementTree.write_c14n", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -74831,16 +74913,16 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_38write_c14n(struct LxmlEl
   __Pyx_RefNannySetupContext("write_c14n", 0);
   __Pyx_INCREF(__pyx_v_compression);
 
-  /* "lxml/etree.pyx":2407
+  /* "lxml/etree.pyx":2408
  *         future release.  Use ``.write(f, method="c14n")`` instead.
  *         """
  *         self._assertHasRoot()             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._context_node)
  *         if compression is None or compression < 0:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2407, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2408, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2408
+  /* "lxml/etree.pyx":2409
  *         """
  *         self._assertHasRoot()
  *         _assertValidNode(self._context_node)             # <<<<<<<<<<<<<<
@@ -74849,10 +74931,10 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_38write_c14n(struct LxmlEl
  */
   __pyx_t_2 = ((PyObject *)__pyx_v_self->_context_node);
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_2)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2408, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_2)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2409, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2409
+  /* "lxml/etree.pyx":2410
  *         self._assertHasRoot()
  *         _assertValidNode(self._context_node)
  *         if compression is None or compression < 0:             # <<<<<<<<<<<<<<
@@ -74866,14 +74948,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_38write_c14n(struct LxmlEl
     __pyx_t_3 = __pyx_t_5;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_2 = PyObject_RichCompare(__pyx_v_compression, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2409, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2409, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_compression, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2410, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2410, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_3 = __pyx_t_5;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2410
+    /* "lxml/etree.pyx":2411
  *         _assertValidNode(self._context_node)
  *         if compression is None or compression < 0:
  *             compression = 0             # <<<<<<<<<<<<<<
@@ -74883,7 +74965,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_38write_c14n(struct LxmlEl
     __Pyx_INCREF(__pyx_int_0);
     __Pyx_DECREF_SET(__pyx_v_compression, __pyx_int_0);
 
-    /* "lxml/etree.pyx":2409
+    /* "lxml/etree.pyx":2410
  *         self._assertHasRoot()
  *         _assertValidNode(self._context_node)
  *         if compression is None or compression < 0:             # <<<<<<<<<<<<<<
@@ -74892,7 +74974,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_38write_c14n(struct LxmlEl
  */
   }
 
-  /* "lxml/etree.pyx":2412
+  /* "lxml/etree.pyx":2413
  *             compression = 0
  * 
  *         _tofilelikeC14N(file, self._context_node, exclusive, with_comments,             # <<<<<<<<<<<<<<
@@ -74902,28 +74984,28 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_38write_c14n(struct LxmlEl
   __pyx_t_2 = ((PyObject *)__pyx_v_self->_context_node);
   __Pyx_INCREF(__pyx_t_2);
 
-  /* "lxml/etree.pyx":2413
+  /* "lxml/etree.pyx":2414
  * 
  *         _tofilelikeC14N(file, self._context_node, exclusive, with_comments,
  *                         compression, inclusive_ns_prefixes)             # <<<<<<<<<<<<<<
  * 
  * cdef _ElementTree _elementTreeFactory(_Document doc, _Element context_node):
  */
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2413, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2414, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2412
+  /* "lxml/etree.pyx":2413
  *             compression = 0
  * 
  *         _tofilelikeC14N(file, self._context_node, exclusive, with_comments,             # <<<<<<<<<<<<<<
  *                         compression, inclusive_ns_prefixes)
  * 
  */
-  __pyx_t_6 = __pyx_f_4lxml_5etree__tofilelikeC14N(__pyx_v_file, ((struct LxmlElement *)__pyx_t_2), __pyx_v_exclusive, __pyx_v_with_comments, __pyx_t_1, __pyx_v_inclusive_ns_prefixes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2412, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_4lxml_5etree__tofilelikeC14N(__pyx_v_file, ((struct LxmlElement *)__pyx_t_2), __pyx_v_exclusive, __pyx_v_with_comments, __pyx_t_1, __pyx_v_inclusive_ns_prefixes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2413, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "lxml/etree.pyx":2385
+  /* "lxml/etree.pyx":2386
  *         XInclude()(self._context_node)
  * 
  *     def write_c14n(self, file, *, bint exclusive=False, bint with_comments=True,             # <<<<<<<<<<<<<<
@@ -74946,7 +75028,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_38write_c14n(struct LxmlEl
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2415
+/* "lxml/etree.pyx":2416
  *                         compression, inclusive_ns_prefixes)
  * 
  * cdef _ElementTree _elementTreeFactory(_Document doc, _Element context_node):             # <<<<<<<<<<<<<<
@@ -74963,7 +75045,7 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__elementTreeFactory(struct L
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_elementTreeFactory", 0);
 
-  /* "lxml/etree.pyx":2416
+  /* "lxml/etree.pyx":2417
  * 
  * cdef _ElementTree _elementTreeFactory(_Document doc, _Element context_node):
  *     return _newElementTree(doc, context_node, _ElementTree)             # <<<<<<<<<<<<<<
@@ -74971,13 +75053,13 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__elementTreeFactory(struct L
  * cdef _ElementTree _newElementTree(_Document doc, _Element context_node,
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__newElementTree(__pyx_v_doc, __pyx_v_context_node, ((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2416, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__newElementTree(__pyx_v_doc, __pyx_v_context_node, ((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2417, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((struct LxmlElementTree *)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2415
+  /* "lxml/etree.pyx":2416
  *                         compression, inclusive_ns_prefixes)
  * 
  * cdef _ElementTree _elementTreeFactory(_Document doc, _Element context_node):             # <<<<<<<<<<<<<<
@@ -74996,7 +75078,7 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__elementTreeFactory(struct L
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2418
+/* "lxml/etree.pyx":2419
  *     return _newElementTree(doc, context_node, _ElementTree)
  * 
  * cdef _ElementTree _newElementTree(_Document doc, _Element context_node,             # <<<<<<<<<<<<<<
@@ -75021,7 +75103,7 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
   __Pyx_RefNannySetupContext("_newElementTree", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_context_node);
 
-  /* "lxml/etree.pyx":2421
+  /* "lxml/etree.pyx":2422
  *                                   object baseclass):
  *     cdef _ElementTree result
  *     result = baseclass()             # <<<<<<<<<<<<<<
@@ -75041,14 +75123,14 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
   }
   __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, 2421, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2422, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__ElementTree))))) __PYX_ERR(0, 2421, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__ElementTree))))) __PYX_ERR(0, 2422, __pyx_L1_error)
   __pyx_v_result = ((struct LxmlElementTree *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2422
+  /* "lxml/etree.pyx":2423
  *     cdef _ElementTree result
  *     result = baseclass()
  *     if context_node is None and doc is not None:             # <<<<<<<<<<<<<<
@@ -75068,20 +75150,20 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":2423
+    /* "lxml/etree.pyx":2424
  *     result = baseclass()
  *     if context_node is None and doc is not None:
  *         context_node = doc.getroot()             # <<<<<<<<<<<<<<
  *     if context_node is None:
  *         _assertValidDoc(doc)
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2423, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2424, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 2423, __pyx_L1_error)
+    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 2424, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_context_node, ((struct LxmlElement *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "lxml/etree.pyx":2422
+    /* "lxml/etree.pyx":2423
  *     cdef _ElementTree result
  *     result = baseclass()
  *     if context_node is None and doc is not None:             # <<<<<<<<<<<<<<
@@ -75090,7 +75172,7 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
  */
   }
 
-  /* "lxml/etree.pyx":2424
+  /* "lxml/etree.pyx":2425
  *     if context_node is None and doc is not None:
  *         context_node = doc.getroot()
  *     if context_node is None:             # <<<<<<<<<<<<<<
@@ -75101,16 +75183,16 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":2425
+    /* "lxml/etree.pyx":2426
  *         context_node = doc.getroot()
  *     if context_node is None:
  *         _assertValidDoc(doc)             # <<<<<<<<<<<<<<
  *         result._doc = doc
  *     else:
  */
-    __pyx_t_7 = __pyx_f_4lxml_5etree__assertValidDoc(__pyx_v_doc); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 2425, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_4lxml_5etree__assertValidDoc(__pyx_v_doc); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 2426, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2426
+    /* "lxml/etree.pyx":2427
  *     if context_node is None:
  *         _assertValidDoc(doc)
  *         result._doc = doc             # <<<<<<<<<<<<<<
@@ -75123,7 +75205,7 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
     __Pyx_DECREF(((PyObject *)__pyx_v_result->_doc));
     __pyx_v_result->_doc = __pyx_v_doc;
 
-    /* "lxml/etree.pyx":2424
+    /* "lxml/etree.pyx":2425
  *     if context_node is None and doc is not None:
  *         context_node = doc.getroot()
  *     if context_node is None:             # <<<<<<<<<<<<<<
@@ -75133,7 +75215,7 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
     goto __pyx_L6;
   }
 
-  /* "lxml/etree.pyx":2428
+  /* "lxml/etree.pyx":2429
  *         result._doc = doc
  *     else:
  *         _assertValidNode(context_node)             # <<<<<<<<<<<<<<
@@ -75141,11 +75223,11 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
  *     return result
  */
   /*else*/ {
-    __pyx_t_7 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_context_node); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 2428, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_context_node); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 2429, __pyx_L1_error)
   }
   __pyx_L6:;
 
-  /* "lxml/etree.pyx":2429
+  /* "lxml/etree.pyx":2430
  *     else:
  *         _assertValidNode(context_node)
  *     result._context_node = context_node             # <<<<<<<<<<<<<<
@@ -75158,7 +75240,7 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
   __Pyx_DECREF(((PyObject *)__pyx_v_result->_context_node));
   __pyx_v_result->_context_node = __pyx_v_context_node;
 
-  /* "lxml/etree.pyx":2430
+  /* "lxml/etree.pyx":2431
  *         _assertValidNode(context_node)
  *     result._context_node = context_node
  *     return result             # <<<<<<<<<<<<<<
@@ -75170,7 +75252,7 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2418
+  /* "lxml/etree.pyx":2419
  *     return _newElementTree(doc, context_node, _ElementTree)
  * 
  * cdef _ElementTree _newElementTree(_Document doc, _Element context_node,             # <<<<<<<<<<<<<<
@@ -75193,7 +75275,7 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2439
+/* "lxml/etree.pyx":2440
  *     """
  *     cdef _Element _element
  *     def __cinit__(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -75230,7 +75312,7 @@ static int __pyx_pw_4lxml_5etree_7_Attrib_1__cinit__(PyObject *__pyx_v_self, PyO
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2439, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2440, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -75241,13 +75323,13 @@ static int __pyx_pw_4lxml_5etree_7_Attrib_1__cinit__(PyObject *__pyx_v_self, PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2439, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2440, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Attrib.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 2439, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 2440, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_7_Attrib___cinit__(((struct __pyx_obj_4lxml_5etree__Attrib *)__pyx_v_self), __pyx_v_element);
 
   /* function exit code */
@@ -75268,16 +75350,16 @@ static int __pyx_pf_4lxml_5etree_7_Attrib___cinit__(struct __pyx_obj_4lxml_5etre
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "lxml/etree.pyx":2440
+  /* "lxml/etree.pyx":2441
  *     cdef _Element _element
  *     def __cinit__(self, _Element element not None):
  *         _assertValidNode(element)             # <<<<<<<<<<<<<<
  *         self._element = element
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2440, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2441, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2441
+  /* "lxml/etree.pyx":2442
  *     def __cinit__(self, _Element element not None):
  *         _assertValidNode(element)
  *         self._element = element             # <<<<<<<<<<<<<<
@@ -75290,7 +75372,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib___cinit__(struct __pyx_obj_4lxml_5etre
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_element));
   __pyx_v_self->_element = __pyx_v_element;
 
-  /* "lxml/etree.pyx":2439
+  /* "lxml/etree.pyx":2440
  *     """
  *     cdef _Element _element
  *     def __cinit__(self, _Element element not None):             # <<<<<<<<<<<<<<
@@ -75309,7 +75391,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib___cinit__(struct __pyx_obj_4lxml_5etre
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2444
+/* "lxml/etree.pyx":2445
  * 
  *     # MANIPULATORS
  *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
@@ -75340,7 +75422,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_2__setitem__(struct __pyx_obj_4lxml_5e
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "lxml/etree.pyx":2445
+  /* "lxml/etree.pyx":2446
  *     # MANIPULATORS
  *     def __setitem__(self, key, value):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -75349,10 +75431,10 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_2__setitem__(struct __pyx_obj_4lxml_5e
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2445, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2446, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2446
+  /* "lxml/etree.pyx":2447
  *     def __setitem__(self, key, value):
  *         _assertValidNode(self._element)
  *         _setAttributeValue(self._element, key, value)             # <<<<<<<<<<<<<<
@@ -75361,10 +75443,10 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_2__setitem__(struct __pyx_obj_4lxml_5e
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__setAttributeValue(((struct LxmlElement *)__pyx_t_1), __pyx_v_key, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2446, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__setAttributeValue(((struct LxmlElement *)__pyx_t_1), __pyx_v_key, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2447, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2444
+  /* "lxml/etree.pyx":2445
  * 
  *     # MANIPULATORS
  *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
@@ -75384,7 +75466,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_2__setitem__(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2448
+/* "lxml/etree.pyx":2449
  *         _setAttributeValue(self._element, key, value)
  * 
  *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
@@ -75415,7 +75497,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_4__delitem__(struct __pyx_obj_4lxml_5e
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__delitem__", 0);
 
-  /* "lxml/etree.pyx":2449
+  /* "lxml/etree.pyx":2450
  * 
  *     def __delitem__(self, key):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -75424,10 +75506,10 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_4__delitem__(struct __pyx_obj_4lxml_5e
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2449, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2450, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2450
+  /* "lxml/etree.pyx":2451
  *     def __delitem__(self, key):
  *         _assertValidNode(self._element)
  *         _delAttribute(self._element, key)             # <<<<<<<<<<<<<<
@@ -75436,10 +75518,10 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_4__delitem__(struct __pyx_obj_4lxml_5e
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__delAttribute(((struct LxmlElement *)__pyx_t_1), __pyx_v_key); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2450, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__delAttribute(((struct LxmlElement *)__pyx_t_1), __pyx_v_key); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2451, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2448
+  /* "lxml/etree.pyx":2449
  *         _setAttributeValue(self._element, key, value)
  * 
  *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
@@ -75459,7 +75541,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_4__delitem__(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2452
+/* "lxml/etree.pyx":2453
  *         _delAttribute(self._element, key)
  * 
  *     def update(self, sequence_or_dict):             # <<<<<<<<<<<<<<
@@ -75504,7 +75586,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
   __Pyx_RefNannySetupContext("update", 0);
   __Pyx_INCREF(__pyx_v_sequence_or_dict);
 
-  /* "lxml/etree.pyx":2453
+  /* "lxml/etree.pyx":2454
  * 
  *     def update(self, sequence_or_dict):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -75513,10 +75595,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2453, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2454, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2454
+  /* "lxml/etree.pyx":2455
  *     def update(self, sequence_or_dict):
  *         _assertValidNode(self._element)
  *         if isinstance(sequence_or_dict, (dict, _Attrib)):             # <<<<<<<<<<<<<<
@@ -75537,14 +75619,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":2455
+    /* "lxml/etree.pyx":2456
  *         _assertValidNode(self._element)
  *         if isinstance(sequence_or_dict, (dict, _Attrib)):
  *             sequence_or_dict = sequence_or_dict.items()             # <<<<<<<<<<<<<<
  *         for key, value in sequence_or_dict:
  *             _setAttributeValue(self._element, key, value)
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_sequence_or_dict, __pyx_n_s_items); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2455, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_sequence_or_dict, __pyx_n_s_items); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2456, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -75558,13 +75640,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
     }
     __pyx_t_1 = (__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_1)) __PYX_ERR(0, 2455, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2456, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF_SET(__pyx_v_sequence_or_dict, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/etree.pyx":2454
+    /* "lxml/etree.pyx":2455
  *     def update(self, sequence_or_dict):
  *         _assertValidNode(self._element)
  *         if isinstance(sequence_or_dict, (dict, _Attrib)):             # <<<<<<<<<<<<<<
@@ -75573,7 +75655,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
  */
   }
 
-  /* "lxml/etree.pyx":2456
+  /* "lxml/etree.pyx":2457
  *         if isinstance(sequence_or_dict, (dict, _Attrib)):
  *             sequence_or_dict = sequence_or_dict.items()
  *         for key, value in sequence_or_dict:             # <<<<<<<<<<<<<<
@@ -75584,26 +75666,26 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
     __pyx_t_1 = __pyx_v_sequence_or_dict; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
     __pyx_t_9 = NULL;
   } else {
-    __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_sequence_or_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2456, __pyx_L1_error)
+    __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_sequence_or_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2457, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2456, __pyx_L1_error)
+    __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2457, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_9)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 2456, __pyx_L1_error)
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 2457, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2456, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2457, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 2456, __pyx_L1_error)
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_6); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 2457, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2456, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2457, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -75613,7 +75695,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 2456, __pyx_L1_error)
+          else __PYX_ERR(0, 2457, __pyx_L1_error)
         }
         break;
       }
@@ -75625,7 +75707,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 2456, __pyx_L1_error)
+        __PYX_ERR(0, 2457, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -75638,15 +75720,15 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
       __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(0, 2456, __pyx_L1_error)
+      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2457, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2456, __pyx_L1_error)
+      __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2457, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       #endif
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_11 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2456, __pyx_L1_error)
+      __pyx_t_11 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2457, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext;
@@ -75654,7 +75736,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
       __Pyx_GOTREF(__pyx_t_7);
       index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_10);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(0, 2456, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(0, 2457, __pyx_L1_error)
       __pyx_t_12 = NULL;
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       goto __pyx_L9_unpacking_done;
@@ -75662,7 +75744,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 2456, __pyx_L1_error)
+      __PYX_ERR(0, 2457, __pyx_L1_error)
       __pyx_L9_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_7);
@@ -75670,7 +75752,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
     __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_10);
     __pyx_t_10 = 0;
 
-    /* "lxml/etree.pyx":2457
+    /* "lxml/etree.pyx":2458
  *             sequence_or_dict = sequence_or_dict.items()
  *         for key, value in sequence_or_dict:
  *             _setAttributeValue(self._element, key, value)             # <<<<<<<<<<<<<<
@@ -75679,10 +75761,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
  */
     __pyx_t_6 = ((PyObject *)__pyx_v_self->_element);
     __Pyx_INCREF(__pyx_t_6);
-    __pyx_t_2 = __pyx_f_4lxml_5etree__setAttributeValue(((struct LxmlElement *)__pyx_t_6), __pyx_v_key, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2457, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_5etree__setAttributeValue(((struct LxmlElement *)__pyx_t_6), __pyx_v_key, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2458, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "lxml/etree.pyx":2456
+    /* "lxml/etree.pyx":2457
  *         if isinstance(sequence_or_dict, (dict, _Attrib)):
  *             sequence_or_dict = sequence_or_dict.items()
  *         for key, value in sequence_or_dict:             # <<<<<<<<<<<<<<
@@ -75692,7 +75774,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2452
+  /* "lxml/etree.pyx":2453
  *         _delAttribute(self._element, key)
  * 
  *     def update(self, sequence_or_dict):             # <<<<<<<<<<<<<<
@@ -75720,7 +75802,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2459
+/* "lxml/etree.pyx":2460
  *             _setAttributeValue(self._element, key, value)
  * 
  *     def pop(self, key, *default):             # <<<<<<<<<<<<<<
@@ -75770,7 +75852,7 @@ static PyObject *__pyx_pw_4lxml_5etree_7_Attrib_9pop(PyObject *__pyx_v_self, PyO
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "pop") < 0)) __PYX_ERR(0, 2459, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "pop") < 0)) __PYX_ERR(0, 2460, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
       goto __pyx_L5_argtuple_error;
@@ -75781,7 +75863,7 @@ static PyObject *__pyx_pw_4lxml_5etree_7_Attrib_9pop(PyObject *__pyx_v_self, PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pop", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2459, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("pop", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2460, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_default); __pyx_v_default = 0;
   __Pyx_AddTraceback("lxml.etree._Attrib.pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -75811,35 +75893,35 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pop", 0);
 
-  /* "lxml/etree.pyx":2460
+  /* "lxml/etree.pyx":2461
  * 
  *     def pop(self, key, *default):
  *         if len(default) > 1:             # <<<<<<<<<<<<<<
  *             raise TypeError, f"pop expected at most 2 arguments, got {len(default)+1}"
  *         _assertValidNode(self._element)
  */
-  __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_default); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2460, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_default); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2461, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_1 > 1) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":2461
+    /* "lxml/etree.pyx":2462
  *     def pop(self, key, *default):
  *         if len(default) > 1:
  *             raise TypeError, f"pop expected at most 2 arguments, got {len(default)+1}"             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         result = _getAttributeValue(self._element, key, None)
  */
-    __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_default); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2461, __pyx_L1_error)
-    __pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t((__pyx_t_1 + 1), 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2461, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_default); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2462, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t((__pyx_t_1 + 1), 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2462, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_pop_expected_at_most_2_arguments, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2461, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_pop_expected_at_most_2_arguments, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2462, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_t_4, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __PYX_ERR(0, 2461, __pyx_L1_error)
+    __PYX_ERR(0, 2462, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2460
+    /* "lxml/etree.pyx":2461
  * 
  *     def pop(self, key, *default):
  *         if len(default) > 1:             # <<<<<<<<<<<<<<
@@ -75848,7 +75930,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "lxml/etree.pyx":2462
+  /* "lxml/etree.pyx":2463
  *         if len(default) > 1:
  *             raise TypeError, f"pop expected at most 2 arguments, got {len(default)+1}"
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -75857,10 +75939,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
  */
   __pyx_t_4 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_4)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 2462, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_4)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 2463, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":2463
+  /* "lxml/etree.pyx":2464
  *             raise TypeError, f"pop expected at most 2 arguments, got {len(default)+1}"
  *         _assertValidNode(self._element)
  *         result = _getAttributeValue(self._element, key, None)             # <<<<<<<<<<<<<<
@@ -75869,13 +75951,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
  */
   __pyx_t_4 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_4);
-  __pyx_t_3 = __pyx_f_4lxml_5etree__getAttributeValue(((struct LxmlElement *)__pyx_t_4), __pyx_v_key, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2463, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree__getAttributeValue(((struct LxmlElement *)__pyx_t_4), __pyx_v_key, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2464, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_result = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":2464
+  /* "lxml/etree.pyx":2465
  *         _assertValidNode(self._element)
  *         result = _getAttributeValue(self._element, key, None)
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -75886,7 +75968,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
   __pyx_t_6 = (__pyx_t_2 != 0);
   if (__pyx_t_6) {
 
-    /* "lxml/etree.pyx":2465
+    /* "lxml/etree.pyx":2466
  *         result = _getAttributeValue(self._element, key, None)
  *         if result is None:
  *             if not default:             # <<<<<<<<<<<<<<
@@ -75897,7 +75979,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
     __pyx_t_2 = ((!__pyx_t_6) != 0);
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":2466
+      /* "lxml/etree.pyx":2467
  *         if result is None:
  *             if not default:
  *                 raise KeyError, key             # <<<<<<<<<<<<<<
@@ -75905,9 +75987,9 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
  *         else:
  */
       __Pyx_Raise(__pyx_builtin_KeyError, __pyx_v_key, 0, 0);
-      __PYX_ERR(0, 2466, __pyx_L1_error)
+      __PYX_ERR(0, 2467, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":2465
+      /* "lxml/etree.pyx":2466
  *         result = _getAttributeValue(self._element, key, None)
  *         if result is None:
  *             if not default:             # <<<<<<<<<<<<<<
@@ -75916,19 +75998,19 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
  */
     }
 
-    /* "lxml/etree.pyx":2467
+    /* "lxml/etree.pyx":2468
  *             if not default:
  *                 raise KeyError, key
  *             result = default[0]             # <<<<<<<<<<<<<<
  *         else:
  *             _delAttribute(self._element, key)
  */
-    __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_default, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2467, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_default, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2468, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":2464
+    /* "lxml/etree.pyx":2465
  *         _assertValidNode(self._element)
  *         result = _getAttributeValue(self._element, key, None)
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -75938,7 +76020,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
     goto __pyx_L4;
   }
 
-  /* "lxml/etree.pyx":2469
+  /* "lxml/etree.pyx":2470
  *             result = default[0]
  *         else:
  *             _delAttribute(self._element, key)             # <<<<<<<<<<<<<<
@@ -75948,12 +76030,12 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
   /*else*/ {
     __pyx_t_3 = ((PyObject *)__pyx_v_self->_element);
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_5 = __pyx_f_4lxml_5etree__delAttribute(((struct LxmlElement *)__pyx_t_3), __pyx_v_key); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 2469, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_5etree__delAttribute(((struct LxmlElement *)__pyx_t_3), __pyx_v_key); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 2470, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
   __pyx_L4:;
 
-  /* "lxml/etree.pyx":2470
+  /* "lxml/etree.pyx":2471
  *         else:
  *             _delAttribute(self._element, key)
  *         return result             # <<<<<<<<<<<<<<
@@ -75965,7 +76047,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2459
+  /* "lxml/etree.pyx":2460
  *             _setAttributeValue(self._element, key, value)
  * 
  *     def pop(self, key, *default):             # <<<<<<<<<<<<<<
@@ -75986,7 +76068,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_8pop(struct __pyx_obj_4lxml_5etr
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2472
+/* "lxml/etree.pyx":2473
  *         return result
  * 
  *     def clear(self):             # <<<<<<<<<<<<<<
@@ -76021,7 +76103,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_10clear(struct __pyx_obj_4lxml_5
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("clear", 0);
 
-  /* "lxml/etree.pyx":2473
+  /* "lxml/etree.pyx":2474
  * 
  *     def clear(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -76030,10 +76112,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_10clear(struct __pyx_obj_4lxml_5
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2473, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2474, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2474
+  /* "lxml/etree.pyx":2475
  *     def clear(self):
  *         _assertValidNode(self._element)
  *         c_attrs = self._element._c_node.properties             # <<<<<<<<<<<<<<
@@ -76043,7 +76125,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_10clear(struct __pyx_obj_4lxml_5
   __pyx_t_3 = __pyx_v_self->_element->_c_node->properties;
   __pyx_v_c_attrs = __pyx_t_3;
 
-  /* "lxml/etree.pyx":2475
+  /* "lxml/etree.pyx":2476
  *         _assertValidNode(self._element)
  *         c_attrs = self._element._c_node.properties
  *         if c_attrs:             # <<<<<<<<<<<<<<
@@ -76053,7 +76135,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_10clear(struct __pyx_obj_4lxml_5
   __pyx_t_4 = (__pyx_v_c_attrs != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":2476
+    /* "lxml/etree.pyx":2477
  *         c_attrs = self._element._c_node.properties
  *         if c_attrs:
  *             self._element._c_node.properties = NULL             # <<<<<<<<<<<<<<
@@ -76062,7 +76144,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_10clear(struct __pyx_obj_4lxml_5
  */
     __pyx_v_self->_element->_c_node->properties = NULL;
 
-    /* "lxml/etree.pyx":2477
+    /* "lxml/etree.pyx":2478
  *         if c_attrs:
  *             self._element._c_node.properties = NULL
  *             tree.xmlFreePropList(c_attrs)             # <<<<<<<<<<<<<<
@@ -76071,7 +76153,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_10clear(struct __pyx_obj_4lxml_5
  */
     xmlFreePropList(__pyx_v_c_attrs);
 
-    /* "lxml/etree.pyx":2475
+    /* "lxml/etree.pyx":2476
  *         _assertValidNode(self._element)
  *         c_attrs = self._element._c_node.properties
  *         if c_attrs:             # <<<<<<<<<<<<<<
@@ -76080,7 +76162,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_10clear(struct __pyx_obj_4lxml_5
  */
   }
 
-  /* "lxml/etree.pyx":2472
+  /* "lxml/etree.pyx":2473
  *         return result
  * 
  *     def clear(self):             # <<<<<<<<<<<<<<
@@ -76101,7 +76183,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_10clear(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2480
+/* "lxml/etree.pyx":2481
  * 
  *     # ACCESSORS
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -76133,7 +76215,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_12__repr__(struct __pyx_obj_4lxm
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "lxml/etree.pyx":2481
+  /* "lxml/etree.pyx":2482
  *     # ACCESSORS
  *     def __repr__(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -76142,10 +76224,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_12__repr__(struct __pyx_obj_4lxm
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2481, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2482, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2482
+  /* "lxml/etree.pyx":2483
  *     def __repr__(self):
  *         _assertValidNode(self._element)
  *         return repr(dict( _collectAttributes(self._element._c_node, 3) ))             # <<<<<<<<<<<<<<
@@ -76153,19 +76235,19 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_12__repr__(struct __pyx_obj_4lxm
  *     def __copy__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2482, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2483, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2482, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2483, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Repr(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2482, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Repr(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2483, __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/etree.pyx":2480
+  /* "lxml/etree.pyx":2481
  * 
  *     # ACCESSORS
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -76185,7 +76267,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_12__repr__(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2484
+/* "lxml/etree.pyx":2485
  *         return repr(dict( _collectAttributes(self._element._c_node, 3) ))
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
@@ -76218,7 +76300,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_14__copy__(struct __pyx_obj_4lxm
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__copy__", 0);
 
-  /* "lxml/etree.pyx":2485
+  /* "lxml/etree.pyx":2486
  * 
  *     def __copy__(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -76227,10 +76309,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_14__copy__(struct __pyx_obj_4lxm
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2485, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2486, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2486
+  /* "lxml/etree.pyx":2487
  *     def __copy__(self):
  *         _assertValidNode(self._element)
  *         return dict(_collectAttributes(self._element._c_node, 3))             # <<<<<<<<<<<<<<
@@ -76238,16 +76320,16 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_14__copy__(struct __pyx_obj_4lxm
  *     def __deepcopy__(self, memo):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2486, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2487, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2486, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2487, __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/etree.pyx":2484
+  /* "lxml/etree.pyx":2485
  *         return repr(dict( _collectAttributes(self._element._c_node, 3) ))
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
@@ -76267,7 +76349,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_14__copy__(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2488
+/* "lxml/etree.pyx":2489
  *         return dict(_collectAttributes(self._element._c_node, 3))
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
@@ -76300,7 +76382,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_16__deepcopy__(struct __pyx_obj_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__deepcopy__", 0);
 
-  /* "lxml/etree.pyx":2489
+  /* "lxml/etree.pyx":2490
  * 
  *     def __deepcopy__(self, memo):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -76309,10 +76391,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_16__deepcopy__(struct __pyx_obj_
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2489, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2490, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2490
+  /* "lxml/etree.pyx":2491
  *     def __deepcopy__(self, memo):
  *         _assertValidNode(self._element)
  *         return dict(_collectAttributes(self._element._c_node, 3))             # <<<<<<<<<<<<<<
@@ -76320,16 +76402,16 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_16__deepcopy__(struct __pyx_obj_
  *     def __getitem__(self, key):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2490, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2491, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2490, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2491, __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/etree.pyx":2488
+  /* "lxml/etree.pyx":2489
  *         return dict(_collectAttributes(self._element._c_node, 3))
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
@@ -76349,7 +76431,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_16__deepcopy__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2492
+/* "lxml/etree.pyx":2493
  *         return dict(_collectAttributes(self._element._c_node, 3))
  * 
  *     def __getitem__(self, key):             # <<<<<<<<<<<<<<
@@ -76384,7 +76466,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_18__getitem__(struct __pyx_obj_4
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "lxml/etree.pyx":2493
+  /* "lxml/etree.pyx":2494
  * 
  *     def __getitem__(self, key):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -76393,10 +76475,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_18__getitem__(struct __pyx_obj_4
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2493, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2494, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2494
+  /* "lxml/etree.pyx":2495
  *     def __getitem__(self, key):
  *         _assertValidNode(self._element)
  *         result = _getAttributeValue(self._element, key, None)             # <<<<<<<<<<<<<<
@@ -76405,13 +76487,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_18__getitem__(struct __pyx_obj_4
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_3 = __pyx_f_4lxml_5etree__getAttributeValue(((struct LxmlElement *)__pyx_t_1), __pyx_v_key, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2494, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree__getAttributeValue(((struct LxmlElement *)__pyx_t_1), __pyx_v_key, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2495, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_result = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":2495
+  /* "lxml/etree.pyx":2496
  *         _assertValidNode(self._element)
  *         result = _getAttributeValue(self._element, key, None)
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -76422,7 +76504,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_18__getitem__(struct __pyx_obj_4
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (unlikely(__pyx_t_5)) {
 
-    /* "lxml/etree.pyx":2496
+    /* "lxml/etree.pyx":2497
  *         result = _getAttributeValue(self._element, key, None)
  *         if result is None:
  *             raise KeyError, key             # <<<<<<<<<<<<<<
@@ -76430,9 +76512,9 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_18__getitem__(struct __pyx_obj_4
  * 
  */
     __Pyx_Raise(__pyx_builtin_KeyError, __pyx_v_key, 0, 0);
-    __PYX_ERR(0, 2496, __pyx_L1_error)
+    __PYX_ERR(0, 2497, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2495
+    /* "lxml/etree.pyx":2496
  *         _assertValidNode(self._element)
  *         result = _getAttributeValue(self._element, key, None)
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -76441,7 +76523,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_18__getitem__(struct __pyx_obj_4
  */
   }
 
-  /* "lxml/etree.pyx":2497
+  /* "lxml/etree.pyx":2498
  *         if result is None:
  *             raise KeyError, key
  *         return result             # <<<<<<<<<<<<<<
@@ -76453,7 +76535,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_18__getitem__(struct __pyx_obj_4
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2492
+  /* "lxml/etree.pyx":2493
  *         return dict(_collectAttributes(self._element._c_node, 3))
  * 
  *     def __getitem__(self, key):             # <<<<<<<<<<<<<<
@@ -76474,7 +76556,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_18__getitem__(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2499
+/* "lxml/etree.pyx":2500
  *         return result
  * 
  *     def __bool__(self):             # <<<<<<<<<<<<<<
@@ -76508,7 +76590,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_20__bool__(struct __pyx_obj_4lxml_5etr
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__bool__", 0);
 
-  /* "lxml/etree.pyx":2500
+  /* "lxml/etree.pyx":2501
  * 
  *     def __bool__(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -76517,10 +76599,10 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_20__bool__(struct __pyx_obj_4lxml_5etr
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2500, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2501, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2501
+  /* "lxml/etree.pyx":2502
  *     def __bool__(self):
  *         _assertValidNode(self._element)
  *         cdef xmlAttr* c_attr = self._element._c_node.properties             # <<<<<<<<<<<<<<
@@ -76530,7 +76612,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_20__bool__(struct __pyx_obj_4lxml_5etr
   __pyx_t_3 = __pyx_v_self->_element->_c_node->properties;
   __pyx_v_c_attr = __pyx_t_3;
 
-  /* "lxml/etree.pyx":2502
+  /* "lxml/etree.pyx":2503
  *         _assertValidNode(self._element)
  *         cdef xmlAttr* c_attr = self._element._c_node.properties
  *         while c_attr is not NULL:             # <<<<<<<<<<<<<<
@@ -76541,7 +76623,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_20__bool__(struct __pyx_obj_4lxml_5etr
     __pyx_t_4 = ((__pyx_v_c_attr != NULL) != 0);
     if (!__pyx_t_4) break;
 
-    /* "lxml/etree.pyx":2503
+    /* "lxml/etree.pyx":2504
  *         cdef xmlAttr* c_attr = self._element._c_node.properties
  *         while c_attr is not NULL:
  *             if c_attr.type == tree.XML_ATTRIBUTE_NODE:             # <<<<<<<<<<<<<<
@@ -76551,7 +76633,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_20__bool__(struct __pyx_obj_4lxml_5etr
     __pyx_t_4 = ((__pyx_v_c_attr->type == XML_ATTRIBUTE_NODE) != 0);
     if (__pyx_t_4) {
 
-      /* "lxml/etree.pyx":2504
+      /* "lxml/etree.pyx":2505
  *         while c_attr is not NULL:
  *             if c_attr.type == tree.XML_ATTRIBUTE_NODE:
  *                 return 1             # <<<<<<<<<<<<<<
@@ -76561,7 +76643,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_20__bool__(struct __pyx_obj_4lxml_5etr
       __pyx_r = 1;
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":2503
+      /* "lxml/etree.pyx":2504
  *         cdef xmlAttr* c_attr = self._element._c_node.properties
  *         while c_attr is not NULL:
  *             if c_attr.type == tree.XML_ATTRIBUTE_NODE:             # <<<<<<<<<<<<<<
@@ -76570,7 +76652,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_20__bool__(struct __pyx_obj_4lxml_5etr
  */
     }
 
-    /* "lxml/etree.pyx":2505
+    /* "lxml/etree.pyx":2506
  *             if c_attr.type == tree.XML_ATTRIBUTE_NODE:
  *                 return 1
  *             c_attr = c_attr.next             # <<<<<<<<<<<<<<
@@ -76581,7 +76663,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_20__bool__(struct __pyx_obj_4lxml_5etr
     __pyx_v_c_attr = __pyx_t_3;
   }
 
-  /* "lxml/etree.pyx":2506
+  /* "lxml/etree.pyx":2507
  *                 return 1
  *             c_attr = c_attr.next
  *         return 0             # <<<<<<<<<<<<<<
@@ -76591,7 +76673,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_20__bool__(struct __pyx_obj_4lxml_5etr
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2499
+  /* "lxml/etree.pyx":2500
  *         return result
  * 
  *     def __bool__(self):             # <<<<<<<<<<<<<<
@@ -76609,7 +76691,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_20__bool__(struct __pyx_obj_4lxml_5etr
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2508
+/* "lxml/etree.pyx":2509
  *         return 0
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -76644,7 +76726,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__len__", 0);
 
-  /* "lxml/etree.pyx":2509
+  /* "lxml/etree.pyx":2510
  * 
  *     def __len__(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -76653,10 +76735,10 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2509, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2510, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2510
+  /* "lxml/etree.pyx":2511
  *     def __len__(self):
  *         _assertValidNode(self._element)
  *         cdef xmlAttr* c_attr = self._element._c_node.properties             # <<<<<<<<<<<<<<
@@ -76666,7 +76748,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
   __pyx_t_3 = __pyx_v_self->_element->_c_node->properties;
   __pyx_v_c_attr = __pyx_t_3;
 
-  /* "lxml/etree.pyx":2511
+  /* "lxml/etree.pyx":2512
  *         _assertValidNode(self._element)
  *         cdef xmlAttr* c_attr = self._element._c_node.properties
  *         cdef Py_ssize_t c = 0             # <<<<<<<<<<<<<<
@@ -76675,7 +76757,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
  */
   __pyx_v_c = 0;
 
-  /* "lxml/etree.pyx":2512
+  /* "lxml/etree.pyx":2513
  *         cdef xmlAttr* c_attr = self._element._c_node.properties
  *         cdef Py_ssize_t c = 0
  *         while c_attr is not NULL:             # <<<<<<<<<<<<<<
@@ -76686,7 +76768,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
     __pyx_t_4 = ((__pyx_v_c_attr != NULL) != 0);
     if (!__pyx_t_4) break;
 
-    /* "lxml/etree.pyx":2513
+    /* "lxml/etree.pyx":2514
  *         cdef Py_ssize_t c = 0
  *         while c_attr is not NULL:
  *             if c_attr.type == tree.XML_ATTRIBUTE_NODE:             # <<<<<<<<<<<<<<
@@ -76696,7 +76778,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
     __pyx_t_4 = ((__pyx_v_c_attr->type == XML_ATTRIBUTE_NODE) != 0);
     if (__pyx_t_4) {
 
-      /* "lxml/etree.pyx":2514
+      /* "lxml/etree.pyx":2515
  *         while c_attr is not NULL:
  *             if c_attr.type == tree.XML_ATTRIBUTE_NODE:
  *                 c += 1             # <<<<<<<<<<<<<<
@@ -76705,7 +76787,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
  */
       __pyx_v_c = (__pyx_v_c + 1);
 
-      /* "lxml/etree.pyx":2513
+      /* "lxml/etree.pyx":2514
  *         cdef Py_ssize_t c = 0
  *         while c_attr is not NULL:
  *             if c_attr.type == tree.XML_ATTRIBUTE_NODE:             # <<<<<<<<<<<<<<
@@ -76714,7 +76796,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
  */
     }
 
-    /* "lxml/etree.pyx":2515
+    /* "lxml/etree.pyx":2516
  *             if c_attr.type == tree.XML_ATTRIBUTE_NODE:
  *                 c += 1
  *             c_attr = c_attr.next             # <<<<<<<<<<<<<<
@@ -76725,7 +76807,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
     __pyx_v_c_attr = __pyx_t_3;
   }
 
-  /* "lxml/etree.pyx":2516
+  /* "lxml/etree.pyx":2517
  *                 c += 1
  *             c_attr = c_attr.next
  *         return c             # <<<<<<<<<<<<<<
@@ -76735,7 +76817,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
   __pyx_r = __pyx_v_c;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2508
+  /* "lxml/etree.pyx":2509
  *         return 0
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
@@ -76753,7 +76835,7 @@ static Py_ssize_t __pyx_pf_4lxml_5etree_7_Attrib_22__len__(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2518
+/* "lxml/etree.pyx":2519
  *         return c
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
@@ -76801,7 +76883,7 @@ static PyObject *__pyx_pw_4lxml_5etree_7_Attrib_25get(PyObject *__pyx_v_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) __PYX_ERR(0, 2518, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) __PYX_ERR(0, 2519, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -76817,7 +76899,7 @@ static PyObject *__pyx_pw_4lxml_5etree_7_Attrib_25get(PyObject *__pyx_v_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2518, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2519, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Attrib.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -76841,7 +76923,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_24get(struct __pyx_obj_4lxml_5et
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get", 0);
 
-  /* "lxml/etree.pyx":2519
+  /* "lxml/etree.pyx":2520
  * 
  *     def get(self, key, default=None):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -76850,10 +76932,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_24get(struct __pyx_obj_4lxml_5et
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2519, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2520, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2520
+  /* "lxml/etree.pyx":2521
  *     def get(self, key, default=None):
  *         _assertValidNode(self._element)
  *         return _getAttributeValue(self._element, key, default)             # <<<<<<<<<<<<<<
@@ -76863,14 +76945,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_24get(struct __pyx_obj_4lxml_5et
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_3 = __pyx_f_4lxml_5etree__getAttributeValue(((struct LxmlElement *)__pyx_t_1), __pyx_v_key, __pyx_v_default); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2520, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree__getAttributeValue(((struct LxmlElement *)__pyx_t_1), __pyx_v_key, __pyx_v_default); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2521, __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/etree.pyx":2518
+  /* "lxml/etree.pyx":2519
  *         return c
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
@@ -76890,7 +76972,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_24get(struct __pyx_obj_4lxml_5et
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2522
+/* "lxml/etree.pyx":2523
  *         return _getAttributeValue(self._element, key, default)
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -76922,7 +77004,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_26keys(struct __pyx_obj_4lxml_5e
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("keys", 0);
 
-  /* "lxml/etree.pyx":2523
+  /* "lxml/etree.pyx":2524
  * 
  *     def keys(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -76931,10 +77013,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_26keys(struct __pyx_obj_4lxml_5e
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2523, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2524, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2524
+  /* "lxml/etree.pyx":2525
  *     def keys(self):
  *         _assertValidNode(self._element)
  *         return _collectAttributes(self._element._c_node, 1)             # <<<<<<<<<<<<<<
@@ -76942,13 +77024,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_26keys(struct __pyx_obj_4lxml_5e
  *     def __iter__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2524, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2522
+  /* "lxml/etree.pyx":2523
  *         return _getAttributeValue(self._element, key, default)
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -76967,7 +77049,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_26keys(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2526
+/* "lxml/etree.pyx":2527
  *         return _collectAttributes(self._element._c_node, 1)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -76999,7 +77081,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_28__iter__(struct __pyx_obj_4lxm
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__iter__", 0);
 
-  /* "lxml/etree.pyx":2527
+  /* "lxml/etree.pyx":2528
  * 
  *     def __iter__(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -77008,10 +77090,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_28__iter__(struct __pyx_obj_4lxm
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2527, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2528, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2528
+  /* "lxml/etree.pyx":2529
  *     def __iter__(self):
  *         _assertValidNode(self._element)
  *         return iter(_collectAttributes(self._element._c_node, 1))             # <<<<<<<<<<<<<<
@@ -77019,16 +77101,16 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_28__iter__(struct __pyx_obj_4lxm
  *     def iterkeys(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2528, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2529, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2528, __pyx_L1_error)
+  __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2529, __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/etree.pyx":2526
+  /* "lxml/etree.pyx":2527
  *         return _collectAttributes(self._element._c_node, 1)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -77048,7 +77130,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_28__iter__(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2530
+/* "lxml/etree.pyx":2531
  *         return iter(_collectAttributes(self._element._c_node, 1))
  * 
  *     def iterkeys(self):             # <<<<<<<<<<<<<<
@@ -77081,7 +77163,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_30iterkeys(struct __pyx_obj_4lxm
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("iterkeys", 0);
 
-  /* "lxml/etree.pyx":2531
+  /* "lxml/etree.pyx":2532
  * 
  *     def iterkeys(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -77090,10 +77172,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_30iterkeys(struct __pyx_obj_4lxm
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2531, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2532, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2532
+  /* "lxml/etree.pyx":2533
  *     def iterkeys(self):
  *         _assertValidNode(self._element)
  *         return iter(_collectAttributes(self._element._c_node, 1))             # <<<<<<<<<<<<<<
@@ -77101,16 +77183,16 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_30iterkeys(struct __pyx_obj_4lxm
  *     def values(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2532, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2532, __pyx_L1_error)
+  __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2533, __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/etree.pyx":2530
+  /* "lxml/etree.pyx":2531
  *         return iter(_collectAttributes(self._element._c_node, 1))
  * 
  *     def iterkeys(self):             # <<<<<<<<<<<<<<
@@ -77130,7 +77212,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_30iterkeys(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2534
+/* "lxml/etree.pyx":2535
  *         return iter(_collectAttributes(self._element._c_node, 1))
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
@@ -77162,7 +77244,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_32values(struct __pyx_obj_4lxml_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("values", 0);
 
-  /* "lxml/etree.pyx":2535
+  /* "lxml/etree.pyx":2536
  * 
  *     def values(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -77171,10 +77253,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_32values(struct __pyx_obj_4lxml_
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2535, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2536, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2536
+  /* "lxml/etree.pyx":2537
  *     def values(self):
  *         _assertValidNode(self._element)
  *         return _collectAttributes(self._element._c_node, 2)             # <<<<<<<<<<<<<<
@@ -77182,13 +77264,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_32values(struct __pyx_obj_4lxml_
  *     def itervalues(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2536, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2537, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2534
+  /* "lxml/etree.pyx":2535
  *         return iter(_collectAttributes(self._element._c_node, 1))
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
@@ -77207,7 +77289,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_32values(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2538
+/* "lxml/etree.pyx":2539
  *         return _collectAttributes(self._element._c_node, 2)
  * 
  *     def itervalues(self):             # <<<<<<<<<<<<<<
@@ -77240,7 +77322,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_34itervalues(struct __pyx_obj_4l
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("itervalues", 0);
 
-  /* "lxml/etree.pyx":2539
+  /* "lxml/etree.pyx":2540
  * 
  *     def itervalues(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -77249,10 +77331,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_34itervalues(struct __pyx_obj_4l
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2539, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2540, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2540
+  /* "lxml/etree.pyx":2541
  *     def itervalues(self):
  *         _assertValidNode(self._element)
  *         return iter(_collectAttributes(self._element._c_node, 2))             # <<<<<<<<<<<<<<
@@ -77260,16 +77342,16 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_34itervalues(struct __pyx_obj_4l
  *     def items(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2540, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2541, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2540, __pyx_L1_error)
+  __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2541, __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/etree.pyx":2538
+  /* "lxml/etree.pyx":2539
  *         return _collectAttributes(self._element._c_node, 2)
  * 
  *     def itervalues(self):             # <<<<<<<<<<<<<<
@@ -77289,7 +77371,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_34itervalues(struct __pyx_obj_4l
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2542
+/* "lxml/etree.pyx":2543
  *         return iter(_collectAttributes(self._element._c_node, 2))
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
@@ -77321,7 +77403,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_36items(struct __pyx_obj_4lxml_5
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("items", 0);
 
-  /* "lxml/etree.pyx":2543
+  /* "lxml/etree.pyx":2544
  * 
  *     def items(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -77330,10 +77412,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_36items(struct __pyx_obj_4lxml_5
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2543, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2544, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2544
+  /* "lxml/etree.pyx":2545
  *     def items(self):
  *         _assertValidNode(self._element)
  *         return _collectAttributes(self._element._c_node, 3)             # <<<<<<<<<<<<<<
@@ -77341,13 +77423,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_36items(struct __pyx_obj_4lxml_5
  *     def iteritems(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2544, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2545, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2542
+  /* "lxml/etree.pyx":2543
  *         return iter(_collectAttributes(self._element._c_node, 2))
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
@@ -77366,7 +77448,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_36items(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2546
+/* "lxml/etree.pyx":2547
  *         return _collectAttributes(self._element._c_node, 3)
  * 
  *     def iteritems(self):             # <<<<<<<<<<<<<<
@@ -77399,7 +77481,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_38iteritems(struct __pyx_obj_4lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("iteritems", 0);
 
-  /* "lxml/etree.pyx":2547
+  /* "lxml/etree.pyx":2548
  * 
  *     def iteritems(self):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -77408,10 +77490,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_38iteritems(struct __pyx_obj_4lx
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2547, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2548, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2548
+  /* "lxml/etree.pyx":2549
  *     def iteritems(self):
  *         _assertValidNode(self._element)
  *         return iter(_collectAttributes(self._element._c_node, 3))             # <<<<<<<<<<<<<<
@@ -77419,16 +77501,16 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_38iteritems(struct __pyx_obj_4lx
  *     def has_key(self, key):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2548, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__collectAttributes(__pyx_v_self->_element->_c_node, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2549, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2548, __pyx_L1_error)
+  __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2549, __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/etree.pyx":2546
+  /* "lxml/etree.pyx":2547
  *         return _collectAttributes(self._element._c_node, 3)
  * 
  *     def iteritems(self):             # <<<<<<<<<<<<<<
@@ -77448,7 +77530,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_38iteritems(struct __pyx_obj_4lx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2550
+/* "lxml/etree.pyx":2551
  *         return iter(_collectAttributes(self._element._c_node, 3))
  * 
  *     def has_key(self, key):             # <<<<<<<<<<<<<<
@@ -77481,7 +77563,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_40has_key(struct __pyx_obj_4lxml
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("has_key", 0);
 
-  /* "lxml/etree.pyx":2551
+  /* "lxml/etree.pyx":2552
  * 
  *     def has_key(self, key):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -77490,10 +77572,10 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_40has_key(struct __pyx_obj_4lxml
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2551, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2552, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2552
+  /* "lxml/etree.pyx":2553
  *     def has_key(self, key):
  *         _assertValidNode(self._element)
  *         return key in self             # <<<<<<<<<<<<<<
@@ -77501,14 +77583,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_40has_key(struct __pyx_obj_4lxml
  *     def __contains__(self, key):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, ((PyObject *)__pyx_v_self), Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2552, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2552, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, ((PyObject *)__pyx_v_self), Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2553, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2553, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2550
+  /* "lxml/etree.pyx":2551
  *         return iter(_collectAttributes(self._element._c_node, 3))
  * 
  *     def has_key(self, key):             # <<<<<<<<<<<<<<
@@ -77527,7 +77609,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_40has_key(struct __pyx_obj_4lxml
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2554
+/* "lxml/etree.pyx":2555
  *         return key in self
  * 
  *     def __contains__(self, key):             # <<<<<<<<<<<<<<
@@ -77567,7 +77649,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_42__contains__(struct __pyx_obj_4lxml_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__contains__", 0);
 
-  /* "lxml/etree.pyx":2555
+  /* "lxml/etree.pyx":2556
  * 
  *     def __contains__(self, key):
  *         _assertValidNode(self._element)             # <<<<<<<<<<<<<<
@@ -77576,17 +77658,17 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_42__contains__(struct __pyx_obj_4lxml_
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_self->_element);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2555, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2556, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2557
+  /* "lxml/etree.pyx":2558
  *         _assertValidNode(self._element)
  *         cdef xmlNode* c_node
  *         ns, tag = _getNsTag(key)             # <<<<<<<<<<<<<<
  *         c_node = self._element._c_node
  *         c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2557, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2558, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (likely(__pyx_t_1 != Py_None)) {
     PyObject* sequence = __pyx_t_1;
@@ -77594,7 +77676,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_42__contains__(struct __pyx_obj_4lxml_
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 2557, __pyx_L1_error)
+      __PYX_ERR(0, 2558, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
@@ -77602,21 +77684,21 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_42__contains__(struct __pyx_obj_4lxml_
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_4);
     #else
-    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2557, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2558, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2557, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2558, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
-    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 2557, __pyx_L1_error)
+    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 2558, __pyx_L1_error)
   }
   __pyx_v_ns = __pyx_t_3;
   __pyx_t_3 = 0;
   __pyx_v_tag = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":2558
+  /* "lxml/etree.pyx":2559
  *         cdef xmlNode* c_node
  *         ns, tag = _getNsTag(key)
  *         c_node = self._element._c_node             # <<<<<<<<<<<<<<
@@ -77626,7 +77708,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_42__contains__(struct __pyx_obj_4lxml_
   __pyx_t_5 = __pyx_v_self->_element->_c_node;
   __pyx_v_c_node = __pyx_t_5;
 
-  /* "lxml/etree.pyx":2559
+  /* "lxml/etree.pyx":2560
  *         ns, tag = _getNsTag(key)
  *         c_node = self._element._c_node
  *         c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)             # <<<<<<<<<<<<<<
@@ -77641,7 +77723,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_42__contains__(struct __pyx_obj_4lxml_
   }
   __pyx_v_c_href = __pyx_t_6;
 
-  /* "lxml/etree.pyx":2560
+  /* "lxml/etree.pyx":2561
  *         c_node = self._element._c_node
  *         c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)
  *         return 1 if tree.xmlHasNsProp(c_node, _xcstr(tag), c_href) else 0             # <<<<<<<<<<<<<<
@@ -77656,7 +77738,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_42__contains__(struct __pyx_obj_4lxml_
   __pyx_r = __pyx_t_2;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2554
+  /* "lxml/etree.pyx":2555
  *         return key in self
  * 
  *     def __contains__(self, key):             # <<<<<<<<<<<<<<
@@ -77678,7 +77760,7 @@ static int __pyx_pf_4lxml_5etree_7_Attrib_42__contains__(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2562
+/* "lxml/etree.pyx":2563
  *         return 1 if tree.xmlHasNsProp(c_node, _xcstr(tag), c_href) else 0
  * 
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
@@ -77718,7 +77800,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(struct __pyx_obj_4
   __Pyx_RefNannySetupContext("__richcmp__", 0);
   __Pyx_INCREF(__pyx_v_other);
 
-  /* "lxml/etree.pyx":2563
+  /* "lxml/etree.pyx":2564
  * 
  *     def __richcmp__(self, other, int op):
  *         try:             # <<<<<<<<<<<<<<
@@ -77734,14 +77816,14 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(struct __pyx_obj_4
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "lxml/etree.pyx":2564
+      /* "lxml/etree.pyx":2565
  *     def __richcmp__(self, other, int op):
  *         try:
  *             one = dict(self.items())             # <<<<<<<<<<<<<<
  *             if not isinstance(other, dict):
  *                 other = dict(other)
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_items); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2564, __pyx_L3_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_items); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2565, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_6 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -77755,16 +77837,16 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(struct __pyx_obj_4
       }
       __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, 2564, __pyx_L3_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2565, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2564, __pyx_L3_error)
+      __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2565, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_v_one = ((PyObject*)__pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "lxml/etree.pyx":2565
+      /* "lxml/etree.pyx":2566
  *         try:
  *             one = dict(self.items())
  *             if not isinstance(other, dict):             # <<<<<<<<<<<<<<
@@ -77775,19 +77857,19 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(struct __pyx_obj_4
       __pyx_t_8 = ((!(__pyx_t_7 != 0)) != 0);
       if (__pyx_t_8) {
 
-        /* "lxml/etree.pyx":2566
+        /* "lxml/etree.pyx":2567
  *             one = dict(self.items())
  *             if not isinstance(other, dict):
  *                 other = dict(other)             # <<<<<<<<<<<<<<
  *         except (TypeError, ValueError):
  *             return NotImplemented
  */
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_other); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2566, __pyx_L3_error)
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_other); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2567, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF_SET(__pyx_v_other, __pyx_t_5);
         __pyx_t_5 = 0;
 
-        /* "lxml/etree.pyx":2565
+        /* "lxml/etree.pyx":2566
  *         try:
  *             one = dict(self.items())
  *             if not isinstance(other, dict):             # <<<<<<<<<<<<<<
@@ -77796,7 +77878,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(struct __pyx_obj_4
  */
       }
 
-      /* "lxml/etree.pyx":2563
+      /* "lxml/etree.pyx":2564
  * 
  *     def __richcmp__(self, other, int op):
  *         try:             # <<<<<<<<<<<<<<
@@ -77813,7 +77895,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(struct __pyx_obj_4
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "lxml/etree.pyx":2567
+    /* "lxml/etree.pyx":2568
  *             if not isinstance(other, dict):
  *                 other = dict(other)
  *         except (TypeError, ValueError):             # <<<<<<<<<<<<<<
@@ -77823,12 +77905,12 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(struct __pyx_obj_4
     __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
     if (__pyx_t_9) {
       __Pyx_AddTraceback("lxml.etree._Attrib.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 2567, __pyx_L5_except_error)
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 2568, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_6);
 
-      /* "lxml/etree.pyx":2568
+      /* "lxml/etree.pyx":2569
  *                 other = dict(other)
  *         except (TypeError, ValueError):
  *             return NotImplemented             # <<<<<<<<<<<<<<
@@ -77846,7 +77928,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(struct __pyx_obj_4
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
 
-    /* "lxml/etree.pyx":2563
+    /* "lxml/etree.pyx":2564
  * 
  *     def __richcmp__(self, other, int op):
  *         try:             # <<<<<<<<<<<<<<
@@ -77867,21 +77949,21 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(struct __pyx_obj_4
     __pyx_L8_try_end:;
   }
 
-  /* "lxml/etree.pyx":2569
+  /* "lxml/etree.pyx":2570
  *         except (TypeError, ValueError):
  *             return NotImplemented
  *         return python.PyObject_RichCompare(one, other, op)             # <<<<<<<<<<<<<<
  * 
- * 
+ * MutableMapping.register(_Attrib)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyObject_RichCompare(__pyx_v_one, __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2569, __pyx_L1_error)
+  __pyx_t_6 = PyObject_RichCompare(__pyx_v_one, __pyx_v_other, __pyx_v_op); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2570, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_r = __pyx_t_6;
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2562
+  /* "lxml/etree.pyx":2563
  *         return 1 if tree.xmlHasNsProp(c_node, _xcstr(tag), c_href) else 0
  * 
  *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
@@ -77904,7 +77986,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2581
+/* "lxml/etree.pyx":2584
  *     cdef xmlAttr* _c_attr
  *     cdef int _keysvalues # 1 - keys, 2 - values, 3 - items (key, value)
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -77930,7 +78012,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator___iter__(struct __pyx_o
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__iter__", 0);
 
-  /* "lxml/etree.pyx":2582
+  /* "lxml/etree.pyx":2585
  *     cdef int _keysvalues # 1 - keys, 2 - values, 3 - items (key, value)
  *     def __iter__(self):
  *         return self             # <<<<<<<<<<<<<<
@@ -77942,7 +78024,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator___iter__(struct __pyx_o
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2581
+  /* "lxml/etree.pyx":2584
  *     cdef xmlAttr* _c_attr
  *     cdef int _keysvalues # 1 - keys, 2 - values, 3 - items (key, value)
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -77957,7 +78039,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator___iter__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2584
+/* "lxml/etree.pyx":2587
  *         return self
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -77993,7 +78075,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__next__", 0);
 
-  /* "lxml/etree.pyx":2586
+  /* "lxml/etree.pyx":2589
  *     def __next__(self):
  *         cdef xmlAttr* c_attr
  *         if self._node is None:             # <<<<<<<<<<<<<<
@@ -78004,7 +78086,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":2587
+    /* "lxml/etree.pyx":2590
  *         cdef xmlAttr* c_attr
  *         if self._node is None:
  *             raise StopIteration             # <<<<<<<<<<<<<<
@@ -78012,9 +78094,9 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
  *         while c_attr is not NULL and c_attr.type != tree.XML_ATTRIBUTE_NODE:
  */
     __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0, 0);
-    __PYX_ERR(0, 2587, __pyx_L1_error)
+    __PYX_ERR(0, 2590, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2586
+    /* "lxml/etree.pyx":2589
  *     def __next__(self):
  *         cdef xmlAttr* c_attr
  *         if self._node is None:             # <<<<<<<<<<<<<<
@@ -78023,7 +78105,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
  */
   }
 
-  /* "lxml/etree.pyx":2588
+  /* "lxml/etree.pyx":2591
  *         if self._node is None:
  *             raise StopIteration
  *         c_attr = self._c_attr             # <<<<<<<<<<<<<<
@@ -78033,7 +78115,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
   __pyx_t_3 = __pyx_v_self->_c_attr;
   __pyx_v_c_attr = __pyx_t_3;
 
-  /* "lxml/etree.pyx":2589
+  /* "lxml/etree.pyx":2592
  *             raise StopIteration
  *         c_attr = self._c_attr
  *         while c_attr is not NULL and c_attr.type != tree.XML_ATTRIBUTE_NODE:             # <<<<<<<<<<<<<<
@@ -78052,7 +78134,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
     __pyx_L6_bool_binop_done:;
     if (!__pyx_t_2) break;
 
-    /* "lxml/etree.pyx":2590
+    /* "lxml/etree.pyx":2593
  *         c_attr = self._c_attr
  *         while c_attr is not NULL and c_attr.type != tree.XML_ATTRIBUTE_NODE:
  *             c_attr = c_attr.next             # <<<<<<<<<<<<<<
@@ -78063,7 +78145,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
     __pyx_v_c_attr = __pyx_t_3;
   }
 
-  /* "lxml/etree.pyx":2591
+  /* "lxml/etree.pyx":2594
  *         while c_attr is not NULL and c_attr.type != tree.XML_ATTRIBUTE_NODE:
  *             c_attr = c_attr.next
  *         if c_attr is NULL:             # <<<<<<<<<<<<<<
@@ -78073,7 +78155,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
   __pyx_t_2 = ((__pyx_v_c_attr == NULL) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":2592
+    /* "lxml/etree.pyx":2595
  *             c_attr = c_attr.next
  *         if c_attr is NULL:
  *             self._node = None             # <<<<<<<<<<<<<<
@@ -78086,7 +78168,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
     __Pyx_DECREF(((PyObject *)__pyx_v_self->_node));
     __pyx_v_self->_node = ((struct LxmlElement *)Py_None);
 
-    /* "lxml/etree.pyx":2593
+    /* "lxml/etree.pyx":2596
  *         if c_attr is NULL:
  *             self._node = None
  *             raise StopIteration             # <<<<<<<<<<<<<<
@@ -78094,9 +78176,9 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
  *         self._c_attr = c_attr.next
  */
     __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0, 0);
-    __PYX_ERR(0, 2593, __pyx_L1_error)
+    __PYX_ERR(0, 2596, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2591
+    /* "lxml/etree.pyx":2594
  *         while c_attr is not NULL and c_attr.type != tree.XML_ATTRIBUTE_NODE:
  *             c_attr = c_attr.next
  *         if c_attr is NULL:             # <<<<<<<<<<<<<<
@@ -78105,7 +78187,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
  */
   }
 
-  /* "lxml/etree.pyx":2595
+  /* "lxml/etree.pyx":2598
  *             raise StopIteration
  * 
  *         self._c_attr = c_attr.next             # <<<<<<<<<<<<<<
@@ -78115,7 +78197,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
   __pyx_t_3 = __pyx_v_c_attr->next;
   __pyx_v_self->_c_attr = __pyx_t_3;
 
-  /* "lxml/etree.pyx":2596
+  /* "lxml/etree.pyx":2599
  * 
  *         self._c_attr = c_attr.next
  *         if self._keysvalues == 1:             # <<<<<<<<<<<<<<
@@ -78125,7 +78207,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
   switch (__pyx_v_self->_keysvalues) {
     case 1:
 
-    /* "lxml/etree.pyx":2597
+    /* "lxml/etree.pyx":2600
  *         self._c_attr = c_attr.next
  *         if self._keysvalues == 1:
  *             return _namespacedName(<xmlNode*>c_attr)             # <<<<<<<<<<<<<<
@@ -78133,13 +78215,13 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
  *             return _attributeValue(self._node._c_node, c_attr)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2597, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2600, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2596
+    /* "lxml/etree.pyx":2599
  * 
  *         self._c_attr = c_attr.next
  *         if self._keysvalues == 1:             # <<<<<<<<<<<<<<
@@ -78149,7 +78231,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
     break;
     case 2:
 
-    /* "lxml/etree.pyx":2599
+    /* "lxml/etree.pyx":2602
  *             return _namespacedName(<xmlNode*>c_attr)
  *         elif self._keysvalues == 2:
  *             return _attributeValue(self._node._c_node, c_attr)             # <<<<<<<<<<<<<<
@@ -78157,13 +78239,13 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
  *             return (_namespacedName(<xmlNode*>c_attr),
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_self->_node->_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2599, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_self->_node->_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2602, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2598
+    /* "lxml/etree.pyx":2601
  *         if self._keysvalues == 1:
  *             return _namespacedName(<xmlNode*>c_attr)
  *         elif self._keysvalues == 2:             # <<<<<<<<<<<<<<
@@ -78173,7 +78255,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
     break;
     default:
 
-    /* "lxml/etree.pyx":2601
+    /* "lxml/etree.pyx":2604
  *             return _attributeValue(self._node._c_node, c_attr)
  *         else:
  *             return (_namespacedName(<xmlNode*>c_attr),             # <<<<<<<<<<<<<<
@@ -78181,27 +78263,27 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2601, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2604, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
 
-    /* "lxml/etree.pyx":2602
+    /* "lxml/etree.pyx":2605
  *         else:
  *             return (_namespacedName(<xmlNode*>c_attr),
  *                     _attributeValue(self._node._c_node, c_attr))             # <<<<<<<<<<<<<<
  * 
  * cdef object _attributeIteratorFactory(_Element element, int keysvalues):
  */
-    __pyx_t_5 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_self->_node->_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2602, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_self->_node->_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2605, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
 
-    /* "lxml/etree.pyx":2601
+    /* "lxml/etree.pyx":2604
  *             return _attributeValue(self._node._c_node, c_attr)
  *         else:
  *             return (_namespacedName(<xmlNode*>c_attr),             # <<<<<<<<<<<<<<
  *                     _attributeValue(self._node._c_node, c_attr))
  * 
  */
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2601, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2604, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
@@ -78215,7 +78297,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
     break;
   }
 
-  /* "lxml/etree.pyx":2584
+  /* "lxml/etree.pyx":2587
  *         return self
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -78236,7 +78318,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_AttribIterator_2__next__(struct __pyx_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2604
+/* "lxml/etree.pyx":2607
  *                     _attributeValue(self._node._c_node, c_attr))
  * 
  * cdef object _attributeIteratorFactory(_Element element, int keysvalues):             # <<<<<<<<<<<<<<
@@ -78256,7 +78338,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeIteratorFactory(struct LxmlEleme
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_attributeIteratorFactory", 0);
 
-  /* "lxml/etree.pyx":2606
+  /* "lxml/etree.pyx":2609
  * cdef object _attributeIteratorFactory(_Element element, int keysvalues):
  *     cdef _AttribIterator attribs
  *     if element._c_node.properties is NULL:             # <<<<<<<<<<<<<<
@@ -78266,7 +78348,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeIteratorFactory(struct LxmlEleme
   __pyx_t_1 = ((__pyx_v_element->_c_node->properties == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":2607
+    /* "lxml/etree.pyx":2610
  *     cdef _AttribIterator attribs
  *     if element._c_node.properties is NULL:
  *         return ITER_EMPTY             # <<<<<<<<<<<<<<
@@ -78278,7 +78360,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeIteratorFactory(struct LxmlEleme
     __pyx_r = __pyx_v_4lxml_5etree_ITER_EMPTY;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2606
+    /* "lxml/etree.pyx":2609
  * cdef object _attributeIteratorFactory(_Element element, int keysvalues):
  *     cdef _AttribIterator attribs
  *     if element._c_node.properties is NULL:             # <<<<<<<<<<<<<<
@@ -78287,19 +78369,19 @@ static PyObject *__pyx_f_4lxml_5etree__attributeIteratorFactory(struct LxmlEleme
  */
   }
 
-  /* "lxml/etree.pyx":2608
+  /* "lxml/etree.pyx":2611
  *     if element._c_node.properties is NULL:
  *         return ITER_EMPTY
  *     attribs = _AttribIterator()             # <<<<<<<<<<<<<<
  *     attribs._node = element
  *     attribs._c_attr = element._c_node.properties
  */
-  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__AttribIterator)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2608, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__AttribIterator)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2611, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_attribs = ((struct __pyx_obj_4lxml_5etree__AttribIterator *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2609
+  /* "lxml/etree.pyx":2612
  *         return ITER_EMPTY
  *     attribs = _AttribIterator()
  *     attribs._node = element             # <<<<<<<<<<<<<<
@@ -78312,7 +78394,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeIteratorFactory(struct LxmlEleme
   __Pyx_DECREF(((PyObject *)__pyx_v_attribs->_node));
   __pyx_v_attribs->_node = __pyx_v_element;
 
-  /* "lxml/etree.pyx":2610
+  /* "lxml/etree.pyx":2613
  *     attribs = _AttribIterator()
  *     attribs._node = element
  *     attribs._c_attr = element._c_node.properties             # <<<<<<<<<<<<<<
@@ -78322,7 +78404,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeIteratorFactory(struct LxmlEleme
   __pyx_t_3 = __pyx_v_element->_c_node->properties;
   __pyx_v_attribs->_c_attr = __pyx_t_3;
 
-  /* "lxml/etree.pyx":2611
+  /* "lxml/etree.pyx":2614
  *     attribs._node = element
  *     attribs._c_attr = element._c_node.properties
  *     attribs._keysvalues = keysvalues             # <<<<<<<<<<<<<<
@@ -78331,7 +78413,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeIteratorFactory(struct LxmlEleme
  */
   __pyx_v_attribs->_keysvalues = __pyx_v_keysvalues;
 
-  /* "lxml/etree.pyx":2612
+  /* "lxml/etree.pyx":2615
  *     attribs._c_attr = element._c_node.properties
  *     attribs._keysvalues = keysvalues
  *     return attribs             # <<<<<<<<<<<<<<
@@ -78343,7 +78425,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeIteratorFactory(struct LxmlEleme
   __pyx_r = ((PyObject *)__pyx_v_attribs);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2604
+  /* "lxml/etree.pyx":2607
  *                     _attributeValue(self._node._c_node, c_attr))
  * 
  * cdef object _attributeIteratorFactory(_Element element, int keysvalues):             # <<<<<<<<<<<<<<
@@ -78363,7 +78445,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeIteratorFactory(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2624
+/* "lxml/etree.pyx":2627
  *     cdef char* _href
  *     cdef char* _name
  *     cdef _initTagMatch(self, tag):             # <<<<<<<<<<<<<<
@@ -78382,7 +78464,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_initTagMatch", 0);
 
-  /* "lxml/etree.pyx":2625
+  /* "lxml/etree.pyx":2628
  *     cdef char* _name
  *     cdef _initTagMatch(self, tag):
  *         self._href = NULL             # <<<<<<<<<<<<<<
@@ -78391,7 +78473,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
  */
   __pyx_v_self->_href = NULL;
 
-  /* "lxml/etree.pyx":2626
+  /* "lxml/etree.pyx":2629
  *     cdef _initTagMatch(self, tag):
  *         self._href = NULL
  *         self._name = NULL             # <<<<<<<<<<<<<<
@@ -78400,7 +78482,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
  */
   __pyx_v_self->_name = NULL;
 
-  /* "lxml/etree.pyx":2627
+  /* "lxml/etree.pyx":2630
  *         self._href = NULL
  *         self._name = NULL
  *         if tag is None:             # <<<<<<<<<<<<<<
@@ -78411,7 +78493,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2628
+    /* "lxml/etree.pyx":2631
  *         self._name = NULL
  *         if tag is None:
  *             self._node_type = 0             # <<<<<<<<<<<<<<
@@ -78420,7 +78502,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
  */
     __pyx_v_self->_node_type = 0;
 
-    /* "lxml/etree.pyx":2627
+    /* "lxml/etree.pyx":2630
  *         self._href = NULL
  *         self._name = NULL
  *         if tag is None:             # <<<<<<<<<<<<<<
@@ -78430,21 +78512,21 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2629
+  /* "lxml/etree.pyx":2632
  *         if tag is None:
  *             self._node_type = 0
  *         elif tag is Comment:             # <<<<<<<<<<<<<<
  *             self._node_type = tree.XML_COMMENT_NODE
  *         elif tag is ProcessingInstruction:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Comment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2629, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Comment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2632, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_2 = (__pyx_v_tag == __pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":2630
+    /* "lxml/etree.pyx":2633
  *             self._node_type = 0
  *         elif tag is Comment:
  *             self._node_type = tree.XML_COMMENT_NODE             # <<<<<<<<<<<<<<
@@ -78453,7 +78535,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
  */
     __pyx_v_self->_node_type = XML_COMMENT_NODE;
 
-    /* "lxml/etree.pyx":2629
+    /* "lxml/etree.pyx":2632
  *         if tag is None:
  *             self._node_type = 0
  *         elif tag is Comment:             # <<<<<<<<<<<<<<
@@ -78463,21 +78545,21 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2631
+  /* "lxml/etree.pyx":2634
  *         elif tag is Comment:
  *             self._node_type = tree.XML_COMMENT_NODE
  *         elif tag is ProcessingInstruction:             # <<<<<<<<<<<<<<
  *             self._node_type = tree.XML_PI_NODE
  *         elif tag is Entity:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ProcessingInstruction); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2631, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ProcessingInstruction); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2634, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_1 = (__pyx_v_tag == __pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2632
+    /* "lxml/etree.pyx":2635
  *             self._node_type = tree.XML_COMMENT_NODE
  *         elif tag is ProcessingInstruction:
  *             self._node_type = tree.XML_PI_NODE             # <<<<<<<<<<<<<<
@@ -78486,7 +78568,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
  */
     __pyx_v_self->_node_type = XML_PI_NODE;
 
-    /* "lxml/etree.pyx":2631
+    /* "lxml/etree.pyx":2634
  *         elif tag is Comment:
  *             self._node_type = tree.XML_COMMENT_NODE
  *         elif tag is ProcessingInstruction:             # <<<<<<<<<<<<<<
@@ -78496,21 +78578,21 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2633
+  /* "lxml/etree.pyx":2636
  *         elif tag is ProcessingInstruction:
  *             self._node_type = tree.XML_PI_NODE
  *         elif tag is Entity:             # <<<<<<<<<<<<<<
  *             self._node_type = tree.XML_ENTITY_REF_NODE
  *         elif tag is Element:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Entity); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2633, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Entity); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2636, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_2 = (__pyx_v_tag == __pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":2634
+    /* "lxml/etree.pyx":2637
  *             self._node_type = tree.XML_PI_NODE
  *         elif tag is Entity:
  *             self._node_type = tree.XML_ENTITY_REF_NODE             # <<<<<<<<<<<<<<
@@ -78519,7 +78601,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
  */
     __pyx_v_self->_node_type = XML_ENTITY_REF_NODE;
 
-    /* "lxml/etree.pyx":2633
+    /* "lxml/etree.pyx":2636
  *         elif tag is ProcessingInstruction:
  *             self._node_type = tree.XML_PI_NODE
  *         elif tag is Entity:             # <<<<<<<<<<<<<<
@@ -78529,21 +78611,21 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2635
+  /* "lxml/etree.pyx":2638
  *         elif tag is Entity:
  *             self._node_type = tree.XML_ENTITY_REF_NODE
  *         elif tag is Element:             # <<<<<<<<<<<<<<
  *             self._node_type = tree.XML_ELEMENT_NODE
  *         else:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Element); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2635, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Element); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2638, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_1 = (__pyx_v_tag == __pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2636
+    /* "lxml/etree.pyx":2639
  *             self._node_type = tree.XML_ENTITY_REF_NODE
  *         elif tag is Element:
  *             self._node_type = tree.XML_ELEMENT_NODE             # <<<<<<<<<<<<<<
@@ -78552,7 +78634,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
  */
     __pyx_v_self->_node_type = XML_ELEMENT_NODE;
 
-    /* "lxml/etree.pyx":2635
+    /* "lxml/etree.pyx":2638
  *         elif tag is Entity:
  *             self._node_type = tree.XML_ENTITY_REF_NODE
  *         elif tag is Element:             # <<<<<<<<<<<<<<
@@ -78562,7 +78644,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2638
+  /* "lxml/etree.pyx":2641
  *             self._node_type = tree.XML_ELEMENT_NODE
  *         else:
  *             self._node_type = tree.XML_ELEMENT_NODE             # <<<<<<<<<<<<<<
@@ -78572,14 +78654,14 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
   /*else*/ {
     __pyx_v_self->_node_type = XML_ELEMENT_NODE;
 
-    /* "lxml/etree.pyx":2639
+    /* "lxml/etree.pyx":2642
  *         else:
  *             self._node_type = tree.XML_ELEMENT_NODE
  *             self._pystrings = _getNsTag(tag)             # <<<<<<<<<<<<<<
  *             if self._pystrings[0] is not None:
  *                 self._href = _cstr(self._pystrings[0])
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2639, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2642, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __Pyx_GOTREF(__pyx_v_self->_pystrings);
@@ -78587,33 +78669,33 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
     __pyx_v_self->_pystrings = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":2640
+    /* "lxml/etree.pyx":2643
  *             self._node_type = tree.XML_ELEMENT_NODE
  *             self._pystrings = _getNsTag(tag)
  *             if self._pystrings[0] is not None:             # <<<<<<<<<<<<<<
  *                 self._href = _cstr(self._pystrings[0])
  *             self._name = _cstr(self._pystrings[1])
  */
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_self->_pystrings, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2640, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_self->_pystrings, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2643, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_2 = (__pyx_t_3 != Py_None);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":2641
+      /* "lxml/etree.pyx":2644
  *             self._pystrings = _getNsTag(tag)
  *             if self._pystrings[0] is not None:
  *                 self._href = _cstr(self._pystrings[0])             # <<<<<<<<<<<<<<
  *             self._name = _cstr(self._pystrings[1])
  *             if self._name[0] == c'*' and self._name[1] == c'\0':
  */
-      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_self->_pystrings, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2641, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_self->_pystrings, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2644, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_v_self->_href = PyBytes_AS_STRING(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "lxml/etree.pyx":2640
+      /* "lxml/etree.pyx":2643
  *             self._node_type = tree.XML_ELEMENT_NODE
  *             self._pystrings = _getNsTag(tag)
  *             if self._pystrings[0] is not None:             # <<<<<<<<<<<<<<
@@ -78622,19 +78704,19 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
  */
     }
 
-    /* "lxml/etree.pyx":2642
+    /* "lxml/etree.pyx":2645
  *             if self._pystrings[0] is not None:
  *                 self._href = _cstr(self._pystrings[0])
  *             self._name = _cstr(self._pystrings[1])             # <<<<<<<<<<<<<<
  *             if self._name[0] == c'*' and self._name[1] == c'\0':
  *                 self._name = NULL
  */
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_self->_pystrings, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2642, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_self->_pystrings, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2645, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_self->_name = PyBytes_AS_STRING(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":2643
+    /* "lxml/etree.pyx":2646
  *                 self._href = _cstr(self._pystrings[0])
  *             self._name = _cstr(self._pystrings[1])
  *             if self._name[0] == c'*' and self._name[1] == c'\0':             # <<<<<<<<<<<<<<
@@ -78652,7 +78734,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
     __pyx_L6_bool_binop_done:;
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":2644
+      /* "lxml/etree.pyx":2647
  *             self._name = _cstr(self._pystrings[1])
  *             if self._name[0] == c'*' and self._name[1] == c'\0':
  *                 self._name = NULL             # <<<<<<<<<<<<<<
@@ -78661,7 +78743,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
  */
       __pyx_v_self->_name = NULL;
 
-      /* "lxml/etree.pyx":2643
+      /* "lxml/etree.pyx":2646
  *                 self._href = _cstr(self._pystrings[0])
  *             self._name = _cstr(self._pystrings[1])
  *             if self._name[0] == c'*' and self._name[1] == c'\0':             # <<<<<<<<<<<<<<
@@ -78672,7 +78754,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":2624
+  /* "lxml/etree.pyx":2627
  *     cdef char* _href
  *     cdef char* _name
  *     cdef _initTagMatch(self, tag):             # <<<<<<<<<<<<<<
@@ -78693,7 +78775,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch(struct
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2654
+/* "lxml/etree.pyx":2657
  *     cdef _Element _node
  *     cdef _node_to_node_function _next_element
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -78719,7 +78801,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator___iter__(struct LxmlEl
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__iter__", 0);
 
-  /* "lxml/etree.pyx":2655
+  /* "lxml/etree.pyx":2658
  *     cdef _node_to_node_function _next_element
  *     def __iter__(self):
  *         return self             # <<<<<<<<<<<<<<
@@ -78731,7 +78813,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator___iter__(struct LxmlEl
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2654
+  /* "lxml/etree.pyx":2657
  *     cdef _Element _node
  *     cdef _node_to_node_function _next_element
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -78746,7 +78828,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator___iter__(struct LxmlEl
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2657
+/* "lxml/etree.pyx":2660
  *         return self
  * 
  *     cdef void _storeNext(self, _Element node):             # <<<<<<<<<<<<<<
@@ -78766,7 +78848,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_storeNext", 0);
 
-  /* "lxml/etree.pyx":2659
+  /* "lxml/etree.pyx":2662
  *     cdef void _storeNext(self, _Element node):
  *         cdef xmlNode* c_node
  *         c_node = self._next_element(node._c_node)             # <<<<<<<<<<<<<<
@@ -78775,7 +78857,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
  */
   __pyx_v_c_node = __pyx_v_self->_next_element(__pyx_v_node->_c_node);
 
-  /* "lxml/etree.pyx":2660
+  /* "lxml/etree.pyx":2663
  *         cdef xmlNode* c_node
  *         c_node = self._next_element(node._c_node)
  *         while c_node is not NULL and \             # <<<<<<<<<<<<<<
@@ -78790,7 +78872,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
       goto __pyx_L5_bool_binop_done;
     }
 
-    /* "lxml/etree.pyx":2661
+    /* "lxml/etree.pyx":2664
  *         c_node = self._next_element(node._c_node)
  *         while c_node is not NULL and \
  *                   self._node_type != 0 and \             # <<<<<<<<<<<<<<
@@ -78804,7 +78886,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
       goto __pyx_L5_bool_binop_done;
     }
 
-    /* "lxml/etree.pyx":2662
+    /* "lxml/etree.pyx":2665
  *         while c_node is not NULL and \
  *                   self._node_type != 0 and \
  *                   (<tree.xmlElementType>self._node_type != c_node.type or             # <<<<<<<<<<<<<<
@@ -78818,7 +78900,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
       goto __pyx_L5_bool_binop_done;
     }
 
-    /* "lxml/etree.pyx":2663
+    /* "lxml/etree.pyx":2666
  *                   self._node_type != 0 and \
  *                   (<tree.xmlElementType>self._node_type != c_node.type or
  *                    not _tagMatches(c_node, <const_xmlChar*>self._href, <const_xmlChar*>self._name)):             # <<<<<<<<<<<<<<
@@ -78830,7 +78912,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
     __pyx_L5_bool_binop_done:;
     if (!__pyx_t_1) break;
 
-    /* "lxml/etree.pyx":2664
+    /* "lxml/etree.pyx":2667
  *                   (<tree.xmlElementType>self._node_type != c_node.type or
  *                    not _tagMatches(c_node, <const_xmlChar*>self._href, <const_xmlChar*>self._name)):
  *             c_node = self._next_element(c_node)             # <<<<<<<<<<<<<<
@@ -78840,7 +78922,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
     __pyx_v_c_node = __pyx_v_self->_next_element(__pyx_v_c_node);
   }
 
-  /* "lxml/etree.pyx":2665
+  /* "lxml/etree.pyx":2668
  *                    not _tagMatches(c_node, <const_xmlChar*>self._href, <const_xmlChar*>self._name)):
  *             c_node = self._next_element(c_node)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -78850,7 +78932,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":2666
+    /* "lxml/etree.pyx":2669
  *             c_node = self._next_element(c_node)
  *         if c_node is NULL:
  *             self._node = None             # <<<<<<<<<<<<<<
@@ -78863,7 +78945,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
     __Pyx_DECREF(((PyObject *)__pyx_v_self->_node));
     __pyx_v_self->_node = ((struct LxmlElement *)Py_None);
 
-    /* "lxml/etree.pyx":2665
+    /* "lxml/etree.pyx":2668
  *                    not _tagMatches(c_node, <const_xmlChar*>self._href, <const_xmlChar*>self._name)):
  *             c_node = self._next_element(c_node)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -78873,7 +78955,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
     goto __pyx_L9;
   }
 
-  /* "lxml/etree.pyx":2669
+  /* "lxml/etree.pyx":2672
  *         else:
  *             # Python ref:
  *             self._node = _elementFactory(node._doc, c_node)             # <<<<<<<<<<<<<<
@@ -78883,7 +78965,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
   /*else*/ {
     __pyx_t_3 = ((PyObject *)__pyx_v_node->_doc);
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_3), __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2669, __pyx_L1_error)
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_3), __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2672, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GIVEREF(__pyx_t_4);
@@ -78894,7 +78976,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
   }
   __pyx_L9:;
 
-  /* "lxml/etree.pyx":2657
+  /* "lxml/etree.pyx":2660
  *         return self
  * 
  *     cdef void _storeNext(self, _Element node):             # <<<<<<<<<<<<<<
@@ -78912,7 +78994,7 @@ static void __pyx_f_4lxml_5etree_16_ElementIterator__storeNext(struct LxmlElemen
   __Pyx_RefNannyFinishContext();
 }
 
-/* "lxml/etree.pyx":2671
+/* "lxml/etree.pyx":2674
  *             self._node = _elementFactory(node._doc, c_node)
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -78945,7 +79027,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator_2__next__(struct LxmlE
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__next__", 0);
 
-  /* "lxml/etree.pyx":2674
+  /* "lxml/etree.pyx":2677
  *         cdef xmlNode* c_node
  *         cdef _Element current_node
  *         if self._node is None:             # <<<<<<<<<<<<<<
@@ -78956,7 +79038,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator_2__next__(struct LxmlE
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":2675
+    /* "lxml/etree.pyx":2678
  *         cdef _Element current_node
  *         if self._node is None:
  *             raise StopIteration             # <<<<<<<<<<<<<<
@@ -78964,9 +79046,9 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator_2__next__(struct LxmlE
  *         current_node = self._node
  */
     __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0, 0);
-    __PYX_ERR(0, 2675, __pyx_L1_error)
+    __PYX_ERR(0, 2678, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2674
+    /* "lxml/etree.pyx":2677
  *         cdef xmlNode* c_node
  *         cdef _Element current_node
  *         if self._node is None:             # <<<<<<<<<<<<<<
@@ -78975,7 +79057,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator_2__next__(struct LxmlE
  */
   }
 
-  /* "lxml/etree.pyx":2677
+  /* "lxml/etree.pyx":2680
  *             raise StopIteration
  *         # Python ref:
  *         current_node = self._node             # <<<<<<<<<<<<<<
@@ -78987,7 +79069,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator_2__next__(struct LxmlE
   __pyx_v_current_node = ((struct LxmlElement *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":2678
+  /* "lxml/etree.pyx":2681
  *         # Python ref:
  *         current_node = self._node
  *         self._storeNext(current_node)             # <<<<<<<<<<<<<<
@@ -78996,7 +79078,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator_2__next__(struct LxmlE
  */
   ((struct __pyx_vtabstruct_4lxml_5etree__ElementIterator *)__pyx_v_self->__pyx_base.__pyx_vtab)->_storeNext(__pyx_v_self, __pyx_v_current_node);
 
-  /* "lxml/etree.pyx":2679
+  /* "lxml/etree.pyx":2682
  *         current_node = self._node
  *         self._storeNext(current_node)
  *         return current_node             # <<<<<<<<<<<<<<
@@ -79008,7 +79090,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator_2__next__(struct LxmlE
   __pyx_r = ((PyObject *)__pyx_v_current_node);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2671
+  /* "lxml/etree.pyx":2674
  *             self._node = _elementFactory(node._doc, c_node)
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -79028,7 +79110,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16_ElementIterator_2__next__(struct LxmlE
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2694
+/* "lxml/etree.pyx":2697
  *     cdef int _node_types
  * 
  *     def __cinit__(self, tags):             # <<<<<<<<<<<<<<
@@ -79065,7 +79147,7 @@ static int __pyx_pw_4lxml_5etree_16_MultiTagMatcher_1__cinit__(PyObject *__pyx_v
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2694, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2697, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -79076,7 +79158,7 @@ static int __pyx_pw_4lxml_5etree_16_MultiTagMatcher_1__cinit__(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2694, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2697, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._MultiTagMatcher.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -79098,14 +79180,14 @@ static int __pyx_pf_4lxml_5etree_16_MultiTagMatcher___cinit__(struct __pyx_obj_4
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "lxml/etree.pyx":2695
+  /* "lxml/etree.pyx":2698
  * 
  *     def __cinit__(self, tags):
  *         self._py_tags = []             # <<<<<<<<<<<<<<
  *         self.initTagMatch(tags)
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2695, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2698, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_py_tags);
@@ -79113,18 +79195,18 @@ static int __pyx_pf_4lxml_5etree_16_MultiTagMatcher___cinit__(struct __pyx_obj_4
   __pyx_v_self->_py_tags = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2696
+  /* "lxml/etree.pyx":2699
  *     def __cinit__(self, tags):
  *         self._py_tags = []
  *         self.initTagMatch(tags)             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(__pyx_v_self, __pyx_v_tags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2696, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(__pyx_v_self, __pyx_v_tags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2699, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2694
+  /* "lxml/etree.pyx":2697
  *     cdef int _node_types
  * 
  *     def __cinit__(self, tags):             # <<<<<<<<<<<<<<
@@ -79144,7 +79226,7 @@ static int __pyx_pf_4lxml_5etree_16_MultiTagMatcher___cinit__(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2698
+/* "lxml/etree.pyx":2701
  *         self.initTagMatch(tags)
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -79167,7 +79249,7 @@ static void __pyx_pf_4lxml_5etree_16_MultiTagMatcher_2__dealloc__(struct __pyx_o
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "lxml/etree.pyx":2699
+  /* "lxml/etree.pyx":2702
  * 
  *     def __dealloc__(self):
  *         self._clear()             # <<<<<<<<<<<<<<
@@ -79176,7 +79258,7 @@ static void __pyx_pf_4lxml_5etree_16_MultiTagMatcher_2__dealloc__(struct __pyx_o
  */
   __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(__pyx_v_self);
 
-  /* "lxml/etree.pyx":2698
+  /* "lxml/etree.pyx":2701
  *         self.initTagMatch(tags)
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -79188,7 +79270,7 @@ static void __pyx_pf_4lxml_5etree_16_MultiTagMatcher_2__dealloc__(struct __pyx_o
   __Pyx_RefNannyFinishContext();
 }
 
-/* "lxml/etree.pyx":2701
+/* "lxml/etree.pyx":2704
  *         self._clear()
  * 
  *     cdef bint rejectsAll(self):             # <<<<<<<<<<<<<<
@@ -79203,7 +79285,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAll(struct __pyx_obj_4
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("rejectsAll", 0);
 
-  /* "lxml/etree.pyx":2702
+  /* "lxml/etree.pyx":2705
  * 
  *     cdef bint rejectsAll(self):
  *         return not self._tag_count and not self._node_types             # <<<<<<<<<<<<<<
@@ -79222,7 +79304,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAll(struct __pyx_obj_4
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2701
+  /* "lxml/etree.pyx":2704
  *         self._clear()
  * 
  *     cdef bint rejectsAll(self):             # <<<<<<<<<<<<<<
@@ -79236,7 +79318,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAll(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2704
+/* "lxml/etree.pyx":2707
  *         return not self._tag_count and not self._node_types
  * 
  *     cdef bint rejectsAllAttributes(self):             # <<<<<<<<<<<<<<
@@ -79249,7 +79331,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAllAttributes(struct _
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("rejectsAllAttributes", 0);
 
-  /* "lxml/etree.pyx":2705
+  /* "lxml/etree.pyx":2708
  * 
  *     cdef bint rejectsAllAttributes(self):
  *         return not self._tag_count             # <<<<<<<<<<<<<<
@@ -79259,7 +79341,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAllAttributes(struct _
   __pyx_r = (!(__pyx_v_self->_tag_count != 0));
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2704
+  /* "lxml/etree.pyx":2707
  *         return not self._tag_count and not self._node_types
  * 
  *     cdef bint rejectsAllAttributes(self):             # <<<<<<<<<<<<<<
@@ -79273,7 +79355,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAllAttributes(struct _
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2707
+/* "lxml/etree.pyx":2710
  *         return not self._tag_count
  * 
  *     cdef bint matchesType(self, int node_type):             # <<<<<<<<<<<<<<
@@ -79288,7 +79370,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesType(struct __pyx_obj_
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("matchesType", 0);
 
-  /* "lxml/etree.pyx":2708
+  /* "lxml/etree.pyx":2711
  * 
  *     cdef bint matchesType(self, int node_type):
  *         if node_type == tree.XML_ELEMENT_NODE and self._tag_count:             # <<<<<<<<<<<<<<
@@ -79306,7 +79388,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesType(struct __pyx_obj_
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":2709
+    /* "lxml/etree.pyx":2712
  *     cdef bint matchesType(self, int node_type):
  *         if node_type == tree.XML_ELEMENT_NODE and self._tag_count:
  *             return True             # <<<<<<<<<<<<<<
@@ -79316,7 +79398,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesType(struct __pyx_obj_
     __pyx_r = 1;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2708
+    /* "lxml/etree.pyx":2711
  * 
  *     cdef bint matchesType(self, int node_type):
  *         if node_type == tree.XML_ELEMENT_NODE and self._tag_count:             # <<<<<<<<<<<<<<
@@ -79325,7 +79407,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesType(struct __pyx_obj_
  */
   }
 
-  /* "lxml/etree.pyx":2710
+  /* "lxml/etree.pyx":2713
  *         if node_type == tree.XML_ELEMENT_NODE and self._tag_count:
  *             return True
  *         return self._node_types & (1 << node_type)             # <<<<<<<<<<<<<<
@@ -79335,7 +79417,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesType(struct __pyx_obj_
   __pyx_r = (__pyx_v_self->_node_types & (1 << __pyx_v_node_type));
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2707
+  /* "lxml/etree.pyx":2710
  *         return not self._tag_count
  * 
  *     cdef bint matchesType(self, int node_type):             # <<<<<<<<<<<<<<
@@ -79349,7 +79431,7 @@ static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesType(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2712
+/* "lxml/etree.pyx":2715
  *         return self._node_types & (1 << node_type)
  * 
  *     cdef void _clear(self):             # <<<<<<<<<<<<<<
@@ -79367,7 +79449,7 @@ static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxm
   size_t __pyx_t_4;
   __Pyx_RefNannySetupContext("_clear", 0);
 
-  /* "lxml/etree.pyx":2714
+  /* "lxml/etree.pyx":2717
  *     cdef void _clear(self):
  *         cdef size_t i, count
  *         count = self._tag_count             # <<<<<<<<<<<<<<
@@ -79377,7 +79459,7 @@ static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxm
   __pyx_t_1 = __pyx_v_self->_tag_count;
   __pyx_v_count = __pyx_t_1;
 
-  /* "lxml/etree.pyx":2715
+  /* "lxml/etree.pyx":2718
  *         cdef size_t i, count
  *         count = self._tag_count
  *         self._tag_count = 0             # <<<<<<<<<<<<<<
@@ -79386,7 +79468,7 @@ static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxm
  */
   __pyx_v_self->_tag_count = 0;
 
-  /* "lxml/etree.pyx":2716
+  /* "lxml/etree.pyx":2719
  *         count = self._tag_count
  *         self._tag_count = 0
  *         if self._cached_tags:             # <<<<<<<<<<<<<<
@@ -79396,7 +79478,7 @@ static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxm
   __pyx_t_2 = (__pyx_v_self->_cached_tags != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2717
+    /* "lxml/etree.pyx":2720
  *         self._tag_count = 0
  *         if self._cached_tags:
  *             for i in xrange(count):             # <<<<<<<<<<<<<<
@@ -79408,7 +79490,7 @@ static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxm
     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
       __pyx_v_i = __pyx_t_4;
 
-      /* "lxml/etree.pyx":2718
+      /* "lxml/etree.pyx":2721
  *         if self._cached_tags:
  *             for i in xrange(count):
  *                 cpython.ref.Py_XDECREF(self._cached_tags[i].href)             # <<<<<<<<<<<<<<
@@ -79418,7 +79500,7 @@ static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxm
       Py_XDECREF((__pyx_v_self->_cached_tags[__pyx_v_i]).href);
     }
 
-    /* "lxml/etree.pyx":2719
+    /* "lxml/etree.pyx":2722
  *             for i in xrange(count):
  *                 cpython.ref.Py_XDECREF(self._cached_tags[i].href)
  *             python.lxml_free(self._cached_tags)             # <<<<<<<<<<<<<<
@@ -79427,7 +79509,7 @@ static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxm
  */
     lxml_free(__pyx_v_self->_cached_tags);
 
-    /* "lxml/etree.pyx":2720
+    /* "lxml/etree.pyx":2723
  *                 cpython.ref.Py_XDECREF(self._cached_tags[i].href)
  *             python.lxml_free(self._cached_tags)
  *             self._cached_tags = NULL             # <<<<<<<<<<<<<<
@@ -79436,7 +79518,7 @@ static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxm
  */
     __pyx_v_self->_cached_tags = NULL;
 
-    /* "lxml/etree.pyx":2716
+    /* "lxml/etree.pyx":2719
  *         count = self._tag_count
  *         self._tag_count = 0
  *         if self._cached_tags:             # <<<<<<<<<<<<<<
@@ -79445,7 +79527,7 @@ static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxm
  */
   }
 
-  /* "lxml/etree.pyx":2712
+  /* "lxml/etree.pyx":2715
  *         return self._node_types & (1 << node_type)
  * 
  *     cdef void _clear(self):             # <<<<<<<<<<<<<<
@@ -79457,7 +79539,7 @@ static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxm
   __Pyx_RefNannyFinishContext();
 }
 
-/* "lxml/etree.pyx":2722
+/* "lxml/etree.pyx":2725
  *             self._cached_tags = NULL
  * 
  *     cdef initTagMatch(self, tags):             # <<<<<<<<<<<<<<
@@ -79478,7 +79560,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("initTagMatch", 0);
 
-  /* "lxml/etree.pyx":2723
+  /* "lxml/etree.pyx":2726
  * 
  *     cdef initTagMatch(self, tags):
  *         self._cached_doc = None             # <<<<<<<<<<<<<<
@@ -79491,7 +79573,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __p
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_cached_doc));
   __pyx_v_self->_cached_doc = ((struct LxmlDocument *)Py_None);
 
-  /* "lxml/etree.pyx":2724
+  /* "lxml/etree.pyx":2727
  *     cdef initTagMatch(self, tags):
  *         self._cached_doc = None
  *         del self._py_tags[:]             # <<<<<<<<<<<<<<
@@ -79500,11 +79582,11 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __p
  */
   if (unlikely(__pyx_v_self->_py_tags == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 2724, __pyx_L1_error)
+    __PYX_ERR(0, 2727, __pyx_L1_error)
   }
-  if (__Pyx_PyObject_DelSlice(__pyx_v_self->_py_tags, 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) __PYX_ERR(0, 2724, __pyx_L1_error)
+  if (__Pyx_PyObject_DelSlice(__pyx_v_self->_py_tags, 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) __PYX_ERR(0, 2727, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2725
+  /* "lxml/etree.pyx":2728
  *         self._cached_doc = None
  *         del self._py_tags[:]
  *         self._clear()             # <<<<<<<<<<<<<<
@@ -79513,7 +79595,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __p
  */
   __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(__pyx_v_self);
 
-  /* "lxml/etree.pyx":2726
+  /* "lxml/etree.pyx":2729
  *         del self._py_tags[:]
  *         self._clear()
  *         if tags is None or tags == ():             # <<<<<<<<<<<<<<
@@ -79527,14 +79609,14 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __p
     __pyx_t_1 = __pyx_t_3;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_4 = PyObject_RichCompare(__pyx_v_tags, __pyx_empty_tuple, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2726, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2726, __pyx_L1_error)
+  __pyx_t_4 = PyObject_RichCompare(__pyx_v_tags, __pyx_empty_tuple, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2729, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2729, __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) {
 
-    /* "lxml/etree.pyx":2728
+    /* "lxml/etree.pyx":2731
  *         if tags is None or tags == ():
  *             # no selection in tags argument => match anything
  *             self._node_types = (             # <<<<<<<<<<<<<<
@@ -79543,7 +79625,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __p
  */
     __pyx_v_self->_node_types = ((((1 << XML_COMMENT_NODE) | (1 << XML_PI_NODE)) | (1 << XML_ENTITY_REF_NODE)) | (1 << XML_ELEMENT_NODE));
 
-    /* "lxml/etree.pyx":2726
+    /* "lxml/etree.pyx":2729
  *         del self._py_tags[:]
  *         self._clear()
  *         if tags is None or tags == ():             # <<<<<<<<<<<<<<
@@ -79553,7 +79635,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __p
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2734
+  /* "lxml/etree.pyx":2737
  *                 1 << tree.XML_ELEMENT_NODE)
  *         else:
  *             self._node_types = 0             # <<<<<<<<<<<<<<
@@ -79563,23 +79645,23 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __p
   /*else*/ {
     __pyx_v_self->_node_types = 0;
 
-    /* "lxml/etree.pyx":2735
+    /* "lxml/etree.pyx":2738
  *         else:
  *             self._node_types = 0
  *             self._storeTags(tags, set())             # <<<<<<<<<<<<<<
  * 
  *     cdef _storeTags(self, tag, set seen):
  */
-    __pyx_t_4 = PySet_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2735, __pyx_L1_error)
+    __pyx_t_4 = PySet_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2738, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(__pyx_v_self, __pyx_v_tags, ((PyObject*)__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2735, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(__pyx_v_self, __pyx_v_tags, ((PyObject*)__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2738, __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;
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":2722
+  /* "lxml/etree.pyx":2725
  *             self._cached_tags = NULL
  * 
  *     cdef initTagMatch(self, tags):             # <<<<<<<<<<<<<<
@@ -79601,7 +79683,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2737
+/* "lxml/etree.pyx":2740
  *             self._storeTags(tags, set())
  * 
  *     cdef _storeTags(self, tag, set seen):             # <<<<<<<<<<<<<<
@@ -79628,21 +79710,21 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_storeTags", 0);
 
-  /* "lxml/etree.pyx":2738
+  /* "lxml/etree.pyx":2741
  * 
  *     cdef _storeTags(self, tag, set seen):
  *         if tag is Comment:             # <<<<<<<<<<<<<<
  *             self._node_types |= 1 << tree.XML_COMMENT_NODE
  *         elif tag is ProcessingInstruction:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Comment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2738, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Comment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2741, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = (__pyx_v_tag == __pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2739
+    /* "lxml/etree.pyx":2742
  *     cdef _storeTags(self, tag, set seen):
  *         if tag is Comment:
  *             self._node_types |= 1 << tree.XML_COMMENT_NODE             # <<<<<<<<<<<<<<
@@ -79651,7 +79733,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
     __pyx_v_self->_node_types = (__pyx_v_self->_node_types | (1 << XML_COMMENT_NODE));
 
-    /* "lxml/etree.pyx":2738
+    /* "lxml/etree.pyx":2741
  * 
  *     cdef _storeTags(self, tag, set seen):
  *         if tag is Comment:             # <<<<<<<<<<<<<<
@@ -79661,21 +79743,21 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2740
+  /* "lxml/etree.pyx":2743
  *         if tag is Comment:
  *             self._node_types |= 1 << tree.XML_COMMENT_NODE
  *         elif tag is ProcessingInstruction:             # <<<<<<<<<<<<<<
  *             self._node_types |= 1 << tree.XML_PI_NODE
  *         elif tag is Entity:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ProcessingInstruction); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2740, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ProcessingInstruction); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2743, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = (__pyx_v_tag == __pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2741
+    /* "lxml/etree.pyx":2744
  *             self._node_types |= 1 << tree.XML_COMMENT_NODE
  *         elif tag is ProcessingInstruction:
  *             self._node_types |= 1 << tree.XML_PI_NODE             # <<<<<<<<<<<<<<
@@ -79684,7 +79766,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
     __pyx_v_self->_node_types = (__pyx_v_self->_node_types | (1 << XML_PI_NODE));
 
-    /* "lxml/etree.pyx":2740
+    /* "lxml/etree.pyx":2743
  *         if tag is Comment:
  *             self._node_types |= 1 << tree.XML_COMMENT_NODE
  *         elif tag is ProcessingInstruction:             # <<<<<<<<<<<<<<
@@ -79694,21 +79776,21 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2742
+  /* "lxml/etree.pyx":2745
  *         elif tag is ProcessingInstruction:
  *             self._node_types |= 1 << tree.XML_PI_NODE
  *         elif tag is Entity:             # <<<<<<<<<<<<<<
  *             self._node_types |= 1 << tree.XML_ENTITY_REF_NODE
  *         elif tag is Element:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Entity); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2742, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Entity); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2745, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = (__pyx_v_tag == __pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2743
+    /* "lxml/etree.pyx":2746
  *             self._node_types |= 1 << tree.XML_PI_NODE
  *         elif tag is Entity:
  *             self._node_types |= 1 << tree.XML_ENTITY_REF_NODE             # <<<<<<<<<<<<<<
@@ -79717,7 +79799,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
     __pyx_v_self->_node_types = (__pyx_v_self->_node_types | (1 << XML_ENTITY_REF_NODE));
 
-    /* "lxml/etree.pyx":2742
+    /* "lxml/etree.pyx":2745
  *         elif tag is ProcessingInstruction:
  *             self._node_types |= 1 << tree.XML_PI_NODE
  *         elif tag is Entity:             # <<<<<<<<<<<<<<
@@ -79727,21 +79809,21 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2744
+  /* "lxml/etree.pyx":2747
  *         elif tag is Entity:
  *             self._node_types |= 1 << tree.XML_ENTITY_REF_NODE
  *         elif tag is Element:             # <<<<<<<<<<<<<<
  *             self._node_types |= 1 << tree.XML_ELEMENT_NODE
  *         elif python._isString(tag):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Element); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2744, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Element); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2747, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = (__pyx_v_tag == __pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2745
+    /* "lxml/etree.pyx":2748
  *             self._node_types |= 1 << tree.XML_ENTITY_REF_NODE
  *         elif tag is Element:
  *             self._node_types |= 1 << tree.XML_ELEMENT_NODE             # <<<<<<<<<<<<<<
@@ -79750,7 +79832,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
     __pyx_v_self->_node_types = (__pyx_v_self->_node_types | (1 << XML_ELEMENT_NODE));
 
-    /* "lxml/etree.pyx":2744
+    /* "lxml/etree.pyx":2747
  *         elif tag is Entity:
  *             self._node_types |= 1 << tree.XML_ENTITY_REF_NODE
  *         elif tag is Element:             # <<<<<<<<<<<<<<
@@ -79760,7 +79842,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2746
+  /* "lxml/etree.pyx":2749
  *         elif tag is Element:
  *             self._node_types |= 1 << tree.XML_ELEMENT_NODE
  *         elif python._isString(tag):             # <<<<<<<<<<<<<<
@@ -79770,7 +79852,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
   __pyx_t_2 = (_isString(__pyx_v_tag) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2747
+    /* "lxml/etree.pyx":2750
  *             self._node_types |= 1 << tree.XML_ELEMENT_NODE
  *         elif python._isString(tag):
  *             if tag in seen:             # <<<<<<<<<<<<<<
@@ -79779,13 +79861,13 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
     if (unlikely(__pyx_v_seen == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-      __PYX_ERR(0, 2747, __pyx_L1_error)
+      __PYX_ERR(0, 2750, __pyx_L1_error)
     }
-    __pyx_t_2 = (__Pyx_PySet_ContainsTF(__pyx_v_tag, __pyx_v_seen, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2747, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySet_ContainsTF(__pyx_v_tag, __pyx_v_seen, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2750, __pyx_L1_error)
     __pyx_t_3 = (__pyx_t_2 != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/etree.pyx":2748
+      /* "lxml/etree.pyx":2751
  *         elif python._isString(tag):
  *             if tag in seen:
  *                 return             # <<<<<<<<<<<<<<
@@ -79796,7 +79878,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
       __pyx_r = Py_None; __Pyx_INCREF(Py_None);
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":2747
+      /* "lxml/etree.pyx":2750
  *             self._node_types |= 1 << tree.XML_ELEMENT_NODE
  *         elif python._isString(tag):
  *             if tag in seen:             # <<<<<<<<<<<<<<
@@ -79805,7 +79887,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
     }
 
-    /* "lxml/etree.pyx":2749
+    /* "lxml/etree.pyx":2752
  *             if tag in seen:
  *                 return
  *             seen.add(tag)             # <<<<<<<<<<<<<<
@@ -79814,11 +79896,11 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
     if (unlikely(__pyx_v_seen == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add");
-      __PYX_ERR(0, 2749, __pyx_L1_error)
+      __PYX_ERR(0, 2752, __pyx_L1_error)
     }
-    __pyx_t_4 = PySet_Add(__pyx_v_seen, __pyx_v_tag); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2749, __pyx_L1_error)
+    __pyx_t_4 = PySet_Add(__pyx_v_seen, __pyx_v_tag); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2752, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2750
+    /* "lxml/etree.pyx":2753
  *                 return
  *             seen.add(tag)
  *             if tag in ('*', '{*}*'):             # <<<<<<<<<<<<<<
@@ -79827,20 +79909,20 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
     __Pyx_INCREF(__pyx_v_tag);
     __pyx_t_1 = __pyx_v_tag;
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_kp_s__42, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2750, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_kp_s__42, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2753, __pyx_L1_error)
     if (!__pyx_t_2) {
     } else {
       __pyx_t_3 = __pyx_t_2;
       goto __pyx_L6_bool_binop_done;
     }
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_kp_s__43, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2750, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_kp_s__43, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2753, __pyx_L1_error)
     __pyx_t_3 = __pyx_t_2;
     __pyx_L6_bool_binop_done:;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":2751
+      /* "lxml/etree.pyx":2754
  *             seen.add(tag)
  *             if tag in ('*', '{*}*'):
  *                 self._node_types |= 1 << tree.XML_ELEMENT_NODE             # <<<<<<<<<<<<<<
@@ -79849,7 +79931,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
       __pyx_v_self->_node_types = (__pyx_v_self->_node_types | (1 << XML_ELEMENT_NODE));
 
-      /* "lxml/etree.pyx":2750
+      /* "lxml/etree.pyx":2753
  *                 return
  *             seen.add(tag)
  *             if tag in ('*', '{*}*'):             # <<<<<<<<<<<<<<
@@ -79859,7 +79941,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
       goto __pyx_L5;
     }
 
-    /* "lxml/etree.pyx":2753
+    /* "lxml/etree.pyx":2756
  *                 self._node_types |= 1 << tree.XML_ELEMENT_NODE
  *             else:
  *                 href, name = _getNsTag(tag)             # <<<<<<<<<<<<<<
@@ -79867,7 +79949,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  *                     name = None
  */
     /*else*/ {
-      __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2753, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2756, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       if (likely(__pyx_t_1 != Py_None)) {
         PyObject* sequence = __pyx_t_1;
@@ -79875,7 +79957,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(0, 2753, __pyx_L1_error)
+          __PYX_ERR(0, 2756, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
@@ -79883,31 +79965,31 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
         __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, 2753, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2756, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2753, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2756, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       } else {
-        __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 2753, __pyx_L1_error)
+        __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 2756, __pyx_L1_error)
       }
       __pyx_v_href = __pyx_t_5;
       __pyx_t_5 = 0;
       __pyx_v_name = __pyx_t_6;
       __pyx_t_6 = 0;
 
-      /* "lxml/etree.pyx":2754
+      /* "lxml/etree.pyx":2757
  *             else:
  *                 href, name = _getNsTag(tag)
  *                 if name == b'*':             # <<<<<<<<<<<<<<
  *                     name = None
  *                 if href is None:
  */
-      __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_kp_b__42, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2754, __pyx_L1_error)
+      __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_kp_b__42, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2757, __pyx_L1_error)
       if (__pyx_t_2) {
 
-        /* "lxml/etree.pyx":2755
+        /* "lxml/etree.pyx":2758
  *                 href, name = _getNsTag(tag)
  *                 if name == b'*':
  *                     name = None             # <<<<<<<<<<<<<<
@@ -79917,7 +79999,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
         __Pyx_INCREF(Py_None);
         __Pyx_DECREF_SET(__pyx_v_name, Py_None);
 
-        /* "lxml/etree.pyx":2754
+        /* "lxml/etree.pyx":2757
  *             else:
  *                 href, name = _getNsTag(tag)
  *                 if name == b'*':             # <<<<<<<<<<<<<<
@@ -79926,7 +80008,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
       }
 
-      /* "lxml/etree.pyx":2756
+      /* "lxml/etree.pyx":2759
  *                 if name == b'*':
  *                     name = None
  *                 if href is None:             # <<<<<<<<<<<<<<
@@ -79937,7 +80019,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
       __pyx_t_3 = (__pyx_t_2 != 0);
       if (__pyx_t_3) {
 
-        /* "lxml/etree.pyx":2757
+        /* "lxml/etree.pyx":2760
  *                     name = None
  *                 if href is None:
  *                     href = b''  # no namespace             # <<<<<<<<<<<<<<
@@ -79947,7 +80029,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
         __Pyx_INCREF(__pyx_kp_b__12);
         __Pyx_DECREF_SET(__pyx_v_href, __pyx_kp_b__12);
 
-        /* "lxml/etree.pyx":2756
+        /* "lxml/etree.pyx":2759
  *                 if name == b'*':
  *                     name = None
  *                 if href is None:             # <<<<<<<<<<<<<<
@@ -79957,17 +80039,17 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
         goto __pyx_L9;
       }
 
-      /* "lxml/etree.pyx":2758
+      /* "lxml/etree.pyx":2761
  *                 if href is None:
  *                     href = b''  # no namespace
  *                 elif href == b'*':             # <<<<<<<<<<<<<<
  *                     href = None  # wildcard: any namespace, including none
  *                 self._py_tags.append((href, name))
  */
-      __pyx_t_3 = (__Pyx_PyBytes_Equals(__pyx_v_href, __pyx_kp_b__42, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2758, __pyx_L1_error)
+      __pyx_t_3 = (__Pyx_PyBytes_Equals(__pyx_v_href, __pyx_kp_b__42, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2761, __pyx_L1_error)
       if (__pyx_t_3) {
 
-        /* "lxml/etree.pyx":2759
+        /* "lxml/etree.pyx":2762
  *                     href = b''  # no namespace
  *                 elif href == b'*':
  *                     href = None  # wildcard: any namespace, including none             # <<<<<<<<<<<<<<
@@ -79977,7 +80059,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
         __Pyx_INCREF(Py_None);
         __Pyx_DECREF_SET(__pyx_v_href, Py_None);
 
-        /* "lxml/etree.pyx":2758
+        /* "lxml/etree.pyx":2761
  *                 if href is None:
  *                     href = b''  # no namespace
  *                 elif href == b'*':             # <<<<<<<<<<<<<<
@@ -79987,7 +80069,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
       }
       __pyx_L9:;
 
-      /* "lxml/etree.pyx":2760
+      /* "lxml/etree.pyx":2763
  *                 elif href == b'*':
  *                     href = None  # wildcard: any namespace, including none
  *                 self._py_tags.append((href, name))             # <<<<<<<<<<<<<<
@@ -79996,9 +80078,9 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
       if (unlikely(__pyx_v_self->_py_tags == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-        __PYX_ERR(0, 2760, __pyx_L1_error)
+        __PYX_ERR(0, 2763, __pyx_L1_error)
       }
-      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2760, __pyx_L1_error)
+      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2763, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_v_href);
       __Pyx_GIVEREF(__pyx_v_href);
@@ -80006,12 +80088,12 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
       __Pyx_INCREF(__pyx_v_name);
       __Pyx_GIVEREF(__pyx_v_name);
       PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_name);
-      __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_self->_py_tags, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2760, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_self->_py_tags, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2763, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
     __pyx_L5:;
 
-    /* "lxml/etree.pyx":2746
+    /* "lxml/etree.pyx":2749
  *         elif tag is Element:
  *             self._node_types |= 1 << tree.XML_ELEMENT_NODE
  *         elif python._isString(tag):             # <<<<<<<<<<<<<<
@@ -80021,7 +80103,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2761
+  /* "lxml/etree.pyx":2764
  *                     href = None  # wildcard: any namespace, including none
  *                 self._py_tags.append((href, name))
  *         elif isinstance(tag, QName):             # <<<<<<<<<<<<<<
@@ -80032,21 +80114,21 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2762
+    /* "lxml/etree.pyx":2765
  *                 self._py_tags.append((href, name))
  *         elif isinstance(tag, QName):
  *             self._storeTags(tag.text, seen)             # <<<<<<<<<<<<<<
  *         else:
  *             # support a sequence of tags
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_tag, __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2762, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_tag, __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2765, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = __pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(__pyx_v_self, __pyx_t_1, __pyx_v_seen); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2762, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(__pyx_v_self, __pyx_t_1, __pyx_v_seen); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2765, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "lxml/etree.pyx":2761
+    /* "lxml/etree.pyx":2764
  *                     href = None  # wildcard: any namespace, including none
  *                 self._py_tags.append((href, name))
  *         elif isinstance(tag, QName):             # <<<<<<<<<<<<<<
@@ -80056,7 +80138,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2765
+  /* "lxml/etree.pyx":2768
  *         else:
  *             # support a sequence of tags
  *             for item in tag:             # <<<<<<<<<<<<<<
@@ -80068,26 +80150,26 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
       __pyx_t_6 = __pyx_v_tag; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0;
       __pyx_t_8 = NULL;
     } else {
-      __pyx_t_7 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_tag); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2765, __pyx_L1_error)
+      __pyx_t_7 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_tag); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2768, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_8 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2765, __pyx_L1_error)
+      __pyx_t_8 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2768, __pyx_L1_error)
     }
     for (;;) {
       if (likely(!__pyx_t_8)) {
         if (likely(PyList_CheckExact(__pyx_t_6))) {
           if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 2765, __pyx_L1_error)
+          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 2768, __pyx_L1_error)
           #else
-          __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2765, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2768, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         } else {
           if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 2765, __pyx_L1_error)
+          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 2768, __pyx_L1_error)
           #else
-          __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2765, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2768, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         }
@@ -80097,7 +80179,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 2765, __pyx_L1_error)
+            else __PYX_ERR(0, 2768, __pyx_L1_error)
           }
           break;
         }
@@ -80106,18 +80188,18 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
       __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_1);
       __pyx_t_1 = 0;
 
-      /* "lxml/etree.pyx":2766
+      /* "lxml/etree.pyx":2769
  *             # support a sequence of tags
  *             for item in tag:
  *                 self._storeTags(item, seen)             # <<<<<<<<<<<<<<
  * 
  *     cdef inline int cacheTags(self, _Document doc, bint force_into_dict=False) except -1:
  */
-      __pyx_t_1 = __pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(__pyx_v_self, __pyx_v_item, __pyx_v_seen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2766, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(__pyx_v_self, __pyx_v_item, __pyx_v_seen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2769, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "lxml/etree.pyx":2765
+      /* "lxml/etree.pyx":2768
  *         else:
  *             # support a sequence of tags
  *             for item in tag:             # <<<<<<<<<<<<<<
@@ -80129,7 +80211,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":2737
+  /* "lxml/etree.pyx":2740
  *             self._storeTags(tags, set())
  * 
  *     cdef _storeTags(self, tag, set seen):             # <<<<<<<<<<<<<<
@@ -80155,7 +80237,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2768
+/* "lxml/etree.pyx":2771
  *                 self._storeTags(item, seen)
  * 
  *     cdef inline int cacheTags(self, _Document doc, bint force_into_dict=False) except -1:             # <<<<<<<<<<<<<<
@@ -80183,7 +80265,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
     }
   }
 
-  /* "lxml/etree.pyx":2772
+  /* "lxml/etree.pyx":2775
  *         Look up the tag names in the doc dict to enable string pointer comparisons.
  *         """
  *         cdef size_t dict_size = tree.xmlDictSize(doc._c_doc.dict)             # <<<<<<<<<<<<<<
@@ -80192,7 +80274,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
  */
   __pyx_v_dict_size = xmlDictSize(__pyx_v_doc->_c_doc->dict);
 
-  /* "lxml/etree.pyx":2773
+  /* "lxml/etree.pyx":2776
  *         """
  *         cdef size_t dict_size = tree.xmlDictSize(doc._c_doc.dict)
  *         if doc is self._cached_doc and dict_size == self._cached_size:             # <<<<<<<<<<<<<<
@@ -80211,7 +80293,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":2775
+    /* "lxml/etree.pyx":2778
  *         if doc is self._cached_doc and dict_size == self._cached_size:
  *             # doc and dict didn't change => names already cached
  *             return 0             # <<<<<<<<<<<<<<
@@ -80221,7 +80303,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2773
+    /* "lxml/etree.pyx":2776
  *         """
  *         cdef size_t dict_size = tree.xmlDictSize(doc._c_doc.dict)
  *         if doc is self._cached_doc and dict_size == self._cached_size:             # <<<<<<<<<<<<<<
@@ -80230,7 +80312,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
  */
   }
 
-  /* "lxml/etree.pyx":2776
+  /* "lxml/etree.pyx":2779
  *             # doc and dict didn't change => names already cached
  *             return 0
  *         self._tag_count = 0             # <<<<<<<<<<<<<<
@@ -80239,7 +80321,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
  */
   __pyx_v_self->_tag_count = 0;
 
-  /* "lxml/etree.pyx":2777
+  /* "lxml/etree.pyx":2780
  *             return 0
  *         self._tag_count = 0
  *         if not self._py_tags:             # <<<<<<<<<<<<<<
@@ -80250,7 +80332,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
   __pyx_t_3 = ((!__pyx_t_1) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2778
+    /* "lxml/etree.pyx":2781
  *         self._tag_count = 0
  *         if not self._py_tags:
  *             self._cached_doc = doc             # <<<<<<<<<<<<<<
@@ -80263,7 +80345,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
     __Pyx_DECREF(((PyObject *)__pyx_v_self->_cached_doc));
     __pyx_v_self->_cached_doc = __pyx_v_doc;
 
-    /* "lxml/etree.pyx":2779
+    /* "lxml/etree.pyx":2782
  *         if not self._py_tags:
  *             self._cached_doc = doc
  *             self._cached_size = dict_size             # <<<<<<<<<<<<<<
@@ -80272,7 +80354,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
  */
     __pyx_v_self->_cached_size = __pyx_v_dict_size;
 
-    /* "lxml/etree.pyx":2780
+    /* "lxml/etree.pyx":2783
  *             self._cached_doc = doc
  *             self._cached_size = dict_size
  *             return 0             # <<<<<<<<<<<<<<
@@ -80282,7 +80364,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2777
+    /* "lxml/etree.pyx":2780
  *             return 0
  *         self._tag_count = 0
  *         if not self._py_tags:             # <<<<<<<<<<<<<<
@@ -80291,7 +80373,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
  */
   }
 
-  /* "lxml/etree.pyx":2781
+  /* "lxml/etree.pyx":2784
  *             self._cached_size = dict_size
  *             return 0
  *         if not self._cached_tags:             # <<<<<<<<<<<<<<
@@ -80301,7 +80383,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
   __pyx_t_3 = ((!(__pyx_v_self->_cached_tags != 0)) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2782
+    /* "lxml/etree.pyx":2785
  *             return 0
  *         if not self._cached_tags:
  *             self._cached_tags = <qname*>python.lxml_malloc(len(self._py_tags), sizeof(qname))             # <<<<<<<<<<<<<<
@@ -80312,13 +80394,13 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
     __Pyx_INCREF(__pyx_t_4);
     if (unlikely(__pyx_t_4 == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-      __PYX_ERR(0, 2782, __pyx_L1_error)
+      __PYX_ERR(0, 2785, __pyx_L1_error)
     }
-    __pyx_t_5 = PyList_GET_SIZE(__pyx_t_4); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2782, __pyx_L1_error)
+    __pyx_t_5 = PyList_GET_SIZE(__pyx_t_4); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2785, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_self->_cached_tags = ((struct __pyx_t_4lxml_5etree_qname *)lxml_malloc(__pyx_t_5, (sizeof(struct __pyx_t_4lxml_5etree_qname))));
 
-    /* "lxml/etree.pyx":2783
+    /* "lxml/etree.pyx":2786
  *         if not self._cached_tags:
  *             self._cached_tags = <qname*>python.lxml_malloc(len(self._py_tags), sizeof(qname))
  *             if not self._cached_tags:             # <<<<<<<<<<<<<<
@@ -80328,7 +80410,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
     __pyx_t_3 = ((!(__pyx_v_self->_cached_tags != 0)) != 0);
     if (unlikely(__pyx_t_3)) {
 
-      /* "lxml/etree.pyx":2784
+      /* "lxml/etree.pyx":2787
  *             self._cached_tags = <qname*>python.lxml_malloc(len(self._py_tags), sizeof(qname))
  *             if not self._cached_tags:
  *                 self._cached_doc = None             # <<<<<<<<<<<<<<
@@ -80341,16 +80423,16 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
       __Pyx_DECREF(((PyObject *)__pyx_v_self->_cached_doc));
       __pyx_v_self->_cached_doc = ((struct LxmlDocument *)Py_None);
 
-      /* "lxml/etree.pyx":2785
+      /* "lxml/etree.pyx":2788
  *             if not self._cached_tags:
  *                 self._cached_doc = None
  *                 raise MemoryError()             # <<<<<<<<<<<<<<
  *         self._tag_count = <size_t>_mapTagsToQnameMatchArray(
  *             doc._c_doc, self._py_tags, self._cached_tags, force_into_dict)
  */
-      PyErr_NoMemory(); __PYX_ERR(0, 2785, __pyx_L1_error)
+      PyErr_NoMemory(); __PYX_ERR(0, 2788, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":2783
+      /* "lxml/etree.pyx":2786
  *         if not self._cached_tags:
  *             self._cached_tags = <qname*>python.lxml_malloc(len(self._py_tags), sizeof(qname))
  *             if not self._cached_tags:             # <<<<<<<<<<<<<<
@@ -80359,7 +80441,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
  */
     }
 
-    /* "lxml/etree.pyx":2781
+    /* "lxml/etree.pyx":2784
  *             self._cached_size = dict_size
  *             return 0
  *         if not self._cached_tags:             # <<<<<<<<<<<<<<
@@ -80368,7 +80450,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
  */
   }
 
-  /* "lxml/etree.pyx":2787
+  /* "lxml/etree.pyx":2790
  *                 raise MemoryError()
  *         self._tag_count = <size_t>_mapTagsToQnameMatchArray(
  *             doc._c_doc, self._py_tags, self._cached_tags, force_into_dict)             # <<<<<<<<<<<<<<
@@ -80378,18 +80460,18 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
   __pyx_t_4 = __pyx_v_self->_py_tags;
   __Pyx_INCREF(__pyx_t_4);
 
-  /* "lxml/etree.pyx":2786
+  /* "lxml/etree.pyx":2789
  *                 self._cached_doc = None
  *                 raise MemoryError()
  *         self._tag_count = <size_t>_mapTagsToQnameMatchArray(             # <<<<<<<<<<<<<<
  *             doc._c_doc, self._py_tags, self._cached_tags, force_into_dict)
  *         self._cached_doc = doc
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(__pyx_v_doc->_c_doc, ((PyObject*)__pyx_t_4), __pyx_v_self->_cached_tags, __pyx_v_force_into_dict); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 2786, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(__pyx_v_doc->_c_doc, ((PyObject*)__pyx_t_4), __pyx_v_self->_cached_tags, __pyx_v_force_into_dict); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 2789, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_self->_tag_count = ((size_t)__pyx_t_5);
 
-  /* "lxml/etree.pyx":2788
+  /* "lxml/etree.pyx":2791
  *         self._tag_count = <size_t>_mapTagsToQnameMatchArray(
  *             doc._c_doc, self._py_tags, self._cached_tags, force_into_dict)
  *         self._cached_doc = doc             # <<<<<<<<<<<<<<
@@ -80402,7 +80484,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_cached_doc));
   __pyx_v_self->_cached_doc = __pyx_v_doc;
 
-  /* "lxml/etree.pyx":2789
+  /* "lxml/etree.pyx":2792
  *             doc._c_doc, self._py_tags, self._cached_tags, force_into_dict)
  *         self._cached_doc = doc
  *         self._cached_size = dict_size             # <<<<<<<<<<<<<<
@@ -80411,7 +80493,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
  */
   __pyx_v_self->_cached_size = __pyx_v_dict_size;
 
-  /* "lxml/etree.pyx":2790
+  /* "lxml/etree.pyx":2793
  *         self._cached_doc = doc
  *         self._cached_size = dict_size
  *         return 0             # <<<<<<<<<<<<<<
@@ -80421,7 +80503,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2768
+  /* "lxml/etree.pyx":2771
  *                 self._storeTags(item, seen)
  * 
  *     cdef inline int cacheTags(self, _Document doc, bint force_into_dict=False) except -1:             # <<<<<<<<<<<<<<
@@ -80439,7 +80521,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struc
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2792
+/* "lxml/etree.pyx":2795
  *         return 0
  * 
  *     cdef inline bint matches(self, xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -80457,7 +80539,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
   struct __pyx_t_4lxml_5etree_qname *__pyx_t_4;
   __Pyx_RefNannySetupContext("matches", 0);
 
-  /* "lxml/etree.pyx":2794
+  /* "lxml/etree.pyx":2797
  *     cdef inline bint matches(self, xmlNode* c_node):
  *         cdef qname* c_qname
  *         if self._node_types & (1 << c_node.type):             # <<<<<<<<<<<<<<
@@ -80467,7 +80549,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
   __pyx_t_1 = ((__pyx_v_self->_node_types & (1 << __pyx_v_c_node->type)) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":2795
+    /* "lxml/etree.pyx":2798
  *         cdef qname* c_qname
  *         if self._node_types & (1 << c_node.type):
  *             return True             # <<<<<<<<<<<<<<
@@ -80477,7 +80559,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
     __pyx_r = 1;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2794
+    /* "lxml/etree.pyx":2797
  *     cdef inline bint matches(self, xmlNode* c_node):
  *         cdef qname* c_qname
  *         if self._node_types & (1 << c_node.type):             # <<<<<<<<<<<<<<
@@ -80486,7 +80568,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
  */
   }
 
-  /* "lxml/etree.pyx":2796
+  /* "lxml/etree.pyx":2799
  *         if self._node_types & (1 << c_node.type):
  *             return True
  *         elif c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -80496,7 +80578,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
   __pyx_t_1 = ((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":2797
+    /* "lxml/etree.pyx":2800
  *             return True
  *         elif c_node.type == tree.XML_ELEMENT_NODE:
  *             for c_qname in self._cached_tags[:self._tag_count]:             # <<<<<<<<<<<<<<
@@ -80508,7 +80590,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
       __pyx_t_2 = __pyx_t_4;
       __pyx_v_c_qname = __pyx_t_2;
 
-      /* "lxml/etree.pyx":2798
+      /* "lxml/etree.pyx":2801
  *         elif c_node.type == tree.XML_ELEMENT_NODE:
  *             for c_qname in self._cached_tags[:self._tag_count]:
  *                 if _tagMatchesExactly(c_node, c_qname):             # <<<<<<<<<<<<<<
@@ -80518,7 +80600,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
       __pyx_t_1 = (__pyx_f_4lxml_5etree__tagMatchesExactly(__pyx_v_c_node, __pyx_v_c_qname) != 0);
       if (__pyx_t_1) {
 
-        /* "lxml/etree.pyx":2799
+        /* "lxml/etree.pyx":2802
  *             for c_qname in self._cached_tags[:self._tag_count]:
  *                 if _tagMatchesExactly(c_node, c_qname):
  *                     return True             # <<<<<<<<<<<<<<
@@ -80528,7 +80610,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
         __pyx_r = 1;
         goto __pyx_L0;
 
-        /* "lxml/etree.pyx":2798
+        /* "lxml/etree.pyx":2801
  *         elif c_node.type == tree.XML_ELEMENT_NODE:
  *             for c_qname in self._cached_tags[:self._tag_count]:
  *                 if _tagMatchesExactly(c_node, c_qname):             # <<<<<<<<<<<<<<
@@ -80538,7 +80620,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
       }
     }
 
-    /* "lxml/etree.pyx":2796
+    /* "lxml/etree.pyx":2799
  *         if self._node_types & (1 << c_node.type):
  *             return True
  *         elif c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -80547,7 +80629,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
  */
   }
 
-  /* "lxml/etree.pyx":2800
+  /* "lxml/etree.pyx":2803
  *                 if _tagMatchesExactly(c_node, c_qname):
  *                     return True
  *         return False             # <<<<<<<<<<<<<<
@@ -80557,7 +80639,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2792
+  /* "lxml/etree.pyx":2795
  *         return 0
  * 
  *     cdef inline bint matches(self, xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -80571,7 +80653,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2802
+/* "lxml/etree.pyx":2805
  *         return False
  * 
  *     cdef inline bint matchesNsTag(self, const_xmlChar* c_href,             # <<<<<<<<<<<<<<
@@ -80589,7 +80671,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
   struct __pyx_t_4lxml_5etree_qname *__pyx_t_4;
   __Pyx_RefNannySetupContext("matchesNsTag", 0);
 
-  /* "lxml/etree.pyx":2805
+  /* "lxml/etree.pyx":2808
  *                                   const_xmlChar* c_name):
  *         cdef qname* c_qname
  *         if self._node_types & (1 << tree.XML_ELEMENT_NODE):             # <<<<<<<<<<<<<<
@@ -80599,7 +80681,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
   __pyx_t_1 = ((__pyx_v_self->_node_types & (1 << XML_ELEMENT_NODE)) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":2806
+    /* "lxml/etree.pyx":2809
  *         cdef qname* c_qname
  *         if self._node_types & (1 << tree.XML_ELEMENT_NODE):
  *             return True             # <<<<<<<<<<<<<<
@@ -80609,7 +80691,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
     __pyx_r = 1;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2805
+    /* "lxml/etree.pyx":2808
  *                                   const_xmlChar* c_name):
  *         cdef qname* c_qname
  *         if self._node_types & (1 << tree.XML_ELEMENT_NODE):             # <<<<<<<<<<<<<<
@@ -80618,7 +80700,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
  */
   }
 
-  /* "lxml/etree.pyx":2807
+  /* "lxml/etree.pyx":2810
  *         if self._node_types & (1 << tree.XML_ELEMENT_NODE):
  *             return True
  *         for c_qname in self._cached_tags[:self._tag_count]:             # <<<<<<<<<<<<<<
@@ -80630,7 +80712,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
     __pyx_t_2 = __pyx_t_4;
     __pyx_v_c_qname = __pyx_t_2;
 
-    /* "lxml/etree.pyx":2808
+    /* "lxml/etree.pyx":2811
  *             return True
  *         for c_qname in self._cached_tags[:self._tag_count]:
  *             if _nsTagMatchesExactly(c_href, c_name, c_qname):             # <<<<<<<<<<<<<<
@@ -80640,7 +80722,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
     __pyx_t_1 = (__pyx_f_4lxml_5etree__nsTagMatchesExactly(__pyx_v_c_href, __pyx_v_c_name, __pyx_v_c_qname) != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":2809
+      /* "lxml/etree.pyx":2812
  *         for c_qname in self._cached_tags[:self._tag_count]:
  *             if _nsTagMatchesExactly(c_href, c_name, c_qname):
  *                 return True             # <<<<<<<<<<<<<<
@@ -80650,7 +80732,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
       __pyx_r = 1;
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":2808
+      /* "lxml/etree.pyx":2811
  *             return True
  *         for c_qname in self._cached_tags[:self._tag_count]:
  *             if _nsTagMatchesExactly(c_href, c_name, c_qname):             # <<<<<<<<<<<<<<
@@ -80660,7 +80742,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
     }
   }
 
-  /* "lxml/etree.pyx":2810
+  /* "lxml/etree.pyx":2813
  *             if _nsTagMatchesExactly(c_href, c_name, c_qname):
  *                 return True
  *         return False             # <<<<<<<<<<<<<<
@@ -80670,7 +80752,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2802
+  /* "lxml/etree.pyx":2805
  *         return False
  * 
  *     cdef inline bint matchesNsTag(self, const_xmlChar* c_href,             # <<<<<<<<<<<<<<
@@ -80684,7 +80766,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(st
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2812
+/* "lxml/etree.pyx":2815
  *         return False
  * 
  *     cdef inline bint matchesAttribute(self, xmlAttr* c_attr):             # <<<<<<<<<<<<<<
@@ -80702,7 +80784,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribut
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("matchesAttribute", 0);
 
-  /* "lxml/etree.pyx":2817
+  /* "lxml/etree.pyx":2820
  *         """
  *         cdef qname* c_qname
  *         for c_qname in self._cached_tags[:self._tag_count]:             # <<<<<<<<<<<<<<
@@ -80714,7 +80796,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribut
     __pyx_t_1 = __pyx_t_3;
     __pyx_v_c_qname = __pyx_t_1;
 
-    /* "lxml/etree.pyx":2818
+    /* "lxml/etree.pyx":2821
  *         cdef qname* c_qname
  *         for c_qname in self._cached_tags[:self._tag_count]:
  *             if _tagMatchesExactly(<xmlNode*>c_attr, c_qname):             # <<<<<<<<<<<<<<
@@ -80724,7 +80806,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribut
     __pyx_t_4 = (__pyx_f_4lxml_5etree__tagMatchesExactly(((xmlNode *)__pyx_v_c_attr), __pyx_v_c_qname) != 0);
     if (__pyx_t_4) {
 
-      /* "lxml/etree.pyx":2819
+      /* "lxml/etree.pyx":2822
  *         for c_qname in self._cached_tags[:self._tag_count]:
  *             if _tagMatchesExactly(<xmlNode*>c_attr, c_qname):
  *                 return True             # <<<<<<<<<<<<<<
@@ -80734,7 +80816,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribut
       __pyx_r = 1;
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":2818
+      /* "lxml/etree.pyx":2821
  *         cdef qname* c_qname
  *         for c_qname in self._cached_tags[:self._tag_count]:
  *             if _tagMatchesExactly(<xmlNode*>c_attr, c_qname):             # <<<<<<<<<<<<<<
@@ -80744,7 +80826,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribut
     }
   }
 
-  /* "lxml/etree.pyx":2820
+  /* "lxml/etree.pyx":2823
  *             if _tagMatchesExactly(<xmlNode*>c_attr, c_qname):
  *                 return True
  *         return False             # <<<<<<<<<<<<<<
@@ -80754,7 +80836,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribut
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2812
+  /* "lxml/etree.pyx":2815
  *         return False
  * 
  *     cdef inline bint matchesAttribute(self, xmlAttr* c_attr):             # <<<<<<<<<<<<<<
@@ -80768,7 +80850,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribut
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2828
+/* "lxml/etree.pyx":2831
  * 
  *     @cython.final
  *     cdef _initTagMatcher(self, tags):             # <<<<<<<<<<<<<<
@@ -80786,19 +80868,19 @@ static PyObject *__pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(st
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_initTagMatcher", 0);
 
-  /* "lxml/etree.pyx":2829
+  /* "lxml/etree.pyx":2832
  *     @cython.final
  *     cdef _initTagMatcher(self, tags):
  *         self._matcher = _MultiTagMatcher.__new__(_MultiTagMatcher, tags)             # <<<<<<<<<<<<<<
  * 
  *     def __iter__(self):
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2829, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2832, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tags);
-  __pyx_t_2 = ((PyObject *)__pyx_tp_new_4lxml_5etree__MultiTagMatcher(((PyTypeObject *)__pyx_ptype_4lxml_5etree__MultiTagMatcher), __pyx_t_1, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2829, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_tp_new_4lxml_5etree__MultiTagMatcher(((PyTypeObject *)__pyx_ptype_4lxml_5etree__MultiTagMatcher), __pyx_t_1, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2832, __pyx_L1_error)
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
@@ -80807,7 +80889,7 @@ static PyObject *__pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(st
   __pyx_v_self->_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2828
+  /* "lxml/etree.pyx":2831
  * 
  *     @cython.final
  *     cdef _initTagMatcher(self, tags):             # <<<<<<<<<<<<<<
@@ -80829,7 +80911,7 @@ static PyObject *__pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(st
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2831
+/* "lxml/etree.pyx":2834
  *         self._matcher = _MultiTagMatcher.__new__(_MultiTagMatcher, tags)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -80855,7 +80937,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ElementMatchIterator___iter__(struct _
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__iter__", 0);
 
-  /* "lxml/etree.pyx":2832
+  /* "lxml/etree.pyx":2835
  * 
  *     def __iter__(self):
  *         return self             # <<<<<<<<<<<<<<
@@ -80867,7 +80949,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ElementMatchIterator___iter__(struct _
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2831
+  /* "lxml/etree.pyx":2834
  *         self._matcher = _MultiTagMatcher.__new__(_MultiTagMatcher, tags)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -80882,7 +80964,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ElementMatchIterator___iter__(struct _
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2835
+/* "lxml/etree.pyx":2838
  * 
  *     @cython.final
  *     cdef int _storeNext(self, _Element node) except -1:             # <<<<<<<<<<<<<<
@@ -80905,7 +80987,7 @@ static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_storeNext", 0);
 
-  /* "lxml/etree.pyx":2836
+  /* "lxml/etree.pyx":2839
  *     @cython.final
  *     cdef int _storeNext(self, _Element node) except -1:
  *         self._matcher.cacheTags(node._doc)             # <<<<<<<<<<<<<<
@@ -80914,10 +80996,10 @@ static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_node->_doc);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(__pyx_v_self->_matcher, ((struct LxmlDocument *)__pyx_t_1), NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2836, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(__pyx_v_self->_matcher, ((struct LxmlDocument *)__pyx_t_1), NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2839, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2837
+  /* "lxml/etree.pyx":2840
  *     cdef int _storeNext(self, _Element node) except -1:
  *         self._matcher.cacheTags(node._doc)
  *         c_node = self._next_element(node._c_node)             # <<<<<<<<<<<<<<
@@ -80926,7 +81008,7 @@ static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_
  */
   __pyx_v_c_node = __pyx_v_self->_next_element(__pyx_v_node->_c_node);
 
-  /* "lxml/etree.pyx":2838
+  /* "lxml/etree.pyx":2841
  *         self._matcher.cacheTags(node._doc)
  *         c_node = self._next_element(node._c_node)
  *         while c_node is not NULL and not self._matcher.matches(c_node):             # <<<<<<<<<<<<<<
@@ -80945,7 +81027,7 @@ static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_
     __pyx_L5_bool_binop_done:;
     if (!__pyx_t_3) break;
 
-    /* "lxml/etree.pyx":2839
+    /* "lxml/etree.pyx":2842
  *         c_node = self._next_element(node._c_node)
  *         while c_node is not NULL and not self._matcher.matches(c_node):
  *             c_node = self._next_element(c_node)             # <<<<<<<<<<<<<<
@@ -80955,7 +81037,7 @@ static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_
     __pyx_v_c_node = __pyx_v_self->_next_element(__pyx_v_c_node);
   }
 
-  /* "lxml/etree.pyx":2841
+  /* "lxml/etree.pyx":2844
  *             c_node = self._next_element(c_node)
  *         # store Python ref to next node to make sure it's kept alive
  *         self._node = _elementFactory(node._doc, c_node) if c_node is not NULL else None             # <<<<<<<<<<<<<<
@@ -80965,7 +81047,7 @@ static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_
   if (((__pyx_v_c_node != NULL) != 0)) {
     __pyx_t_5 = ((PyObject *)__pyx_v_node->_doc);
     __Pyx_INCREF(__pyx_t_5);
-    __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_node)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2841, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_node)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2844, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_1 = __pyx_t_6;
@@ -80980,7 +81062,7 @@ static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_
   __pyx_v_self->_node = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2842
+  /* "lxml/etree.pyx":2845
  *         # store Python ref to next node to make sure it's kept alive
  *         self._node = _elementFactory(node._doc, c_node) if c_node is not NULL else None
  *         return 0             # <<<<<<<<<<<<<<
@@ -80990,7 +81072,7 @@ static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2835
+  /* "lxml/etree.pyx":2838
  * 
  *     @cython.final
  *     cdef int _storeNext(self, _Element node) except -1:             # <<<<<<<<<<<<<<
@@ -81010,7 +81092,7 @@ static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2844
+/* "lxml/etree.pyx":2847
  *         return 0
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -81044,7 +81126,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ElementMatchIterator_2__next__(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__next__", 0);
 
-  /* "lxml/etree.pyx":2845
+  /* "lxml/etree.pyx":2848
  * 
  *     def __next__(self):
  *         cdef _Element current_node = self._node             # <<<<<<<<<<<<<<
@@ -81056,7 +81138,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ElementMatchIterator_2__next__(struct
   __pyx_v_current_node = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2846
+  /* "lxml/etree.pyx":2849
  *     def __next__(self):
  *         cdef _Element current_node = self._node
  *         if current_node is None:             # <<<<<<<<<<<<<<
@@ -81067,7 +81149,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ElementMatchIterator_2__next__(struct
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":2847
+    /* "lxml/etree.pyx":2850
  *         cdef _Element current_node = self._node
  *         if current_node is None:
  *             raise StopIteration             # <<<<<<<<<<<<<<
@@ -81075,9 +81157,9 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ElementMatchIterator_2__next__(struct
  *         return current_node
  */
     __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0, 0);
-    __PYX_ERR(0, 2847, __pyx_L1_error)
+    __PYX_ERR(0, 2850, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2846
+    /* "lxml/etree.pyx":2849
  *     def __next__(self):
  *         cdef _Element current_node = self._node
  *         if current_node is None:             # <<<<<<<<<<<<<<
@@ -81086,16 +81168,16 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ElementMatchIterator_2__next__(struct
  */
   }
 
-  /* "lxml/etree.pyx":2848
+  /* "lxml/etree.pyx":2851
  *         if current_node is None:
  *             raise StopIteration
  *         self._storeNext(current_node)             # <<<<<<<<<<<<<<
  *         return current_node
  * 
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(__pyx_v_self, __pyx_v_current_node); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2848, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(__pyx_v_self, __pyx_v_current_node); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2851, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2849
+  /* "lxml/etree.pyx":2852
  *             raise StopIteration
  *         self._storeNext(current_node)
  *         return current_node             # <<<<<<<<<<<<<<
@@ -81107,7 +81189,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ElementMatchIterator_2__next__(struct
   __pyx_r = ((PyObject *)__pyx_v_current_node);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2844
+  /* "lxml/etree.pyx":2847
  *         return 0
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -81127,7 +81209,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ElementMatchIterator_2__next__(struct
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2855
+/* "lxml/etree.pyx":2858
  *     Iterates over the children of an element.
  *     """
  *     def __cinit__(self, _Element node not None, tag=None, *, bint reversed=False):             # <<<<<<<<<<<<<<
@@ -81180,7 +81262,7 @@ static int __pyx_pw_4lxml_5etree_20ElementChildIterator_1__cinit__(PyObject *__p
         if (value) { values[index] = value; kw_args--; }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2855, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2858, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -81194,20 +81276,20 @@ static int __pyx_pw_4lxml_5etree_20ElementChildIterator_1__cinit__(PyObject *__p
     __pyx_v_node = ((struct LxmlElement *)values[0]);
     __pyx_v_tag = values[1];
     if (values[2]) {
-      __pyx_v_reversed = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reversed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2855, __pyx_L3_error)
+      __pyx_v_reversed = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reversed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2858, __pyx_L3_error)
     } else {
       __pyx_v_reversed = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2855, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2858, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.ElementChildIterator.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_node), __pyx_ptype_4lxml_5etree__Element, 0, "node", 0))) __PYX_ERR(0, 2855, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_node), __pyx_ptype_4lxml_5etree__Element, 0, "node", 0))) __PYX_ERR(0, 2858, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(((struct __pyx_obj_4lxml_5etree_ElementChildIterator *)__pyx_v_self), __pyx_v_node, __pyx_v_tag, __pyx_v_reversed);
 
   /* function exit code */
@@ -81234,27 +81316,27 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "lxml/etree.pyx":2857
+  /* "lxml/etree.pyx":2860
  *     def __cinit__(self, _Element node not None, tag=None, *, bint reversed=False):
  *         cdef xmlNode* c_node
  *         _assertValidNode(node)             # <<<<<<<<<<<<<<
  *         self._initTagMatcher(tag)
  *         if reversed:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2857, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2860, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2858
+  /* "lxml/etree.pyx":2861
  *         cdef xmlNode* c_node
  *         _assertValidNode(node)
  *         self._initTagMatcher(tag)             # <<<<<<<<<<<<<<
  *         if reversed:
  *             c_node = _findChildBackwards(node._c_node, 0)
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)__pyx_v_self), __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2858, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)__pyx_v_self), __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2861, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2859
+  /* "lxml/etree.pyx":2862
  *         _assertValidNode(node)
  *         self._initTagMatcher(tag)
  *         if reversed:             # <<<<<<<<<<<<<<
@@ -81264,7 +81346,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
   __pyx_t_3 = (__pyx_v_reversed != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2860
+    /* "lxml/etree.pyx":2863
  *         self._initTagMatcher(tag)
  *         if reversed:
  *             c_node = _findChildBackwards(node._c_node, 0)             # <<<<<<<<<<<<<<
@@ -81273,7 +81355,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
  */
     __pyx_v_c_node = __pyx_f_4lxml_5etree__findChildBackwards(__pyx_v_node->_c_node, 0);
 
-    /* "lxml/etree.pyx":2861
+    /* "lxml/etree.pyx":2864
  *         if reversed:
  *             c_node = _findChildBackwards(node._c_node, 0)
  *             self._next_element = _previousElement             # <<<<<<<<<<<<<<
@@ -81282,7 +81364,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
  */
     __pyx_v_self->__pyx_base._next_element = __pyx_f_4lxml_5etree__previousElement;
 
-    /* "lxml/etree.pyx":2859
+    /* "lxml/etree.pyx":2862
  *         _assertValidNode(node)
  *         self._initTagMatcher(tag)
  *         if reversed:             # <<<<<<<<<<<<<<
@@ -81292,7 +81374,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2863
+  /* "lxml/etree.pyx":2866
  *             self._next_element = _previousElement
  *         else:
  *             c_node = _findChildForwards(node._c_node, 0)             # <<<<<<<<<<<<<<
@@ -81302,7 +81384,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
   /*else*/ {
     __pyx_v_c_node = __pyx_f_4lxml_5etree__findChildForwards(__pyx_v_node->_c_node, 0);
 
-    /* "lxml/etree.pyx":2864
+    /* "lxml/etree.pyx":2867
  *         else:
  *             c_node = _findChildForwards(node._c_node, 0)
  *             self._next_element = _nextElement             # <<<<<<<<<<<<<<
@@ -81313,7 +81395,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":2865
+  /* "lxml/etree.pyx":2868
  *             c_node = _findChildForwards(node._c_node, 0)
  *             self._next_element = _nextElement
  *         self._matcher.cacheTags(node._doc)             # <<<<<<<<<<<<<<
@@ -81322,10 +81404,10 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
  */
   __pyx_t_2 = ((PyObject *)__pyx_v_node->_doc);
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(__pyx_v_self->__pyx_base._matcher, ((struct LxmlDocument *)__pyx_t_2), NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2865, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(__pyx_v_self->__pyx_base._matcher, ((struct LxmlDocument *)__pyx_t_2), NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2868, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2866
+  /* "lxml/etree.pyx":2869
  *             self._next_element = _nextElement
  *         self._matcher.cacheTags(node._doc)
  *         while c_node is not NULL and not self._matcher.matches(c_node):             # <<<<<<<<<<<<<<
@@ -81344,7 +81426,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
     __pyx_L6_bool_binop_done:;
     if (!__pyx_t_3) break;
 
-    /* "lxml/etree.pyx":2867
+    /* "lxml/etree.pyx":2870
  *         self._matcher.cacheTags(node._doc)
  *         while c_node is not NULL and not self._matcher.matches(c_node):
  *             c_node = self._next_element(c_node)             # <<<<<<<<<<<<<<
@@ -81354,7 +81436,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
     __pyx_v_c_node = __pyx_v_self->__pyx_base._next_element(__pyx_v_c_node);
   }
 
-  /* "lxml/etree.pyx":2869
+  /* "lxml/etree.pyx":2872
  *             c_node = self._next_element(c_node)
  *         # store Python ref to next node to make sure it's kept alive
  *         self._node = _elementFactory(node._doc, c_node) if c_node is not NULL else None             # <<<<<<<<<<<<<<
@@ -81364,7 +81446,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
   if (((__pyx_v_c_node != NULL) != 0)) {
     __pyx_t_5 = ((PyObject *)__pyx_v_node->_doc);
     __Pyx_INCREF(__pyx_t_5);
-    __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_node)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2869, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_node)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2872, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_2 = __pyx_t_6;
@@ -81379,7 +81461,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
   __pyx_v_self->__pyx_base._node = ((struct LxmlElement *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2855
+  /* "lxml/etree.pyx":2858
  *     Iterates over the children of an element.
  *     """
  *     def __cinit__(self, _Element node not None, tag=None, *, bint reversed=False):             # <<<<<<<<<<<<<<
@@ -81401,7 +81483,7 @@ static int __pyx_pf_4lxml_5etree_20ElementChildIterator___cinit__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2877
+/* "lxml/etree.pyx":2880
  *     You can pass the boolean keyword ``preceding`` to specify the direction.
  *     """
  *     def __cinit__(self, _Element node not None, tag=None, *, bint preceding=False):             # <<<<<<<<<<<<<<
@@ -81454,7 +81536,7 @@ static int __pyx_pw_4lxml_5etree_16SiblingsIterator_1__cinit__(PyObject *__pyx_v
         if (value) { values[index] = value; kw_args--; }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2877, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2880, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -81468,20 +81550,20 @@ static int __pyx_pw_4lxml_5etree_16SiblingsIterator_1__cinit__(PyObject *__pyx_v
     __pyx_v_node = ((struct LxmlElement *)values[0]);
     __pyx_v_tag = values[1];
     if (values[2]) {
-      __pyx_v_preceding = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_preceding == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2877, __pyx_L3_error)
+      __pyx_v_preceding = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_preceding == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2880, __pyx_L3_error)
     } else {
       __pyx_v_preceding = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2877, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2880, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.SiblingsIterator.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_node), __pyx_ptype_4lxml_5etree__Element, 0, "node", 0))) __PYX_ERR(0, 2877, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_node), __pyx_ptype_4lxml_5etree__Element, 0, "node", 0))) __PYX_ERR(0, 2880, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_16SiblingsIterator___cinit__(((struct __pyx_obj_4lxml_5etree_SiblingsIterator *)__pyx_v_self), __pyx_v_node, __pyx_v_tag, __pyx_v_preceding);
 
   /* function exit code */
@@ -81504,27 +81586,27 @@ static int __pyx_pf_4lxml_5etree_16SiblingsIterator___cinit__(struct __pyx_obj_4
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "lxml/etree.pyx":2878
+  /* "lxml/etree.pyx":2881
  *     """
  *     def __cinit__(self, _Element node not None, tag=None, *, bint preceding=False):
  *         _assertValidNode(node)             # <<<<<<<<<<<<<<
  *         self._initTagMatcher(tag)
  *         if preceding:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2878, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2881, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2879
+  /* "lxml/etree.pyx":2882
  *     def __cinit__(self, _Element node not None, tag=None, *, bint preceding=False):
  *         _assertValidNode(node)
  *         self._initTagMatcher(tag)             # <<<<<<<<<<<<<<
  *         if preceding:
  *             self._next_element = _previousElement
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)__pyx_v_self), __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2879, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)__pyx_v_self), __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2882, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2880
+  /* "lxml/etree.pyx":2883
  *         _assertValidNode(node)
  *         self._initTagMatcher(tag)
  *         if preceding:             # <<<<<<<<<<<<<<
@@ -81534,7 +81616,7 @@ static int __pyx_pf_4lxml_5etree_16SiblingsIterator___cinit__(struct __pyx_obj_4
   __pyx_t_3 = (__pyx_v_preceding != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2881
+    /* "lxml/etree.pyx":2884
  *         self._initTagMatcher(tag)
  *         if preceding:
  *             self._next_element = _previousElement             # <<<<<<<<<<<<<<
@@ -81543,7 +81625,7 @@ static int __pyx_pf_4lxml_5etree_16SiblingsIterator___cinit__(struct __pyx_obj_4
  */
     __pyx_v_self->__pyx_base._next_element = __pyx_f_4lxml_5etree__previousElement;
 
-    /* "lxml/etree.pyx":2880
+    /* "lxml/etree.pyx":2883
  *         _assertValidNode(node)
  *         self._initTagMatcher(tag)
  *         if preceding:             # <<<<<<<<<<<<<<
@@ -81553,7 +81635,7 @@ static int __pyx_pf_4lxml_5etree_16SiblingsIterator___cinit__(struct __pyx_obj_4
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2883
+  /* "lxml/etree.pyx":2886
  *             self._next_element = _previousElement
  *         else:
  *             self._next_element = _nextElement             # <<<<<<<<<<<<<<
@@ -81565,16 +81647,16 @@ static int __pyx_pf_4lxml_5etree_16SiblingsIterator___cinit__(struct __pyx_obj_4
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":2884
+  /* "lxml/etree.pyx":2887
  *         else:
  *             self._next_element = _nextElement
  *         self._storeNext(node)             # <<<<<<<<<<<<<<
  * 
  * cdef class AncestorsIterator(_ElementMatchIterator):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)__pyx_v_self), __pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2884, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)__pyx_v_self), __pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2887, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2877
+  /* "lxml/etree.pyx":2880
  *     You can pass the boolean keyword ``preceding`` to specify the direction.
  *     """
  *     def __cinit__(self, _Element node not None, tag=None, *, bint preceding=False):             # <<<<<<<<<<<<<<
@@ -81594,7 +81676,7 @@ static int __pyx_pf_4lxml_5etree_16SiblingsIterator___cinit__(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2890
+/* "lxml/etree.pyx":2893
  *     Iterates over the ancestors of an element (from parent to parent).
  *     """
  *     def __cinit__(self, _Element node not None, tag=None):             # <<<<<<<<<<<<<<
@@ -81641,7 +81723,7 @@ static int __pyx_pw_4lxml_5etree_17AncestorsIterator_1__cinit__(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2890, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2893, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -81657,13 +81739,13 @@ static int __pyx_pw_4lxml_5etree_17AncestorsIterator_1__cinit__(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2890, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2893, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.AncestorsIterator.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_node), __pyx_ptype_4lxml_5etree__Element, 0, "node", 0))) __PYX_ERR(0, 2890, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_node), __pyx_ptype_4lxml_5etree__Element, 0, "node", 0))) __PYX_ERR(0, 2893, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_17AncestorsIterator___cinit__(((struct __pyx_obj_4lxml_5etree_AncestorsIterator *)__pyx_v_self), __pyx_v_node, __pyx_v_tag);
 
   /* function exit code */
@@ -81685,27 +81767,27 @@ static int __pyx_pf_4lxml_5etree_17AncestorsIterator___cinit__(struct __pyx_obj_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "lxml/etree.pyx":2891
+  /* "lxml/etree.pyx":2894
  *     """
  *     def __cinit__(self, _Element node not None, tag=None):
  *         _assertValidNode(node)             # <<<<<<<<<<<<<<
  *         self._initTagMatcher(tag)
  *         self._next_element = _parentElement
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2891, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2894, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2892
+  /* "lxml/etree.pyx":2895
  *     def __cinit__(self, _Element node not None, tag=None):
  *         _assertValidNode(node)
  *         self._initTagMatcher(tag)             # <<<<<<<<<<<<<<
  *         self._next_element = _parentElement
  *         self._storeNext(node)
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)__pyx_v_self), __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2892, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)__pyx_v_self), __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2895, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":2893
+  /* "lxml/etree.pyx":2896
  *         _assertValidNode(node)
  *         self._initTagMatcher(tag)
  *         self._next_element = _parentElement             # <<<<<<<<<<<<<<
@@ -81714,16 +81796,16 @@ static int __pyx_pf_4lxml_5etree_17AncestorsIterator___cinit__(struct __pyx_obj_
  */
   __pyx_v_self->__pyx_base._next_element = __pyx_f_4lxml_5etree__parentElement;
 
-  /* "lxml/etree.pyx":2894
+  /* "lxml/etree.pyx":2897
  *         self._initTagMatcher(tag)
  *         self._next_element = _parentElement
  *         self._storeNext(node)             # <<<<<<<<<<<<<<
  * 
  * cdef class ElementDepthFirstIterator:
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)__pyx_v_self), __pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2894, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)__pyx_v_self), __pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2897, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2890
+  /* "lxml/etree.pyx":2893
  *     Iterates over the ancestors of an element (from parent to parent).
  *     """
  *     def __cinit__(self, _Element node not None, tag=None):             # <<<<<<<<<<<<<<
@@ -81743,7 +81825,7 @@ static int __pyx_pf_4lxml_5etree_17AncestorsIterator___cinit__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2921
+/* "lxml/etree.pyx":2924
  *     cdef _Element _top_node
  *     cdef _MultiTagMatcher _matcher
  *     def __cinit__(self, _Element node not None, tag=None, *, bint inclusive=True):             # <<<<<<<<<<<<<<
@@ -81796,7 +81878,7 @@ static int __pyx_pw_4lxml_5etree_25ElementDepthFirstIterator_1__cinit__(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, "__cinit__") < 0)) __PYX_ERR(0, 2921, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2924, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -81810,20 +81892,20 @@ static int __pyx_pw_4lxml_5etree_25ElementDepthFirstIterator_1__cinit__(PyObject
     __pyx_v_node = ((struct LxmlElement *)values[0]);
     __pyx_v_tag = values[1];
     if (values[2]) {
-      __pyx_v_inclusive = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_inclusive == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2921, __pyx_L3_error)
+      __pyx_v_inclusive = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_inclusive == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2924, __pyx_L3_error)
     } else {
       __pyx_v_inclusive = ((int)1);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2921, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2924, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.ElementDepthFirstIterator.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_node), __pyx_ptype_4lxml_5etree__Element, 0, "node", 0))) __PYX_ERR(0, 2921, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_node), __pyx_ptype_4lxml_5etree__Element, 0, "node", 0))) __PYX_ERR(0, 2924, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_25ElementDepthFirstIterator___cinit__(((struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *)__pyx_v_self), __pyx_v_node, __pyx_v_tag, __pyx_v_inclusive);
 
   /* function exit code */
@@ -81848,16 +81930,16 @@ static int __pyx_pf_4lxml_5etree_25ElementDepthFirstIterator___cinit__(struct __
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "lxml/etree.pyx":2922
+  /* "lxml/etree.pyx":2925
  *     cdef _MultiTagMatcher _matcher
  *     def __cinit__(self, _Element node not None, tag=None, *, bint inclusive=True):
  *         _assertValidNode(node)             # <<<<<<<<<<<<<<
  *         self._top_node  = node
  *         self._next_node = node
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2922, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_node); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2925, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2923
+  /* "lxml/etree.pyx":2926
  *     def __cinit__(self, _Element node not None, tag=None, *, bint inclusive=True):
  *         _assertValidNode(node)
  *         self._top_node  = node             # <<<<<<<<<<<<<<
@@ -81870,7 +81952,7 @@ static int __pyx_pf_4lxml_5etree_25ElementDepthFirstIterator___cinit__(struct __
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_top_node));
   __pyx_v_self->_top_node = __pyx_v_node;
 
-  /* "lxml/etree.pyx":2924
+  /* "lxml/etree.pyx":2927
  *         _assertValidNode(node)
  *         self._top_node  = node
  *         self._next_node = node             # <<<<<<<<<<<<<<
@@ -81883,19 +81965,19 @@ static int __pyx_pf_4lxml_5etree_25ElementDepthFirstIterator___cinit__(struct __
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_next_node));
   __pyx_v_self->_next_node = __pyx_v_node;
 
-  /* "lxml/etree.pyx":2925
+  /* "lxml/etree.pyx":2928
  *         self._top_node  = node
  *         self._next_node = node
  *         self._matcher = _MultiTagMatcher.__new__(_MultiTagMatcher, tag)             # <<<<<<<<<<<<<<
  *         self._matcher.cacheTags(node._doc)
  *         if not inclusive or not self._matcher.matches(node._c_node):
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2925, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2928, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_tag);
   __Pyx_GIVEREF(__pyx_v_tag);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_tag);
-  __pyx_t_3 = ((PyObject *)__pyx_tp_new_4lxml_5etree__MultiTagMatcher(((PyTypeObject *)__pyx_ptype_4lxml_5etree__MultiTagMatcher), __pyx_t_2, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2925, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_tp_new_4lxml_5etree__MultiTagMatcher(((PyTypeObject *)__pyx_ptype_4lxml_5etree__MultiTagMatcher), __pyx_t_2, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2928, __pyx_L1_error)
   __Pyx_GOTREF(((PyObject *)__pyx_t_3));
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
@@ -81904,7 +81986,7 @@ static int __pyx_pf_4lxml_5etree_25ElementDepthFirstIterator___cinit__(struct __
   __pyx_v_self->_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":2926
+  /* "lxml/etree.pyx":2929
  *         self._next_node = node
  *         self._matcher = _MultiTagMatcher.__new__(_MultiTagMatcher, tag)
  *         self._matcher.cacheTags(node._doc)             # <<<<<<<<<<<<<<
@@ -81913,10 +81995,10 @@ static int __pyx_pf_4lxml_5etree_25ElementDepthFirstIterator___cinit__(struct __
  */
   __pyx_t_3 = ((PyObject *)__pyx_v_node->_doc);
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(__pyx_v_self->_matcher, ((struct LxmlDocument *)__pyx_t_3), NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2926, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(__pyx_v_self->_matcher, ((struct LxmlDocument *)__pyx_t_3), NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2929, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":2927
+  /* "lxml/etree.pyx":2930
  *         self._matcher = _MultiTagMatcher.__new__(_MultiTagMatcher, tag)
  *         self._matcher.cacheTags(node._doc)
  *         if not inclusive or not self._matcher.matches(node._c_node):             # <<<<<<<<<<<<<<
@@ -81934,18 +82016,18 @@ static int __pyx_pf_4lxml_5etree_25ElementDepthFirstIterator___cinit__(struct __
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "lxml/etree.pyx":2929
+    /* "lxml/etree.pyx":2932
  *         if not inclusive or not self._matcher.matches(node._c_node):
  *             # find start node (this cannot raise StopIteration, self._next_node != None)
  *             next(self)             # <<<<<<<<<<<<<<
  * 
  *     def __iter__(self):
  */
-    __pyx_t_3 = __Pyx_PyIter_Next(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2929, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyIter_Next(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2932, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":2927
+    /* "lxml/etree.pyx":2930
  *         self._matcher = _MultiTagMatcher.__new__(_MultiTagMatcher, tag)
  *         self._matcher.cacheTags(node._doc)
  *         if not inclusive or not self._matcher.matches(node._c_node):             # <<<<<<<<<<<<<<
@@ -81954,7 +82036,7 @@ static int __pyx_pf_4lxml_5etree_25ElementDepthFirstIterator___cinit__(struct __
  */
   }
 
-  /* "lxml/etree.pyx":2921
+  /* "lxml/etree.pyx":2924
  *     cdef _Element _top_node
  *     cdef _MultiTagMatcher _matcher
  *     def __cinit__(self, _Element node not None, tag=None, *, bint inclusive=True):             # <<<<<<<<<<<<<<
@@ -81975,7 +82057,7 @@ static int __pyx_pf_4lxml_5etree_25ElementDepthFirstIterator___cinit__(struct __
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2931
+/* "lxml/etree.pyx":2934
  *             next(self)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -82001,7 +82083,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_2__iter__(str
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__iter__", 0);
 
-  /* "lxml/etree.pyx":2932
+  /* "lxml/etree.pyx":2935
  * 
  *     def __iter__(self):
  *         return self             # <<<<<<<<<<<<<<
@@ -82013,7 +82095,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_2__iter__(str
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2931
+  /* "lxml/etree.pyx":2934
  *             next(self)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -82028,7 +82110,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_2__iter__(str
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2934
+/* "lxml/etree.pyx":2937
  *         return self
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -82065,7 +82147,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__next__", 0);
 
-  /* "lxml/etree.pyx":2936
+  /* "lxml/etree.pyx":2939
  *     def __next__(self):
  *         cdef xmlNode* c_node
  *         cdef _Element current_node = self._next_node             # <<<<<<<<<<<<<<
@@ -82077,7 +82159,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   __pyx_v_current_node = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2937
+  /* "lxml/etree.pyx":2940
  *         cdef xmlNode* c_node
  *         cdef _Element current_node = self._next_node
  *         if current_node is None:             # <<<<<<<<<<<<<<
@@ -82088,7 +82170,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":2938
+    /* "lxml/etree.pyx":2941
  *         cdef _Element current_node = self._next_node
  *         if current_node is None:
  *             raise StopIteration             # <<<<<<<<<<<<<<
@@ -82096,9 +82178,9 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
  *         self._matcher.cacheTags(current_node._doc)
  */
     __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0, 0);
-    __PYX_ERR(0, 2938, __pyx_L1_error)
+    __PYX_ERR(0, 2941, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":2937
+    /* "lxml/etree.pyx":2940
  *         cdef xmlNode* c_node
  *         cdef _Element current_node = self._next_node
  *         if current_node is None:             # <<<<<<<<<<<<<<
@@ -82107,7 +82189,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
  */
   }
 
-  /* "lxml/etree.pyx":2939
+  /* "lxml/etree.pyx":2942
  *         if current_node is None:
  *             raise StopIteration
  *         c_node = current_node._c_node             # <<<<<<<<<<<<<<
@@ -82117,7 +82199,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   __pyx_t_4 = __pyx_v_current_node->_c_node;
   __pyx_v_c_node = __pyx_t_4;
 
-  /* "lxml/etree.pyx":2940
+  /* "lxml/etree.pyx":2943
  *             raise StopIteration
  *         c_node = current_node._c_node
  *         self._matcher.cacheTags(current_node._doc)             # <<<<<<<<<<<<<<
@@ -82126,10 +82208,10 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
  */
   __pyx_t_1 = ((PyObject *)__pyx_v_current_node->_doc);
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_5 = __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(__pyx_v_self->_matcher, ((struct LxmlDocument *)__pyx_t_1), NULL); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 2940, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(__pyx_v_self->_matcher, ((struct LxmlDocument *)__pyx_t_1), NULL); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 2943, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":2941
+  /* "lxml/etree.pyx":2944
  *         c_node = current_node._c_node
  *         self._matcher.cacheTags(current_node._doc)
  *         if not self._matcher._tag_count:             # <<<<<<<<<<<<<<
@@ -82139,7 +82221,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   __pyx_t_3 = ((!(__pyx_v_self->_matcher->_tag_count != 0)) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2944
+    /* "lxml/etree.pyx":2947
  *             # no tag name was found in the dict => not in document either
  *             # try to match by node type
  *             c_node = self._nextNodeAnyTag(c_node)             # <<<<<<<<<<<<<<
@@ -82148,7 +82230,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
  */
     __pyx_v_c_node = __pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag(__pyx_v_self, __pyx_v_c_node);
 
-    /* "lxml/etree.pyx":2941
+    /* "lxml/etree.pyx":2944
  *         c_node = current_node._c_node
  *         self._matcher.cacheTags(current_node._doc)
  *         if not self._matcher._tag_count:             # <<<<<<<<<<<<<<
@@ -82158,7 +82240,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
     goto __pyx_L4;
   }
 
-  /* "lxml/etree.pyx":2946
+  /* "lxml/etree.pyx":2949
  *             c_node = self._nextNodeAnyTag(c_node)
  *         else:
  *             c_node = self._nextNodeMatchTag(c_node)             # <<<<<<<<<<<<<<
@@ -82170,7 +82252,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   }
   __pyx_L4:;
 
-  /* "lxml/etree.pyx":2947
+  /* "lxml/etree.pyx":2950
  *         else:
  *             c_node = self._nextNodeMatchTag(c_node)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -82180,7 +82262,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   __pyx_t_3 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":2948
+    /* "lxml/etree.pyx":2951
  *             c_node = self._nextNodeMatchTag(c_node)
  *         if c_node is NULL:
  *             self._next_node = None             # <<<<<<<<<<<<<<
@@ -82193,7 +82275,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
     __Pyx_DECREF(((PyObject *)__pyx_v_self->_next_node));
     __pyx_v_self->_next_node = ((struct LxmlElement *)Py_None);
 
-    /* "lxml/etree.pyx":2947
+    /* "lxml/etree.pyx":2950
  *         else:
  *             c_node = self._nextNodeMatchTag(c_node)
  *         if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -82203,7 +82285,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
     goto __pyx_L5;
   }
 
-  /* "lxml/etree.pyx":2950
+  /* "lxml/etree.pyx":2953
  *             self._next_node = None
  *         else:
  *             self._next_node = _elementFactory(current_node._doc, c_node)             # <<<<<<<<<<<<<<
@@ -82213,7 +82295,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   /*else*/ {
     __pyx_t_1 = ((PyObject *)__pyx_v_current_node->_doc);
     __Pyx_INCREF(__pyx_t_1);
-    __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_1), __pyx_v_c_node)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2950, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_1), __pyx_v_c_node)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2953, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GIVEREF(__pyx_t_6);
@@ -82224,7 +82306,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   }
   __pyx_L5:;
 
-  /* "lxml/etree.pyx":2951
+  /* "lxml/etree.pyx":2954
  *         else:
  *             self._next_node = _elementFactory(current_node._doc, c_node)
  *         return current_node             # <<<<<<<<<<<<<<
@@ -82236,7 +82318,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   __pyx_r = ((PyObject *)__pyx_v_current_node);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2934
+  /* "lxml/etree.pyx":2937
  *         return self
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -82257,7 +82339,7 @@ static PyObject *__pyx_pf_4lxml_5etree_25ElementDepthFirstIterator_4__next__(str
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2954
+/* "lxml/etree.pyx":2957
  * 
  *     @cython.final
  *     cdef xmlNode* _nextNodeAnyTag(self, xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -82273,7 +82355,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("_nextNodeAnyTag", 0);
 
-  /* "lxml/etree.pyx":2955
+  /* "lxml/etree.pyx":2958
  *     @cython.final
  *     cdef xmlNode* _nextNodeAnyTag(self, xmlNode* c_node):
  *         cdef int node_types = self._matcher._node_types             # <<<<<<<<<<<<<<
@@ -82283,7 +82365,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
   __pyx_t_1 = __pyx_v_self->_matcher->_node_types;
   __pyx_v_node_types = __pyx_t_1;
 
-  /* "lxml/etree.pyx":2956
+  /* "lxml/etree.pyx":2959
  *     cdef xmlNode* _nextNodeAnyTag(self, xmlNode* c_node):
  *         cdef int node_types = self._matcher._node_types
  *         if not node_types:             # <<<<<<<<<<<<<<
@@ -82293,7 +82375,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
   __pyx_t_2 = ((!(__pyx_v_node_types != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2957
+    /* "lxml/etree.pyx":2960
  *         cdef int node_types = self._matcher._node_types
  *         if not node_types:
  *             return NULL             # <<<<<<<<<<<<<<
@@ -82303,7 +82385,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
     __pyx_r = NULL;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2956
+    /* "lxml/etree.pyx":2959
  *     cdef xmlNode* _nextNodeAnyTag(self, xmlNode* c_node):
  *         cdef int node_types = self._matcher._node_types
  *         if not node_types:             # <<<<<<<<<<<<<<
@@ -82312,7 +82394,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
  */
   }
 
-  /* "lxml/etree.pyx":2958
+  /* "lxml/etree.pyx":2961
  *         if not node_types:
  *             return NULL
  *         tree.BEGIN_FOR_EACH_ELEMENT_FROM(self._top_node._c_node, c_node, 0)             # <<<<<<<<<<<<<<
@@ -82321,7 +82403,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
  */
   BEGIN_FOR_EACH_ELEMENT_FROM(__pyx_v_self->_top_node->_c_node, __pyx_v_c_node, 0);
 
-  /* "lxml/etree.pyx":2959
+  /* "lxml/etree.pyx":2962
  *             return NULL
  *         tree.BEGIN_FOR_EACH_ELEMENT_FROM(self._top_node._c_node, c_node, 0)
  *         if node_types & (1 << c_node.type):             # <<<<<<<<<<<<<<
@@ -82331,7 +82413,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
   __pyx_t_2 = ((__pyx_v_node_types & (1 << __pyx_v_c_node->type)) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2960
+    /* "lxml/etree.pyx":2963
  *         tree.BEGIN_FOR_EACH_ELEMENT_FROM(self._top_node._c_node, c_node, 0)
  *         if node_types & (1 << c_node.type):
  *             return c_node             # <<<<<<<<<<<<<<
@@ -82341,7 +82423,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
     __pyx_r = __pyx_v_c_node;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2959
+    /* "lxml/etree.pyx":2962
  *             return NULL
  *         tree.BEGIN_FOR_EACH_ELEMENT_FROM(self._top_node._c_node, c_node, 0)
  *         if node_types & (1 << c_node.type):             # <<<<<<<<<<<<<<
@@ -82350,7 +82432,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
  */
   }
 
-  /* "lxml/etree.pyx":2961
+  /* "lxml/etree.pyx":2964
  *         if node_types & (1 << c_node.type):
  *             return c_node
  *         tree.END_FOR_EACH_ELEMENT_FROM(c_node)             # <<<<<<<<<<<<<<
@@ -82359,7 +82441,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
  */
   END_FOR_EACH_ELEMENT_FROM(__pyx_v_c_node);
 
-  /* "lxml/etree.pyx":2962
+  /* "lxml/etree.pyx":2965
  *             return c_node
  *         tree.END_FOR_EACH_ELEMENT_FROM(c_node)
  *         return NULL             # <<<<<<<<<<<<<<
@@ -82369,7 +82451,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
   __pyx_r = NULL;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2954
+  /* "lxml/etree.pyx":2957
  * 
  *     @cython.final
  *     cdef xmlNode* _nextNodeAnyTag(self, xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -82383,7 +82465,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2965
+/* "lxml/etree.pyx":2968
  * 
  *     @cython.final
  *     cdef xmlNode* _nextNodeMatchTag(self, xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -82397,7 +82479,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchT
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("_nextNodeMatchTag", 0);
 
-  /* "lxml/etree.pyx":2966
+  /* "lxml/etree.pyx":2969
  *     @cython.final
  *     cdef xmlNode* _nextNodeMatchTag(self, xmlNode* c_node):
  *         tree.BEGIN_FOR_EACH_ELEMENT_FROM(self._top_node._c_node, c_node, 0)             # <<<<<<<<<<<<<<
@@ -82406,7 +82488,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchT
  */
   BEGIN_FOR_EACH_ELEMENT_FROM(__pyx_v_self->_top_node->_c_node, __pyx_v_c_node, 0);
 
-  /* "lxml/etree.pyx":2967
+  /* "lxml/etree.pyx":2970
  *     cdef xmlNode* _nextNodeMatchTag(self, xmlNode* c_node):
  *         tree.BEGIN_FOR_EACH_ELEMENT_FROM(self._top_node._c_node, c_node, 0)
  *         if self._matcher.matches(c_node):             # <<<<<<<<<<<<<<
@@ -82416,7 +82498,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchT
   __pyx_t_1 = (__pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(__pyx_v_self->_matcher, __pyx_v_c_node) != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":2968
+    /* "lxml/etree.pyx":2971
  *         tree.BEGIN_FOR_EACH_ELEMENT_FROM(self._top_node._c_node, c_node, 0)
  *         if self._matcher.matches(c_node):
  *             return c_node             # <<<<<<<<<<<<<<
@@ -82426,7 +82508,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchT
     __pyx_r = __pyx_v_c_node;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":2967
+    /* "lxml/etree.pyx":2970
  *     cdef xmlNode* _nextNodeMatchTag(self, xmlNode* c_node):
  *         tree.BEGIN_FOR_EACH_ELEMENT_FROM(self._top_node._c_node, c_node, 0)
  *         if self._matcher.matches(c_node):             # <<<<<<<<<<<<<<
@@ -82435,7 +82517,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchT
  */
   }
 
-  /* "lxml/etree.pyx":2969
+  /* "lxml/etree.pyx":2972
  *         if self._matcher.matches(c_node):
  *             return c_node
  *         tree.END_FOR_EACH_ELEMENT_FROM(c_node)             # <<<<<<<<<<<<<<
@@ -82444,7 +82526,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchT
  */
   END_FOR_EACH_ELEMENT_FROM(__pyx_v_c_node);
 
-  /* "lxml/etree.pyx":2970
+  /* "lxml/etree.pyx":2973
  *             return c_node
  *         tree.END_FOR_EACH_ELEMENT_FROM(c_node)
  *         return NULL             # <<<<<<<<<<<<<<
@@ -82454,7 +82536,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchT
   __pyx_r = NULL;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2965
+  /* "lxml/etree.pyx":2968
  * 
  *     @cython.final
  *     cdef xmlNode* _nextNodeMatchTag(self, xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -82468,7 +82550,7 @@ static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchT
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2984
+/* "lxml/etree.pyx":2987
  *     cdef object _events
  *     cdef _Element _start_element
  *     def __cinit__(self, _Element element not None, tag=None, *, bint with_tail=True):             # <<<<<<<<<<<<<<
@@ -82521,7 +82603,7 @@ static int __pyx_pw_4lxml_5etree_19ElementTextIterator_1__cinit__(PyObject *__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, "__cinit__") < 0)) __PYX_ERR(0, 2984, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 2987, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -82535,20 +82617,20 @@ static int __pyx_pw_4lxml_5etree_19ElementTextIterator_1__cinit__(PyObject *__py
     __pyx_v_element = ((struct LxmlElement *)values[0]);
     __pyx_v_tag = values[1];
     if (values[2]) {
-      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2984, __pyx_L3_error)
+      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2987, __pyx_L3_error)
     } else {
       __pyx_v_with_tail = ((int)1);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2984, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2987, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.ElementTextIterator.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 2984, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 0, "element", 0))) __PYX_ERR(0, 2987, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_19ElementTextIterator___cinit__(((struct __pyx_obj_4lxml_5etree_ElementTextIterator *)__pyx_v_self), __pyx_v_element, __pyx_v_tag, __pyx_v_with_tail);
 
   /* function exit code */
@@ -82574,16 +82656,16 @@ static int __pyx_pf_4lxml_5etree_19ElementTextIterator___cinit__(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "lxml/etree.pyx":2985
+  /* "lxml/etree.pyx":2988
  *     cdef _Element _start_element
  *     def __cinit__(self, _Element element not None, tag=None, *, bint with_tail=True):
  *         _assertValidNode(element)             # <<<<<<<<<<<<<<
  *         if with_tail:
  *             events = (u"start", u"comment", u"pi", u"end")
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2985, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2988, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2986
+  /* "lxml/etree.pyx":2989
  *     def __cinit__(self, _Element element not None, tag=None, *, bint with_tail=True):
  *         _assertValidNode(element)
  *         if with_tail:             # <<<<<<<<<<<<<<
@@ -82593,7 +82675,7 @@ static int __pyx_pf_4lxml_5etree_19ElementTextIterator___cinit__(struct __pyx_ob
   __pyx_t_2 = (__pyx_v_with_tail != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":2987
+    /* "lxml/etree.pyx":2990
  *         _assertValidNode(element)
  *         if with_tail:
  *             events = (u"start", u"comment", u"pi", u"end")             # <<<<<<<<<<<<<<
@@ -82603,7 +82685,7 @@ static int __pyx_pf_4lxml_5etree_19ElementTextIterator___cinit__(struct __pyx_ob
     __Pyx_INCREF(__pyx_tuple__44);
     __pyx_v_events = __pyx_tuple__44;
 
-    /* "lxml/etree.pyx":2986
+    /* "lxml/etree.pyx":2989
  *     def __cinit__(self, _Element element not None, tag=None, *, bint with_tail=True):
  *         _assertValidNode(element)
  *         if with_tail:             # <<<<<<<<<<<<<<
@@ -82613,7 +82695,7 @@ static int __pyx_pf_4lxml_5etree_19ElementTextIterator___cinit__(struct __pyx_ob
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":2989
+  /* "lxml/etree.pyx":2992
  *             events = (u"start", u"comment", u"pi", u"end")
  *         else:
  *             events = (u"start", u"comment", u"pi")             # <<<<<<<<<<<<<<
@@ -82626,7 +82708,7 @@ static int __pyx_pf_4lxml_5etree_19ElementTextIterator___cinit__(struct __pyx_ob
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":2990
+  /* "lxml/etree.pyx":2993
  *         else:
  *             events = (u"start", u"comment", u"pi")
  *         self._start_element = element             # <<<<<<<<<<<<<<
@@ -82639,23 +82721,23 @@ static int __pyx_pf_4lxml_5etree_19ElementTextIterator___cinit__(struct __pyx_ob
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_start_element));
   __pyx_v_self->_start_element = __pyx_v_element;
 
-  /* "lxml/etree.pyx":2991
+  /* "lxml/etree.pyx":2994
  *             events = (u"start", u"comment", u"pi")
  *         self._start_element = element
  *         self._events = iterwalk(element, events=events, tag=tag)             # <<<<<<<<<<<<<<
  * 
  *     def __iter__(self):
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2991, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2994, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(((PyObject *)__pyx_v_element));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_element));
   PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_element));
-  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2991, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2994, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_events, __pyx_v_events) < 0) __PYX_ERR(0, 2991, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_tag, __pyx_v_tag) < 0) __PYX_ERR(0, 2991, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_iterwalk), __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2991, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_events, __pyx_v_events) < 0) __PYX_ERR(0, 2994, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_tag, __pyx_v_tag) < 0) __PYX_ERR(0, 2994, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_iterwalk), __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2994, __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;
@@ -82665,7 +82747,7 @@ static int __pyx_pf_4lxml_5etree_19ElementTextIterator___cinit__(struct __pyx_ob
   __pyx_v_self->_events = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "lxml/etree.pyx":2984
+  /* "lxml/etree.pyx":2987
  *     cdef object _events
  *     cdef _Element _start_element
  *     def __cinit__(self, _Element element not None, tag=None, *, bint with_tail=True):             # <<<<<<<<<<<<<<
@@ -82688,7 +82770,7 @@ static int __pyx_pf_4lxml_5etree_19ElementTextIterator___cinit__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2993
+/* "lxml/etree.pyx":2996
  *         self._events = iterwalk(element, events=events, tag=tag)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -82714,7 +82796,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_2__iter__(struct __
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__iter__", 0);
 
-  /* "lxml/etree.pyx":2994
+  /* "lxml/etree.pyx":2997
  * 
  *     def __iter__(self):
  *         return self             # <<<<<<<<<<<<<<
@@ -82726,7 +82808,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_2__iter__(struct __
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2993
+  /* "lxml/etree.pyx":2996
  *         self._events = iterwalk(element, events=events, tag=tag)
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
@@ -82741,7 +82823,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_2__iter__(struct __
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":2996
+/* "lxml/etree.pyx":2999
  *         return self
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -82780,7 +82862,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__next__", 0);
 
-  /* "lxml/etree.pyx":2998
+  /* "lxml/etree.pyx":3001
  *     def __next__(self):
  *         cdef _Element element
  *         result = None             # <<<<<<<<<<<<<<
@@ -82790,7 +82872,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
   __Pyx_INCREF(Py_None);
   __pyx_v_result = Py_None;
 
-  /* "lxml/etree.pyx":2999
+  /* "lxml/etree.pyx":3002
  *         cdef _Element element
  *         result = None
  *         while result is None:             # <<<<<<<<<<<<<<
@@ -82802,7 +82884,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (!__pyx_t_2) break;
 
-    /* "lxml/etree.pyx":3000
+    /* "lxml/etree.pyx":3003
  *         result = None
  *         while result is None:
  *             event, element = next(self._events)  # raises StopIteration             # <<<<<<<<<<<<<<
@@ -82811,7 +82893,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
  */
     __pyx_t_3 = __pyx_v_self->_events;
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyIter_Next(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3000, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyIter_Next(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3003, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
@@ -82820,7 +82902,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 3000, __pyx_L1_error)
+        __PYX_ERR(0, 3003, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -82833,15 +82915,15 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
       __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_5);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3000, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3003, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3000, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3003, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #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(0, 3000, __pyx_L1_error)
+      __pyx_t_6 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3003, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
@@ -82849,7 +82931,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
       __Pyx_GOTREF(__pyx_t_3);
       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, 3000, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 3003, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L6_unpacking_done;
@@ -82857,38 +82939,38 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 3000, __pyx_L1_error)
+      __PYX_ERR(0, 3003, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
-    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 3000, __pyx_L1_error)
+    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(0, 3003, __pyx_L1_error)
     __Pyx_XDECREF_SET(__pyx_v_event, __pyx_t_3);
     __pyx_t_3 = 0;
     __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_5));
     __pyx_t_5 = 0;
 
-    /* "lxml/etree.pyx":3001
+    /* "lxml/etree.pyx":3004
  *         while result is None:
  *             event, element = next(self._events)  # raises StopIteration
  *             if event == u"start":             # <<<<<<<<<<<<<<
  *                 result = element.text
  *             elif element is not self._start_element:
  */
-    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_event, __pyx_n_u_start, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3001, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_event, __pyx_n_u_start, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3004, __pyx_L1_error)
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":3002
+      /* "lxml/etree.pyx":3005
  *             event, element = next(self._events)  # raises StopIteration
  *             if event == u"start":
  *                 result = element.text             # <<<<<<<<<<<<<<
  *             elif element is not self._start_element:
  *                 result = element.tail
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3002, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3005, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/etree.pyx":3001
+      /* "lxml/etree.pyx":3004
  *         while result is None:
  *             event, element = next(self._events)  # raises StopIteration
  *             if event == u"start":             # <<<<<<<<<<<<<<
@@ -82898,7 +82980,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
       goto __pyx_L7;
     }
 
-    /* "lxml/etree.pyx":3003
+    /* "lxml/etree.pyx":3006
  *             if event == u"start":
  *                 result = element.text
  *             elif element is not self._start_element:             # <<<<<<<<<<<<<<
@@ -82909,19 +82991,19 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":3004
+      /* "lxml/etree.pyx":3007
  *                 result = element.text
  *             elif element is not self._start_element:
  *                 result = element.tail             # <<<<<<<<<<<<<<
  *         return result
  * 
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_tail); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3004, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_tail); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3007, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/etree.pyx":3003
+      /* "lxml/etree.pyx":3006
  *             if event == u"start":
  *                 result = element.text
  *             elif element is not self._start_element:             # <<<<<<<<<<<<<<
@@ -82932,7 +83014,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
     __pyx_L7:;
   }
 
-  /* "lxml/etree.pyx":3005
+  /* "lxml/etree.pyx":3008
  *             elif element is not self._start_element:
  *                 result = element.tail
  *         return result             # <<<<<<<<<<<<<<
@@ -82944,7 +83026,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":2996
+  /* "lxml/etree.pyx":2999
  *         return self
  * 
  *     def __next__(self):             # <<<<<<<<<<<<<<
@@ -82969,7 +83051,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3007
+/* "lxml/etree.pyx":3010
  *         return result
  * 
  * cdef xmlNode* _createElement(xmlDoc* c_doc, object name_utf) except NULL:             # <<<<<<<<<<<<<<
@@ -82983,7 +83065,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createElement(xmlDoc *__pyx_v_c_doc, PyObj
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_createElement", 0);
 
-  /* "lxml/etree.pyx":3009
+  /* "lxml/etree.pyx":3012
  * cdef xmlNode* _createElement(xmlDoc* c_doc, object name_utf) except NULL:
  *     cdef xmlNode* c_node
  *     c_node = tree.xmlNewDocNode(c_doc, NULL, _xcstr(name_utf), NULL)             # <<<<<<<<<<<<<<
@@ -82992,7 +83074,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createElement(xmlDoc *__pyx_v_c_doc, PyObj
  */
   __pyx_v_c_node = xmlNewDocNode(__pyx_v_c_doc, NULL, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_name_utf), NULL);
 
-  /* "lxml/etree.pyx":3010
+  /* "lxml/etree.pyx":3013
  *     cdef xmlNode* c_node
  *     c_node = tree.xmlNewDocNode(c_doc, NULL, _xcstr(name_utf), NULL)
  *     return c_node             # <<<<<<<<<<<<<<
@@ -83002,7 +83084,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createElement(xmlDoc *__pyx_v_c_doc, PyObj
   __pyx_r = __pyx_v_c_node;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3007
+  /* "lxml/etree.pyx":3010
  *         return result
  * 
  * cdef xmlNode* _createElement(xmlDoc* c_doc, object name_utf) except NULL:             # <<<<<<<<<<<<<<
@@ -83016,7 +83098,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createElement(xmlDoc *__pyx_v_c_doc, PyObj
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3012
+/* "lxml/etree.pyx":3015
  *     return c_node
  * 
  * cdef xmlNode* _createComment(xmlDoc* c_doc, const_xmlChar* text):             # <<<<<<<<<<<<<<
@@ -83030,7 +83112,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createComment(xmlDoc *__pyx_v_c_doc, const
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_createComment", 0);
 
-  /* "lxml/etree.pyx":3014
+  /* "lxml/etree.pyx":3017
  * cdef xmlNode* _createComment(xmlDoc* c_doc, const_xmlChar* text):
  *     cdef xmlNode* c_node
  *     c_node = tree.xmlNewDocComment(c_doc, text)             # <<<<<<<<<<<<<<
@@ -83039,7 +83121,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createComment(xmlDoc *__pyx_v_c_doc, const
  */
   __pyx_v_c_node = xmlNewDocComment(__pyx_v_c_doc, __pyx_v_text);
 
-  /* "lxml/etree.pyx":3015
+  /* "lxml/etree.pyx":3018
  *     cdef xmlNode* c_node
  *     c_node = tree.xmlNewDocComment(c_doc, text)
  *     return c_node             # <<<<<<<<<<<<<<
@@ -83049,7 +83131,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createComment(xmlDoc *__pyx_v_c_doc, const
   __pyx_r = __pyx_v_c_node;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3012
+  /* "lxml/etree.pyx":3015
  *     return c_node
  * 
  * cdef xmlNode* _createComment(xmlDoc* c_doc, const_xmlChar* text):             # <<<<<<<<<<<<<<
@@ -83063,7 +83145,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createComment(xmlDoc *__pyx_v_c_doc, const
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3017
+/* "lxml/etree.pyx":3020
  *     return c_node
  * 
  * cdef xmlNode* _createPI(xmlDoc* c_doc, const_xmlChar* target, const_xmlChar* text):             # <<<<<<<<<<<<<<
@@ -83077,7 +83159,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createPI(xmlDoc *__pyx_v_c_doc, const xmlC
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_createPI", 0);
 
-  /* "lxml/etree.pyx":3019
+  /* "lxml/etree.pyx":3022
  * cdef xmlNode* _createPI(xmlDoc* c_doc, const_xmlChar* target, const_xmlChar* text):
  *     cdef xmlNode* c_node
  *     c_node = tree.xmlNewDocPI(c_doc, target, text)             # <<<<<<<<<<<<<<
@@ -83086,7 +83168,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createPI(xmlDoc *__pyx_v_c_doc, const xmlC
  */
   __pyx_v_c_node = xmlNewDocPI(__pyx_v_c_doc, __pyx_v_target, __pyx_v_text);
 
-  /* "lxml/etree.pyx":3020
+  /* "lxml/etree.pyx":3023
  *     cdef xmlNode* c_node
  *     c_node = tree.xmlNewDocPI(c_doc, target, text)
  *     return c_node             # <<<<<<<<<<<<<<
@@ -83096,7 +83178,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createPI(xmlDoc *__pyx_v_c_doc, const xmlC
   __pyx_r = __pyx_v_c_node;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3017
+  /* "lxml/etree.pyx":3020
  *     return c_node
  * 
  * cdef xmlNode* _createPI(xmlDoc* c_doc, const_xmlChar* target, const_xmlChar* text):             # <<<<<<<<<<<<<<
@@ -83110,7 +83192,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createPI(xmlDoc *__pyx_v_c_doc, const xmlC
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3022
+/* "lxml/etree.pyx":3025
  *     return c_node
  * 
  * cdef xmlNode* _createEntity(xmlDoc* c_doc, const_xmlChar* name):             # <<<<<<<<<<<<<<
@@ -83124,7 +83206,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createEntity(xmlDoc *__pyx_v_c_doc, const
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_createEntity", 0);
 
-  /* "lxml/etree.pyx":3024
+  /* "lxml/etree.pyx":3027
  * cdef xmlNode* _createEntity(xmlDoc* c_doc, const_xmlChar* name):
  *     cdef xmlNode* c_node
  *     c_node = tree.xmlNewReference(c_doc, name)             # <<<<<<<<<<<<<<
@@ -83133,7 +83215,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createEntity(xmlDoc *__pyx_v_c_doc, const
  */
   __pyx_v_c_node = xmlNewReference(__pyx_v_c_doc, __pyx_v_name);
 
-  /* "lxml/etree.pyx":3025
+  /* "lxml/etree.pyx":3028
  *     cdef xmlNode* c_node
  *     c_node = tree.xmlNewReference(c_doc, name)
  *     return c_node             # <<<<<<<<<<<<<<
@@ -83143,7 +83225,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createEntity(xmlDoc *__pyx_v_c_doc, const
   __pyx_r = __pyx_v_c_node;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3022
+  /* "lxml/etree.pyx":3025
  *     return c_node
  * 
  * cdef xmlNode* _createEntity(xmlDoc* c_doc, const_xmlChar* name):             # <<<<<<<<<<<<<<
@@ -83157,7 +83239,7 @@ static xmlNode *__pyx_f_4lxml_5etree__createEntity(xmlDoc *__pyx_v_c_doc, const
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3029
+/* "lxml/etree.pyx":3032
  * # module-level API for ElementTree
  * 
  * def Element(_tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
@@ -83219,7 +83301,7 @@ static PyObject *__pyx_pw_4lxml_5etree_7Element(PyObject *__pyx_self, PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "Element") < 0)) __PYX_ERR(0, 3029, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "Element") < 0)) __PYX_ERR(0, 3032, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -83238,7 +83320,7 @@ static PyObject *__pyx_pw_4lxml_5etree_7Element(PyObject *__pyx_self, PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("Element", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3029, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("Element", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3032, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__extra); __pyx_v__extra = 0;
   __Pyx_AddTraceback("lxml.etree.Element", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -83262,7 +83344,7 @@ static PyObject *__pyx_pf_4lxml_5etree_6Element(CYTHON_UNUSED PyObject *__pyx_se
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Element", 0);
 
-  /* "lxml/etree.pyx":3039
+  /* "lxml/etree.pyx":3042
  *     create an Element within a specific document or parser context.
  *     """
  *     return _makeElement(_tag, NULL, None, None, None, None,             # <<<<<<<<<<<<<<
@@ -83271,20 +83353,20 @@ static PyObject *__pyx_pf_4lxml_5etree_6Element(CYTHON_UNUSED PyObject *__pyx_se
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "lxml/etree.pyx":3040
+  /* "lxml/etree.pyx":3043
  *     """
  *     return _makeElement(_tag, NULL, None, None, None, None,
  *                         attrib, nsmap, _extra)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__makeElement(__pyx_v__tag, NULL, ((struct LxmlDocument *)Py_None), ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None), Py_None, Py_None, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3039, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__makeElement(__pyx_v__tag, NULL, ((struct LxmlDocument *)Py_None), ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None), Py_None, Py_None, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3042, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3029
+  /* "lxml/etree.pyx":3032
  * # module-level API for ElementTree
  * 
  * def Element(_tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
@@ -83303,7 +83385,7 @@ static PyObject *__pyx_pf_4lxml_5etree_6Element(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3043
+/* "lxml/etree.pyx":3046
  * 
  * 
  * def Comment(text=None):             # <<<<<<<<<<<<<<
@@ -83345,7 +83427,7 @@ static PyObject *__pyx_pw_4lxml_5etree_9Comment(PyObject *__pyx_self, PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Comment") < 0)) __PYX_ERR(0, 3043, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Comment") < 0)) __PYX_ERR(0, 3046, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -83359,7 +83441,7 @@ static PyObject *__pyx_pw_4lxml_5etree_9Comment(PyObject *__pyx_self, PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("Comment", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3043, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("Comment", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3046, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.Comment", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -83391,7 +83473,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
   __Pyx_RefNannySetupContext("Comment", 0);
   __Pyx_INCREF(__pyx_v_text);
 
-  /* "lxml/etree.pyx":3053
+  /* "lxml/etree.pyx":3056
  *     cdef xmlDoc*   c_doc
  * 
  *     if text is None:             # <<<<<<<<<<<<<<
@@ -83402,7 +83484,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3054
+    /* "lxml/etree.pyx":3057
  * 
  *     if text is None:
  *         text = b''             # <<<<<<<<<<<<<<
@@ -83412,7 +83494,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
     __Pyx_INCREF(__pyx_kp_b__12);
     __Pyx_DECREF_SET(__pyx_v_text, __pyx_kp_b__12);
 
-    /* "lxml/etree.pyx":3053
+    /* "lxml/etree.pyx":3056
  *     cdef xmlDoc*   c_doc
  * 
  *     if text is None:             # <<<<<<<<<<<<<<
@@ -83422,7 +83504,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":3056
+  /* "lxml/etree.pyx":3059
  *         text = b''
  *     else:
  *         text = _utf8(text)             # <<<<<<<<<<<<<<
@@ -83430,26 +83512,26 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
  *             raise ValueError("Comment may not contain '--' or end with '-'")
  */
   /*else*/ {
-    __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3056, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3059, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":3057
+    /* "lxml/etree.pyx":3060
  *     else:
  *         text = _utf8(text)
  *         if b'--' in text or text.endswith(b'-'):             # <<<<<<<<<<<<<<
  *             raise ValueError("Comment may not contain '--' or end with '-'")
  * 
  */
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__46, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3057, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__46, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3060, __pyx_L1_error)
     __pyx_t_4 = (__pyx_t_1 != 0);
     if (!__pyx_t_4) {
     } else {
       __pyx_t_2 = __pyx_t_4;
       goto __pyx_L5_bool_binop_done;
     }
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_text, __pyx_n_s_endswith); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3057, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_text, __pyx_n_s_endswith); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3060, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_6 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -83463,29 +83545,29 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
     }
     __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_kp_b__3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_kp_b__3);
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3057, __pyx_L1_error)
+    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3060, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 3057, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 3060, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_2 = __pyx_t_4;
     __pyx_L5_bool_binop_done:;
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":3058
+      /* "lxml/etree.pyx":3061
  *         text = _utf8(text)
  *         if b'--' in text or text.endswith(b'-'):
  *             raise ValueError("Comment may not contain '--' or end with '-'")             # <<<<<<<<<<<<<<
  * 
  *     c_doc = _newXMLDoc()
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__47, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3058, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__47, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3061, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 3058, __pyx_L1_error)
+      __PYX_ERR(0, 3061, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":3057
+      /* "lxml/etree.pyx":3060
  *     else:
  *         text = _utf8(text)
  *         if b'--' in text or text.endswith(b'-'):             # <<<<<<<<<<<<<<
@@ -83496,29 +83578,29 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":3060
+  /* "lxml/etree.pyx":3063
  *             raise ValueError("Comment may not contain '--' or end with '-'")
  * 
  *     c_doc = _newXMLDoc()             # <<<<<<<<<<<<<<
  *     doc = _documentFactory(c_doc, None)
  *     c_node = _createComment(c_doc, _xcstr(text))
  */
-  __pyx_t_7 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_7 == ((xmlDoc *)NULL))) __PYX_ERR(0, 3060, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_7 == ((xmlDoc *)NULL))) __PYX_ERR(0, 3063, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_7;
 
-  /* "lxml/etree.pyx":3061
+  /* "lxml/etree.pyx":3064
  * 
  *     c_doc = _newXMLDoc()
  *     doc = _documentFactory(c_doc, None)             # <<<<<<<<<<<<<<
  *     c_node = _createComment(c_doc, _xcstr(text))
  *     tree.xmlAddChild(<xmlNode*>c_doc, c_node)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3061, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3064, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":3062
+  /* "lxml/etree.pyx":3065
  *     c_doc = _newXMLDoc()
  *     doc = _documentFactory(c_doc, None)
  *     c_node = _createComment(c_doc, _xcstr(text))             # <<<<<<<<<<<<<<
@@ -83527,7 +83609,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
  */
   __pyx_v_c_node = __pyx_f_4lxml_5etree__createComment(__pyx_v_c_doc, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_text));
 
-  /* "lxml/etree.pyx":3063
+  /* "lxml/etree.pyx":3066
  *     doc = _documentFactory(c_doc, None)
  *     c_node = _createComment(c_doc, _xcstr(text))
  *     tree.xmlAddChild(<xmlNode*>c_doc, c_node)             # <<<<<<<<<<<<<<
@@ -83536,7 +83618,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
  */
   (void)(xmlAddChild(((xmlNode *)__pyx_v_c_doc), __pyx_v_c_node));
 
-  /* "lxml/etree.pyx":3064
+  /* "lxml/etree.pyx":3067
  *     c_node = _createComment(c_doc, _xcstr(text))
  *     tree.xmlAddChild(<xmlNode*>c_doc, c_node)
  *     return _elementFactory(doc, c_node)             # <<<<<<<<<<<<<<
@@ -83544,13 +83626,13 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_doc, __pyx_v_c_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3064, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_doc, __pyx_v_c_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3067, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3043
+  /* "lxml/etree.pyx":3046
  * 
  * 
  * def Comment(text=None):             # <<<<<<<<<<<<<<
@@ -83573,7 +83655,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Comment(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3067
+/* "lxml/etree.pyx":3070
  * 
  * 
  * def ProcessingInstruction(target, text=None):             # <<<<<<<<<<<<<<
@@ -83622,7 +83704,7 @@ static PyObject *__pyx_pw_4lxml_5etree_11ProcessingInstruction(PyObject *__pyx_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ProcessingInstruction") < 0)) __PYX_ERR(0, 3067, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ProcessingInstruction") < 0)) __PYX_ERR(0, 3070, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -83638,7 +83720,7 @@ static PyObject *__pyx_pw_4lxml_5etree_11ProcessingInstruction(PyObject *__pyx_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ProcessingInstruction", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3067, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("ProcessingInstruction", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3070, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.ProcessingInstruction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -83673,35 +83755,35 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
   __Pyx_INCREF(__pyx_v_target);
   __Pyx_INCREF(__pyx_v_text);
 
-  /* "lxml/etree.pyx":3077
+  /* "lxml/etree.pyx":3080
  *     cdef xmlDoc*   c_doc
  * 
  *     target = _utf8(target)             # <<<<<<<<<<<<<<
  *     _tagValidOrRaise(target)
  *     if target.lower() == b'xml':
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3077, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3080, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_target, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3078
+  /* "lxml/etree.pyx":3081
  * 
  *     target = _utf8(target)
  *     _tagValidOrRaise(target)             # <<<<<<<<<<<<<<
  *     if target.lower() == b'xml':
  *         raise ValueError, f"Invalid PI name '{target}'"
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_target); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3078, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_target); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3081, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3079
+  /* "lxml/etree.pyx":3082
  *     target = _utf8(target)
  *     _tagValidOrRaise(target)
  *     if target.lower() == b'xml':             # <<<<<<<<<<<<<<
  *         raise ValueError, f"Invalid PI name '{target}'"
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_lower); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3079, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_target, __pyx_n_s_lower); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3082, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -83715,21 +83797,21 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
   }
   __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(0, 3079, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3082, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_5 = (__Pyx_PyBytes_Equals(__pyx_t_1, __pyx_n_b_xml, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3079, __pyx_L1_error)
+  __pyx_t_5 = (__Pyx_PyBytes_Equals(__pyx_t_1, __pyx_n_b_xml, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 3082, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (unlikely(__pyx_t_5)) {
 
-    /* "lxml/etree.pyx":3080
+    /* "lxml/etree.pyx":3083
  *     _tagValidOrRaise(target)
  *     if target.lower() == b'xml':
  *         raise ValueError, f"Invalid PI name '{target}'"             # <<<<<<<<<<<<<<
  * 
  *     if text is None:
  */
-    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3080, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3083, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_6 = 0;
     __pyx_t_7 = 127;
@@ -83737,7 +83819,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
     __pyx_t_6 += 17;
     __Pyx_GIVEREF(__pyx_kp_u_Invalid_PI_name);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Invalid_PI_name);
-    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_target, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3080, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_target, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3083, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
     __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
@@ -83748,14 +83830,14 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
     __pyx_t_6 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__22);
     PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__22);
-    __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3080, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3083, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_3, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(0, 3080, __pyx_L1_error)
+    __PYX_ERR(0, 3083, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":3079
+    /* "lxml/etree.pyx":3082
  *     target = _utf8(target)
  *     _tagValidOrRaise(target)
  *     if target.lower() == b'xml':             # <<<<<<<<<<<<<<
@@ -83764,7 +83846,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
  */
   }
 
-  /* "lxml/etree.pyx":3082
+  /* "lxml/etree.pyx":3085
  *         raise ValueError, f"Invalid PI name '{target}'"
  * 
  *     if text is None:             # <<<<<<<<<<<<<<
@@ -83775,7 +83857,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
   __pyx_t_8 = (__pyx_t_5 != 0);
   if (__pyx_t_8) {
 
-    /* "lxml/etree.pyx":3083
+    /* "lxml/etree.pyx":3086
  * 
  *     if text is None:
  *         text = b''             # <<<<<<<<<<<<<<
@@ -83785,7 +83867,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
     __Pyx_INCREF(__pyx_kp_b__12);
     __Pyx_DECREF_SET(__pyx_v_text, __pyx_kp_b__12);
 
-    /* "lxml/etree.pyx":3082
+    /* "lxml/etree.pyx":3085
  *         raise ValueError, f"Invalid PI name '{target}'"
  * 
  *     if text is None:             # <<<<<<<<<<<<<<
@@ -83795,7 +83877,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
     goto __pyx_L4;
   }
 
-  /* "lxml/etree.pyx":3085
+  /* "lxml/etree.pyx":3088
  *         text = b''
  *     else:
  *         text = _utf8(text)             # <<<<<<<<<<<<<<
@@ -83803,23 +83885,23 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
  *             raise ValueError, "PI text must not contain '?>'"
  */
   /*else*/ {
-    __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3085, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__utf8(__pyx_v_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3088, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":3086
+    /* "lxml/etree.pyx":3089
  *     else:
  *         text = _utf8(text)
  *         if b'?>' in text:             # <<<<<<<<<<<<<<
  *             raise ValueError, "PI text must not contain '?>'"
  * 
  */
-    __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__48, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 3086, __pyx_L1_error)
+    __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__48, __pyx_v_text, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 3089, __pyx_L1_error)
     __pyx_t_5 = (__pyx_t_8 != 0);
     if (unlikely(__pyx_t_5)) {
 
-      /* "lxml/etree.pyx":3087
+      /* "lxml/etree.pyx":3090
  *         text = _utf8(text)
  *         if b'?>' in text:
  *             raise ValueError, "PI text must not contain '?>'"             # <<<<<<<<<<<<<<
@@ -83827,9 +83909,9 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
  *     c_doc = _newXMLDoc()
  */
       __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_PI_text_must_not_contain, 0, 0);
-      __PYX_ERR(0, 3087, __pyx_L1_error)
+      __PYX_ERR(0, 3090, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":3086
+      /* "lxml/etree.pyx":3089
  *     else:
  *         text = _utf8(text)
  *         if b'?>' in text:             # <<<<<<<<<<<<<<
@@ -83840,29 +83922,29 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
   }
   __pyx_L4:;
 
-  /* "lxml/etree.pyx":3089
+  /* "lxml/etree.pyx":3092
  *             raise ValueError, "PI text must not contain '?>'"
  * 
  *     c_doc = _newXMLDoc()             # <<<<<<<<<<<<<<
  *     doc = _documentFactory(c_doc, None)
  *     c_node = _createPI(c_doc, _xcstr(target), _xcstr(text))
  */
-  __pyx_t_9 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_9 == ((xmlDoc *)NULL))) __PYX_ERR(0, 3089, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_9 == ((xmlDoc *)NULL))) __PYX_ERR(0, 3092, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_9;
 
-  /* "lxml/etree.pyx":3090
+  /* "lxml/etree.pyx":3093
  * 
  *     c_doc = _newXMLDoc()
  *     doc = _documentFactory(c_doc, None)             # <<<<<<<<<<<<<<
  *     c_node = _createPI(c_doc, _xcstr(target), _xcstr(text))
  *     tree.xmlAddChild(<xmlNode*>c_doc, c_node)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3090, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3093, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "lxml/etree.pyx":3091
+  /* "lxml/etree.pyx":3094
  *     c_doc = _newXMLDoc()
  *     doc = _documentFactory(c_doc, None)
  *     c_node = _createPI(c_doc, _xcstr(target), _xcstr(text))             # <<<<<<<<<<<<<<
@@ -83871,7 +83953,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
  */
   __pyx_v_c_node = __pyx_f_4lxml_5etree__createPI(__pyx_v_c_doc, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_target), (const xmlChar*)PyBytes_AS_STRING(__pyx_v_text));
 
-  /* "lxml/etree.pyx":3092
+  /* "lxml/etree.pyx":3095
  *     doc = _documentFactory(c_doc, None)
  *     c_node = _createPI(c_doc, _xcstr(target), _xcstr(text))
  *     tree.xmlAddChild(<xmlNode*>c_doc, c_node)             # <<<<<<<<<<<<<<
@@ -83880,7 +83962,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
  */
   (void)(xmlAddChild(((xmlNode *)__pyx_v_c_doc), __pyx_v_c_node));
 
-  /* "lxml/etree.pyx":3093
+  /* "lxml/etree.pyx":3096
  *     c_node = _createPI(c_doc, _xcstr(target), _xcstr(text))
  *     tree.xmlAddChild(<xmlNode*>c_doc, c_node)
  *     return _elementFactory(doc, c_node)             # <<<<<<<<<<<<<<
@@ -83888,13 +83970,13 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
  * PI = ProcessingInstruction
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_doc, __pyx_v_c_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3093, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_doc, __pyx_v_c_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3096, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3067
+  /* "lxml/etree.pyx":3070
  * 
  * 
  * def ProcessingInstruction(target, text=None):             # <<<<<<<<<<<<<<
@@ -83918,7 +84000,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ProcessingInstruction(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3113
+/* "lxml/etree.pyx":3116
  *     """
  *     cdef bytes _utf8_data
  *     def __cinit__(self, data):             # <<<<<<<<<<<<<<
@@ -83955,7 +84037,7 @@ static int __pyx_pw_4lxml_5etree_5CDATA_1__cinit__(PyObject *__pyx_v_self, PyObj
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 3113, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 3116, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -83966,7 +84048,7 @@ static int __pyx_pw_4lxml_5etree_5CDATA_1__cinit__(PyObject *__pyx_v_self, PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3113, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3116, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.CDATA.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -83991,30 +84073,30 @@ static int __pyx_pf_4lxml_5etree_5CDATA___cinit__(struct __pyx_obj_4lxml_5etree_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "lxml/etree.pyx":3114
+  /* "lxml/etree.pyx":3117
  *     cdef bytes _utf8_data
  *     def __cinit__(self, data):
  *         _utf8_data = _utf8(data)             # <<<<<<<<<<<<<<
  *         if b']]>' in _utf8_data:
  *             raise ValueError, "']]>' not allowed inside CDATA"
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3114, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v__utf8_data = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3115
+  /* "lxml/etree.pyx":3118
  *     def __cinit__(self, data):
  *         _utf8_data = _utf8(data)
  *         if b']]>' in _utf8_data:             # <<<<<<<<<<<<<<
  *             raise ValueError, "']]>' not allowed inside CDATA"
  *         self._utf8_data = _utf8_data
  */
-  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__49, __pyx_v__utf8_data, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3115, __pyx_L1_error)
+  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_b__49, __pyx_v__utf8_data, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3118, __pyx_L1_error)
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":3116
+    /* "lxml/etree.pyx":3119
  *         _utf8_data = _utf8(data)
  *         if b']]>' in _utf8_data:
  *             raise ValueError, "']]>' not allowed inside CDATA"             # <<<<<<<<<<<<<<
@@ -84022,9 +84104,9 @@ static int __pyx_pf_4lxml_5etree_5CDATA___cinit__(struct __pyx_obj_4lxml_5etree_
  * 
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_not_allowed_inside_CDATA, 0, 0);
-    __PYX_ERR(0, 3116, __pyx_L1_error)
+    __PYX_ERR(0, 3119, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":3115
+    /* "lxml/etree.pyx":3118
  *     def __cinit__(self, data):
  *         _utf8_data = _utf8(data)
  *         if b']]>' in _utf8_data:             # <<<<<<<<<<<<<<
@@ -84033,7 +84115,7 @@ static int __pyx_pf_4lxml_5etree_5CDATA___cinit__(struct __pyx_obj_4lxml_5etree_
  */
   }
 
-  /* "lxml/etree.pyx":3117
+  /* "lxml/etree.pyx":3120
  *         if b']]>' in _utf8_data:
  *             raise ValueError, "']]>' not allowed inside CDATA"
  *         self._utf8_data = _utf8_data             # <<<<<<<<<<<<<<
@@ -84046,7 +84128,7 @@ static int __pyx_pf_4lxml_5etree_5CDATA___cinit__(struct __pyx_obj_4lxml_5etree_
   __Pyx_DECREF(__pyx_v_self->_utf8_data);
   __pyx_v_self->_utf8_data = __pyx_v__utf8_data;
 
-  /* "lxml/etree.pyx":3113
+  /* "lxml/etree.pyx":3116
  *     """
  *     cdef bytes _utf8_data
  *     def __cinit__(self, data):             # <<<<<<<<<<<<<<
@@ -84067,7 +84149,7 @@ static int __pyx_pf_4lxml_5etree_5CDATA___cinit__(struct __pyx_obj_4lxml_5etree_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3120
+/* "lxml/etree.pyx":3123
  * 
  * 
  * def Entity(name):             # <<<<<<<<<<<<<<
@@ -84109,19 +84191,19 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("Entity", 0);
 
-  /* "lxml/etree.pyx":3132
+  /* "lxml/etree.pyx":3135
  *     cdef xmlNode*  c_node
  *     cdef xmlDoc*   c_doc
  *     name_utf = _utf8(name)             # <<<<<<<<<<<<<<
  *     c_name = _xcstr(name_utf)
  *     if c_name[0] == c'#':
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3132, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3135, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_name_utf = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3133
+  /* "lxml/etree.pyx":3136
  *     cdef xmlDoc*   c_doc
  *     name_utf = _utf8(name)
  *     c_name = _xcstr(name_utf)             # <<<<<<<<<<<<<<
@@ -84130,7 +84212,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
  */
   __pyx_v_c_name = (const xmlChar*)PyBytes_AS_STRING(__pyx_v_name_utf);
 
-  /* "lxml/etree.pyx":3134
+  /* "lxml/etree.pyx":3137
  *     name_utf = _utf8(name)
  *     c_name = _xcstr(name_utf)
  *     if c_name[0] == c'#':             # <<<<<<<<<<<<<<
@@ -84140,7 +84222,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
   __pyx_t_2 = (((__pyx_v_c_name[0]) == '#') != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3135
+    /* "lxml/etree.pyx":3138
  *     c_name = _xcstr(name_utf)
  *     if c_name[0] == c'#':
  *         if not _characterReferenceIsValid(c_name + 1):             # <<<<<<<<<<<<<<
@@ -84150,14 +84232,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
     __pyx_t_2 = ((!(__pyx_f_4lxml_5etree__characterReferenceIsValid((__pyx_v_c_name + 1)) != 0)) != 0);
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":3136
+      /* "lxml/etree.pyx":3139
  *     if c_name[0] == c'#':
  *         if not _characterReferenceIsValid(c_name + 1):
  *             raise ValueError, f"Invalid character reference: '{name}'"             # <<<<<<<<<<<<<<
  *     elif not _xmlNameIsValid(c_name):
  *         raise ValueError, f"Invalid entity reference: '{name}'"
  */
-      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3136, __pyx_L1_error)
+      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3139, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_3 = 0;
       __pyx_t_4 = 127;
@@ -84165,7 +84247,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
       __pyx_t_3 += 30;
       __Pyx_GIVEREF(__pyx_kp_u_Invalid_character_reference);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Invalid_character_reference);
-      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3136, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3139, __pyx_L1_error)
       __Pyx_GOTREF(__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;
       __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
@@ -84176,14 +84258,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
       __pyx_t_3 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__22);
       PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__22);
-      __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3136, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3139, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_5, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __PYX_ERR(0, 3136, __pyx_L1_error)
+      __PYX_ERR(0, 3139, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":3135
+      /* "lxml/etree.pyx":3138
  *     c_name = _xcstr(name_utf)
  *     if c_name[0] == c'#':
  *         if not _characterReferenceIsValid(c_name + 1):             # <<<<<<<<<<<<<<
@@ -84192,7 +84274,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
  */
     }
 
-    /* "lxml/etree.pyx":3134
+    /* "lxml/etree.pyx":3137
  *     name_utf = _utf8(name)
  *     c_name = _xcstr(name_utf)
  *     if c_name[0] == c'#':             # <<<<<<<<<<<<<<
@@ -84202,7 +84284,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":3137
+  /* "lxml/etree.pyx":3140
  *         if not _characterReferenceIsValid(c_name + 1):
  *             raise ValueError, f"Invalid character reference: '{name}'"
  *     elif not _xmlNameIsValid(c_name):             # <<<<<<<<<<<<<<
@@ -84212,14 +84294,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
   __pyx_t_2 = ((!(__pyx_f_4lxml_5etree__xmlNameIsValid(__pyx_v_c_name) != 0)) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":3138
+    /* "lxml/etree.pyx":3141
  *             raise ValueError, f"Invalid character reference: '{name}'"
  *     elif not _xmlNameIsValid(c_name):
  *         raise ValueError, f"Invalid entity reference: '{name}'"             # <<<<<<<<<<<<<<
  *     c_doc = _newXMLDoc()
  *     doc = _documentFactory(c_doc, None)
  */
-    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3138, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3141, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_3 = 0;
     __pyx_t_4 = 127;
@@ -84227,7 +84309,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
     __pyx_t_3 += 27;
     __Pyx_GIVEREF(__pyx_kp_u_Invalid_entity_reference);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_entity_reference);
-    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3138, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3141, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_4;
     __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
@@ -84238,14 +84320,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
     __pyx_t_3 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__22);
     PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__22);
-    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3138, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3141, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_1, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(0, 3138, __pyx_L1_error)
+    __PYX_ERR(0, 3141, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":3137
+    /* "lxml/etree.pyx":3140
  *         if not _characterReferenceIsValid(c_name + 1):
  *             raise ValueError, f"Invalid character reference: '{name}'"
  *     elif not _xmlNameIsValid(c_name):             # <<<<<<<<<<<<<<
@@ -84255,29 +84337,29 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":3139
+  /* "lxml/etree.pyx":3142
  *     elif not _xmlNameIsValid(c_name):
  *         raise ValueError, f"Invalid entity reference: '{name}'"
  *     c_doc = _newXMLDoc()             # <<<<<<<<<<<<<<
  *     doc = _documentFactory(c_doc, None)
  *     c_node = _createEntity(c_doc, c_name)
  */
-  __pyx_t_6 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(0, 3139, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(0, 3142, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_6;
 
-  /* "lxml/etree.pyx":3140
+  /* "lxml/etree.pyx":3143
  *         raise ValueError, f"Invalid entity reference: '{name}'"
  *     c_doc = _newXMLDoc()
  *     doc = _documentFactory(c_doc, None)             # <<<<<<<<<<<<<<
  *     c_node = _createEntity(c_doc, c_name)
  *     tree.xmlAddChild(<xmlNode*>c_doc, c_node)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3140, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3141
+  /* "lxml/etree.pyx":3144
  *     c_doc = _newXMLDoc()
  *     doc = _documentFactory(c_doc, None)
  *     c_node = _createEntity(c_doc, c_name)             # <<<<<<<<<<<<<<
@@ -84286,7 +84368,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
  */
   __pyx_v_c_node = __pyx_f_4lxml_5etree__createEntity(__pyx_v_c_doc, __pyx_v_c_name);
 
-  /* "lxml/etree.pyx":3142
+  /* "lxml/etree.pyx":3145
  *     doc = _documentFactory(c_doc, None)
  *     c_node = _createEntity(c_doc, c_name)
  *     tree.xmlAddChild(<xmlNode*>c_doc, c_node)             # <<<<<<<<<<<<<<
@@ -84295,7 +84377,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
  */
   (void)(xmlAddChild(((xmlNode *)__pyx_v_c_doc), __pyx_v_c_node));
 
-  /* "lxml/etree.pyx":3143
+  /* "lxml/etree.pyx":3146
  *     c_node = _createEntity(c_doc, c_name)
  *     tree.xmlAddChild(<xmlNode*>c_doc, c_node)
  *     return _elementFactory(doc, c_node)             # <<<<<<<<<<<<<<
@@ -84303,13 +84385,13 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_doc, __pyx_v_c_node)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3143, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_doc, __pyx_v_c_node)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3146, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3120
+  /* "lxml/etree.pyx":3123
  * 
  * 
  * def Entity(name):             # <<<<<<<<<<<<<<
@@ -84331,7 +84413,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12Entity(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3146
+/* "lxml/etree.pyx":3149
  * 
  * 
  * def SubElement(_Element _parent not None, _tag,             # <<<<<<<<<<<<<<
@@ -84361,7 +84443,7 @@ static PyObject *__pyx_pw_4lxml_5etree_15SubElement(PyObject *__pyx_self, PyObje
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parent,&__pyx_n_s_tag_2,&__pyx_n_s_attrib,&__pyx_n_s_nsmap,0};
     PyObject* values[4] = {0,0,0,0};
 
-    /* "lxml/etree.pyx":3147
+    /* "lxml/etree.pyx":3150
  * 
  * def SubElement(_Element _parent not None, _tag,
  *                attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
@@ -84394,7 +84476,7 @@ static PyObject *__pyx_pw_4lxml_5etree_15SubElement(PyObject *__pyx_self, PyObje
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag_2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("SubElement", 0, 2, 4, 1); __PYX_ERR(0, 3146, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("SubElement", 0, 2, 4, 1); __PYX_ERR(0, 3149, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
@@ -84410,7 +84492,7 @@ static PyObject *__pyx_pw_4lxml_5etree_15SubElement(PyObject *__pyx_self, PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "SubElement") < 0)) __PYX_ERR(0, 3146, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "SubElement") < 0)) __PYX_ERR(0, 3149, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -84431,17 +84513,17 @@ static PyObject *__pyx_pw_4lxml_5etree_15SubElement(PyObject *__pyx_self, PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("SubElement", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3146, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("SubElement", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3149, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__extra); __pyx_v__extra = 0;
   __Pyx_AddTraceback("lxml.etree.SubElement", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v__parent), __pyx_ptype_4lxml_5etree__Element, 0, "_parent", 0))) __PYX_ERR(0, 3146, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v__parent), __pyx_ptype_4lxml_5etree__Element, 0, "_parent", 0))) __PYX_ERR(0, 3149, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_14SubElement(__pyx_self, __pyx_v__parent, __pyx_v__tag, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra);
 
-  /* "lxml/etree.pyx":3146
+  /* "lxml/etree.pyx":3149
  * 
  * 
  * def SubElement(_Element _parent not None, _tag,             # <<<<<<<<<<<<<<
@@ -84468,7 +84550,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14SubElement(CYTHON_UNUSED PyObject *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("SubElement", 0);
 
-  /* "lxml/etree.pyx":3153
+  /* "lxml/etree.pyx":3156
  *     appends it to an existing element.
  *     """
  *     return _makeSubElement(_parent, _tag, None, None, attrib, nsmap, _extra)             # <<<<<<<<<<<<<<
@@ -84476,13 +84558,13 @@ static PyObject *__pyx_pf_4lxml_5etree_14SubElement(CYTHON_UNUSED PyObject *__py
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__makeSubElement(__pyx_v__parent, __pyx_v__tag, Py_None, Py_None, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3153, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__makeSubElement(__pyx_v__parent, __pyx_v__tag, Py_None, Py_None, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3156, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3146
+  /* "lxml/etree.pyx":3149
  * 
  * 
  * def SubElement(_Element _parent not None, _tag,             # <<<<<<<<<<<<<<
@@ -84501,7 +84583,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14SubElement(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3156
+/* "lxml/etree.pyx":3159
  * 
  * 
  * def ElementTree(_Element element=None, *, file=None, _BaseParser parser=None):             # <<<<<<<<<<<<<<
@@ -84554,7 +84636,7 @@ static PyObject *__pyx_pw_4lxml_5etree_17ElementTree(PyObject *__pyx_self, PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ElementTree") < 0)) __PYX_ERR(0, 3156, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ElementTree") < 0)) __PYX_ERR(0, 3159, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -84570,14 +84652,14 @@ static PyObject *__pyx_pw_4lxml_5etree_17ElementTree(PyObject *__pyx_self, PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ElementTree", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3156, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("ElementTree", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3159, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.ElementTree", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 1, "element", 0))) __PYX_ERR(0, 3156, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3156, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_element), __pyx_ptype_4lxml_5etree__Element, 1, "element", 0))) __PYX_ERR(0, 3159, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3159, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_16ElementTree(__pyx_self, __pyx_v_element, __pyx_v_file, __pyx_v_parser);
 
   /* function exit code */
@@ -84611,7 +84693,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("ElementTree", 0);
 
-  /* "lxml/etree.pyx":3168
+  /* "lxml/etree.pyx":3171
  *     cdef _Document doc
  * 
  *     if element is not None:             # <<<<<<<<<<<<<<
@@ -84622,7 +84704,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3169
+    /* "lxml/etree.pyx":3172
  * 
  *     if element is not None:
  *         doc  = element._doc             # <<<<<<<<<<<<<<
@@ -84634,7 +84716,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":3168
+    /* "lxml/etree.pyx":3171
  *     cdef _Document doc
  * 
  *     if element is not None:             # <<<<<<<<<<<<<<
@@ -84644,7 +84726,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":3170
+  /* "lxml/etree.pyx":3173
  *     if element is not None:
  *         doc  = element._doc
  *     elif file is not None:             # <<<<<<<<<<<<<<
@@ -84655,7 +84737,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":3171
+    /* "lxml/etree.pyx":3174
  *         doc  = element._doc
  *     elif file is not None:
  *         try:             # <<<<<<<<<<<<<<
@@ -84671,19 +84753,19 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
       __Pyx_XGOTREF(__pyx_t_6);
       /*try:*/ {
 
-        /* "lxml/etree.pyx":3172
+        /* "lxml/etree.pyx":3175
  *     elif file is not None:
  *         try:
  *             doc = _parseDocument(file, parser, None)             # <<<<<<<<<<<<<<
  *         except _TargetParserResult as result_container:
  *             return result_container.result
  */
-        __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocument(__pyx_v_file, __pyx_v_parser, Py_None)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3172, __pyx_L4_error)
+        __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocument(__pyx_v_file, __pyx_v_parser, Py_None)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3175, __pyx_L4_error)
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
         __pyx_t_3 = 0;
 
-        /* "lxml/etree.pyx":3171
+        /* "lxml/etree.pyx":3174
  *         doc  = element._doc
  *     elif file is not None:
  *         try:             # <<<<<<<<<<<<<<
@@ -84698,7 +84780,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
       __pyx_L4_error:;
       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "lxml/etree.pyx":3173
+      /* "lxml/etree.pyx":3176
  *         try:
  *             doc = _parseDocument(file, parser, None)
  *         except _TargetParserResult as result_container:             # <<<<<<<<<<<<<<
@@ -84706,7 +84788,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
  *     else:
  */
       __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_7, &__pyx_t_8);
-      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3173, __pyx_L6_except_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3176, __pyx_L6_except_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_10 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_9);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -84714,14 +84796,14 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
       __pyx_t_3 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0;
       if (__pyx_t_10) {
         __Pyx_AddTraceback("lxml.etree.ElementTree", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_3) < 0) __PYX_ERR(0, 3173, __pyx_L6_except_error)
+        if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_3) < 0) __PYX_ERR(0, 3176, __pyx_L6_except_error)
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_INCREF(__pyx_t_7);
         __pyx_v_result_container = __pyx_t_7;
 
-        /* "lxml/etree.pyx":3174
+        /* "lxml/etree.pyx":3177
  *             doc = _parseDocument(file, parser, None)
  *         except _TargetParserResult as result_container:
  *             return result_container.result             # <<<<<<<<<<<<<<
@@ -84729,7 +84811,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
  *         c_doc = _newXMLDoc()
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3174, __pyx_L6_except_error)
+        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3177, __pyx_L6_except_error)
         __Pyx_GOTREF(__pyx_t_9);
         __pyx_r = __pyx_t_9;
         __pyx_t_9 = 0;
@@ -84741,7 +84823,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
       goto __pyx_L6_except_error;
       __pyx_L6_except_error:;
 
-      /* "lxml/etree.pyx":3171
+      /* "lxml/etree.pyx":3174
  *         doc  = element._doc
  *     elif file is not None:
  *         try:             # <<<<<<<<<<<<<<
@@ -84762,7 +84844,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
       __pyx_L9_try_end:;
     }
 
-    /* "lxml/etree.pyx":3170
+    /* "lxml/etree.pyx":3173
  *     if element is not None:
  *         doc  = element._doc
  *     elif file is not None:             # <<<<<<<<<<<<<<
@@ -84772,7 +84854,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
     goto __pyx_L3;
   }
 
-  /* "lxml/etree.pyx":3176
+  /* "lxml/etree.pyx":3179
  *             return result_container.result
  *     else:
  *         c_doc = _newXMLDoc()             # <<<<<<<<<<<<<<
@@ -84780,24 +84862,24 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
  * 
  */
   /*else*/ {
-    __pyx_t_11 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_11 == ((xmlDoc *)NULL))) __PYX_ERR(0, 3176, __pyx_L1_error)
+    __pyx_t_11 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_11 == ((xmlDoc *)NULL))) __PYX_ERR(0, 3179, __pyx_L1_error)
     __pyx_v_c_doc = __pyx_t_11;
 
-    /* "lxml/etree.pyx":3177
+    /* "lxml/etree.pyx":3180
  *     else:
  *         c_doc = _newXMLDoc()
  *         doc = _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
  * 
  *     return _elementTreeFactory(doc, element)
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3177, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3180, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
     __pyx_t_3 = 0;
   }
   __pyx_L3:;
 
-  /* "lxml/etree.pyx":3179
+  /* "lxml/etree.pyx":3182
  *         doc = _documentFactory(c_doc, parser)
  * 
  *     return _elementTreeFactory(doc, element)             # <<<<<<<<<<<<<<
@@ -84805,13 +84887,13 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(__pyx_v_doc, __pyx_v_element)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3179, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(__pyx_v_doc, __pyx_v_element)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3182, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3156
+  /* "lxml/etree.pyx":3159
  * 
  * 
  * def ElementTree(_Element element=None, *, file=None, _BaseParser parser=None):             # <<<<<<<<<<<<<<
@@ -84835,7 +84917,7 @@ static PyObject *__pyx_pf_4lxml_5etree_16ElementTree(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3182
+/* "lxml/etree.pyx":3185
  * 
  * 
  * def HTML(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -84891,7 +84973,7 @@ static PyObject *__pyx_pw_4lxml_5etree_19HTML(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, "HTML") < 0)) __PYX_ERR(0, 3182, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "HTML") < 0)) __PYX_ERR(0, 3185, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -84908,13 +84990,13 @@ static PyObject *__pyx_pw_4lxml_5etree_19HTML(PyObject *__pyx_self, PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("HTML", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3182, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("HTML", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3185, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.HTML", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3182, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3185, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_18HTML(__pyx_self, __pyx_v_text, __pyx_v_parser, __pyx_v_base_url);
 
   /* function exit code */
@@ -84947,7 +85029,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
   __Pyx_RefNannySetupContext("HTML", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "lxml/etree.pyx":3197
+  /* "lxml/etree.pyx":3200
  *     """
  *     cdef _Document doc
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -84958,19 +85040,19 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3198
+    /* "lxml/etree.pyx":3201
  *     cdef _Document doc
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
  *         if not isinstance(parser, HTMLParser):
  *             parser = __DEFAULT_HTML_PARSER
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3198, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3201, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":3199
+    /* "lxml/etree.pyx":3202
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *         if not isinstance(parser, HTMLParser):             # <<<<<<<<<<<<<<
@@ -84981,7 +85063,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":3200
+      /* "lxml/etree.pyx":3203
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *         if not isinstance(parser, HTMLParser):
  *             parser = __DEFAULT_HTML_PARSER             # <<<<<<<<<<<<<<
@@ -84991,7 +85073,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
       __Pyx_INCREF(((PyObject *)__pyx_v_4lxml_5etree___DEFAULT_HTML_PARSER));
       __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_4lxml_5etree___DEFAULT_HTML_PARSER));
 
-      /* "lxml/etree.pyx":3199
+      /* "lxml/etree.pyx":3202
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *         if not isinstance(parser, HTMLParser):             # <<<<<<<<<<<<<<
@@ -85000,7 +85082,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
  */
     }
 
-    /* "lxml/etree.pyx":3197
+    /* "lxml/etree.pyx":3200
  *     """
  *     cdef _Document doc
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -85009,7 +85091,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
  */
   }
 
-  /* "lxml/etree.pyx":3201
+  /* "lxml/etree.pyx":3204
  *         if not isinstance(parser, HTMLParser):
  *             parser = __DEFAULT_HTML_PARSER
  *     try:             # <<<<<<<<<<<<<<
@@ -85025,19 +85107,19 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "lxml/etree.pyx":3202
+      /* "lxml/etree.pyx":3205
  *             parser = __DEFAULT_HTML_PARSER
  *     try:
  *         doc = _parseMemoryDocument(text, base_url, parser)             # <<<<<<<<<<<<<<
  *         return doc.getroot()
  *     except _TargetParserResult as result_container:
  */
-      __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseMemoryDocument(__pyx_v_text, __pyx_v_base_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3202, __pyx_L5_error)
+      __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseMemoryDocument(__pyx_v_text, __pyx_v_base_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3205, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/etree.pyx":3203
+      /* "lxml/etree.pyx":3206
  *     try:
  *         doc = _parseMemoryDocument(text, base_url, parser)
  *         return doc.getroot()             # <<<<<<<<<<<<<<
@@ -85045,13 +85127,13 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
  *         return result_container.result
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3203, __pyx_L5_error)
+      __pyx_t_3 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3206, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L9_try_return;
 
-      /* "lxml/etree.pyx":3201
+      /* "lxml/etree.pyx":3204
  *         if not isinstance(parser, HTMLParser):
  *             parser = __DEFAULT_HTML_PARSER
  *     try:             # <<<<<<<<<<<<<<
@@ -85062,7 +85144,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
     __pyx_L5_error:;
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":3204
+    /* "lxml/etree.pyx":3207
  *         doc = _parseMemoryDocument(text, base_url, parser)
  *         return doc.getroot()
  *     except _TargetParserResult as result_container:             # <<<<<<<<<<<<<<
@@ -85070,7 +85152,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
  * 
  */
     __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_7, &__pyx_t_8);
-    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3204, __pyx_L7_except_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3207, __pyx_L7_except_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_10 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_9);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -85078,14 +85160,14 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
     __pyx_t_3 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0;
     if (__pyx_t_10) {
       __Pyx_AddTraceback("lxml.etree.HTML", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_3) < 0) __PYX_ERR(0, 3204, __pyx_L7_except_error)
+      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_3) < 0) __PYX_ERR(0, 3207, __pyx_L7_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_7);
       __pyx_v_result_container = __pyx_t_7;
 
-      /* "lxml/etree.pyx":3205
+      /* "lxml/etree.pyx":3208
  *         return doc.getroot()
  *     except _TargetParserResult as result_container:
  *         return result_container.result             # <<<<<<<<<<<<<<
@@ -85093,7 +85175,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
  * 
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3205, __pyx_L7_except_error)
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3208, __pyx_L7_except_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_r = __pyx_t_9;
       __pyx_t_9 = 0;
@@ -85105,7 +85187,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
     goto __pyx_L7_except_error;
     __pyx_L7_except_error:;
 
-    /* "lxml/etree.pyx":3201
+    /* "lxml/etree.pyx":3204
  *         if not isinstance(parser, HTMLParser):
  *             parser = __DEFAULT_HTML_PARSER
  *     try:             # <<<<<<<<<<<<<<
@@ -85131,7 +85213,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
     goto __pyx_L0;
   }
 
-  /* "lxml/etree.pyx":3182
+  /* "lxml/etree.pyx":3185
  * 
  * 
  * def HTML(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -85156,7 +85238,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18HTML(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3208
+/* "lxml/etree.pyx":3211
  * 
  * 
  * def XML(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -85212,7 +85294,7 @@ static PyObject *__pyx_pw_4lxml_5etree_21XML(PyObject *__pyx_self, PyObject *__p
         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, 3208, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "XML") < 0)) __PYX_ERR(0, 3211, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -85229,13 +85311,13 @@ static PyObject *__pyx_pw_4lxml_5etree_21XML(PyObject *__pyx_self, PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("XML", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3208, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("XML", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3211, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.XML", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3208, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3211, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_20XML(__pyx_self, __pyx_v_text, __pyx_v_parser, __pyx_v_base_url);
 
   /* function exit code */
@@ -85268,7 +85350,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
   __Pyx_RefNannySetupContext("XML", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "lxml/etree.pyx":3228
+  /* "lxml/etree.pyx":3231
  *     """
  *     cdef _Document doc
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -85279,19 +85361,19 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3229
+    /* "lxml/etree.pyx":3232
  *     cdef _Document doc
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
  *         if not isinstance(parser, XMLParser):
  *             parser = __DEFAULT_XML_PARSER
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3229, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":3230
+    /* "lxml/etree.pyx":3233
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *         if not isinstance(parser, XMLParser):             # <<<<<<<<<<<<<<
@@ -85302,7 +85384,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "lxml/etree.pyx":3231
+      /* "lxml/etree.pyx":3234
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *         if not isinstance(parser, XMLParser):
  *             parser = __DEFAULT_XML_PARSER             # <<<<<<<<<<<<<<
@@ -85312,7 +85394,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
       __Pyx_INCREF(((PyObject *)__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER));
       __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER));
 
-      /* "lxml/etree.pyx":3230
+      /* "lxml/etree.pyx":3233
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *         if not isinstance(parser, XMLParser):             # <<<<<<<<<<<<<<
@@ -85321,7 +85403,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
  */
     }
 
-    /* "lxml/etree.pyx":3228
+    /* "lxml/etree.pyx":3231
  *     """
  *     cdef _Document doc
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -85330,7 +85412,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
  */
   }
 
-  /* "lxml/etree.pyx":3232
+  /* "lxml/etree.pyx":3235
  *         if not isinstance(parser, XMLParser):
  *             parser = __DEFAULT_XML_PARSER
  *     try:             # <<<<<<<<<<<<<<
@@ -85346,19 +85428,19 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "lxml/etree.pyx":3233
+      /* "lxml/etree.pyx":3236
  *             parser = __DEFAULT_XML_PARSER
  *     try:
  *         doc = _parseMemoryDocument(text, base_url, parser)             # <<<<<<<<<<<<<<
  *         return doc.getroot()
  *     except _TargetParserResult as result_container:
  */
-      __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseMemoryDocument(__pyx_v_text, __pyx_v_base_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3233, __pyx_L5_error)
+      __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseMemoryDocument(__pyx_v_text, __pyx_v_base_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3236, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/etree.pyx":3234
+      /* "lxml/etree.pyx":3237
  *     try:
  *         doc = _parseMemoryDocument(text, base_url, parser)
  *         return doc.getroot()             # <<<<<<<<<<<<<<
@@ -85366,13 +85448,13 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
  *         return result_container.result
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3234, __pyx_L5_error)
+      __pyx_t_3 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3237, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L9_try_return;
 
-      /* "lxml/etree.pyx":3232
+      /* "lxml/etree.pyx":3235
  *         if not isinstance(parser, XMLParser):
  *             parser = __DEFAULT_XML_PARSER
  *     try:             # <<<<<<<<<<<<<<
@@ -85383,7 +85465,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
     __pyx_L5_error:;
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":3235
+    /* "lxml/etree.pyx":3238
  *         doc = _parseMemoryDocument(text, base_url, parser)
  *         return doc.getroot()
  *     except _TargetParserResult as result_container:             # <<<<<<<<<<<<<<
@@ -85391,7 +85473,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
  * 
  */
     __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_7, &__pyx_t_8);
-    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3235, __pyx_L7_except_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3238, __pyx_L7_except_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_10 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_9);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -85399,14 +85481,14 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
     __pyx_t_3 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0;
     if (__pyx_t_10) {
       __Pyx_AddTraceback("lxml.etree.XML", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_3) < 0) __PYX_ERR(0, 3235, __pyx_L7_except_error)
+      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_3) < 0) __PYX_ERR(0, 3238, __pyx_L7_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_7);
       __pyx_v_result_container = __pyx_t_7;
 
-      /* "lxml/etree.pyx":3236
+      /* "lxml/etree.pyx":3239
  *         return doc.getroot()
  *     except _TargetParserResult as result_container:
  *         return result_container.result             # <<<<<<<<<<<<<<
@@ -85414,7 +85496,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
  * 
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3236, __pyx_L7_except_error)
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3239, __pyx_L7_except_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_r = __pyx_t_9;
       __pyx_t_9 = 0;
@@ -85426,7 +85508,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
     goto __pyx_L7_except_error;
     __pyx_L7_except_error:;
 
-    /* "lxml/etree.pyx":3232
+    /* "lxml/etree.pyx":3235
  *         if not isinstance(parser, XMLParser):
  *             parser = __DEFAULT_XML_PARSER
  *     try:             # <<<<<<<<<<<<<<
@@ -85452,7 +85534,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
     goto __pyx_L0;
   }
 
-  /* "lxml/etree.pyx":3208
+  /* "lxml/etree.pyx":3211
  * 
  * 
  * def XML(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -85477,7 +85559,7 @@ static PyObject *__pyx_pf_4lxml_5etree_20XML(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3239
+/* "lxml/etree.pyx":3242
  * 
  * 
  * def fromstring(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -85533,7 +85615,7 @@ static PyObject *__pyx_pw_4lxml_5etree_23fromstring(PyObject *__pyx_self, PyObje
         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, 3239, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fromstring") < 0)) __PYX_ERR(0, 3242, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -85550,13 +85632,13 @@ static PyObject *__pyx_pw_4lxml_5etree_23fromstring(PyObject *__pyx_self, PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("fromstring", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3239, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("fromstring", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3242, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.fromstring", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3239, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3242, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_22fromstring(__pyx_self, __pyx_v_text, __pyx_v_parser, __pyx_v_base_url);
 
   /* function exit code */
@@ -85586,7 +85668,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22fromstring(CYTHON_UNUSED PyObject *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("fromstring", 0);
 
-  /* "lxml/etree.pyx":3253
+  /* "lxml/etree.pyx":3256
  *     """
  *     cdef _Document doc
  *     try:             # <<<<<<<<<<<<<<
@@ -85602,19 +85684,19 @@ static PyObject *__pyx_pf_4lxml_5etree_22fromstring(CYTHON_UNUSED PyObject *__py
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "lxml/etree.pyx":3254
+      /* "lxml/etree.pyx":3257
  *     cdef _Document doc
  *     try:
  *         doc = _parseMemoryDocument(text, base_url, parser)             # <<<<<<<<<<<<<<
  *         return doc.getroot()
  *     except _TargetParserResult as result_container:
  */
-      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__parseMemoryDocument(__pyx_v_text, __pyx_v_base_url, __pyx_v_parser)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3254, __pyx_L3_error)
+      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__parseMemoryDocument(__pyx_v_text, __pyx_v_base_url, __pyx_v_parser)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3257, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/etree.pyx":3255
+      /* "lxml/etree.pyx":3258
  *     try:
  *         doc = _parseMemoryDocument(text, base_url, parser)
  *         return doc.getroot()             # <<<<<<<<<<<<<<
@@ -85622,13 +85704,13 @@ static PyObject *__pyx_pf_4lxml_5etree_22fromstring(CYTHON_UNUSED PyObject *__py
  *         return result_container.result
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_4 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3255, __pyx_L3_error)
+      __pyx_t_4 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_doc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3258, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_r = __pyx_t_4;
       __pyx_t_4 = 0;
       goto __pyx_L7_try_return;
 
-      /* "lxml/etree.pyx":3253
+      /* "lxml/etree.pyx":3256
  *     """
  *     cdef _Document doc
  *     try:             # <<<<<<<<<<<<<<
@@ -85639,7 +85721,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22fromstring(CYTHON_UNUSED PyObject *__py
     __pyx_L3_error:;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":3256
+    /* "lxml/etree.pyx":3259
  *         doc = _parseMemoryDocument(text, base_url, parser)
  *         return doc.getroot()
  *     except _TargetParserResult as result_container:             # <<<<<<<<<<<<<<
@@ -85647,7 +85729,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22fromstring(CYTHON_UNUSED PyObject *__py
  * 
  */
     __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
-    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3256, __pyx_L5_except_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3259, __pyx_L5_except_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_t_7);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -85655,14 +85737,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22fromstring(CYTHON_UNUSED PyObject *__py
     __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
     if (__pyx_t_8) {
       __Pyx_AddTraceback("lxml.etree.fromstring", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 3256, __pyx_L5_except_error)
+      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 3259, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_5);
       __pyx_v_result_container = __pyx_t_5;
 
-      /* "lxml/etree.pyx":3257
+      /* "lxml/etree.pyx":3260
  *         return doc.getroot()
  *     except _TargetParserResult as result_container:
  *         return result_container.result             # <<<<<<<<<<<<<<
@@ -85670,7 +85752,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22fromstring(CYTHON_UNUSED PyObject *__py
  * 
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3257, __pyx_L5_except_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3260, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_r = __pyx_t_7;
       __pyx_t_7 = 0;
@@ -85682,7 +85764,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22fromstring(CYTHON_UNUSED PyObject *__py
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
 
-    /* "lxml/etree.pyx":3253
+    /* "lxml/etree.pyx":3256
  *     """
  *     cdef _Document doc
  *     try:             # <<<<<<<<<<<<<<
@@ -85708,7 +85790,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22fromstring(CYTHON_UNUSED PyObject *__py
     goto __pyx_L0;
   }
 
-  /* "lxml/etree.pyx":3239
+  /* "lxml/etree.pyx":3242
  * 
  * 
  * def fromstring(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -85732,7 +85814,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22fromstring(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3260
+/* "lxml/etree.pyx":3263
  * 
  * 
  * def fromstringlist(strings, _BaseParser parser=None):             # <<<<<<<<<<<<<<
@@ -85781,7 +85863,7 @@ static PyObject *__pyx_pw_4lxml_5etree_25fromstringlist(PyObject *__pyx_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fromstringlist") < 0)) __PYX_ERR(0, 3260, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fromstringlist") < 0)) __PYX_ERR(0, 3263, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -85797,13 +85879,13 @@ static PyObject *__pyx_pw_4lxml_5etree_25fromstringlist(PyObject *__pyx_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("fromstringlist", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3260, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("fromstringlist", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3263, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.fromstringlist", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3260, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3263, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_24fromstringlist(__pyx_self, __pyx_v_strings, __pyx_v_parser);
 
   /* function exit code */
@@ -85835,7 +85917,7 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
   __Pyx_RefNannySetupContext("fromstringlist", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "lxml/etree.pyx":3270
+  /* "lxml/etree.pyx":3273
  *     """
  *     cdef _Document doc
  *     if isinstance(strings, (bytes, unicode)):             # <<<<<<<<<<<<<<
@@ -85856,20 +85938,20 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":3271
+    /* "lxml/etree.pyx":3274
  *     cdef _Document doc
  *     if isinstance(strings, (bytes, unicode)):
  *         raise ValueError("passing a single string into fromstringlist() is not"             # <<<<<<<<<<<<<<
  *                          " efficient, use fromstring() instead")
  *     if parser is None:
  */
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3271, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3274, __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(0, 3271, __pyx_L1_error)
+    __PYX_ERR(0, 3274, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":3270
+    /* "lxml/etree.pyx":3273
  *     """
  *     cdef _Document doc
  *     if isinstance(strings, (bytes, unicode)):             # <<<<<<<<<<<<<<
@@ -85878,7 +85960,7 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "lxml/etree.pyx":3273
+  /* "lxml/etree.pyx":3276
  *         raise ValueError("passing a single string into fromstringlist() is not"
  *                          " efficient, use fromstring() instead")
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -85889,19 +85971,19 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/etree.pyx":3274
+    /* "lxml/etree.pyx":3277
  *                          " efficient, use fromstring() instead")
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
  *     feed = parser.feed
  *     for data in strings:
  */
-    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3274, __pyx_L1_error)
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3277, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":3273
+    /* "lxml/etree.pyx":3276
  *         raise ValueError("passing a single string into fromstringlist() is not"
  *                          " efficient, use fromstring() instead")
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -85910,19 +85992,19 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "lxml/etree.pyx":3275
+  /* "lxml/etree.pyx":3278
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     feed = parser.feed             # <<<<<<<<<<<<<<
  *     for data in strings:
  *         feed(data)
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_parser), __pyx_n_s_feed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3275, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_parser), __pyx_n_s_feed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_feed = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":3276
+  /* "lxml/etree.pyx":3279
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     feed = parser.feed
  *     for data in strings:             # <<<<<<<<<<<<<<
@@ -85933,26 +86015,26 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
     __pyx_t_4 = __pyx_v_strings; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_strings); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3276, __pyx_L1_error)
+    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_strings); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3279, __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(0, 3276, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3279, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_4))) {
         if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 3276, __pyx_L1_error)
+        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 3279, __pyx_L1_error)
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3276, __pyx_L1_error)
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3279, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       } else {
         if (__pyx_t_5 >= 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_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 3276, __pyx_L1_error)
+        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 3279, __pyx_L1_error)
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3276, __pyx_L1_error)
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3279, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       }
@@ -85962,7 +86044,7 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(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, 3276, __pyx_L1_error)
+          else __PYX_ERR(0, 3279, __pyx_L1_error)
         }
         break;
       }
@@ -85971,7 +86053,7 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
     __Pyx_XDECREF_SET(__pyx_v_data, __pyx_t_7);
     __pyx_t_7 = 0;
 
-    /* "lxml/etree.pyx":3277
+    /* "lxml/etree.pyx":3280
  *     feed = parser.feed
  *     for data in strings:
  *         feed(data)             # <<<<<<<<<<<<<<
@@ -85991,12 +86073,12 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
     }
     __pyx_t_7 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_v_data) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_data);
     __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
-    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3277, __pyx_L1_error)
+    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3280, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "lxml/etree.pyx":3276
+    /* "lxml/etree.pyx":3279
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     feed = parser.feed
  *     for data in strings:             # <<<<<<<<<<<<<<
@@ -86006,7 +86088,7 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
   }
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":3278
+  /* "lxml/etree.pyx":3281
  *     for data in strings:
  *         feed(data)
  *     return parser.close()             # <<<<<<<<<<<<<<
@@ -86014,7 +86096,7 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_parser), __pyx_n_s_close); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3278, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_parser), __pyx_n_s_close); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3281, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __pyx_t_8 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
@@ -86028,14 +86110,14 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
   }
   __pyx_t_4 = (__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_4)) __PYX_ERR(0, 3278, __pyx_L1_error)
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3281, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3260
+  /* "lxml/etree.pyx":3263
  * 
  * 
  * def fromstringlist(strings, _BaseParser parser=None):             # <<<<<<<<<<<<<<
@@ -86060,7 +86142,7 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3281
+/* "lxml/etree.pyx":3284
  * 
  * 
  * def iselement(element):             # <<<<<<<<<<<<<<
@@ -86094,7 +86176,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26iselement(CYTHON_UNUSED PyObject *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("iselement", 0);
 
-  /* "lxml/etree.pyx":3286
+  /* "lxml/etree.pyx":3289
  *     Checks if an object appears to be a valid element object.
  *     """
  *     return isinstance(element, _Element) and (<_Element>element)._c_node is not NULL             # <<<<<<<<<<<<<<
@@ -86105,14 +86187,14 @@ static PyObject *__pyx_pf_4lxml_5etree_26iselement(CYTHON_UNUSED PyObject *__pyx
   __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_element, __pyx_ptype_4lxml_5etree__Element); 
   if (__pyx_t_2) {
   } else {
-    __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3286, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3289, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_1 = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L3_bool_binop_done;
   }
   __pyx_t_2 = (((struct LxmlElement *)__pyx_v_element)->_c_node != NULL);
-  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3286, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_1 = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -86121,7 +86203,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26iselement(CYTHON_UNUSED PyObject *__pyx
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3281
+  /* "lxml/etree.pyx":3284
  * 
  * 
  * def iselement(element):             # <<<<<<<<<<<<<<
@@ -86141,7 +86223,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26iselement(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3289
+/* "lxml/etree.pyx":3292
  * 
  * 
  * def indent(tree, space="  ", *, Py_ssize_t level=0):             # <<<<<<<<<<<<<<
@@ -86196,7 +86278,7 @@ static PyObject *__pyx_pw_4lxml_5etree_29indent(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, "indent") < 0)) __PYX_ERR(0, 3289, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "indent") < 0)) __PYX_ERR(0, 3292, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -86210,14 +86292,14 @@ static PyObject *__pyx_pw_4lxml_5etree_29indent(PyObject *__pyx_self, PyObject *
     __pyx_v_tree = values[0];
     __pyx_v_space = values[1];
     if (values[2]) {
-      __pyx_v_level = __Pyx_PyIndex_AsSsize_t(values[2]); if (unlikely((__pyx_v_level == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3289, __pyx_L3_error)
+      __pyx_v_level = __Pyx_PyIndex_AsSsize_t(values[2]); if (unlikely((__pyx_v_level == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3292, __pyx_L3_error)
     } else {
       __pyx_v_level = ((Py_ssize_t)((Py_ssize_t)0));
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("indent", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3289, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("indent", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3292, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.indent", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -86245,19 +86327,19 @@ static PyObject *__pyx_pf_4lxml_5etree_28indent(CYTHON_UNUSED PyObject *__pyx_se
   __Pyx_RefNannySetupContext("indent", 0);
   __Pyx_INCREF(__pyx_v_space);
 
-  /* "lxml/etree.pyx":3306
+  /* "lxml/etree.pyx":3309
  *     nested inside of a document.
  *     """
  *     root = _rootNodeOrRaise(tree)             # <<<<<<<<<<<<<<
  *     if level < 0:
  *         raise ValueError(f"Initial indentation level must be >= 0, got {level}")
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__rootNodeOrRaise(__pyx_v_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3306, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__rootNodeOrRaise(__pyx_v_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_root = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3307
+  /* "lxml/etree.pyx":3310
  *     """
  *     root = _rootNodeOrRaise(tree)
  *     if level < 0:             # <<<<<<<<<<<<<<
@@ -86267,26 +86349,26 @@ static PyObject *__pyx_pf_4lxml_5etree_28indent(CYTHON_UNUSED PyObject *__pyx_se
   __pyx_t_2 = ((__pyx_v_level < 0) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":3308
+    /* "lxml/etree.pyx":3311
  *     root = _rootNodeOrRaise(tree)
  *     if level < 0:
  *         raise ValueError(f"Initial indentation level must be >= 0, got {level}")             # <<<<<<<<<<<<<<
  *     if _hasChild(root._c_node):
  *         space = _utf8(space)
  */
-    __pyx_t_1 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_level, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3308, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_level, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3311, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Initial_indentation_level_must_b, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3308, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Initial_indentation_level_must_b, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3311, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3308, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3311, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(0, 3308, __pyx_L1_error)
+    __PYX_ERR(0, 3311, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":3307
+    /* "lxml/etree.pyx":3310
  *     """
  *     root = _rootNodeOrRaise(tree)
  *     if level < 0:             # <<<<<<<<<<<<<<
@@ -86295,7 +86377,7 @@ static PyObject *__pyx_pf_4lxml_5etree_28indent(CYTHON_UNUSED PyObject *__pyx_se
  */
   }
 
-  /* "lxml/etree.pyx":3309
+  /* "lxml/etree.pyx":3312
  *     if level < 0:
  *         raise ValueError(f"Initial indentation level must be >= 0, got {level}")
  *     if _hasChild(root._c_node):             # <<<<<<<<<<<<<<
@@ -86305,47 +86387,47 @@ static PyObject *__pyx_pf_4lxml_5etree_28indent(CYTHON_UNUSED PyObject *__pyx_se
   __pyx_t_2 = (__pyx_f_4lxml_5etree__hasChild(__pyx_v_root->_c_node) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3310
+    /* "lxml/etree.pyx":3313
  *         raise ValueError(f"Initial indentation level must be >= 0, got {level}")
  *     if _hasChild(root._c_node):
  *         space = _utf8(space)             # <<<<<<<<<<<<<<
  *         indent = b"\n" + level * space
  *         _indent_children(root._c_node, 1, space, [indent, indent + space])
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_space); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3310, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_v_space); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3313, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/etree.pyx":3311
+    /* "lxml/etree.pyx":3314
  *     if _hasChild(root._c_node):
  *         space = _utf8(space)
  *         indent = b"\n" + level * space             # <<<<<<<<<<<<<<
  *         _indent_children(root._c_node, 1, space, [indent, indent + space])
  * 
  */
-    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_level); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3311, __pyx_L1_error)
+    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_level); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3314, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_v_space); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3311, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_v_space); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3314, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyNumber_Add(__pyx_kp_b__19, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3311, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_kp_b__19, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3314, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_indent = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "lxml/etree.pyx":3312
+    /* "lxml/etree.pyx":3315
  *         space = _utf8(space)
  *         indent = b"\n" + level * space
  *         _indent_children(root._c_node, 1, space, [indent, indent + space])             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_v_space))||((__pyx_v_space) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_space)->tp_name), 0))) __PYX_ERR(0, 3312, __pyx_L1_error)
-    __pyx_t_1 = PyNumber_Add(__pyx_v_indent, __pyx_v_space); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3312, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_space))||((__pyx_v_space) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_space)->tp_name), 0))) __PYX_ERR(0, 3315, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_v_indent, __pyx_v_space); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3315, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3312, __pyx_L1_error)
+    __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3315, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_indent);
     __Pyx_GIVEREF(__pyx_v_indent);
@@ -86353,10 +86435,10 @@ static PyObject *__pyx_pf_4lxml_5etree_28indent(CYTHON_UNUSED PyObject *__pyx_se
     __Pyx_GIVEREF(__pyx_t_1);
     PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_4 = __pyx_f_4lxml_5etree__indent_children(__pyx_v_root->_c_node, 1, ((PyObject*)__pyx_v_space), ((PyObject*)__pyx_t_3)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3312, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__indent_children(__pyx_v_root->_c_node, 1, ((PyObject*)__pyx_v_space), ((PyObject*)__pyx_t_3)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3315, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "lxml/etree.pyx":3309
+    /* "lxml/etree.pyx":3312
  *     if level < 0:
  *         raise ValueError(f"Initial indentation level must be >= 0, got {level}")
  *     if _hasChild(root._c_node):             # <<<<<<<<<<<<<<
@@ -86365,7 +86447,7 @@ static PyObject *__pyx_pf_4lxml_5etree_28indent(CYTHON_UNUSED PyObject *__pyx_se
  */
   }
 
-  /* "lxml/etree.pyx":3289
+  /* "lxml/etree.pyx":3292
  * 
  * 
  * def indent(tree, space="  ", *, Py_ssize_t level=0):             # <<<<<<<<<<<<<<
@@ -86390,7 +86472,7 @@ static PyObject *__pyx_pf_4lxml_5etree_28indent(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3315
+/* "lxml/etree.pyx":3318
  * 
  * 
  * cdef int _indent_children(xmlNode* c_node, Py_ssize_t level, bytes one_space, list indentations) except -1:             # <<<<<<<<<<<<<<
@@ -86415,7 +86497,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_indent_children", 0);
 
-  /* "lxml/etree.pyx":3317
+  /* "lxml/etree.pyx":3320
  * cdef int _indent_children(xmlNode* c_node, Py_ssize_t level, bytes one_space, list indentations) except -1:
  *     # Reuse indentation strings for speed.
  *     if len(indentations) <= level:             # <<<<<<<<<<<<<<
@@ -86424,13 +86506,13 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
   if (unlikely(__pyx_v_indentations == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 3317, __pyx_L1_error)
+    __PYX_ERR(0, 3320, __pyx_L1_error)
   }
-  __pyx_t_1 = PyList_GET_SIZE(__pyx_v_indentations); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3317, __pyx_L1_error)
+  __pyx_t_1 = PyList_GET_SIZE(__pyx_v_indentations); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3320, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_1 <= __pyx_v_level) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3318
+    /* "lxml/etree.pyx":3321
  *     # Reuse indentation strings for speed.
  *     if len(indentations) <= level:
  *         indentations.append(indentations[-1] + one_space)             # <<<<<<<<<<<<<<
@@ -86439,21 +86521,21 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
     if (unlikely(__pyx_v_indentations == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
-      __PYX_ERR(0, 3318, __pyx_L1_error)
+      __PYX_ERR(0, 3321, __pyx_L1_error)
     }
     if (unlikely(__pyx_v_indentations == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 3318, __pyx_L1_error)
+      __PYX_ERR(0, 3321, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_v_indentations, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3318, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_v_indentations, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3321, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_v_one_space); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3318, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_v_one_space); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3321, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_indentations, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 3318, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_indentations, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 3321, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":3317
+    /* "lxml/etree.pyx":3320
  * cdef int _indent_children(xmlNode* c_node, Py_ssize_t level, bytes one_space, list indentations) except -1:
  *     # Reuse indentation strings for speed.
  *     if len(indentations) <= level:             # <<<<<<<<<<<<<<
@@ -86462,7 +86544,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
   }
 
-  /* "lxml/etree.pyx":3321
+  /* "lxml/etree.pyx":3324
  * 
  *     # Start a new indentation level for the first child.
  *     child_indentation = indentations[level]             # <<<<<<<<<<<<<<
@@ -86471,14 +86553,14 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
   if (unlikely(__pyx_v_indentations == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 3321, __pyx_L1_error)
+    __PYX_ERR(0, 3324, __pyx_L1_error)
   }
-  __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_indentations, __pyx_v_level, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3321, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_indentations, __pyx_v_level, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3324, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_child_indentation = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":3322
+  /* "lxml/etree.pyx":3325
  *     # Start a new indentation level for the first child.
  *     child_indentation = indentations[level]
  *     if not _hasNonWhitespaceText(c_node):             # <<<<<<<<<<<<<<
@@ -86488,16 +86570,16 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
   __pyx_t_2 = ((!(__pyx_f_4lxml_5etree__hasNonWhitespaceText(__pyx_v_c_node, NULL) != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3323
+    /* "lxml/etree.pyx":3326
  *     child_indentation = indentations[level]
  *     if not _hasNonWhitespaceText(c_node):
  *         _setNodeText(c_node, child_indentation)             # <<<<<<<<<<<<<<
  * 
  *     # Recursively indent all children.
  */
-    __pyx_t_6 = __pyx_f_4lxml_5etree__setNodeText(__pyx_v_c_node, __pyx_v_child_indentation); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 3323, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_5etree__setNodeText(__pyx_v_c_node, __pyx_v_child_indentation); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 3326, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":3322
+    /* "lxml/etree.pyx":3325
  *     # Start a new indentation level for the first child.
  *     child_indentation = indentations[level]
  *     if not _hasNonWhitespaceText(c_node):             # <<<<<<<<<<<<<<
@@ -86506,7 +86588,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
   }
 
-  /* "lxml/etree.pyx":3326
+  /* "lxml/etree.pyx":3329
  * 
  *     # Recursively indent all children.
  *     cdef xmlNode* c_child = _findChildForwards(c_node, 0)             # <<<<<<<<<<<<<<
@@ -86515,7 +86597,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
   __pyx_v_c_child = __pyx_f_4lxml_5etree__findChildForwards(__pyx_v_c_node, 0);
 
-  /* "lxml/etree.pyx":3327
+  /* "lxml/etree.pyx":3330
  *     # Recursively indent all children.
  *     cdef xmlNode* c_child = _findChildForwards(c_node, 0)
  *     while c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -86526,7 +86608,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
     __pyx_t_2 = ((__pyx_v_c_child != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "lxml/etree.pyx":3328
+    /* "lxml/etree.pyx":3331
  *     cdef xmlNode* c_child = _findChildForwards(c_node, 0)
  *     while c_child is not NULL:
  *         if _hasChild(c_child):             # <<<<<<<<<<<<<<
@@ -86536,16 +86618,16 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
     __pyx_t_2 = (__pyx_f_4lxml_5etree__hasChild(__pyx_v_c_child) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":3329
+      /* "lxml/etree.pyx":3332
  *     while c_child is not NULL:
  *         if _hasChild(c_child):
  *             _indent_children(c_child, level+1, one_space, indentations)             # <<<<<<<<<<<<<<
  *         c_next_child = _nextElement(c_child)
  *         if not _hasNonWhitespaceTail(c_child):
  */
-      __pyx_t_6 = __pyx_f_4lxml_5etree__indent_children(__pyx_v_c_child, (__pyx_v_level + 1), __pyx_v_one_space, __pyx_v_indentations); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 3329, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_4lxml_5etree__indent_children(__pyx_v_c_child, (__pyx_v_level + 1), __pyx_v_one_space, __pyx_v_indentations); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 3332, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":3328
+      /* "lxml/etree.pyx":3331
  *     cdef xmlNode* c_child = _findChildForwards(c_node, 0)
  *     while c_child is not NULL:
  *         if _hasChild(c_child):             # <<<<<<<<<<<<<<
@@ -86554,7 +86636,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
     }
 
-    /* "lxml/etree.pyx":3330
+    /* "lxml/etree.pyx":3333
  *         if _hasChild(c_child):
  *             _indent_children(c_child, level+1, one_space, indentations)
  *         c_next_child = _nextElement(c_child)             # <<<<<<<<<<<<<<
@@ -86563,7 +86645,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
     __pyx_v_c_next_child = __pyx_f_4lxml_5etree__nextElement(__pyx_v_c_child);
 
-    /* "lxml/etree.pyx":3331
+    /* "lxml/etree.pyx":3334
  *             _indent_children(c_child, level+1, one_space, indentations)
  *         c_next_child = _nextElement(c_child)
  *         if not _hasNonWhitespaceTail(c_child):             # <<<<<<<<<<<<<<
@@ -86573,7 +86655,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
     __pyx_t_2 = ((!(__pyx_f_4lxml_5etree__hasNonWhitespaceTail(__pyx_v_c_child) != 0)) != 0);
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":3332
+      /* "lxml/etree.pyx":3335
  *         c_next_child = _nextElement(c_child)
  *         if not _hasNonWhitespaceTail(c_child):
  *             if c_next_child is NULL:             # <<<<<<<<<<<<<<
@@ -86583,7 +86665,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
       __pyx_t_2 = ((__pyx_v_c_next_child == NULL) != 0);
       if (__pyx_t_2) {
 
-        /* "lxml/etree.pyx":3334
+        /* "lxml/etree.pyx":3337
  *             if c_next_child is NULL:
  *                 # Dedent after the last child.
  *                 child_indentation = indentations[level-1]             # <<<<<<<<<<<<<<
@@ -86592,15 +86674,15 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
         if (unlikely(__pyx_v_indentations == Py_None)) {
           PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-          __PYX_ERR(0, 3334, __pyx_L1_error)
+          __PYX_ERR(0, 3337, __pyx_L1_error)
         }
         __pyx_t_1 = (__pyx_v_level - 1);
-        __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_indentations, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3334, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_indentations, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3337, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_child_indentation, __pyx_t_4);
         __pyx_t_4 = 0;
 
-        /* "lxml/etree.pyx":3332
+        /* "lxml/etree.pyx":3335
  *         c_next_child = _nextElement(c_child)
  *         if not _hasNonWhitespaceTail(c_child):
  *             if c_next_child is NULL:             # <<<<<<<<<<<<<<
@@ -86609,16 +86691,16 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
       }
 
-      /* "lxml/etree.pyx":3335
+      /* "lxml/etree.pyx":3338
  *                 # Dedent after the last child.
  *                 child_indentation = indentations[level-1]
  *             _setTailText(c_child, child_indentation)             # <<<<<<<<<<<<<<
  *         c_child = c_next_child
  *     return 0
  */
-      __pyx_t_6 = __pyx_f_4lxml_5etree__setTailText(__pyx_v_c_child, __pyx_v_child_indentation); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 3335, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_4lxml_5etree__setTailText(__pyx_v_c_child, __pyx_v_child_indentation); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 3338, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":3331
+      /* "lxml/etree.pyx":3334
  *             _indent_children(c_child, level+1, one_space, indentations)
  *         c_next_child = _nextElement(c_child)
  *         if not _hasNonWhitespaceTail(c_child):             # <<<<<<<<<<<<<<
@@ -86627,7 +86709,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
  */
     }
 
-    /* "lxml/etree.pyx":3336
+    /* "lxml/etree.pyx":3339
  *                 child_indentation = indentations[level-1]
  *             _setTailText(c_child, child_indentation)
  *         c_child = c_next_child             # <<<<<<<<<<<<<<
@@ -86637,7 +86719,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
     __pyx_v_c_child = __pyx_v_c_next_child;
   }
 
-  /* "lxml/etree.pyx":3337
+  /* "lxml/etree.pyx":3340
  *             _setTailText(c_child, child_indentation)
  *         c_child = c_next_child
  *     return 0             # <<<<<<<<<<<<<<
@@ -86647,7 +86729,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3315
+  /* "lxml/etree.pyx":3318
  * 
  * 
  * cdef int _indent_children(xmlNode* c_node, Py_ssize_t level, bytes one_space, list indentations) except -1:             # <<<<<<<<<<<<<<
@@ -86667,7 +86749,7 @@ static int __pyx_f_4lxml_5etree__indent_children(xmlNode *__pyx_v_c_node, Py_ssi
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3340
+/* "lxml/etree.pyx":3343
  * 
  * 
  * def dump(_Element elem not None, *, bint pretty_print=True, with_tail=True):             # <<<<<<<<<<<<<<
@@ -86716,7 +86798,7 @@ static PyObject *__pyx_pw_4lxml_5etree_31dump(PyObject *__pyx_self, PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dump") < 0)) __PYX_ERR(0, 3340, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dump") < 0)) __PYX_ERR(0, 3343, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -86725,7 +86807,7 @@ static PyObject *__pyx_pw_4lxml_5etree_31dump(PyObject *__pyx_self, PyObject *__
     }
     __pyx_v_elem = ((struct LxmlElement *)values[0]);
     if (values[1]) {
-      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3340, __pyx_L3_error)
+      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3343, __pyx_L3_error)
     } else {
       __pyx_v_pretty_print = ((int)((int)1));
     }
@@ -86733,13 +86815,13 @@ static PyObject *__pyx_pw_4lxml_5etree_31dump(PyObject *__pyx_self, PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("dump", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3340, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("dump", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3343, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.dump", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_elem), __pyx_ptype_4lxml_5etree__Element, 0, "elem", 0))) __PYX_ERR(0, 3340, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_elem), __pyx_ptype_4lxml_5etree__Element, 0, "elem", 0))) __PYX_ERR(0, 3343, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_30dump(__pyx_self, __pyx_v_elem, __pyx_v_pretty_print, __pyx_v_with_tail);
 
   /* function exit code */
@@ -86765,29 +86847,29 @@ static PyObject *__pyx_pf_4lxml_5etree_30dump(CYTHON_UNUSED PyObject *__pyx_self
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("dump", 0);
 
-  /* "lxml/etree.pyx":3346
+  /* "lxml/etree.pyx":3349
  *     should be used for debugging only.
  *     """
  *     xml = tostring(elem, pretty_print=pretty_print, with_tail=with_tail,             # <<<<<<<<<<<<<<
  *                    encoding=None if python.IS_PYTHON2 else 'unicode')
  *     if not pretty_print:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_tostring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3346, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_tostring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3346, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(((PyObject *)__pyx_v_elem));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_elem));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_elem));
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3346, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_pretty_print); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3346, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_pretty_print); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3349, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_pretty_print, __pyx_t_4) < 0) __PYX_ERR(0, 3346, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_pretty_print, __pyx_t_4) < 0) __PYX_ERR(0, 3349, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_with_tail, __pyx_v_with_tail) < 0) __PYX_ERR(0, 3346, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_with_tail, __pyx_v_with_tail) < 0) __PYX_ERR(0, 3349, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3347
+  /* "lxml/etree.pyx":3350
  *     """
  *     xml = tostring(elem, pretty_print=pretty_print, with_tail=with_tail,
  *                    encoding=None if python.IS_PYTHON2 else 'unicode')             # <<<<<<<<<<<<<<
@@ -86801,17 +86883,17 @@ static PyObject *__pyx_pf_4lxml_5etree_30dump(CYTHON_UNUSED PyObject *__pyx_self
     __Pyx_INCREF(__pyx_n_s_unicode);
     __pyx_t_4 = __pyx_n_s_unicode;
   }
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_encoding, __pyx_t_4) < 0) __PYX_ERR(0, 3346, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_encoding, __pyx_t_4) < 0) __PYX_ERR(0, 3349, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":3346
+  /* "lxml/etree.pyx":3349
  *     should be used for debugging only.
  *     """
  *     xml = tostring(elem, pretty_print=pretty_print, with_tail=with_tail,             # <<<<<<<<<<<<<<
  *                    encoding=None if python.IS_PYTHON2 else 'unicode')
  *     if not pretty_print:
  */
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3346, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3349, __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;
@@ -86819,7 +86901,7 @@ static PyObject *__pyx_pf_4lxml_5etree_30dump(CYTHON_UNUSED PyObject *__pyx_self
   __pyx_v_xml = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":3348
+  /* "lxml/etree.pyx":3351
  *     xml = tostring(elem, pretty_print=pretty_print, with_tail=with_tail,
  *                    encoding=None if python.IS_PYTHON2 else 'unicode')
  *     if not pretty_print:             # <<<<<<<<<<<<<<
@@ -86829,19 +86911,19 @@ static PyObject *__pyx_pf_4lxml_5etree_30dump(CYTHON_UNUSED PyObject *__pyx_self
   __pyx_t_5 = ((!(__pyx_v_pretty_print != 0)) != 0);
   if (__pyx_t_5) {
 
-    /* "lxml/etree.pyx":3349
+    /* "lxml/etree.pyx":3352
  *                    encoding=None if python.IS_PYTHON2 else 'unicode')
  *     if not pretty_print:
  *         xml += '\n'             # <<<<<<<<<<<<<<
  *     sys.stdout.write(xml)
  * 
  */
-    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_xml, __pyx_kp_s__19); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3349, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_xml, __pyx_kp_s__19); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3352, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_xml, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":3348
+    /* "lxml/etree.pyx":3351
  *     xml = tostring(elem, pretty_print=pretty_print, with_tail=with_tail,
  *                    encoding=None if python.IS_PYTHON2 else 'unicode')
  *     if not pretty_print:             # <<<<<<<<<<<<<<
@@ -86850,16 +86932,16 @@ static PyObject *__pyx_pf_4lxml_5etree_30dump(CYTHON_UNUSED PyObject *__pyx_self
  */
   }
 
-  /* "lxml/etree.pyx":3350
+  /* "lxml/etree.pyx":3353
  *     if not pretty_print:
  *         xml += '\n'
  *     sys.stdout.write(xml)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_stdout); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3350, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_stdout); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3353, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3350, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3353, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = NULL;
@@ -86874,12 +86956,12 @@ static PyObject *__pyx_pf_4lxml_5etree_30dump(CYTHON_UNUSED PyObject *__pyx_self
   }
   __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_xml) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_xml);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3350, __pyx_L1_error)
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3353, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "lxml/etree.pyx":3340
+  /* "lxml/etree.pyx":3343
  * 
  * 
  * def dump(_Element elem not None, *, bint pretty_print=True, with_tail=True):             # <<<<<<<<<<<<<<
@@ -86904,7 +86986,7 @@ static PyObject *__pyx_pf_4lxml_5etree_30dump(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3353
+/* "lxml/etree.pyx":3356
  * 
  * 
  * def tostring(element_or_tree, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
@@ -86941,7 +87023,7 @@ static PyObject *__pyx_pw_4lxml_5etree_33tostring(PyObject *__pyx_self, PyObject
     values[1] = ((PyObject *)((PyObject *)Py_None));
     values[2] = ((PyObject *)((PyObject*)__pyx_n_s_xml));
 
-    /* "lxml/etree.pyx":3354
+    /* "lxml/etree.pyx":3357
  * 
  * def tostring(element_or_tree, *, encoding=None, method="xml",
  *              xml_declaration=None, bint pretty_print=False, bint with_tail=True,             # <<<<<<<<<<<<<<
@@ -86950,7 +87032,7 @@ static PyObject *__pyx_pw_4lxml_5etree_33tostring(PyObject *__pyx_self, PyObject
  */
     values[3] = ((PyObject *)((PyObject *)Py_None));
 
-    /* "lxml/etree.pyx":3355
+    /* "lxml/etree.pyx":3358
  * def tostring(element_or_tree, *, encoding=None, method="xml",
  *              xml_declaration=None, bint pretty_print=False, bint with_tail=True,
  *              standalone=None, doctype=None,             # <<<<<<<<<<<<<<
@@ -86960,7 +87042,7 @@ static PyObject *__pyx_pw_4lxml_5etree_33tostring(PyObject *__pyx_self, PyObject
     values[6] = ((PyObject *)((PyObject *)Py_None));
     values[7] = ((PyObject *)((PyObject *)Py_None));
 
-    /* "lxml/etree.pyx":3357
+    /* "lxml/etree.pyx":3360
  *              standalone=None, doctype=None,
  *              # method='c14n'
  *              bint exclusive=False, inclusive_ns_prefixes=None,             # <<<<<<<<<<<<<<
@@ -86991,7 +87073,7 @@ static PyObject *__pyx_pw_4lxml_5etree_33tostring(PyObject *__pyx_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tostring") < 0)) __PYX_ERR(0, 3353, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tostring") < 0)) __PYX_ERR(0, 3356, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -87003,10 +87085,10 @@ static PyObject *__pyx_pw_4lxml_5etree_33tostring(PyObject *__pyx_self, PyObject
     __pyx_v_method = values[2];
     __pyx_v_xml_declaration = values[3];
     if (values[4]) {
-      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3354, __pyx_L3_error)
+      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3357, __pyx_L3_error)
     } else {
 
-      /* "lxml/etree.pyx":3354
+      /* "lxml/etree.pyx":3357
  * 
  * def tostring(element_or_tree, *, encoding=None, method="xml",
  *              xml_declaration=None, bint pretty_print=False, bint with_tail=True,             # <<<<<<<<<<<<<<
@@ -87016,17 +87098,17 @@ static PyObject *__pyx_pw_4lxml_5etree_33tostring(PyObject *__pyx_self, PyObject
       __pyx_v_pretty_print = ((int)((int)0));
     }
     if (values[5]) {
-      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3354, __pyx_L3_error)
+      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3357, __pyx_L3_error)
     } else {
       __pyx_v_with_tail = ((int)((int)1));
     }
     __pyx_v_standalone = values[6];
     __pyx_v_doctype = values[7];
     if (values[8]) {
-      __pyx_v_exclusive = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_exclusive == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3357, __pyx_L3_error)
+      __pyx_v_exclusive = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_exclusive == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3360, __pyx_L3_error)
     } else {
 
-      /* "lxml/etree.pyx":3357
+      /* "lxml/etree.pyx":3360
  *              standalone=None, doctype=None,
  *              # method='c14n'
  *              bint exclusive=False, inclusive_ns_prefixes=None,             # <<<<<<<<<<<<<<
@@ -87037,10 +87119,10 @@ static PyObject *__pyx_pw_4lxml_5etree_33tostring(PyObject *__pyx_self, PyObject
     }
     __pyx_v_inclusive_ns_prefixes = values[9];
     if (values[10]) {
-      __pyx_v_with_comments = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_with_comments == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3359, __pyx_L3_error)
+      __pyx_v_with_comments = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_with_comments == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3362, __pyx_L3_error)
     } else {
 
-      /* "lxml/etree.pyx":3359
+      /* "lxml/etree.pyx":3362
  *              bint exclusive=False, inclusive_ns_prefixes=None,
  *              # method='c14n2'
  *              bint with_comments=True, bint strip_text=False,             # <<<<<<<<<<<<<<
@@ -87050,14 +87132,14 @@ static PyObject *__pyx_pw_4lxml_5etree_33tostring(PyObject *__pyx_self, PyObject
       __pyx_v_with_comments = ((int)((int)1));
     }
     if (values[11]) {
-      __pyx_v_strip_text = __Pyx_PyObject_IsTrue(values[11]); if (unlikely((__pyx_v_strip_text == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3359, __pyx_L3_error)
+      __pyx_v_strip_text = __Pyx_PyObject_IsTrue(values[11]); if (unlikely((__pyx_v_strip_text == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3362, __pyx_L3_error)
     } else {
       __pyx_v_strip_text = ((int)((int)0));
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tostring", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3353, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("tostring", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3356, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.tostring", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -87065,7 +87147,7 @@ static PyObject *__pyx_pw_4lxml_5etree_33tostring(PyObject *__pyx_self, PyObject
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_5etree_32tostring(__pyx_self, __pyx_v_element_or_tree, __pyx_v_encoding, __pyx_v_method, __pyx_v_xml_declaration, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_standalone, __pyx_v_doctype, __pyx_v_exclusive, __pyx_v_inclusive_ns_prefixes, __pyx_v_with_comments, __pyx_v_strip_text);
 
-  /* "lxml/etree.pyx":3353
+  /* "lxml/etree.pyx":3356
  * 
  * 
  * def tostring(element_or_tree, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
@@ -87100,7 +87182,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   __Pyx_RefNannySetupContext("tostring", 0);
   __Pyx_INCREF(__pyx_v_encoding);
 
-  /* "lxml/etree.pyx":3412
+  /* "lxml/etree.pyx":3415
  *     cdef int is_standalone
  *     # C14N serialisation
  *     if method in ('c14n', 'c14n2'):             # <<<<<<<<<<<<<<
@@ -87109,20 +87191,20 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
   __Pyx_INCREF(__pyx_v_method);
   __pyx_t_1 = __pyx_v_method;
-  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_c14n, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3412, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_c14n, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3415, __pyx_L1_error)
   if (!__pyx_t_3) {
   } else {
     __pyx_t_2 = __pyx_t_3;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_c14n2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3412, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_c14n2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3415, __pyx_L1_error)
   __pyx_t_2 = __pyx_t_3;
   __pyx_L4_bool_binop_done:;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":3413
+    /* "lxml/etree.pyx":3416
  *     # C14N serialisation
  *     if method in ('c14n', 'c14n2'):
  *         if encoding is not None:             # <<<<<<<<<<<<<<
@@ -87133,20 +87215,20 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":3414
+      /* "lxml/etree.pyx":3417
  *     if method in ('c14n', 'c14n2'):
  *         if encoding is not None:
  *             raise ValueError("Cannot specify encoding with C14N")             # <<<<<<<<<<<<<<
  *         if xml_declaration:
  *             raise ValueError("Cannot enable XML declaration in C14N")
  */
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3414, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3417, __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(0, 3414, __pyx_L1_error)
+      __PYX_ERR(0, 3417, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":3413
+      /* "lxml/etree.pyx":3416
  *     # C14N serialisation
  *     if method in ('c14n', 'c14n2'):
  *         if encoding is not None:             # <<<<<<<<<<<<<<
@@ -87155,30 +87237,30 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
     }
 
-    /* "lxml/etree.pyx":3415
+    /* "lxml/etree.pyx":3418
  *         if encoding is not None:
  *             raise ValueError("Cannot specify encoding with C14N")
  *         if xml_declaration:             # <<<<<<<<<<<<<<
  *             raise ValueError("Cannot enable XML declaration in C14N")
  *         if method == 'c14n':
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_xml_declaration); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3415, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_xml_declaration); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3418, __pyx_L1_error)
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":3416
+      /* "lxml/etree.pyx":3419
  *             raise ValueError("Cannot specify encoding with C14N")
  *         if xml_declaration:
  *             raise ValueError("Cannot enable XML declaration in C14N")             # <<<<<<<<<<<<<<
  *         if method == 'c14n':
  *             return _tostringC14N(element_or_tree, exclusive, with_comments, inclusive_ns_prefixes)
  */
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3416, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3419, __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(0, 3416, __pyx_L1_error)
+      __PYX_ERR(0, 3419, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":3415
+      /* "lxml/etree.pyx":3418
  *         if encoding is not None:
  *             raise ValueError("Cannot specify encoding with C14N")
  *         if xml_declaration:             # <<<<<<<<<<<<<<
@@ -87187,17 +87269,17 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
     }
 
-    /* "lxml/etree.pyx":3417
+    /* "lxml/etree.pyx":3420
  *         if xml_declaration:
  *             raise ValueError("Cannot enable XML declaration in C14N")
  *         if method == 'c14n':             # <<<<<<<<<<<<<<
  *             return _tostringC14N(element_or_tree, exclusive, with_comments, inclusive_ns_prefixes)
  *         else:
  */
-    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_c14n, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3417, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_c14n, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3420, __pyx_L1_error)
     if (__pyx_t_2) {
 
-      /* "lxml/etree.pyx":3418
+      /* "lxml/etree.pyx":3421
  *             raise ValueError("Cannot enable XML declaration in C14N")
  *         if method == 'c14n':
  *             return _tostringC14N(element_or_tree, exclusive, with_comments, inclusive_ns_prefixes)             # <<<<<<<<<<<<<<
@@ -87205,13 +87287,13 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  *             out = BytesIO()
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_1 = __pyx_f_4lxml_5etree__tostringC14N(__pyx_v_element_or_tree, __pyx_v_exclusive, __pyx_v_with_comments, __pyx_v_inclusive_ns_prefixes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3418, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_4lxml_5etree__tostringC14N(__pyx_v_element_or_tree, __pyx_v_exclusive, __pyx_v_with_comments, __pyx_v_inclusive_ns_prefixes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3421, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_r = __pyx_t_1;
       __pyx_t_1 = 0;
       goto __pyx_L0;
 
-      /* "lxml/etree.pyx":3417
+      /* "lxml/etree.pyx":3420
  *         if xml_declaration:
  *             raise ValueError("Cannot enable XML declaration in C14N")
  *         if method == 'c14n':             # <<<<<<<<<<<<<<
@@ -87220,7 +87302,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
     }
 
-    /* "lxml/etree.pyx":3420
+    /* "lxml/etree.pyx":3423
  *             return _tostringC14N(element_or_tree, exclusive, with_comments, inclusive_ns_prefixes)
  *         else:
  *             out = BytesIO()             # <<<<<<<<<<<<<<
@@ -87241,13 +87323,13 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
       }
       __pyx_t_1 = (__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_1)) __PYX_ERR(0, 3420, __pyx_L1_error)
+      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3423, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_v_out = __pyx_t_1;
       __pyx_t_1 = 0;
 
-      /* "lxml/etree.pyx":3422
+      /* "lxml/etree.pyx":3425
  *             out = BytesIO()
  *             target = C14NWriterTarget(
  *                 utf8_writer(out).write,             # <<<<<<<<<<<<<<
@@ -87267,70 +87349,70 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
       }
       __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_out) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_out);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3422, __pyx_L1_error)
+      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3425, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3422, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3425, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "lxml/etree.pyx":3421
+      /* "lxml/etree.pyx":3424
  *         else:
  *             out = BytesIO()
  *             target = C14NWriterTarget(             # <<<<<<<<<<<<<<
  *                 utf8_writer(out).write,
  *                 with_comments=with_comments, strip_text=strip_text)
  */
-      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3421, __pyx_L1_error)
+      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3424, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/etree.pyx":3423
+      /* "lxml/etree.pyx":3426
  *             target = C14NWriterTarget(
  *                 utf8_writer(out).write,
  *                 with_comments=with_comments, strip_text=strip_text)             # <<<<<<<<<<<<<<
  *             _tree_to_target(element_or_tree, target)
  *             return out.getvalue()
  */
-      __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3423, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3426, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_with_comments); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3423, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_with_comments); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3426, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_with_comments, __pyx_t_5) < 0) __PYX_ERR(0, 3423, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_with_comments, __pyx_t_5) < 0) __PYX_ERR(0, 3426, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_strip_text); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3423, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_strip_text); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3426, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_strip_text, __pyx_t_5) < 0) __PYX_ERR(0, 3423, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_strip_text, __pyx_t_5) < 0) __PYX_ERR(0, 3426, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "lxml/etree.pyx":3421
+      /* "lxml/etree.pyx":3424
  *         else:
  *             out = BytesIO()
  *             target = C14NWriterTarget(             # <<<<<<<<<<<<<<
  *                 utf8_writer(out).write,
  *                 with_comments=with_comments, strip_text=strip_text)
  */
-      __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget), __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3421, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget), __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3424, __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_v_target = ((struct __pyx_obj_4lxml_5etree_C14NWriterTarget *)__pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "lxml/etree.pyx":3424
+      /* "lxml/etree.pyx":3427
  *                 utf8_writer(out).write,
  *                 with_comments=with_comments, strip_text=strip_text)
  *             _tree_to_target(element_or_tree, target)             # <<<<<<<<<<<<<<
  *             return out.getvalue()
  *     if not with_comments:
  */
-      __pyx_t_5 = __pyx_f_4lxml_5etree__tree_to_target(__pyx_v_element_or_tree, ((PyObject *)__pyx_v_target)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3424, __pyx_L1_error)
+      __pyx_t_5 = __pyx_f_4lxml_5etree__tree_to_target(__pyx_v_element_or_tree, ((PyObject *)__pyx_v_target)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3427, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "lxml/etree.pyx":3425
+      /* "lxml/etree.pyx":3428
  *                 with_comments=with_comments, strip_text=strip_text)
  *             _tree_to_target(element_or_tree, target)
  *             return out.getvalue()             # <<<<<<<<<<<<<<
@@ -87338,7 +87420,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  *         raise ValueError("Can only discard comments in C14N serialisation")
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3425, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3428, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_1 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -87352,7 +87434,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
       }
       __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3425, __pyx_L1_error)
+      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3428, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_r = __pyx_t_5;
@@ -87360,7 +87442,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
       goto __pyx_L0;
     }
 
-    /* "lxml/etree.pyx":3412
+    /* "lxml/etree.pyx":3415
  *     cdef int is_standalone
  *     # C14N serialisation
  *     if method in ('c14n', 'c14n2'):             # <<<<<<<<<<<<<<
@@ -87369,7 +87451,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
   }
 
-  /* "lxml/etree.pyx":3426
+  /* "lxml/etree.pyx":3429
  *             _tree_to_target(element_or_tree, target)
  *             return out.getvalue()
  *     if not with_comments:             # <<<<<<<<<<<<<<
@@ -87379,20 +87461,20 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_2 = ((!(__pyx_v_with_comments != 0)) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":3427
+    /* "lxml/etree.pyx":3430
  *             return out.getvalue()
  *     if not with_comments:
  *         raise ValueError("Can only discard comments in C14N serialisation")             # <<<<<<<<<<<<<<
  *     if strip_text:
  *         raise ValueError("Can only strip text in C14N 2.0 serialisation")
  */
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3427, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3430, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 3427, __pyx_L1_error)
+    __PYX_ERR(0, 3430, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":3426
+    /* "lxml/etree.pyx":3429
  *             _tree_to_target(element_or_tree, target)
  *             return out.getvalue()
  *     if not with_comments:             # <<<<<<<<<<<<<<
@@ -87401,7 +87483,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
   }
 
-  /* "lxml/etree.pyx":3428
+  /* "lxml/etree.pyx":3431
  *     if not with_comments:
  *         raise ValueError("Can only discard comments in C14N serialisation")
  *     if strip_text:             # <<<<<<<<<<<<<<
@@ -87411,20 +87493,20 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_2 = (__pyx_v_strip_text != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "lxml/etree.pyx":3429
+    /* "lxml/etree.pyx":3432
  *         raise ValueError("Can only discard comments in C14N serialisation")
  *     if strip_text:
  *         raise ValueError("Can only strip text in C14N 2.0 serialisation")             # <<<<<<<<<<<<<<
  *     if encoding is unicode or (encoding is not None and encoding.lower() == 'unicode'):
  *         if xml_declaration:
  */
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__52, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3429, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__52, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3432, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 3429, __pyx_L1_error)
+    __PYX_ERR(0, 3432, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":3428
+    /* "lxml/etree.pyx":3431
  *     if not with_comments:
  *         raise ValueError("Can only discard comments in C14N serialisation")
  *     if strip_text:             # <<<<<<<<<<<<<<
@@ -87433,7 +87515,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
   }
 
-  /* "lxml/etree.pyx":3430
+  /* "lxml/etree.pyx":3433
  *     if strip_text:
  *         raise ValueError("Can only strip text in C14N 2.0 serialisation")
  *     if encoding is unicode or (encoding is not None and encoding.lower() == 'unicode'):             # <<<<<<<<<<<<<<
@@ -87454,7 +87536,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     __pyx_t_2 = __pyx_t_3;
     goto __pyx_L12_bool_binop_done;
   }
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_lower); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3430, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_lower); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3433, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_1 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -87468,26 +87550,26 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   }
   __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3430, __pyx_L1_error)
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3433, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_unicode, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3430, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_unicode, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3433, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_2 = __pyx_t_3;
   __pyx_L12_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3431
+    /* "lxml/etree.pyx":3434
  *         raise ValueError("Can only strip text in C14N 2.0 serialisation")
  *     if encoding is unicode or (encoding is not None and encoding.lower() == 'unicode'):
  *         if xml_declaration:             # <<<<<<<<<<<<<<
  *             raise ValueError, \
  *                 u"Serialisation to unicode must not request an XML declaration"
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_xml_declaration); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3431, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_xml_declaration); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3434, __pyx_L1_error)
     if (unlikely(__pyx_t_2)) {
 
-      /* "lxml/etree.pyx":3432
+      /* "lxml/etree.pyx":3435
  *     if encoding is unicode or (encoding is not None and encoding.lower() == 'unicode'):
  *         if xml_declaration:
  *             raise ValueError, \             # <<<<<<<<<<<<<<
@@ -87495,9 +87577,9 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  *         write_declaration = 0
  */
       __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Serialisation_to_unicode_must_no, 0, 0);
-      __PYX_ERR(0, 3432, __pyx_L1_error)
+      __PYX_ERR(0, 3435, __pyx_L1_error)
 
-      /* "lxml/etree.pyx":3431
+      /* "lxml/etree.pyx":3434
  *         raise ValueError("Can only strip text in C14N 2.0 serialisation")
  *     if encoding is unicode or (encoding is not None and encoding.lower() == 'unicode'):
  *         if xml_declaration:             # <<<<<<<<<<<<<<
@@ -87506,7 +87588,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
     }
 
-    /* "lxml/etree.pyx":3434
+    /* "lxml/etree.pyx":3437
  *             raise ValueError, \
  *                 u"Serialisation to unicode must not request an XML declaration"
  *         write_declaration = 0             # <<<<<<<<<<<<<<
@@ -87515,7 +87597,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
     __pyx_v_write_declaration = 0;
 
-    /* "lxml/etree.pyx":3435
+    /* "lxml/etree.pyx":3438
  *                 u"Serialisation to unicode must not request an XML declaration"
  *         write_declaration = 0
  *         encoding = unicode             # <<<<<<<<<<<<<<
@@ -87525,7 +87607,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     __Pyx_INCREF(((PyObject *)(&PyUnicode_Type)));
     __Pyx_DECREF_SET(__pyx_v_encoding, ((PyObject *)(&PyUnicode_Type)));
 
-    /* "lxml/etree.pyx":3430
+    /* "lxml/etree.pyx":3433
  *     if strip_text:
  *         raise ValueError("Can only strip text in C14N 2.0 serialisation")
  *     if encoding is unicode or (encoding is not None and encoding.lower() == 'unicode'):             # <<<<<<<<<<<<<<
@@ -87535,7 +87617,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     goto __pyx_L11;
   }
 
-  /* "lxml/etree.pyx":3436
+  /* "lxml/etree.pyx":3439
  *         write_declaration = 0
  *         encoding = unicode
  *     elif xml_declaration is None:             # <<<<<<<<<<<<<<
@@ -87546,7 +87628,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":3438
+    /* "lxml/etree.pyx":3441
  *     elif xml_declaration is None:
  *         # by default, write an XML declaration only for non-standard encodings
  *         write_declaration = encoding is not None and encoding.upper() not in \             # <<<<<<<<<<<<<<
@@ -87560,7 +87642,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
       __pyx_t_3 = __pyx_t_6;
       goto __pyx_L16_bool_binop_done;
     }
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_upper); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3438, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_upper); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3441, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_1 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -87574,28 +87656,28 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     }
     __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3438, __pyx_L1_error)
+    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3441, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_n_u_ASCII, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3438, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_n_u_ASCII, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3441, __pyx_L1_error)
     if (__pyx_t_2) {
     } else {
       __pyx_t_6 = __pyx_t_2;
       goto __pyx_L18_bool_binop_done;
     }
-    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_kp_u_UTF_8, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3438, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_kp_u_UTF_8, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3441, __pyx_L1_error)
     if (__pyx_t_2) {
     } else {
       __pyx_t_6 = __pyx_t_2;
       goto __pyx_L18_bool_binop_done;
     }
-    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_n_u_UTF8, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3438, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_n_u_UTF8, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3441, __pyx_L1_error)
     if (__pyx_t_2) {
     } else {
       __pyx_t_6 = __pyx_t_2;
       goto __pyx_L18_bool_binop_done;
     }
-    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_kp_u_US_ASCII, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3438, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_kp_u_US_ASCII, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3441, __pyx_L1_error)
     __pyx_t_6 = __pyx_t_2;
     __pyx_L18_bool_binop_done:;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -87604,7 +87686,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     __pyx_L16_bool_binop_done:;
     __pyx_v_write_declaration = __pyx_t_3;
 
-    /* "lxml/etree.pyx":3436
+    /* "lxml/etree.pyx":3439
  *         write_declaration = 0
  *         encoding = unicode
  *     elif xml_declaration is None:             # <<<<<<<<<<<<<<
@@ -87614,7 +87696,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     goto __pyx_L11;
   }
 
-  /* "lxml/etree.pyx":3441
+  /* "lxml/etree.pyx":3444
  *                             (u'ASCII', u'UTF-8', u'UTF8', u'US-ASCII')
  *     else:
  *         write_declaration = xml_declaration             # <<<<<<<<<<<<<<
@@ -87622,12 +87704,12 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  *         encoding = u'ASCII'
  */
   /*else*/ {
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_xml_declaration); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3441, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_xml_declaration); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3444, __pyx_L1_error)
     __pyx_v_write_declaration = __pyx_t_3;
   }
   __pyx_L11:;
 
-  /* "lxml/etree.pyx":3442
+  /* "lxml/etree.pyx":3445
  *     else:
  *         write_declaration = xml_declaration
  *     if encoding is None:             # <<<<<<<<<<<<<<
@@ -87638,7 +87720,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3443
+    /* "lxml/etree.pyx":3446
  *         write_declaration = xml_declaration
  *     if encoding is None:
  *         encoding = u'ASCII'             # <<<<<<<<<<<<<<
@@ -87648,7 +87730,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     __Pyx_INCREF(__pyx_n_u_ASCII);
     __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_n_u_ASCII);
 
-    /* "lxml/etree.pyx":3442
+    /* "lxml/etree.pyx":3445
  *     else:
  *         write_declaration = xml_declaration
  *     if encoding is None:             # <<<<<<<<<<<<<<
@@ -87657,7 +87739,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
   }
 
-  /* "lxml/etree.pyx":3444
+  /* "lxml/etree.pyx":3447
  *     if encoding is None:
  *         encoding = u'ASCII'
  *     if standalone is None:             # <<<<<<<<<<<<<<
@@ -87668,7 +87750,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":3445
+    /* "lxml/etree.pyx":3448
  *         encoding = u'ASCII'
  *     if standalone is None:
  *         is_standalone = -1             # <<<<<<<<<<<<<<
@@ -87677,7 +87759,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
     __pyx_v_is_standalone = -1;
 
-    /* "lxml/etree.pyx":3444
+    /* "lxml/etree.pyx":3447
  *     if encoding is None:
  *         encoding = u'ASCII'
  *     if standalone is None:             # <<<<<<<<<<<<<<
@@ -87687,17 +87769,17 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     goto __pyx_L23;
   }
 
-  /* "lxml/etree.pyx":3446
+  /* "lxml/etree.pyx":3449
  *     if standalone is None:
  *         is_standalone = -1
  *     elif standalone:             # <<<<<<<<<<<<<<
  *         write_declaration = 1
  *         is_standalone = 1
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_standalone); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3446, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_standalone); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3449, __pyx_L1_error)
   if (__pyx_t_3) {
 
-    /* "lxml/etree.pyx":3447
+    /* "lxml/etree.pyx":3450
  *         is_standalone = -1
  *     elif standalone:
  *         write_declaration = 1             # <<<<<<<<<<<<<<
@@ -87706,7 +87788,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
     __pyx_v_write_declaration = 1;
 
-    /* "lxml/etree.pyx":3448
+    /* "lxml/etree.pyx":3451
  *     elif standalone:
  *         write_declaration = 1
  *         is_standalone = 1             # <<<<<<<<<<<<<<
@@ -87715,7 +87797,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
     __pyx_v_is_standalone = 1;
 
-    /* "lxml/etree.pyx":3446
+    /* "lxml/etree.pyx":3449
  *     if standalone is None:
  *         is_standalone = -1
  *     elif standalone:             # <<<<<<<<<<<<<<
@@ -87725,7 +87807,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     goto __pyx_L23;
   }
 
-  /* "lxml/etree.pyx":3450
+  /* "lxml/etree.pyx":3453
  *         is_standalone = 1
  *     else:
  *         write_declaration = 1             # <<<<<<<<<<<<<<
@@ -87735,7 +87817,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   /*else*/ {
     __pyx_v_write_declaration = 1;
 
-    /* "lxml/etree.pyx":3451
+    /* "lxml/etree.pyx":3454
  *     else:
  *         write_declaration = 1
  *         is_standalone = 0             # <<<<<<<<<<<<<<
@@ -87746,7 +87828,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   }
   __pyx_L23:;
 
-  /* "lxml/etree.pyx":3453
+  /* "lxml/etree.pyx":3456
  *         is_standalone = 0
  * 
  *     if isinstance(element_or_tree, _Element):             # <<<<<<<<<<<<<<
@@ -87757,7 +87839,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3454
+    /* "lxml/etree.pyx":3457
  * 
  *     if isinstance(element_or_tree, _Element):
  *         return _tostring(<_Element>element_or_tree, encoding, doctype, method,             # <<<<<<<<<<<<<<
@@ -87766,20 +87848,20 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
     __Pyx_XDECREF(__pyx_r);
 
-    /* "lxml/etree.pyx":3456
+    /* "lxml/etree.pyx":3459
  *         return _tostring(<_Element>element_or_tree, encoding, doctype, method,
  *                          write_declaration, 0, pretty_print, with_tail,
  *                          is_standalone)             # <<<<<<<<<<<<<<
  *     elif isinstance(element_or_tree, _ElementTree):
  *         return _tostring((<_ElementTree>element_or_tree)._context_node,
  */
-    __pyx_t_5 = __pyx_f_4lxml_5etree__tostring(((struct LxmlElement *)__pyx_v_element_or_tree), __pyx_v_encoding, __pyx_v_doctype, __pyx_v_method, __pyx_v_write_declaration, 0, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_is_standalone); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3454, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_5etree__tostring(((struct LxmlElement *)__pyx_v_element_or_tree), __pyx_v_encoding, __pyx_v_doctype, __pyx_v_method, __pyx_v_write_declaration, 0, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_is_standalone); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3457, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_r = __pyx_t_5;
     __pyx_t_5 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":3453
+    /* "lxml/etree.pyx":3456
  *         is_standalone = 0
  * 
  *     if isinstance(element_or_tree, _Element):             # <<<<<<<<<<<<<<
@@ -87788,7 +87870,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
   }
 
-  /* "lxml/etree.pyx":3457
+  /* "lxml/etree.pyx":3460
  *                          write_declaration, 0, pretty_print, with_tail,
  *                          is_standalone)
  *     elif isinstance(element_or_tree, _ElementTree):             # <<<<<<<<<<<<<<
@@ -87799,7 +87881,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (likely(__pyx_t_3)) {
 
-    /* "lxml/etree.pyx":3458
+    /* "lxml/etree.pyx":3461
  *                          is_standalone)
  *     elif isinstance(element_or_tree, _ElementTree):
  *         return _tostring((<_ElementTree>element_or_tree)._context_node,             # <<<<<<<<<<<<<<
@@ -87810,21 +87892,21 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     __pyx_t_5 = ((PyObject *)((struct LxmlElementTree *)__pyx_v_element_or_tree)->_context_node);
     __Pyx_INCREF(__pyx_t_5);
 
-    /* "lxml/etree.pyx":3460
+    /* "lxml/etree.pyx":3463
  *         return _tostring((<_ElementTree>element_or_tree)._context_node,
  *                          encoding, doctype, method, write_declaration, 1,
  *                          pretty_print, with_tail, is_standalone)             # <<<<<<<<<<<<<<
  *     else:
  *         raise TypeError, f"Type '{python._fqtypename(element_or_tree).decode('utf8')}' cannot be serialized."
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__tostring(((struct LxmlElement *)__pyx_t_5), __pyx_v_encoding, __pyx_v_doctype, __pyx_v_method, __pyx_v_write_declaration, 1, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_is_standalone); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3458, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__tostring(((struct LxmlElement *)__pyx_t_5), __pyx_v_encoding, __pyx_v_doctype, __pyx_v_method, __pyx_v_write_declaration, 1, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_is_standalone); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3461, __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/etree.pyx":3457
+    /* "lxml/etree.pyx":3460
  *                          write_declaration, 0, pretty_print, with_tail,
  *                          is_standalone)
  *     elif isinstance(element_or_tree, _ElementTree):             # <<<<<<<<<<<<<<
@@ -87833,7 +87915,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  */
   }
 
-  /* "lxml/etree.pyx":3462
+  /* "lxml/etree.pyx":3465
  *                          pretty_print, with_tail, is_standalone)
  *     else:
  *         raise TypeError, f"Type '{python._fqtypename(element_or_tree).decode('utf8')}' cannot be serialized."             # <<<<<<<<<<<<<<
@@ -87841,7 +87923,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
  * 
  */
   /*else*/ {
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3462, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3465, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_7 = 0;
     __pyx_t_8 = 127;
@@ -87850,7 +87932,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     __Pyx_GIVEREF(__pyx_kp_u_Type);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Type);
     __pyx_t_9 = _fqtypename(__pyx_v_element_or_tree);
-    __pyx_t_5 = __Pyx_decode_c_string(__pyx_t_9, 0, strlen(__pyx_t_9), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3462, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_decode_c_string(__pyx_t_9, 0, strlen(__pyx_t_9), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3465, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_5);
     __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_8;
@@ -87862,15 +87944,15 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
     __pyx_t_7 += 23;
     __Pyx_GIVEREF(__pyx_kp_u_cannot_be_serialized);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_cannot_be_serialized);
-    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3462, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3465, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_t_5, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 3462, __pyx_L1_error)
+    __PYX_ERR(0, 3465, __pyx_L1_error)
   }
 
-  /* "lxml/etree.pyx":3353
+  /* "lxml/etree.pyx":3356
  * 
  * 
  * def tostring(element_or_tree, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
@@ -87894,7 +87976,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostring(CYTHON_UNUSED PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3466
+/* "lxml/etree.pyx":3469
  * 
  * 
  * def tostringlist(element_or_tree, *args, **kwargs):             # <<<<<<<<<<<<<<
@@ -87949,7 +88031,7 @@ static PyObject *__pyx_pw_4lxml_5etree_35tostringlist(PyObject *__pyx_self, PyOb
       }
       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, "tostringlist") < 0)) __PYX_ERR(0, 3466, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "tostringlist") < 0)) __PYX_ERR(0, 3469, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
       goto __pyx_L5_argtuple_error;
@@ -87960,7 +88042,7 @@ static PyObject *__pyx_pw_4lxml_5etree_35tostringlist(PyObject *__pyx_self, PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tostringlist", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3466, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("tostringlist", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3469, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
   __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
@@ -87989,7 +88071,7 @@ static PyObject *__pyx_pf_4lxml_5etree_34tostringlist(CYTHON_UNUSED PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("tostringlist", 0);
 
-  /* "lxml/etree.pyx":3475
+  /* "lxml/etree.pyx":3478
  *     single string wrapped in a list.
  *     """
  *     return [tostring(element_or_tree, *args, **kwargs)]             # <<<<<<<<<<<<<<
@@ -87997,24 +88079,24 @@ static PyObject *__pyx_pf_4lxml_5etree_34tostringlist(CYTHON_UNUSED PyObject *__
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_tostring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3475, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_tostring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3478, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3475, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3478, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_element_or_tree);
   __Pyx_GIVEREF(__pyx_v_element_or_tree);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_element_or_tree);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3475, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3478, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3475, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3478, __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, 3475, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3478, __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_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3475, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3478, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_4);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
@@ -88023,7 +88105,7 @@ static PyObject *__pyx_pf_4lxml_5etree_34tostringlist(CYTHON_UNUSED PyObject *__
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3466
+  /* "lxml/etree.pyx":3469
  * 
  * 
  * def tostringlist(element_or_tree, *args, **kwargs):             # <<<<<<<<<<<<<<
@@ -88045,7 +88127,7 @@ static PyObject *__pyx_pf_4lxml_5etree_34tostringlist(CYTHON_UNUSED PyObject *__
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3478
+/* "lxml/etree.pyx":3481
  * 
  * 
  * def tounicode(element_or_tree, *, method=u"xml", bint pretty_print=False,             # <<<<<<<<<<<<<<
@@ -88074,7 +88156,7 @@ static PyObject *__pyx_pw_4lxml_5etree_37tounicode(PyObject *__pyx_self, PyObjec
     PyObject* values[5] = {0,0,0,0,0};
     values[1] = ((PyObject *)((PyObject*)__pyx_n_u_xml));
 
-    /* "lxml/etree.pyx":3479
+    /* "lxml/etree.pyx":3482
  * 
  * def tounicode(element_or_tree, *, method=u"xml", bint pretty_print=False,
  *               bint with_tail=True, doctype=None):             # <<<<<<<<<<<<<<
@@ -88105,7 +88187,7 @@ static PyObject *__pyx_pw_4lxml_5etree_37tounicode(PyObject *__pyx_self, PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tounicode") < 0)) __PYX_ERR(0, 3478, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tounicode") < 0)) __PYX_ERR(0, 3481, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -88115,10 +88197,10 @@ static PyObject *__pyx_pw_4lxml_5etree_37tounicode(PyObject *__pyx_self, PyObjec
     __pyx_v_element_or_tree = values[0];
     __pyx_v_method = values[1];
     if (values[2]) {
-      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3478, __pyx_L3_error)
+      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3481, __pyx_L3_error)
     } else {
 
-      /* "lxml/etree.pyx":3478
+      /* "lxml/etree.pyx":3481
  * 
  * 
  * def tounicode(element_or_tree, *, method=u"xml", bint pretty_print=False,             # <<<<<<<<<<<<<<
@@ -88128,10 +88210,10 @@ static PyObject *__pyx_pw_4lxml_5etree_37tounicode(PyObject *__pyx_self, PyObjec
       __pyx_v_pretty_print = ((int)((int)0));
     }
     if (values[3]) {
-      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3479, __pyx_L3_error)
+      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3482, __pyx_L3_error)
     } else {
 
-      /* "lxml/etree.pyx":3479
+      /* "lxml/etree.pyx":3482
  * 
  * def tounicode(element_or_tree, *, method=u"xml", bint pretty_print=False,
  *               bint with_tail=True, doctype=None):             # <<<<<<<<<<<<<<
@@ -88144,7 +88226,7 @@ static PyObject *__pyx_pw_4lxml_5etree_37tounicode(PyObject *__pyx_self, PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tounicode", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3478, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("tounicode", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3481, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.tounicode", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -88152,7 +88234,7 @@ static PyObject *__pyx_pw_4lxml_5etree_37tounicode(PyObject *__pyx_self, PyObjec
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_5etree_36tounicode(__pyx_self, __pyx_v_element_or_tree, __pyx_v_method, __pyx_v_pretty_print, __pyx_v_with_tail, __pyx_v_doctype);
 
-  /* "lxml/etree.pyx":3478
+  /* "lxml/etree.pyx":3481
  * 
  * 
  * def tounicode(element_or_tree, *, method=u"xml", bint pretty_print=False,             # <<<<<<<<<<<<<<
@@ -88179,7 +88261,7 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("tounicode", 0);
 
-  /* "lxml/etree.pyx":3501
+  /* "lxml/etree.pyx":3504
  *     on the tail text of children, which will always be serialised.
  *     """
  *     if isinstance(element_or_tree, _Element):             # <<<<<<<<<<<<<<
@@ -88190,7 +88272,7 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "lxml/etree.pyx":3502
+    /* "lxml/etree.pyx":3505
  *     """
  *     if isinstance(element_or_tree, _Element):
  *         return _tostring(<_Element>element_or_tree, unicode, doctype, method,             # <<<<<<<<<<<<<<
@@ -88199,20 +88281,20 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
  */
     __Pyx_XDECREF(__pyx_r);
 
-    /* "lxml/etree.pyx":3503
+    /* "lxml/etree.pyx":3506
  *     if isinstance(element_or_tree, _Element):
  *         return _tostring(<_Element>element_or_tree, unicode, doctype, method,
  *                           0, 0, pretty_print, with_tail, -1)             # <<<<<<<<<<<<<<
  *     elif isinstance(element_or_tree, _ElementTree):
  *         return _tostring((<_ElementTree>element_or_tree)._context_node,
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__tostring(((struct LxmlElement *)__pyx_v_element_or_tree), ((PyObject *)(&PyUnicode_Type)), __pyx_v_doctype, __pyx_v_method, 0, 0, __pyx_v_pretty_print, __pyx_v_with_tail, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3502, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__tostring(((struct LxmlElement *)__pyx_v_element_or_tree), ((PyObject *)(&PyUnicode_Type)), __pyx_v_doctype, __pyx_v_method, 0, 0, __pyx_v_pretty_print, __pyx_v_with_tail, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3505, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":3501
+    /* "lxml/etree.pyx":3504
  *     on the tail text of children, which will always be serialised.
  *     """
  *     if isinstance(element_or_tree, _Element):             # <<<<<<<<<<<<<<
@@ -88221,7 +88303,7 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
  */
   }
 
-  /* "lxml/etree.pyx":3504
+  /* "lxml/etree.pyx":3507
  *         return _tostring(<_Element>element_or_tree, unicode, doctype, method,
  *                           0, 0, pretty_print, with_tail, -1)
  *     elif isinstance(element_or_tree, _ElementTree):             # <<<<<<<<<<<<<<
@@ -88232,7 +88314,7 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (likely(__pyx_t_1)) {
 
-    /* "lxml/etree.pyx":3505
+    /* "lxml/etree.pyx":3508
  *                           0, 0, pretty_print, with_tail, -1)
  *     elif isinstance(element_or_tree, _ElementTree):
  *         return _tostring((<_ElementTree>element_or_tree)._context_node,             # <<<<<<<<<<<<<<
@@ -88243,21 +88325,21 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
     __pyx_t_3 = ((PyObject *)((struct LxmlElementTree *)__pyx_v_element_or_tree)->_context_node);
     __Pyx_INCREF(__pyx_t_3);
 
-    /* "lxml/etree.pyx":3507
+    /* "lxml/etree.pyx":3510
  *         return _tostring((<_ElementTree>element_or_tree)._context_node,
  *                          unicode, doctype, method, 0, 1, pretty_print,
  *                          with_tail, -1)             # <<<<<<<<<<<<<<
  *     else:
  *         raise TypeError, f"Type '{type(element_or_tree)}' cannot be serialized."
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__tostring(((struct LxmlElement *)__pyx_t_3), ((PyObject *)(&PyUnicode_Type)), __pyx_v_doctype, __pyx_v_method, 0, 1, __pyx_v_pretty_print, __pyx_v_with_tail, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3505, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__tostring(((struct LxmlElement *)__pyx_t_3), ((PyObject *)(&PyUnicode_Type)), __pyx_v_doctype, __pyx_v_method, 0, 1, __pyx_v_pretty_print, __pyx_v_with_tail, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3508, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "lxml/etree.pyx":3504
+    /* "lxml/etree.pyx":3507
  *         return _tostring(<_Element>element_or_tree, unicode, doctype, method,
  *                           0, 0, pretty_print, with_tail, -1)
  *     elif isinstance(element_or_tree, _ElementTree):             # <<<<<<<<<<<<<<
@@ -88266,7 +88348,7 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
  */
   }
 
-  /* "lxml/etree.pyx":3509
+  /* "lxml/etree.pyx":3512
  *                          with_tail, -1)
  *     else:
  *         raise TypeError, f"Type '{type(element_or_tree)}' cannot be serialized."             # <<<<<<<<<<<<<<
@@ -88274,7 +88356,7 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
  * 
  */
   /*else*/ {
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3509, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = 0;
     __pyx_t_6 = 127;
@@ -88282,7 +88364,7 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
     __pyx_t_5 += 6;
     __Pyx_GIVEREF(__pyx_kp_u_Type);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Type);
-    __pyx_t_3 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_element_or_tree)), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3509, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_element_or_tree)), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_6;
     __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
@@ -88293,15 +88375,15 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
     __pyx_t_5 += 23;
     __Pyx_GIVEREF(__pyx_kp_u_cannot_be_serialized);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_cannot_be_serialized);
-    __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3509, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_t_3, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(0, 3509, __pyx_L1_error)
+    __PYX_ERR(0, 3512, __pyx_L1_error)
   }
 
-  /* "lxml/etree.pyx":3478
+  /* "lxml/etree.pyx":3481
  * 
  * 
  * def tounicode(element_or_tree, *, method=u"xml", bint pretty_print=False,             # <<<<<<<<<<<<<<
@@ -88321,7 +88403,7 @@ static PyObject *__pyx_pf_4lxml_5etree_36tounicode(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3512
+/* "lxml/etree.pyx":3515
  * 
  * 
  * def parse(source, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -88377,7 +88459,7 @@ static PyObject *__pyx_pw_4lxml_5etree_39parse(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, "parse") < 0)) __PYX_ERR(0, 3512, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "parse") < 0)) __PYX_ERR(0, 3515, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -88394,13 +88476,13 @@ static PyObject *__pyx_pw_4lxml_5etree_39parse(PyObject *__pyx_self, PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("parse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3512, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("parse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3515, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3512, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3515, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_38parse(__pyx_self, __pyx_v_source, __pyx_v_parser, __pyx_v_base_url);
 
   /* function exit code */
@@ -88430,7 +88512,7 @@ static PyObject *__pyx_pf_4lxml_5etree_38parse(CYTHON_UNUSED PyObject *__pyx_sel
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("parse", 0);
 
-  /* "lxml/etree.pyx":3537
+  /* "lxml/etree.pyx":3540
  *     """
  *     cdef _Document doc
  *     try:             # <<<<<<<<<<<<<<
@@ -88446,19 +88528,19 @@ static PyObject *__pyx_pf_4lxml_5etree_38parse(CYTHON_UNUSED PyObject *__pyx_sel
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "lxml/etree.pyx":3538
+      /* "lxml/etree.pyx":3541
  *     cdef _Document doc
  *     try:
  *         doc = _parseDocument(source, parser, base_url)             # <<<<<<<<<<<<<<
  *         return _elementTreeFactory(doc, None)
  *     except _TargetParserResult as result_container:
  */
-      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocument(__pyx_v_source, __pyx_v_parser, __pyx_v_base_url)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3538, __pyx_L3_error)
+      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocument(__pyx_v_source, __pyx_v_parser, __pyx_v_base_url)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3541, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/etree.pyx":3539
+      /* "lxml/etree.pyx":3542
  *     try:
  *         doc = _parseDocument(source, parser, base_url)
  *         return _elementTreeFactory(doc, None)             # <<<<<<<<<<<<<<
@@ -88466,13 +88548,13 @@ static PyObject *__pyx_pf_4lxml_5etree_38parse(CYTHON_UNUSED PyObject *__pyx_sel
  *         return result_container.result
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(__pyx_v_doc, ((struct LxmlElement *)Py_None))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3539, __pyx_L3_error)
+      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(__pyx_v_doc, ((struct LxmlElement *)Py_None))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3542, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_r = __pyx_t_4;
       __pyx_t_4 = 0;
       goto __pyx_L7_try_return;
 
-      /* "lxml/etree.pyx":3537
+      /* "lxml/etree.pyx":3540
  *     """
  *     cdef _Document doc
  *     try:             # <<<<<<<<<<<<<<
@@ -88483,7 +88565,7 @@ static PyObject *__pyx_pf_4lxml_5etree_38parse(CYTHON_UNUSED PyObject *__pyx_sel
     __pyx_L3_error:;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "lxml/etree.pyx":3540
+    /* "lxml/etree.pyx":3543
  *         doc = _parseDocument(source, parser, base_url)
  *         return _elementTreeFactory(doc, None)
  *     except _TargetParserResult as result_container:             # <<<<<<<<<<<<<<
@@ -88491,7 +88573,7 @@ static PyObject *__pyx_pf_4lxml_5etree_38parse(CYTHON_UNUSED PyObject *__pyx_sel
  * 
  */
     __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
-    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3540, __pyx_L5_except_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_TargetParserResult); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3543, __pyx_L5_except_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_4, __pyx_t_7);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -88499,14 +88581,14 @@ static PyObject *__pyx_pf_4lxml_5etree_38parse(CYTHON_UNUSED PyObject *__pyx_sel
     __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
     if (__pyx_t_8) {
       __Pyx_AddTraceback("lxml.etree.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 3540, __pyx_L5_except_error)
+      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 3543, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_5);
       __pyx_v_result_container = __pyx_t_5;
 
-      /* "lxml/etree.pyx":3541
+      /* "lxml/etree.pyx":3544
  *         return _elementTreeFactory(doc, None)
  *     except _TargetParserResult as result_container:
  *         return result_container.result             # <<<<<<<<<<<<<<
@@ -88514,7 +88596,7 @@ static PyObject *__pyx_pf_4lxml_5etree_38parse(CYTHON_UNUSED PyObject *__pyx_sel
  * 
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3541, __pyx_L5_except_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_container, __pyx_n_s_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3544, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_r = __pyx_t_7;
       __pyx_t_7 = 0;
@@ -88526,7 +88608,7 @@ static PyObject *__pyx_pf_4lxml_5etree_38parse(CYTHON_UNUSED PyObject *__pyx_sel
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
 
-    /* "lxml/etree.pyx":3537
+    /* "lxml/etree.pyx":3540
  *     """
  *     cdef _Document doc
  *     try:             # <<<<<<<<<<<<<<
@@ -88552,7 +88634,7 @@ static PyObject *__pyx_pf_4lxml_5etree_38parse(CYTHON_UNUSED PyObject *__pyx_sel
     goto __pyx_L0;
   }
 
-  /* "lxml/etree.pyx":3512
+  /* "lxml/etree.pyx":3515
  * 
  * 
  * def parse(source, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
@@ -88576,7 +88658,7 @@ static PyObject *__pyx_pf_4lxml_5etree_38parse(CYTHON_UNUSED PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3544
+/* "lxml/etree.pyx":3547
  * 
  * 
  * def adopt_external_document(capsule, _BaseParser parser=None):             # <<<<<<<<<<<<<<
@@ -88625,7 +88707,7 @@ static PyObject *__pyx_pw_4lxml_5etree_41adopt_external_document(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adopt_external_document") < 0)) __PYX_ERR(0, 3544, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adopt_external_document") < 0)) __PYX_ERR(0, 3547, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -88641,13 +88723,13 @@ static PyObject *__pyx_pw_4lxml_5etree_41adopt_external_document(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("adopt_external_document", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3544, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("adopt_external_document", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3547, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.adopt_external_document", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3544, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(0, 3547, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_40adopt_external_document(__pyx_self, __pyx_v_capsule, __pyx_v_parser);
 
   /* function exit code */
@@ -88673,7 +88755,7 @@ static PyObject *__pyx_pf_4lxml_5etree_40adopt_external_document(CYTHON_UNUSED P
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("adopt_external_document", 0);
 
-  /* "lxml/etree.pyx":3576
+  /* "lxml/etree.pyx":3579
  *     """
  *     cdef xmlDoc* c_doc
  *     cdef bint is_owned = False             # <<<<<<<<<<<<<<
@@ -88682,17 +88764,17 @@ static PyObject *__pyx_pf_4lxml_5etree_40adopt_external_document(CYTHON_UNUSED P
  */
   __pyx_v_is_owned = 0;
 
-  /* "lxml/etree.pyx":3577
+  /* "lxml/etree.pyx":3580
  *     cdef xmlDoc* c_doc
  *     cdef bint is_owned = False
  *     c_doc = <xmlDoc*> python.lxml_unpack_xmldoc_capsule(capsule, &is_owned)             # <<<<<<<<<<<<<<
  *     doc = _adoptForeignDoc(c_doc, parser, is_owned)
  *     return _elementTreeFactory(doc, None)
  */
-  __pyx_t_1 = lxml_unpack_xmldoc_capsule(__pyx_v_capsule, (&__pyx_v_is_owned)); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3577, __pyx_L1_error)
+  __pyx_t_1 = lxml_unpack_xmldoc_capsule(__pyx_v_capsule, (&__pyx_v_is_owned)); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3580, __pyx_L1_error)
   __pyx_v_c_doc = ((xmlDoc *)__pyx_t_1);
 
-  /* "lxml/etree.pyx":3578
+  /* "lxml/etree.pyx":3581
  *     cdef bint is_owned = False
  *     c_doc = <xmlDoc*> python.lxml_unpack_xmldoc_capsule(capsule, &is_owned)
  *     doc = _adoptForeignDoc(c_doc, parser, is_owned)             # <<<<<<<<<<<<<<
@@ -88702,12 +88784,12 @@ static PyObject *__pyx_pf_4lxml_5etree_40adopt_external_document(CYTHON_UNUSED P
   __pyx_t_3.__pyx_n = 2;
   __pyx_t_3.parser = __pyx_v_parser;
   __pyx_t_3.is_owned = __pyx_v_is_owned;
-  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__adoptForeignDoc(__pyx_v_c_doc, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3578, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__adoptForeignDoc(__pyx_v_c_doc, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3581, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":3579
+  /* "lxml/etree.pyx":3582
  *     c_doc = <xmlDoc*> python.lxml_unpack_xmldoc_capsule(capsule, &is_owned)
  *     doc = _adoptForeignDoc(c_doc, parser, is_owned)
  *     return _elementTreeFactory(doc, None)             # <<<<<<<<<<<<<<
@@ -88715,13 +88797,13 @@ static PyObject *__pyx_pf_4lxml_5etree_40adopt_external_document(CYTHON_UNUSED P
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(__pyx_v_doc, ((struct LxmlElement *)Py_None))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3579, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(__pyx_v_doc, ((struct LxmlElement *)Py_None))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3582, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3544
+  /* "lxml/etree.pyx":3547
  * 
  * 
  * def adopt_external_document(capsule, _BaseParser parser=None):             # <<<<<<<<<<<<<<
@@ -93398,7 +93480,7 @@ static int __pyx_f_4lxml_5etree_22_OpaqueDocumentWrapper__assertNode(struct __py
  * 
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->__pyx_base._c_node != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Proxy_invalidated);
       __PYX_ERR(7, 387, __pyx_L1_error)
@@ -94440,7 +94522,7 @@ static int __pyx_pf_4lxml_5etree_29_ModifyContentOnlyEntityProxy_4name_2__set__(
  *             c_text = _xcstr(value)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__29, __pyx_v_value, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(7, 475, __pyx_L1_error)
     __pyx_t_4 = (__pyx_t_3 != 0);
     if (__pyx_t_4) {
@@ -97904,7 +97986,7 @@ static int __pyx_f_4lxml_5etree__validateNodeClass(xmlNode *__pyx_v_c_node, PyOb
  *     if not (isinstance(cls, type) and issubclass(cls, expected)):
  */
     #ifndef CYTHON_WITHOUT_ASSERTIONS
-    if (unlikely(!Py_OptimizeFlag)) {
+    if (unlikely(__pyx_assertions_enabled())) {
       if (unlikely(!0)) {
         __pyx_t_1 = __Pyx_PyUnicode_From_xmlElementType(__pyx_v_c_node->type, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 199, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
@@ -99481,7 +99563,7 @@ static PyObject *__pyx_f_4lxml_5etree__lookupDefaultElementClass(PyObject *__pyx
  * 
  */
     #ifndef CYTHON_WITHOUT_ASSERTIONS
-    if (unlikely(!Py_OptimizeFlag)) {
+    if (unlikely(__pyx_assertions_enabled())) {
       if (unlikely(!0)) {
         __pyx_t_4 = __Pyx_PyUnicode_From_xmlElementType(__pyx_v_c_node->type, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 336, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
@@ -105169,7 +105251,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Resolver_4resolve_string(CYTHON_UNUSED s
  *         if base_url is not None:
  *             doc_ref._filename = _encodeFilename(base_url)
  */
-  if (!(likely(PyBytes_CheckExact(__pyx_v_string))||((__pyx_v_string) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_string)->tp_name), 0))) __PYX_ERR(12, 64, __pyx_L1_error)
+  if (!(likely(PyBytes_CheckExact(__pyx_v_string))||((__pyx_v_string) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_string)->tp_name), 0))) __PYX_ERR(12, 64, __pyx_L1_error)
   __pyx_t_3 = __pyx_v_string;
   __Pyx_INCREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
@@ -112870,11 +112952,20 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
  *                 self._c_ctxt.disableSAX = 0 # work around bug in libxml2
  *             else:
  *                 xmlparser.xmlClearParserCtxt(self._c_ctxt)             # <<<<<<<<<<<<<<
- * 
- *     cdef int prepare(self, bint set_document_loader=True) except -1:
+ *                 # work around bug in libxml2 [2.9.10 .. 2.9.14]:
+ *                 # https://gitlab.gnome.org/GNOME/libxml2/-/issues/378
  */
     /*else*/ {
       xmlClearParserCtxt(__pyx_v_self->_c_ctxt);
+
+      /* "src/lxml/parser.pxi":574
+ *                 # work around bug in libxml2 [2.9.10 .. 2.9.14]:
+ *                 # https://gitlab.gnome.org/GNOME/libxml2/-/issues/378
+ *                 self._c_ctxt.nsNr = 0             # <<<<<<<<<<<<<<
+ * 
+ *     cdef int prepare(self, bint set_document_loader=True) except -1:
+ */
+      __pyx_v_self->_c_ctxt->nsNr = 0;
     }
     __pyx_L4:;
 
@@ -112899,8 +112990,8 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
   __Pyx_RefNannyFinishContext();
 }
 
-/* "src/lxml/parser.pxi":573
- *                 xmlparser.xmlClearParserCtxt(self._c_ctxt)
+/* "src/lxml/parser.pxi":576
+ *                 self._c_ctxt.nsNr = 0
  * 
  *     cdef int prepare(self, bint set_document_loader=True) except -1:             # <<<<<<<<<<<<<<
  *         cdef int result
@@ -112927,7 +113018,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
     }
   }
 
-  /* "src/lxml/parser.pxi":575
+  /* "src/lxml/parser.pxi":578
  *     cdef int prepare(self, bint set_document_loader=True) except -1:
  *         cdef int result
  *         if config.ENABLE_THREADING and self._lock is not NULL:             # <<<<<<<<<<<<<<
@@ -112945,7 +113036,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":576
+    /* "src/lxml/parser.pxi":579
  *         cdef int result
  *         if config.ENABLE_THREADING and self._lock is not NULL:
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -112960,7 +113051,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
         #endif
         /*try:*/ {
 
-          /* "src/lxml/parser.pxi":577
+          /* "src/lxml/parser.pxi":580
  *         if config.ENABLE_THREADING and self._lock is not NULL:
  *             with nogil:
  *                 result = python.PyThread_acquire_lock(             # <<<<<<<<<<<<<<
@@ -112970,7 +113061,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
           __pyx_v_result = PyThread_acquire_lock(__pyx_v_self->_lock, WAIT_LOCK);
         }
 
-        /* "src/lxml/parser.pxi":576
+        /* "src/lxml/parser.pxi":579
  *         cdef int result
  *         if config.ENABLE_THREADING and self._lock is not NULL:
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -112989,7 +113080,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
         }
     }
 
-    /* "src/lxml/parser.pxi":579
+    /* "src/lxml/parser.pxi":582
  *                 result = python.PyThread_acquire_lock(
  *                     self._lock, python.WAIT_LOCK)
  *             if result == 0:             # <<<<<<<<<<<<<<
@@ -112999,7 +113090,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
     __pyx_t_1 = ((__pyx_v_result == 0) != 0);
     if (unlikely(__pyx_t_1)) {
 
-      /* "src/lxml/parser.pxi":580
+      /* "src/lxml/parser.pxi":583
  *                     self._lock, python.WAIT_LOCK)
  *             if result == 0:
  *                 raise ParserError, u"parser locking failed"             # <<<<<<<<<<<<<<
@@ -113007,9 +113098,9 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
  *         self._doc = None
  */
       __Pyx_Raise(((PyObject *)__pyx_ptype_4lxml_5etree_ParserError), __pyx_kp_u_parser_locking_failed, 0, 0);
-      __PYX_ERR(2, 580, __pyx_L1_error)
+      __PYX_ERR(2, 583, __pyx_L1_error)
 
-      /* "src/lxml/parser.pxi":579
+      /* "src/lxml/parser.pxi":582
  *                 result = python.PyThread_acquire_lock(
  *                     self._lock, python.WAIT_LOCK)
  *             if result == 0:             # <<<<<<<<<<<<<<
@@ -113018,7 +113109,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
  */
     }
 
-    /* "src/lxml/parser.pxi":575
+    /* "src/lxml/parser.pxi":578
  *     cdef int prepare(self, bint set_document_loader=True) except -1:
  *         cdef int result
  *         if config.ENABLE_THREADING and self._lock is not NULL:             # <<<<<<<<<<<<<<
@@ -113027,18 +113118,18 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
  */
   }
 
-  /* "src/lxml/parser.pxi":581
+  /* "src/lxml/parser.pxi":584
  *             if result == 0:
  *                 raise ParserError, u"parser locking failed"
  *         self._error_log.clear()             # <<<<<<<<<<<<<<
  *         self._doc = None
  *         self._c_ctxt.sax.serror = _receiveParserError
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_self->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->clear(__pyx_v_self->_error_log, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 581, __pyx_L1_error)
+  __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_self->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->clear(__pyx_v_self->_error_log, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/lxml/parser.pxi":582
+  /* "src/lxml/parser.pxi":585
  *                 raise ParserError, u"parser locking failed"
  *         self._error_log.clear()
  *         self._doc = None             # <<<<<<<<<<<<<<
@@ -113051,7 +113142,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_doc));
   __pyx_v_self->_doc = ((struct LxmlDocument *)Py_None);
 
-  /* "src/lxml/parser.pxi":583
+  /* "src/lxml/parser.pxi":586
  *         self._error_log.clear()
  *         self._doc = None
  *         self._c_ctxt.sax.serror = _receiveParserError             # <<<<<<<<<<<<<<
@@ -113060,7 +113151,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
  */
   __pyx_v_self->_c_ctxt->sax->serror = __pyx_f_4lxml_5etree__receiveParserError;
 
-  /* "src/lxml/parser.pxi":584
+  /* "src/lxml/parser.pxi":587
  *         self._doc = None
  *         self._c_ctxt.sax.serror = _receiveParserError
  *         self._orig_loader = _register_document_loader() if set_document_loader else NULL             # <<<<<<<<<<<<<<
@@ -113074,7 +113165,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   }
   __pyx_v_self->_orig_loader = __pyx_t_4;
 
-  /* "src/lxml/parser.pxi":585
+  /* "src/lxml/parser.pxi":588
  *         self._c_ctxt.sax.serror = _receiveParserError
  *         self._orig_loader = _register_document_loader() if set_document_loader else NULL
  *         if self._validator is not None:             # <<<<<<<<<<<<<<
@@ -113085,7 +113176,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":586
+    /* "src/lxml/parser.pxi":589
  *         self._orig_loader = _register_document_loader() if set_document_loader else NULL
  *         if self._validator is not None:
  *             self._validator.connect(self._c_ctxt, self._error_log)             # <<<<<<<<<<<<<<
@@ -113094,10 +113185,10 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
  */
     __pyx_t_3 = ((PyObject *)__pyx_v_self->_error_log);
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_5 = __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_connect(__pyx_v_self->_validator, __pyx_v_self->_c_ctxt, ((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_t_3)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 586, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_connect(__pyx_v_self->_validator, __pyx_v_self->_c_ctxt, ((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_t_3)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 589, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "src/lxml/parser.pxi":585
+    /* "src/lxml/parser.pxi":588
  *         self._c_ctxt.sax.serror = _receiveParserError
  *         self._orig_loader = _register_document_loader() if set_document_loader else NULL
  *         if self._validator is not None:             # <<<<<<<<<<<<<<
@@ -113106,7 +113197,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
  */
   }
 
-  /* "src/lxml/parser.pxi":587
+  /* "src/lxml/parser.pxi":590
  *         if self._validator is not None:
  *             self._validator.connect(self._c_ctxt, self._error_log)
  *         return 0             # <<<<<<<<<<<<<<
@@ -113116,8 +113207,8 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":573
- *                 xmlparser.xmlClearParserCtxt(self._c_ctxt)
+  /* "src/lxml/parser.pxi":576
+ *                 self._c_ctxt.nsNr = 0
  * 
  *     cdef int prepare(self, bint set_document_loader=True) except -1:             # <<<<<<<<<<<<<<
  *         cdef int result
@@ -113134,7 +113225,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":589
+/* "src/lxml/parser.pxi":592
  *         return 0
  * 
  *     cdef int cleanup(self) except -1:             # <<<<<<<<<<<<<<
@@ -113161,7 +113252,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("cleanup", 0);
 
-  /* "src/lxml/parser.pxi":590
+  /* "src/lxml/parser.pxi":593
  * 
  *     cdef int cleanup(self) except -1:
  *         if self._orig_loader is not NULL:             # <<<<<<<<<<<<<<
@@ -113171,7 +113262,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   __pyx_t_1 = ((__pyx_v_self->_orig_loader != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":591
+    /* "src/lxml/parser.pxi":594
  *     cdef int cleanup(self) except -1:
  *         if self._orig_loader is not NULL:
  *             _reset_document_loader(self._orig_loader)             # <<<<<<<<<<<<<<
@@ -113180,7 +113271,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
     __pyx_f_4lxml_5etree__reset_document_loader(__pyx_v_self->_orig_loader);
 
-    /* "src/lxml/parser.pxi":590
+    /* "src/lxml/parser.pxi":593
  * 
  *     cdef int cleanup(self) except -1:
  *         if self._orig_loader is not NULL:             # <<<<<<<<<<<<<<
@@ -113189,7 +113280,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
   }
 
-  /* "src/lxml/parser.pxi":592
+  /* "src/lxml/parser.pxi":595
  *         if self._orig_loader is not NULL:
  *             _reset_document_loader(self._orig_loader)
  *         try:             # <<<<<<<<<<<<<<
@@ -113198,7 +113289,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
   /*try:*/ {
 
-    /* "src/lxml/parser.pxi":593
+    /* "src/lxml/parser.pxi":596
  *             _reset_document_loader(self._orig_loader)
  *         try:
  *             if self._validator is not None:             # <<<<<<<<<<<<<<
@@ -113209,7 +113300,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":594
+      /* "src/lxml/parser.pxi":597
  *         try:
  *             if self._validator is not None:
  *                 self._validator.disconnect()             # <<<<<<<<<<<<<<
@@ -113218,7 +113309,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
       __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_disconnect(__pyx_v_self->_validator);
 
-      /* "src/lxml/parser.pxi":593
+      /* "src/lxml/parser.pxi":596
  *             _reset_document_loader(self._orig_loader)
  *         try:
  *             if self._validator is not None:             # <<<<<<<<<<<<<<
@@ -113227,7 +113318,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
     }
 
-    /* "src/lxml/parser.pxi":595
+    /* "src/lxml/parser.pxi":598
  *             if self._validator is not None:
  *                 self._validator.disconnect()
  *             self._resetParserContext()             # <<<<<<<<<<<<<<
@@ -113236,16 +113327,16 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
     ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->_resetParserContext(__pyx_v_self);
 
-    /* "src/lxml/parser.pxi":596
+    /* "src/lxml/parser.pxi":599
  *                 self._validator.disconnect()
  *             self._resetParserContext()
  *             self.clear()             # <<<<<<<<<<<<<<
  *             self._doc = None
  *             self._c_ctxt.sax.serror = NULL
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.clear(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_self)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 596, __pyx_L5_error)
+    __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.clear(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_self)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 599, __pyx_L5_error)
 
-    /* "src/lxml/parser.pxi":597
+    /* "src/lxml/parser.pxi":600
  *             self._resetParserContext()
  *             self.clear()
  *             self._doc = None             # <<<<<<<<<<<<<<
@@ -113258,7 +113349,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
     __Pyx_DECREF(((PyObject *)__pyx_v_self->_doc));
     __pyx_v_self->_doc = ((struct LxmlDocument *)Py_None);
 
-    /* "src/lxml/parser.pxi":598
+    /* "src/lxml/parser.pxi":601
  *             self.clear()
  *             self._doc = None
  *             self._c_ctxt.sax.serror = NULL             # <<<<<<<<<<<<<<
@@ -113268,7 +113359,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
     __pyx_v_self->_c_ctxt->sax->serror = NULL;
   }
 
-  /* "src/lxml/parser.pxi":600
+  /* "src/lxml/parser.pxi":603
  *             self._c_ctxt.sax.serror = NULL
  *         finally:
  *             if config.ENABLE_THREADING and self._lock is not NULL:             # <<<<<<<<<<<<<<
@@ -113288,7 +113379,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
       __pyx_L9_bool_binop_done:;
       if (__pyx_t_2) {
 
-        /* "src/lxml/parser.pxi":601
+        /* "src/lxml/parser.pxi":604
  *         finally:
  *             if config.ENABLE_THREADING and self._lock is not NULL:
  *                 python.PyThread_release_lock(self._lock)             # <<<<<<<<<<<<<<
@@ -113297,7 +113388,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
         PyThread_release_lock(__pyx_v_self->_lock);
 
-        /* "src/lxml/parser.pxi":600
+        /* "src/lxml/parser.pxi":603
  *             self._c_ctxt.sax.serror = NULL
  *         finally:
  *             if config.ENABLE_THREADING and self._lock is not NULL:             # <<<<<<<<<<<<<<
@@ -113333,7 +113424,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
         __pyx_L14_bool_binop_done:;
         if (__pyx_t_2) {
 
-          /* "src/lxml/parser.pxi":601
+          /* "src/lxml/parser.pxi":604
  *         finally:
  *             if config.ENABLE_THREADING and self._lock is not NULL:
  *                 python.PyThread_release_lock(self._lock)             # <<<<<<<<<<<<<<
@@ -113342,7 +113433,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
           PyThread_release_lock(__pyx_v_self->_lock);
 
-          /* "src/lxml/parser.pxi":600
+          /* "src/lxml/parser.pxi":603
  *             self._c_ctxt.sax.serror = NULL
  *         finally:
  *             if config.ENABLE_THREADING and self._lock is not NULL:             # <<<<<<<<<<<<<<
@@ -113368,7 +113459,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
     __pyx_L6:;
   }
 
-  /* "src/lxml/parser.pxi":602
+  /* "src/lxml/parser.pxi":605
  *             if config.ENABLE_THREADING and self._lock is not NULL:
  *                 python.PyThread_release_lock(self._lock)
  *         return 0             # <<<<<<<<<<<<<<
@@ -113378,7 +113469,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":589
+  /* "src/lxml/parser.pxi":592
  *         return 0
  * 
  *     cdef int cleanup(self) except -1:             # <<<<<<<<<<<<<<
@@ -113395,7 +113486,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":604
+/* "src/lxml/parser.pxi":607
  *         return 0
  * 
  *     cdef object _handleParseResult(self, _BaseParser parser,             # <<<<<<<<<<<<<<
@@ -113417,17 +113508,17 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_handleParseResult", 0);
 
-  /* "src/lxml/parser.pxi":606
+  /* "src/lxml/parser.pxi":609
  *     cdef object _handleParseResult(self, _BaseParser parser,
  *                                    xmlDoc* result, filename):
  *         c_doc = self._handleParseResultDoc(parser, result, filename)             # <<<<<<<<<<<<<<
  *         if self._doc is not None and self._doc._c_doc is c_doc:
  *             return self._doc
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_self, __pyx_v_parser, __pyx_v_result, __pyx_v_filename); if (unlikely(__pyx_t_1 == ((xmlDoc *)NULL))) __PYX_ERR(2, 606, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_self, __pyx_v_parser, __pyx_v_result, __pyx_v_filename); if (unlikely(__pyx_t_1 == ((xmlDoc *)NULL))) __PYX_ERR(2, 609, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "src/lxml/parser.pxi":607
+  /* "src/lxml/parser.pxi":610
  *                                    xmlDoc* result, filename):
  *         c_doc = self._handleParseResultDoc(parser, result, filename)
  *         if self._doc is not None and self._doc._c_doc is c_doc:             # <<<<<<<<<<<<<<
@@ -113446,7 +113537,7 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":608
+    /* "src/lxml/parser.pxi":611
  *         c_doc = self._handleParseResultDoc(parser, result, filename)
  *         if self._doc is not None and self._doc._c_doc is c_doc:
  *             return self._doc             # <<<<<<<<<<<<<<
@@ -113458,7 +113549,7 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
     __pyx_r = ((PyObject *)__pyx_v_self->_doc);
     goto __pyx_L0;
 
-    /* "src/lxml/parser.pxi":607
+    /* "src/lxml/parser.pxi":610
  *                                    xmlDoc* result, filename):
  *         c_doc = self._handleParseResultDoc(parser, result, filename)
  *         if self._doc is not None and self._doc._c_doc is c_doc:             # <<<<<<<<<<<<<<
@@ -113467,7 +113558,7 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
  */
   }
 
-  /* "src/lxml/parser.pxi":610
+  /* "src/lxml/parser.pxi":613
  *             return self._doc
  *         else:
  *             return _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
@@ -113476,14 +113567,14 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 610, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 613, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_r = __pyx_t_5;
     __pyx_t_5 = 0;
     goto __pyx_L0;
   }
 
-  /* "src/lxml/parser.pxi":604
+  /* "src/lxml/parser.pxi":607
  *         return 0
  * 
  *     cdef object _handleParseResult(self, _BaseParser parser,             # <<<<<<<<<<<<<<
@@ -113502,7 +113593,7 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":612
+/* "src/lxml/parser.pxi":615
  *             return _documentFactory(c_doc, parser)
  * 
  *     cdef xmlDoc* _handleParseResultDoc(self, _BaseParser parser,             # <<<<<<<<<<<<<<
@@ -113521,7 +113612,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResultDoc(struc
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_handleParseResultDoc", 0);
 
-  /* "src/lxml/parser.pxi":614
+  /* "src/lxml/parser.pxi":617
  *     cdef xmlDoc* _handleParseResultDoc(self, _BaseParser parser,
  *                                        xmlDoc* result, filename) except NULL:
  *         recover = parser._parse_options & xmlparser.XML_PARSE_RECOVER             # <<<<<<<<<<<<<<
@@ -113530,7 +113621,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResultDoc(struc
  */
   __pyx_v_recover = (__pyx_v_parser->_parse_options & XML_PARSE_RECOVER);
 
-  /* "src/lxml/parser.pxi":617
+  /* "src/lxml/parser.pxi":620
  *         return _handleParseResult(self, self._c_ctxt, result,
  *                                   filename, recover,
  *                                   free_doc=self._doc is None)             # <<<<<<<<<<<<<<
@@ -113539,18 +113630,18 @@ static xmlDoc *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResultDoc(struc
  */
   __pyx_t_1 = (((PyObject *)__pyx_v_self->_doc) == Py_None);
 
-  /* "src/lxml/parser.pxi":615
+  /* "src/lxml/parser.pxi":618
  *                                        xmlDoc* result, filename) except NULL:
  *         recover = parser._parse_options & xmlparser.XML_PARSE_RECOVER
  *         return _handleParseResult(self, self._c_ctxt, result,             # <<<<<<<<<<<<<<
  *                                   filename, recover,
  *                                   free_doc=self._doc is None)
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__handleParseResult(__pyx_v_self, __pyx_v_self->_c_ctxt, __pyx_v_result, __pyx_v_filename, __pyx_v_recover, __pyx_t_1); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(2, 615, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__handleParseResult(__pyx_v_self, __pyx_v_self->_c_ctxt, __pyx_v_result, __pyx_v_filename, __pyx_v_recover, __pyx_t_1); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(2, 618, __pyx_L1_error)
   __pyx_r = __pyx_t_2;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":612
+  /* "src/lxml/parser.pxi":615
  *             return _documentFactory(c_doc, parser)
  * 
  *     cdef xmlDoc* _handleParseResultDoc(self, _BaseParser parser,             # <<<<<<<<<<<<<<
@@ -113567,7 +113658,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResultDoc(struc
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":619
+/* "src/lxml/parser.pxi":622
  *                                   free_doc=self._doc is None)
  * 
  * cdef _initParserContext(_ParserContext context,             # <<<<<<<<<<<<<<
@@ -113585,18 +113676,18 @@ static PyObject *__pyx_f_4lxml_5etree__initParserContext(struct __pyx_obj_4lxml_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_initParserContext", 0);
 
-  /* "src/lxml/parser.pxi":622
+  /* "src/lxml/parser.pxi":625
  *                         _ResolverRegistry resolvers,
  *                         xmlparser.xmlParserCtxt* c_ctxt):
  *     _initResolverContext(context, resolvers)             # <<<<<<<<<<<<<<
  *     if c_ctxt is not NULL:
  *         context._initParserContext(c_ctxt)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__initResolverContext(((struct __pyx_obj_4lxml_5etree__ResolverContext *)__pyx_v_context), __pyx_v_resolvers); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 622, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__initResolverContext(((struct __pyx_obj_4lxml_5etree__ResolverContext *)__pyx_v_context), __pyx_v_resolvers); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 625, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":623
+  /* "src/lxml/parser.pxi":626
  *                         xmlparser.xmlParserCtxt* c_ctxt):
  *     _initResolverContext(context, resolvers)
  *     if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -113606,7 +113697,7 @@ static PyObject *__pyx_f_4lxml_5etree__initParserContext(struct __pyx_obj_4lxml_
   __pyx_t_2 = ((__pyx_v_c_ctxt != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":624
+    /* "src/lxml/parser.pxi":627
  *     _initResolverContext(context, resolvers)
  *     if c_ctxt is not NULL:
  *         context._initParserContext(c_ctxt)             # <<<<<<<<<<<<<<
@@ -113615,7 +113706,7 @@ static PyObject *__pyx_f_4lxml_5etree__initParserContext(struct __pyx_obj_4lxml_
  */
     ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_initParserContext(__pyx_v_context, __pyx_v_c_ctxt);
 
-    /* "src/lxml/parser.pxi":623
+    /* "src/lxml/parser.pxi":626
  *                         xmlparser.xmlParserCtxt* c_ctxt):
  *     _initResolverContext(context, resolvers)
  *     if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -113624,7 +113715,7 @@ static PyObject *__pyx_f_4lxml_5etree__initParserContext(struct __pyx_obj_4lxml_
  */
   }
 
-  /* "src/lxml/parser.pxi":619
+  /* "src/lxml/parser.pxi":622
  *                                   free_doc=self._doc is None)
  * 
  * cdef _initParserContext(_ParserContext context,             # <<<<<<<<<<<<<<
@@ -113645,7 +113736,7 @@ static PyObject *__pyx_f_4lxml_5etree__initParserContext(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":626
+/* "src/lxml/parser.pxi":629
  *         context._initParserContext(c_ctxt)
  * 
  * cdef void _forwardParserError(xmlparser.xmlParserCtxt* _parser_context, xmlerror.xmlError* error) with gil:             # <<<<<<<<<<<<<<
@@ -113660,7 +113751,7 @@ static void __pyx_f_4lxml_5etree__forwardParserError(xmlParserCtxt *__pyx_v__par
   #endif
   __Pyx_RefNannySetupContext("_forwardParserError", 0);
 
-  /* "src/lxml/parser.pxi":627
+  /* "src/lxml/parser.pxi":630
  * 
  * cdef void _forwardParserError(xmlparser.xmlParserCtxt* _parser_context, xmlerror.xmlError* error) with gil:
  *     (<_ParserContext>_parser_context._private)._error_log._receive(error)             # <<<<<<<<<<<<<<
@@ -113669,7 +113760,7 @@ static void __pyx_f_4lxml_5etree__forwardParserError(xmlParserCtxt *__pyx_v__par
  */
   __pyx_f_4lxml_5etree_13_BaseErrorLog__receive(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_v__parser_context->_private)->_error_log), __pyx_v_error);
 
-  /* "src/lxml/parser.pxi":626
+  /* "src/lxml/parser.pxi":629
  *         context._initParserContext(c_ctxt)
  * 
  * cdef void _forwardParserError(xmlparser.xmlParserCtxt* _parser_context, xmlerror.xmlError* error) with gil:             # <<<<<<<<<<<<<<
@@ -113684,7 +113775,7 @@ static void __pyx_f_4lxml_5etree__forwardParserError(xmlParserCtxt *__pyx_v__par
   #endif
 }
 
-/* "src/lxml/parser.pxi":629
+/* "src/lxml/parser.pxi":632
  *     (<_ParserContext>_parser_context._private)._error_log._receive(error)
  * 
  * cdef void _receiveParserError(void* c_context, xmlerror.xmlError* error) nogil:             # <<<<<<<<<<<<<<
@@ -113696,7 +113787,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
   int __pyx_t_1;
   int __pyx_t_2;
 
-  /* "src/lxml/parser.pxi":631
+  /* "src/lxml/parser.pxi":634
  * cdef void _receiveParserError(void* c_context, xmlerror.xmlError* error) nogil:
  *     if __DEBUG:
  *         if c_context is NULL or (<xmlparser.xmlParserCtxt*>c_context)._private is NULL:             # <<<<<<<<<<<<<<
@@ -113714,7 +113805,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":632
+    /* "src/lxml/parser.pxi":635
  *     if __DEBUG:
  *         if c_context is NULL or (<xmlparser.xmlParserCtxt*>c_context)._private is NULL:
  *             _forwardError(NULL, error)             # <<<<<<<<<<<<<<
@@ -113723,7 +113814,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
  */
     __pyx_f_4lxml_5etree__forwardError(NULL, __pyx_v_error);
 
-    /* "src/lxml/parser.pxi":631
+    /* "src/lxml/parser.pxi":634
  * cdef void _receiveParserError(void* c_context, xmlerror.xmlError* error) nogil:
  *     if __DEBUG:
  *         if c_context is NULL or (<xmlparser.xmlParserCtxt*>c_context)._private is NULL:             # <<<<<<<<<<<<<<
@@ -113733,7 +113824,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
     goto __pyx_L3;
   }
 
-  /* "src/lxml/parser.pxi":634
+  /* "src/lxml/parser.pxi":637
  *             _forwardError(NULL, error)
  *         else:
  *             _forwardParserError(<xmlparser.xmlParserCtxt*>c_context, error)             # <<<<<<<<<<<<<<
@@ -113745,7 +113836,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
   }
   __pyx_L3:;
 
-  /* "src/lxml/parser.pxi":629
+  /* "src/lxml/parser.pxi":632
  *     (<_ParserContext>_parser_context._private)._error_log._receive(error)
  * 
  * cdef void _receiveParserError(void* c_context, xmlerror.xmlError* error) nogil:             # <<<<<<<<<<<<<<
@@ -113756,7 +113847,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
   /* function exit code */
 }
 
-/* "src/lxml/parser.pxi":636
+/* "src/lxml/parser.pxi":639
  *             _forwardParserError(<xmlparser.xmlParserCtxt*>c_context, error)
  * 
  * cdef int _raiseParseError(xmlparser.xmlParserCtxt* ctxt, filename,             # <<<<<<<<<<<<<<
@@ -113795,7 +113886,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
   __Pyx_RefNannySetupContext("_raiseParseError", 0);
   __Pyx_INCREF(__pyx_v_filename);
 
-  /* "src/lxml/parser.pxi":638
+  /* "src/lxml/parser.pxi":641
  * cdef int _raiseParseError(xmlparser.xmlParserCtxt* ctxt, filename,
  *                           _ErrorLog error_log) except -1:
  *     if filename is not None and \             # <<<<<<<<<<<<<<
@@ -113810,7 +113901,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     goto __pyx_L4_bool_binop_done;
   }
 
-  /* "src/lxml/parser.pxi":639
+  /* "src/lxml/parser.pxi":642
  *                           _ErrorLog error_log) except -1:
  *     if filename is not None and \
  *            ctxt.lastError.domain == xmlerror.XML_FROM_IO:             # <<<<<<<<<<<<<<
@@ -113821,7 +113912,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
   __pyx_t_1 = __pyx_t_3;
   __pyx_L4_bool_binop_done:;
 
-  /* "src/lxml/parser.pxi":638
+  /* "src/lxml/parser.pxi":641
  * cdef int _raiseParseError(xmlparser.xmlParserCtxt* ctxt, filename,
  *                           _ErrorLog error_log) except -1:
  *     if filename is not None and \             # <<<<<<<<<<<<<<
@@ -113830,7 +113921,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  */
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":640
+    /* "src/lxml/parser.pxi":643
  *     if filename is not None and \
  *            ctxt.lastError.domain == xmlerror.XML_FROM_IO:
  *         if isinstance(filename, bytes):             # <<<<<<<<<<<<<<
@@ -113841,7 +113932,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_3 = (__pyx_t_1 != 0);
     if (__pyx_t_3) {
 
-      /* "src/lxml/parser.pxi":642
+      /* "src/lxml/parser.pxi":645
  *         if isinstance(filename, bytes):
  *             filename = _decodeFilenameWithLength(
  *                 <bytes>filename, len(<bytes>filename))             # <<<<<<<<<<<<<<
@@ -113850,28 +113941,28 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  */
       if (unlikely(__pyx_v_filename == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
-        __PYX_ERR(2, 642, __pyx_L1_error)
+        __PYX_ERR(2, 645, __pyx_L1_error)
       }
-      __pyx_t_4 = __Pyx_PyBytes_AsUString(__pyx_v_filename); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(2, 642, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyBytes_AsUString(__pyx_v_filename); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(2, 645, __pyx_L1_error)
       if (unlikely(__pyx_v_filename == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-        __PYX_ERR(2, 642, __pyx_L1_error)
+        __PYX_ERR(2, 645, __pyx_L1_error)
       }
-      __pyx_t_5 = PyBytes_GET_SIZE(((PyObject*)__pyx_v_filename)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 642, __pyx_L1_error)
+      __pyx_t_5 = PyBytes_GET_SIZE(((PyObject*)__pyx_v_filename)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 645, __pyx_L1_error)
 
-      /* "src/lxml/parser.pxi":641
+      /* "src/lxml/parser.pxi":644
  *            ctxt.lastError.domain == xmlerror.XML_FROM_IO:
  *         if isinstance(filename, bytes):
  *             filename = _decodeFilenameWithLength(             # <<<<<<<<<<<<<<
  *                 <bytes>filename, len(<bytes>filename))
  *         if ctxt.lastError.message is not NULL:
  */
-      __pyx_t_6 = __pyx_f_4lxml_5etree__decodeFilenameWithLength(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 641, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_4lxml_5etree__decodeFilenameWithLength(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 644, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "src/lxml/parser.pxi":640
+      /* "src/lxml/parser.pxi":643
  *     if filename is not None and \
  *            ctxt.lastError.domain == xmlerror.XML_FROM_IO:
  *         if isinstance(filename, bytes):             # <<<<<<<<<<<<<<
@@ -113880,7 +113971,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  */
     }
 
-    /* "src/lxml/parser.pxi":643
+    /* "src/lxml/parser.pxi":646
  *             filename = _decodeFilenameWithLength(
  *                 <bytes>filename, len(<bytes>filename))
  *         if ctxt.lastError.message is not NULL:             # <<<<<<<<<<<<<<
@@ -113890,7 +113981,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_3 = ((__pyx_v_ctxt->lastError.message != NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "src/lxml/parser.pxi":644
+      /* "src/lxml/parser.pxi":647
  *                 <bytes>filename, len(<bytes>filename))
  *         if ctxt.lastError.message is not NULL:
  *             try:             # <<<<<<<<<<<<<<
@@ -113906,7 +113997,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
         __Pyx_XGOTREF(__pyx_t_9);
         /*try:*/ {
 
-          /* "src/lxml/parser.pxi":645
+          /* "src/lxml/parser.pxi":648
  *         if ctxt.lastError.message is not NULL:
  *             try:
  *                 message = ctxt.lastError.message.decode('utf-8')             # <<<<<<<<<<<<<<
@@ -113914,13 +114005,13 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  *                 # the filename may be in there => play it safe
  */
           __pyx_t_10 = __pyx_v_ctxt->lastError.message;
-          __pyx_t_6 = __Pyx_decode_c_string(__pyx_t_10, 0, strlen(__pyx_t_10), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 645, __pyx_L8_error)
+          __pyx_t_6 = __Pyx_decode_c_string(__pyx_t_10, 0, strlen(__pyx_t_10), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 648, __pyx_L8_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_INCREF(__pyx_t_6);
           __pyx_v_message = __pyx_t_6;
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-          /* "src/lxml/parser.pxi":644
+          /* "src/lxml/parser.pxi":647
  *                 <bytes>filename, len(<bytes>filename))
  *         if ctxt.lastError.message is not NULL:
  *             try:             # <<<<<<<<<<<<<<
@@ -113935,7 +114026,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
         __pyx_L8_error:;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-        /* "src/lxml/parser.pxi":646
+        /* "src/lxml/parser.pxi":649
  *             try:
  *                 message = ctxt.lastError.message.decode('utf-8')
  *             except UnicodeDecodeError:             # <<<<<<<<<<<<<<
@@ -113945,12 +114036,12 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
         __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_UnicodeDecodeError);
         if (__pyx_t_11) {
           __Pyx_AddTraceback("lxml.etree._raiseParseError", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_12, &__pyx_t_13) < 0) __PYX_ERR(2, 646, __pyx_L10_except_error)
+          if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_12, &__pyx_t_13) < 0) __PYX_ERR(2, 649, __pyx_L10_except_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_GOTREF(__pyx_t_12);
           __Pyx_GOTREF(__pyx_t_13);
 
-          /* "src/lxml/parser.pxi":648
+          /* "src/lxml/parser.pxi":651
  *             except UnicodeDecodeError:
  *                 # the filename may be in there => play it safe
  *                 message = ctxt.lastError.message.decode('iso8859-1')             # <<<<<<<<<<<<<<
@@ -113958,7 +114049,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  *         else:
  */
           __pyx_t_10 = __pyx_v_ctxt->lastError.message;
-          __pyx_t_14 = __Pyx_decode_c_string(__pyx_t_10, 0, strlen(__pyx_t_10), NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 648, __pyx_L10_except_error)
+          __pyx_t_14 = __Pyx_decode_c_string(__pyx_t_10, 0, strlen(__pyx_t_10), NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 651, __pyx_L10_except_error)
           __Pyx_GOTREF(__pyx_t_14);
           __Pyx_INCREF(__pyx_t_14);
           __Pyx_XDECREF_SET(__pyx_v_message, __pyx_t_14);
@@ -113971,7 +114062,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
         goto __pyx_L10_except_error;
         __pyx_L10_except_error:;
 
-        /* "src/lxml/parser.pxi":644
+        /* "src/lxml/parser.pxi":647
  *                 <bytes>filename, len(<bytes>filename))
  *         if ctxt.lastError.message is not NULL:
  *             try:             # <<<<<<<<<<<<<<
@@ -113991,14 +114082,14 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
         __pyx_L13_try_end:;
       }
 
-      /* "src/lxml/parser.pxi":649
+      /* "src/lxml/parser.pxi":652
  *                 # the filename may be in there => play it safe
  *                 message = ctxt.lastError.message.decode('iso8859-1')
  *             message = f"Error reading file '{filename}': {message.strip()}"             # <<<<<<<<<<<<<<
  *         else:
  *             message = f"Error reading '{filename}'"
  */
-      __pyx_t_13 = PyTuple_New(4); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 649, __pyx_L1_error)
+      __pyx_t_13 = PyTuple_New(4); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 652, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
       __pyx_t_5 = 0;
       __pyx_t_15 = 127;
@@ -114006,7 +114097,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       __pyx_t_5 += 20;
       __Pyx_GIVEREF(__pyx_kp_u_Error_reading_file);
       PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_kp_u_Error_reading_file);
-      __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_v_filename, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 649, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_v_filename, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 652, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_15;
       __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
@@ -114017,7 +114108,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       __pyx_t_5 += 3;
       __Pyx_GIVEREF(__pyx_kp_u__56);
       PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_kp_u__56);
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_message, __pyx_n_s_strip); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 649, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_message, __pyx_n_s_strip); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 652, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_14 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -114031,10 +114122,10 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       }
       __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_14) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
       __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
-      if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 649, __pyx_L1_error)
+      if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 652, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 649, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 652, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
       __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_15;
@@ -114042,13 +114133,13 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       __Pyx_GIVEREF(__pyx_t_6);
       PyTuple_SET_ITEM(__pyx_t_13, 3, __pyx_t_6);
       __pyx_t_6 = 0;
-      __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_13, 4, __pyx_t_5, __pyx_t_15); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 649, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_13, 4, __pyx_t_5, __pyx_t_15); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 652, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
       __Pyx_DECREF_SET(__pyx_v_message, __pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "src/lxml/parser.pxi":643
+      /* "src/lxml/parser.pxi":646
  *             filename = _decodeFilenameWithLength(
  *                 <bytes>filename, len(<bytes>filename))
  *         if ctxt.lastError.message is not NULL:             # <<<<<<<<<<<<<<
@@ -114058,7 +114149,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       goto __pyx_L7;
     }
 
-    /* "src/lxml/parser.pxi":651
+    /* "src/lxml/parser.pxi":654
  *             message = f"Error reading file '{filename}': {message.strip()}"
  *         else:
  *             message = f"Error reading '{filename}'"             # <<<<<<<<<<<<<<
@@ -114066,7 +114157,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  *     elif error_log:
  */
     /*else*/ {
-      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 651, __pyx_L1_error)
+      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 654, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_5 = 0;
       __pyx_t_15 = 127;
@@ -114074,7 +114165,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       __pyx_t_5 += 15;
       __Pyx_GIVEREF(__pyx_kp_u_Error_reading);
       PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_Error_reading);
-      __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_filename, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 651, __pyx_L1_error)
+      __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_filename, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 654, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
       __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_15;
       __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
@@ -114085,7 +114176,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       __pyx_t_5 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__22);
       PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u__22);
-      __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_5, __pyx_t_15); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 651, __pyx_L1_error)
+      __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_5, __pyx_t_15); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 654, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_v_message = __pyx_t_13;
@@ -114093,7 +114184,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     }
     __pyx_L7:;
 
-    /* "src/lxml/parser.pxi":652
+    /* "src/lxml/parser.pxi":655
  *         else:
  *             message = f"Error reading '{filename}'"
  *         raise IOError, message             # <<<<<<<<<<<<<<
@@ -114101,9 +114192,9 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  *         raise error_log._buildParseException(
  */
     __Pyx_Raise(__pyx_builtin_IOError, __pyx_v_message, 0, 0);
-    __PYX_ERR(2, 652, __pyx_L1_error)
+    __PYX_ERR(2, 655, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":638
+    /* "src/lxml/parser.pxi":641
  * cdef int _raiseParseError(xmlparser.xmlParserCtxt* ctxt, filename,
  *                           _ErrorLog error_log) except -1:
  *     if filename is not None and \             # <<<<<<<<<<<<<<
@@ -114112,41 +114203,41 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  */
   }
 
-  /* "src/lxml/parser.pxi":653
+  /* "src/lxml/parser.pxi":656
  *             message = f"Error reading '{filename}'"
  *         raise IOError, message
  *     elif error_log:             # <<<<<<<<<<<<<<
  *         raise error_log._buildParseException(
  *             XMLSyntaxError, u"Document is not well formed")
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_error_log)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(2, 653, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_error_log)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(2, 656, __pyx_L1_error)
   if (unlikely(__pyx_t_3)) {
 
-    /* "src/lxml/parser.pxi":655
+    /* "src/lxml/parser.pxi":658
  *     elif error_log:
  *         raise error_log._buildParseException(
  *             XMLSyntaxError, u"Document is not well formed")             # <<<<<<<<<<<<<<
  *     elif ctxt.lastError.message is not NULL:
  *         message = ctxt.lastError.message.strip()
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 655, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 658, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
 
-    /* "src/lxml/parser.pxi":654
+    /* "src/lxml/parser.pxi":657
  *         raise IOError, message
  *     elif error_log:
  *         raise error_log._buildParseException(             # <<<<<<<<<<<<<<
  *             XMLSyntaxError, u"Document is not well formed")
  *     elif ctxt.lastError.message is not NULL:
  */
-    __pyx_t_6 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildParseException(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_error_log), __pyx_t_13, __pyx_kp_u_Document_is_not_well_formed); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 654, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildParseException(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_error_log), __pyx_t_13, __pyx_kp_u_Document_is_not_well_formed); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 657, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __PYX_ERR(2, 654, __pyx_L1_error)
+    __PYX_ERR(2, 657, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":653
+    /* "src/lxml/parser.pxi":656
  *             message = f"Error reading '{filename}'"
  *         raise IOError, message
  *     elif error_log:             # <<<<<<<<<<<<<<
@@ -114155,7 +114246,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  */
   }
 
-  /* "src/lxml/parser.pxi":656
+  /* "src/lxml/parser.pxi":659
  *         raise error_log._buildParseException(
  *             XMLSyntaxError, u"Document is not well formed")
  *     elif ctxt.lastError.message is not NULL:             # <<<<<<<<<<<<<<
@@ -114165,16 +114256,16 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
   __pyx_t_3 = ((__pyx_v_ctxt->lastError.message != NULL) != 0);
   if (likely(__pyx_t_3)) {
 
-    /* "src/lxml/parser.pxi":657
+    /* "src/lxml/parser.pxi":660
  *             XMLSyntaxError, u"Document is not well formed")
  *     elif ctxt.lastError.message is not NULL:
  *         message = ctxt.lastError.message.strip()             # <<<<<<<<<<<<<<
  *         code = ctxt.lastError.code
  *         line = ctxt.lastError.line
  */
-    __pyx_t_13 = __Pyx_PyBytes_FromString(__pyx_v_ctxt->lastError.message); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 657, __pyx_L1_error)
+    __pyx_t_13 = __Pyx_PyBytes_FromString(__pyx_v_ctxt->lastError.message); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 660, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
-    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_strip); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 657, __pyx_L1_error)
+    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_strip); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 660, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_12);
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
     __pyx_t_13 = NULL;
@@ -114189,13 +114280,13 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     }
     __pyx_t_6 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_12);
     __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 657, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 660, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
     __pyx_v_message = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "src/lxml/parser.pxi":658
+    /* "src/lxml/parser.pxi":661
  *     elif ctxt.lastError.message is not NULL:
  *         message = ctxt.lastError.message.strip()
  *         code = ctxt.lastError.code             # <<<<<<<<<<<<<<
@@ -114205,7 +114296,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_11 = __pyx_v_ctxt->lastError.code;
     __pyx_v_code = __pyx_t_11;
 
-    /* "src/lxml/parser.pxi":659
+    /* "src/lxml/parser.pxi":662
  *         message = ctxt.lastError.message.strip()
  *         code = ctxt.lastError.code
  *         line = ctxt.lastError.line             # <<<<<<<<<<<<<<
@@ -114215,7 +114306,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_11 = __pyx_v_ctxt->lastError.line;
     __pyx_v_line = __pyx_t_11;
 
-    /* "src/lxml/parser.pxi":660
+    /* "src/lxml/parser.pxi":663
  *         code = ctxt.lastError.code
  *         line = ctxt.lastError.line
  *         column = ctxt.lastError.int2             # <<<<<<<<<<<<<<
@@ -114225,7 +114316,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_11 = __pyx_v_ctxt->lastError.int2;
     __pyx_v_column = __pyx_t_11;
 
-    /* "src/lxml/parser.pxi":661
+    /* "src/lxml/parser.pxi":664
  *         line = ctxt.lastError.line
  *         column = ctxt.lastError.int2
  *         if ctxt.lastError.line > 0:             # <<<<<<<<<<<<<<
@@ -114235,14 +114326,14 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_3 = ((__pyx_v_ctxt->lastError.line > 0) != 0);
     if (__pyx_t_3) {
 
-      /* "src/lxml/parser.pxi":662
+      /* "src/lxml/parser.pxi":665
  *         column = ctxt.lastError.int2
  *         if ctxt.lastError.line > 0:
  *             message = f"line {line}: {message}"             # <<<<<<<<<<<<<<
  *         raise XMLSyntaxError(message, code, line, column, filename)
  *     else:
  */
-      __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 662, __pyx_L1_error)
+      __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 665, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_5 = 0;
       __pyx_t_15 = 127;
@@ -114250,7 +114341,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       __pyx_t_5 += 5;
       __Pyx_GIVEREF(__pyx_kp_u_line_3);
       PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_line_3);
-      __pyx_t_12 = __Pyx_PyUnicode_From_int(__pyx_v_line, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 662, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyUnicode_From_int(__pyx_v_line, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 665, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
       __Pyx_GIVEREF(__pyx_t_12);
@@ -114260,20 +114351,20 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       __pyx_t_5 += 2;
       __Pyx_GIVEREF(__pyx_kp_u__18);
       PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u__18);
-      __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_v_message, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 662, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_v_message, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 665, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_15;
       __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
       __Pyx_GIVEREF(__pyx_t_12);
       PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_12);
       __pyx_t_12 = 0;
-      __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, __pyx_t_5, __pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 662, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, __pyx_t_5, __pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 665, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF_SET(__pyx_v_message, __pyx_t_12);
       __pyx_t_12 = 0;
 
-      /* "src/lxml/parser.pxi":661
+      /* "src/lxml/parser.pxi":664
  *         line = ctxt.lastError.line
  *         column = ctxt.lastError.int2
  *         if ctxt.lastError.line > 0:             # <<<<<<<<<<<<<<
@@ -114282,20 +114373,20 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  */
     }
 
-    /* "src/lxml/parser.pxi":663
+    /* "src/lxml/parser.pxi":666
  *         if ctxt.lastError.line > 0:
  *             message = f"line {line}: {message}"
  *         raise XMLSyntaxError(message, code, line, column, filename)             # <<<<<<<<<<<<<<
  *     else:
  *         raise XMLSyntaxError(None, xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0,
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 663, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 666, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_code); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 663, __pyx_L1_error)
+    __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_code); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 666, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
-    __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 663, __pyx_L1_error)
+    __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 666, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_14);
-    __pyx_t_16 = __Pyx_PyInt_From_int(__pyx_v_column); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 663, __pyx_L1_error)
+    __pyx_t_16 = __Pyx_PyInt_From_int(__pyx_v_column); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 666, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_16);
     __pyx_t_17 = NULL;
     __pyx_t_11 = 0;
@@ -114312,7 +114403,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     #if CYTHON_FAST_PYCALL
     if (PyFunction_Check(__pyx_t_6)) {
       PyObject *__pyx_temp[6] = {__pyx_t_17, __pyx_v_message, __pyx_t_13, __pyx_t_14, __pyx_t_16, __pyx_v_filename};
-      __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 5+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 663, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 5+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 666, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
@@ -114323,7 +114414,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     #if CYTHON_FAST_PYCCALL
     if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
       PyObject *__pyx_temp[6] = {__pyx_t_17, __pyx_v_message, __pyx_t_13, __pyx_t_14, __pyx_t_16, __pyx_v_filename};
-      __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 5+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 663, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 5+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 666, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
@@ -114332,7 +114423,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     } else
     #endif
     {
-      __pyx_t_18 = PyTuple_New(5+__pyx_t_11); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 663, __pyx_L1_error)
+      __pyx_t_18 = PyTuple_New(5+__pyx_t_11); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 666, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_18);
       if (__pyx_t_17) {
         __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_17); __pyx_t_17 = NULL;
@@ -114352,16 +114443,16 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       __pyx_t_13 = 0;
       __pyx_t_14 = 0;
       __pyx_t_16 = 0;
-      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_18, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 663, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_18, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 666, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_Raise(__pyx_t_12, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-    __PYX_ERR(2, 663, __pyx_L1_error)
+    __PYX_ERR(2, 666, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":656
+    /* "src/lxml/parser.pxi":659
  *         raise error_log._buildParseException(
  *             XMLSyntaxError, u"Document is not well formed")
  *     elif ctxt.lastError.message is not NULL:             # <<<<<<<<<<<<<<
@@ -114370,7 +114461,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  */
   }
 
-  /* "src/lxml/parser.pxi":665
+  /* "src/lxml/parser.pxi":668
  *         raise XMLSyntaxError(message, code, line, column, filename)
  *     else:
  *         raise XMLSyntaxError(None, xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0,             # <<<<<<<<<<<<<<
@@ -114378,12 +114469,12 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  * 
  */
   /*else*/ {
-    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 665, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 668, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_18 = __Pyx_PyInt_From_xmlParserErrors(XML_ERR_INTERNAL_ERROR); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 665, __pyx_L1_error)
+    __pyx_t_18 = __Pyx_PyInt_From_xmlParserErrors(XML_ERR_INTERNAL_ERROR); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 668, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_18);
 
-    /* "src/lxml/parser.pxi":666
+    /* "src/lxml/parser.pxi":669
  *     else:
  *         raise XMLSyntaxError(None, xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0,
  *                              filename)             # <<<<<<<<<<<<<<
@@ -114405,7 +114496,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     #if CYTHON_FAST_PYCALL
     if (PyFunction_Check(__pyx_t_6)) {
       PyObject *__pyx_temp[6] = {__pyx_t_16, Py_None, __pyx_t_18, __pyx_int_0, __pyx_int_0, __pyx_v_filename};
-      __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 5+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 665, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 5+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 668, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
@@ -114414,14 +114505,14 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     #if CYTHON_FAST_PYCCALL
     if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
       PyObject *__pyx_temp[6] = {__pyx_t_16, Py_None, __pyx_t_18, __pyx_int_0, __pyx_int_0, __pyx_v_filename};
-      __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 5+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 665, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_11, 5+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 668, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
     } else
     #endif
     {
-      __pyx_t_14 = PyTuple_New(5+__pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 665, __pyx_L1_error)
+      __pyx_t_14 = PyTuple_New(5+__pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 668, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_14);
       if (__pyx_t_16) {
         __Pyx_GIVEREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_16); __pyx_t_16 = NULL;
@@ -114441,17 +114532,17 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       __Pyx_GIVEREF(__pyx_v_filename);
       PyTuple_SET_ITEM(__pyx_t_14, 4+__pyx_t_11, __pyx_v_filename);
       __pyx_t_18 = 0;
-      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_14, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 665, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_14, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 668, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_Raise(__pyx_t_12, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-    __PYX_ERR(2, 665, __pyx_L1_error)
+    __PYX_ERR(2, 668, __pyx_L1_error)
   }
 
-  /* "src/lxml/parser.pxi":636
+  /* "src/lxml/parser.pxi":639
  *             _forwardParserError(<xmlparser.xmlParserCtxt*>c_context, error)
  * 
  * cdef int _raiseParseError(xmlparser.xmlParserCtxt* ctxt, filename,             # <<<<<<<<<<<<<<
@@ -114476,7 +114567,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":668
+/* "src/lxml/parser.pxi":671
  *                              filename)
  * 
  * cdef xmlDoc* _handleParseResult(_ParserContext context,             # <<<<<<<<<<<<<<
@@ -114505,7 +114596,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_handleParseResult", 0);
 
-  /* "src/lxml/parser.pxi":673
+  /* "src/lxml/parser.pxi":676
  *                                 bint recover, bint free_doc) except NULL:
  *     cdef bint well_formed
  *     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -114515,7 +114606,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_t_1 = ((__pyx_v_result != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":674
+    /* "src/lxml/parser.pxi":677
  *     cdef bint well_formed
  *     if result is not NULL:
  *         __GLOBAL_PARSER_CONTEXT.initDocDict(result)             # <<<<<<<<<<<<<<
@@ -114524,7 +114615,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_result);
 
-    /* "src/lxml/parser.pxi":673
+    /* "src/lxml/parser.pxi":676
  *                                 bint recover, bint free_doc) except NULL:
  *     cdef bint well_formed
  *     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -114533,7 +114624,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":676
+  /* "src/lxml/parser.pxi":679
  *         __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  * 
  *     if c_ctxt.myDoc is not NULL:             # <<<<<<<<<<<<<<
@@ -114543,7 +114634,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_t_1 = ((__pyx_v_c_ctxt->myDoc != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":677
+    /* "src/lxml/parser.pxi":680
  * 
  *     if c_ctxt.myDoc is not NULL:
  *         if c_ctxt.myDoc is not result:             # <<<<<<<<<<<<<<
@@ -114553,7 +114644,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_1 = ((__pyx_v_c_ctxt->myDoc != __pyx_v_result) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":678
+      /* "src/lxml/parser.pxi":681
  *     if c_ctxt.myDoc is not NULL:
  *         if c_ctxt.myDoc is not result:
  *             __GLOBAL_PARSER_CONTEXT.initDocDict(c_ctxt.myDoc)             # <<<<<<<<<<<<<<
@@ -114562,7 +114653,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_c_ctxt->myDoc);
 
-      /* "src/lxml/parser.pxi":679
+      /* "src/lxml/parser.pxi":682
  *         if c_ctxt.myDoc is not result:
  *             __GLOBAL_PARSER_CONTEXT.initDocDict(c_ctxt.myDoc)
  *             tree.xmlFreeDoc(c_ctxt.myDoc)             # <<<<<<<<<<<<<<
@@ -114571,7 +114662,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       xmlFreeDoc(__pyx_v_c_ctxt->myDoc);
 
-      /* "src/lxml/parser.pxi":677
+      /* "src/lxml/parser.pxi":680
  * 
  *     if c_ctxt.myDoc is not NULL:
  *         if c_ctxt.myDoc is not result:             # <<<<<<<<<<<<<<
@@ -114580,7 +114671,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     }
 
-    /* "src/lxml/parser.pxi":680
+    /* "src/lxml/parser.pxi":683
  *             __GLOBAL_PARSER_CONTEXT.initDocDict(c_ctxt.myDoc)
  *             tree.xmlFreeDoc(c_ctxt.myDoc)
  *         c_ctxt.myDoc = NULL             # <<<<<<<<<<<<<<
@@ -114589,7 +114680,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     __pyx_v_c_ctxt->myDoc = NULL;
 
-    /* "src/lxml/parser.pxi":676
+    /* "src/lxml/parser.pxi":679
  *         __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  * 
  *     if c_ctxt.myDoc is not NULL:             # <<<<<<<<<<<<<<
@@ -114598,7 +114689,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":682
+  /* "src/lxml/parser.pxi":685
  *         c_ctxt.myDoc = NULL
  * 
  *     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -114608,7 +114699,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_t_1 = ((__pyx_v_result != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":683
+    /* "src/lxml/parser.pxi":686
  * 
  *     if result is not NULL:
  *         if (context._validator is not None and             # <<<<<<<<<<<<<<
@@ -114623,7 +114714,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L8_bool_binop_done;
     }
 
-    /* "src/lxml/parser.pxi":684
+    /* "src/lxml/parser.pxi":687
  *     if result is not NULL:
  *         if (context._validator is not None and
  *                 not context._validator.isvalid()):             # <<<<<<<<<<<<<<
@@ -114634,7 +114725,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_1 = __pyx_t_3;
     __pyx_L8_bool_binop_done:;
 
-    /* "src/lxml/parser.pxi":683
+    /* "src/lxml/parser.pxi":686
  * 
  *     if result is not NULL:
  *         if (context._validator is not None and             # <<<<<<<<<<<<<<
@@ -114643,7 +114734,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":685
+      /* "src/lxml/parser.pxi":688
  *         if (context._validator is not None and
  *                 not context._validator.isvalid()):
  *             well_formed = 0  # actually not 'valid', but anyway ...             # <<<<<<<<<<<<<<
@@ -114652,7 +114743,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_v_well_formed = 0;
 
-      /* "src/lxml/parser.pxi":683
+      /* "src/lxml/parser.pxi":686
  * 
  *     if result is not NULL:
  *         if (context._validator is not None and             # <<<<<<<<<<<<<<
@@ -114662,7 +114753,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L7;
     }
 
-    /* "src/lxml/parser.pxi":686
+    /* "src/lxml/parser.pxi":689
  *                 not context._validator.isvalid()):
  *             well_formed = 0  # actually not 'valid', but anyway ...
  *         elif (not c_ctxt.wellFormed and not c_ctxt.html and             # <<<<<<<<<<<<<<
@@ -114682,7 +114773,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L10_bool_binop_done;
     }
 
-    /* "src/lxml/parser.pxi":687
+    /* "src/lxml/parser.pxi":690
  *             well_formed = 0  # actually not 'valid', but anyway ...
  *         elif (not c_ctxt.wellFormed and not c_ctxt.html and
  *                 c_ctxt.charset == tree.XML_CHAR_ENCODING_8859_1 and             # <<<<<<<<<<<<<<
@@ -114696,39 +114787,39 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L10_bool_binop_done;
     }
 
-    /* "src/lxml/parser.pxi":688
+    /* "src/lxml/parser.pxi":691
  *         elif (not c_ctxt.wellFormed and not c_ctxt.html and
  *                 c_ctxt.charset == tree.XML_CHAR_ENCODING_8859_1 and
  *                 [1 for error in context._error_log             # <<<<<<<<<<<<<<
  *                  if error.type == ErrorTypes.ERR_INVALID_CHAR]):
  *             # An encoding error occurred and libxml2 switched from UTF-8
  */
-    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 688, __pyx_L1_error)
+    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 691, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     if (likely(PyList_CheckExact(((PyObject *)__pyx_v_context->_error_log))) || PyTuple_CheckExact(((PyObject *)__pyx_v_context->_error_log))) {
       __pyx_t_5 = ((PyObject *)__pyx_v_context->_error_log); __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_context->_error_log)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 688, __pyx_L1_error)
+      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_context->_error_log)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 691, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 688, __pyx_L1_error)
+      __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 691, __pyx_L1_error)
     }
     for (;;) {
       if (likely(!__pyx_t_7)) {
         if (likely(PyList_CheckExact(__pyx_t_5))) {
           if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_8 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(2, 688, __pyx_L1_error)
+          __pyx_t_8 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(2, 691, __pyx_L1_error)
           #else
-          __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 688, __pyx_L1_error)
+          __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 691, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_8);
           #endif
         } else {
           if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(2, 688, __pyx_L1_error)
+          __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(2, 691, __pyx_L1_error)
           #else
-          __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 688, __pyx_L1_error)
+          __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 691, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_8);
           #endif
         }
@@ -114738,7 +114829,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(2, 688, __pyx_L1_error)
+            else __PYX_ERR(2, 691, __pyx_L1_error)
           }
           break;
         }
@@ -114747,30 +114838,30 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       __Pyx_XDECREF_SET(__pyx_v_error, __pyx_t_8);
       __pyx_t_8 = 0;
 
-      /* "src/lxml/parser.pxi":689
+      /* "src/lxml/parser.pxi":692
  *                 c_ctxt.charset == tree.XML_CHAR_ENCODING_8859_1 and
  *                 [1 for error in context._error_log
  *                  if error.type == ErrorTypes.ERR_INVALID_CHAR]):             # <<<<<<<<<<<<<<
  *             # An encoding error occurred and libxml2 switched from UTF-8
  *             # input to (undecoded) Latin-1, at some arbitrary point in the
  */
-      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 689, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 692, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 689, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 692, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ERR_INVALID_CHAR); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 689, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ERR_INVALID_CHAR); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 692, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_9 = PyObject_RichCompare(__pyx_t_8, __pyx_t_10, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 689, __pyx_L1_error)
+      __pyx_t_9 = PyObject_RichCompare(__pyx_t_8, __pyx_t_10, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 692, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(2, 689, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(2, 692, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       if (__pyx_t_3) {
-        if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_int_1))) __PYX_ERR(2, 688, __pyx_L1_error)
+        if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_int_1))) __PYX_ERR(2, 691, __pyx_L1_error)
       }
 
-      /* "src/lxml/parser.pxi":688
+      /* "src/lxml/parser.pxi":691
  *         elif (not c_ctxt.wellFormed and not c_ctxt.html and
  *                 c_ctxt.charset == tree.XML_CHAR_ENCODING_8859_1 and
  *                 [1 for error in context._error_log             # <<<<<<<<<<<<<<
@@ -114784,7 +114875,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_1 = __pyx_t_3;
     __pyx_L10_bool_binop_done:;
 
-    /* "src/lxml/parser.pxi":686
+    /* "src/lxml/parser.pxi":689
  *                 not context._validator.isvalid()):
  *             well_formed = 0  # actually not 'valid', but anyway ...
  *         elif (not c_ctxt.wellFormed and not c_ctxt.html and             # <<<<<<<<<<<<<<
@@ -114793,7 +114884,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":694
+      /* "src/lxml/parser.pxi":697
  *             # document.  Better raise an error than allowing for a broken
  *             # tree with mixed encodings.
  *             well_formed = 0             # <<<<<<<<<<<<<<
@@ -114802,7 +114893,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_v_well_formed = 0;
 
-      /* "src/lxml/parser.pxi":686
+      /* "src/lxml/parser.pxi":689
  *                 not context._validator.isvalid()):
  *             well_formed = 0  # actually not 'valid', but anyway ...
  *         elif (not c_ctxt.wellFormed and not c_ctxt.html and             # <<<<<<<<<<<<<<
@@ -114812,7 +114903,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L7;
     }
 
-    /* "src/lxml/parser.pxi":695
+    /* "src/lxml/parser.pxi":698
  *             # tree with mixed encodings.
  *             well_formed = 0
  *         elif recover or (c_ctxt.wellFormed and             # <<<<<<<<<<<<<<
@@ -114832,7 +114923,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L17_bool_binop_done;
     }
 
-    /* "src/lxml/parser.pxi":696
+    /* "src/lxml/parser.pxi":699
  *             well_formed = 0
  *         elif recover or (c_ctxt.wellFormed and
  *                          c_ctxt.lastError.level < xmlerror.XML_ERR_ERROR):             # <<<<<<<<<<<<<<
@@ -114843,7 +114934,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_1 = __pyx_t_3;
     __pyx_L17_bool_binop_done:;
 
-    /* "src/lxml/parser.pxi":695
+    /* "src/lxml/parser.pxi":698
  *             # tree with mixed encodings.
  *             well_formed = 0
  *         elif recover or (c_ctxt.wellFormed and             # <<<<<<<<<<<<<<
@@ -114852,7 +114943,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":697
+      /* "src/lxml/parser.pxi":700
  *         elif recover or (c_ctxt.wellFormed and
  *                          c_ctxt.lastError.level < xmlerror.XML_ERR_ERROR):
  *             well_formed = 1             # <<<<<<<<<<<<<<
@@ -114861,7 +114952,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_v_well_formed = 1;
 
-      /* "src/lxml/parser.pxi":695
+      /* "src/lxml/parser.pxi":698
  *             # tree with mixed encodings.
  *             well_formed = 0
  *         elif recover or (c_ctxt.wellFormed and             # <<<<<<<<<<<<<<
@@ -114871,7 +114962,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L7;
     }
 
-    /* "src/lxml/parser.pxi":698
+    /* "src/lxml/parser.pxi":701
  *                          c_ctxt.lastError.level < xmlerror.XML_ERR_ERROR):
  *             well_formed = 1
  *         elif not c_ctxt.replaceEntities and not c_ctxt.validate \             # <<<<<<<<<<<<<<
@@ -114885,7 +114976,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L20_bool_binop_done;
     }
 
-    /* "src/lxml/parser.pxi":699
+    /* "src/lxml/parser.pxi":702
  *             well_formed = 1
  *         elif not c_ctxt.replaceEntities and not c_ctxt.validate \
  *                  and context is not None:             # <<<<<<<<<<<<<<
@@ -114903,7 +114994,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_1 = __pyx_t_2;
     __pyx_L20_bool_binop_done:;
 
-    /* "src/lxml/parser.pxi":698
+    /* "src/lxml/parser.pxi":701
  *                          c_ctxt.lastError.level < xmlerror.XML_ERR_ERROR):
  *             well_formed = 1
  *         elif not c_ctxt.replaceEntities and not c_ctxt.validate \             # <<<<<<<<<<<<<<
@@ -114912,14 +115003,14 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":701
+      /* "src/lxml/parser.pxi":704
  *                  and context is not None:
  *             # in this mode, we ignore errors about undefined entities
  *             for error in context._error_log.filter_from_errors():             # <<<<<<<<<<<<<<
  *                 if error.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                        error.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context->_error_log), __pyx_n_s_filter_from_errors); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 701, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context->_error_log), __pyx_n_s_filter_from_errors); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 704, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_9 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -114933,16 +115024,16 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       }
       __pyx_t_4 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
       __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
-      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 701, __pyx_L1_error)
+      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 704, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
         __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
         __pyx_t_7 = NULL;
       } else {
-        __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 701, __pyx_L1_error)
+        __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 704, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 701, __pyx_L1_error)
+        __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 704, __pyx_L1_error)
       }
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       for (;;) {
@@ -114950,17 +115041,17 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
           if (likely(PyList_CheckExact(__pyx_t_5))) {
             if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_4 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(2, 701, __pyx_L1_error)
+            __pyx_t_4 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(2, 704, __pyx_L1_error)
             #else
-            __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 701, __pyx_L1_error)
+            __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 704, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_4);
             #endif
           } else {
             if (__pyx_t_6 >= 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_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(2, 701, __pyx_L1_error)
+            __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(2, 704, __pyx_L1_error)
             #else
-            __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 701, __pyx_L1_error)
+            __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 704, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_4);
             #endif
           }
@@ -114970,7 +115061,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
               if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else __PYX_ERR(2, 701, __pyx_L1_error)
+              else __PYX_ERR(2, 704, __pyx_L1_error)
             }
             break;
           }
@@ -114979,24 +115070,24 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
         __Pyx_XDECREF_SET(__pyx_v_error, __pyx_t_4);
         __pyx_t_4 = 0;
 
-        /* "src/lxml/parser.pxi":702
+        /* "src/lxml/parser.pxi":705
  *             # in this mode, we ignore errors about undefined entities
  *             for error in context._error_log.filter_from_errors():
  *                 if error.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \             # <<<<<<<<<<<<<<
  *                        error.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  *                     well_formed = 0
  */
-        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 702, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 705, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
-        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 702, __pyx_L1_error)
+        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 705, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
-        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_WAR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 702, __pyx_L1_error)
+        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_WAR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 705, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-        __pyx_t_9 = PyObject_RichCompare(__pyx_t_4, __pyx_t_10, Py_NE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 702, __pyx_L1_error)
+        __pyx_t_9 = PyObject_RichCompare(__pyx_t_4, __pyx_t_10, Py_NE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 705, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 702, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 705, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         if (__pyx_t_2) {
         } else {
@@ -115004,29 +115095,29 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
           goto __pyx_L26_bool_binop_done;
         }
 
-        /* "src/lxml/parser.pxi":703
+        /* "src/lxml/parser.pxi":706
  *             for error in context._error_log.filter_from_errors():
  *                 if error.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                        error.type != ErrorTypes.ERR_UNDECLARED_ENTITY:             # <<<<<<<<<<<<<<
  *                     well_formed = 0
  *                     break
  */
-        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_type); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 703, __pyx_L1_error)
+        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_type); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 706, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 703, __pyx_L1_error)
+        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 706, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ERR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 703, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ERR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 706, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-        __pyx_t_10 = PyObject_RichCompare(__pyx_t_9, __pyx_t_4, Py_NE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 703, __pyx_L1_error)
+        __pyx_t_10 = PyObject_RichCompare(__pyx_t_9, __pyx_t_4, Py_NE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 706, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 703, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 706, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_1 = __pyx_t_2;
         __pyx_L26_bool_binop_done:;
 
-        /* "src/lxml/parser.pxi":702
+        /* "src/lxml/parser.pxi":705
  *             # in this mode, we ignore errors about undefined entities
  *             for error in context._error_log.filter_from_errors():
  *                 if error.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \             # <<<<<<<<<<<<<<
@@ -115035,7 +115126,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
         if (__pyx_t_1) {
 
-          /* "src/lxml/parser.pxi":704
+          /* "src/lxml/parser.pxi":707
  *                 if error.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                        error.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  *                     well_formed = 0             # <<<<<<<<<<<<<<
@@ -115044,7 +115135,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
           __pyx_v_well_formed = 0;
 
-          /* "src/lxml/parser.pxi":705
+          /* "src/lxml/parser.pxi":708
  *                        error.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  *                     well_formed = 0
  *                     break             # <<<<<<<<<<<<<<
@@ -115053,7 +115144,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
           goto __pyx_L24_break;
 
-          /* "src/lxml/parser.pxi":702
+          /* "src/lxml/parser.pxi":705
  *             # in this mode, we ignore errors about undefined entities
  *             for error in context._error_log.filter_from_errors():
  *                 if error.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \             # <<<<<<<<<<<<<<
@@ -115062,7 +115153,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
         }
 
-        /* "src/lxml/parser.pxi":701
+        /* "src/lxml/parser.pxi":704
  *                  and context is not None:
  *             # in this mode, we ignore errors about undefined entities
  *             for error in context._error_log.filter_from_errors():             # <<<<<<<<<<<<<<
@@ -115072,7 +115163,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       }
       /*else*/ {
 
-        /* "src/lxml/parser.pxi":707
+        /* "src/lxml/parser.pxi":710
  *                     break
  *             else:
  *                 well_formed = 1             # <<<<<<<<<<<<<<
@@ -115082,7 +115173,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
         __pyx_v_well_formed = 1;
       }
 
-      /* "src/lxml/parser.pxi":701
+      /* "src/lxml/parser.pxi":704
  *                  and context is not None:
  *             # in this mode, we ignore errors about undefined entities
  *             for error in context._error_log.filter_from_errors():             # <<<<<<<<<<<<<<
@@ -115092,7 +115183,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       __pyx_L24_break:;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "src/lxml/parser.pxi":698
+      /* "src/lxml/parser.pxi":701
  *                          c_ctxt.lastError.level < xmlerror.XML_ERR_ERROR):
  *             well_formed = 1
  *         elif not c_ctxt.replaceEntities and not c_ctxt.validate \             # <<<<<<<<<<<<<<
@@ -115102,7 +115193,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L7;
     }
 
-    /* "src/lxml/parser.pxi":709
+    /* "src/lxml/parser.pxi":712
  *                 well_formed = 1
  *         else:
  *             well_formed = 0             # <<<<<<<<<<<<<<
@@ -115114,7 +115205,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     }
     __pyx_L7:;
 
-    /* "src/lxml/parser.pxi":711
+    /* "src/lxml/parser.pxi":714
  *             well_formed = 0
  * 
  *         if not well_formed:             # <<<<<<<<<<<<<<
@@ -115124,7 +115215,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_1 = ((!(__pyx_v_well_formed != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":712
+      /* "src/lxml/parser.pxi":715
  * 
  *         if not well_formed:
  *             if free_doc:             # <<<<<<<<<<<<<<
@@ -115134,7 +115225,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       __pyx_t_1 = (__pyx_v_free_doc != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/parser.pxi":713
+        /* "src/lxml/parser.pxi":716
  *         if not well_formed:
  *             if free_doc:
  *                 tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -115143,7 +115234,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
         xmlFreeDoc(__pyx_v_result);
 
-        /* "src/lxml/parser.pxi":712
+        /* "src/lxml/parser.pxi":715
  * 
  *         if not well_formed:
  *             if free_doc:             # <<<<<<<<<<<<<<
@@ -115152,7 +115243,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       }
 
-      /* "src/lxml/parser.pxi":714
+      /* "src/lxml/parser.pxi":717
  *             if free_doc:
  *                 tree.xmlFreeDoc(result)
  *             result = NULL             # <<<<<<<<<<<<<<
@@ -115161,7 +115252,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_v_result = NULL;
 
-      /* "src/lxml/parser.pxi":711
+      /* "src/lxml/parser.pxi":714
  *             well_formed = 0
  * 
  *         if not well_formed:             # <<<<<<<<<<<<<<
@@ -115170,7 +115261,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     }
 
-    /* "src/lxml/parser.pxi":682
+    /* "src/lxml/parser.pxi":685
  *         c_ctxt.myDoc = NULL
  * 
  *     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -115179,7 +115270,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":716
+  /* "src/lxml/parser.pxi":719
  *             result = NULL
  * 
  *     if context is not None and context._has_raised():             # <<<<<<<<<<<<<<
@@ -115191,15 +115282,15 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   if (__pyx_t_3) {
   } else {
     __pyx_t_1 = __pyx_t_3;
-    goto __pyx_L32_bool_binop_done;
+    goto __pyx_L33_bool_binop_done;
   }
-  __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._has_raised(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 716, __pyx_L1_error)
+  __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._has_raised(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 719, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_3 != 0);
   __pyx_t_1 = __pyx_t_2;
-  __pyx_L32_bool_binop_done:;
+  __pyx_L33_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":717
+    /* "src/lxml/parser.pxi":720
  * 
  *     if context is not None and context._has_raised():
  *         if result is not NULL:             # <<<<<<<<<<<<<<
@@ -115209,7 +115300,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_1 = ((__pyx_v_result != NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":718
+      /* "src/lxml/parser.pxi":721
  *     if context is not None and context._has_raised():
  *         if result is not NULL:
  *             if free_doc:             # <<<<<<<<<<<<<<
@@ -115219,7 +115310,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       __pyx_t_1 = (__pyx_v_free_doc != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/parser.pxi":719
+        /* "src/lxml/parser.pxi":722
  *         if result is not NULL:
  *             if free_doc:
  *                 tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -115228,7 +115319,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
         xmlFreeDoc(__pyx_v_result);
 
-        /* "src/lxml/parser.pxi":718
+        /* "src/lxml/parser.pxi":721
  *     if context is not None and context._has_raised():
  *         if result is not NULL:
  *             if free_doc:             # <<<<<<<<<<<<<<
@@ -115237,7 +115328,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       }
 
-      /* "src/lxml/parser.pxi":720
+      /* "src/lxml/parser.pxi":723
  *             if free_doc:
  *                 tree.xmlFreeDoc(result)
  *             result = NULL             # <<<<<<<<<<<<<<
@@ -115246,7 +115337,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_v_result = NULL;
 
-      /* "src/lxml/parser.pxi":717
+      /* "src/lxml/parser.pxi":720
  * 
  *     if context is not None and context._has_raised():
  *         if result is not NULL:             # <<<<<<<<<<<<<<
@@ -115255,16 +115346,16 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     }
 
-    /* "src/lxml/parser.pxi":721
+    /* "src/lxml/parser.pxi":724
  *                 tree.xmlFreeDoc(result)
  *             result = NULL
  *         context._raise_if_stored()             # <<<<<<<<<<<<<<
  * 
  *     if result is NULL:
  */
-    __pyx_t_11 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._raise_if_stored(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 721, __pyx_L1_error)
+    __pyx_t_11 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._raise_if_stored(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 724, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":716
+    /* "src/lxml/parser.pxi":719
  *             result = NULL
  * 
  *     if context is not None and context._has_raised():             # <<<<<<<<<<<<<<
@@ -115273,7 +115364,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":723
+  /* "src/lxml/parser.pxi":726
  *         context._raise_if_stored()
  * 
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -115283,7 +115374,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_t_1 = ((__pyx_v_result == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":724
+    /* "src/lxml/parser.pxi":727
  * 
  *     if result is NULL:
  *         if context is not None:             # <<<<<<<<<<<<<<
@@ -115294,7 +115385,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":725
+      /* "src/lxml/parser.pxi":728
  *     if result is NULL:
  *         if context is not None:
  *             _raiseParseError(c_ctxt, filename, context._error_log)             # <<<<<<<<<<<<<<
@@ -115303,20 +115394,20 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_t_5 = ((PyObject *)__pyx_v_context->_error_log);
       __Pyx_INCREF(__pyx_t_5);
-      __pyx_t_11 = __pyx_f_4lxml_5etree__raiseParseError(__pyx_v_c_ctxt, __pyx_v_filename, ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_5)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 725, __pyx_L1_error)
+      __pyx_t_11 = __pyx_f_4lxml_5etree__raiseParseError(__pyx_v_c_ctxt, __pyx_v_filename, ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_5)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 728, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "src/lxml/parser.pxi":724
+      /* "src/lxml/parser.pxi":727
  * 
  *     if result is NULL:
  *         if context is not None:             # <<<<<<<<<<<<<<
  *             _raiseParseError(c_ctxt, filename, context._error_log)
  *         else:
  */
-      goto __pyx_L37;
+      goto __pyx_L38;
     }
 
-    /* "src/lxml/parser.pxi":727
+    /* "src/lxml/parser.pxi":730
  *             _raiseParseError(c_ctxt, filename, context._error_log)
  *         else:
  *             _raiseParseError(c_ctxt, filename, None)             # <<<<<<<<<<<<<<
@@ -115324,21 +115415,21 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  *         if result.URL is NULL and filename is not None:
  */
     /*else*/ {
-      __pyx_t_11 = __pyx_f_4lxml_5etree__raiseParseError(__pyx_v_c_ctxt, __pyx_v_filename, ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 727, __pyx_L1_error)
+      __pyx_t_11 = __pyx_f_4lxml_5etree__raiseParseError(__pyx_v_c_ctxt, __pyx_v_filename, ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 730, __pyx_L1_error)
     }
-    __pyx_L37:;
+    __pyx_L38:;
 
-    /* "src/lxml/parser.pxi":723
+    /* "src/lxml/parser.pxi":726
  *         context._raise_if_stored()
  * 
  *     if result is NULL:             # <<<<<<<<<<<<<<
  *         if context is not None:
  *             _raiseParseError(c_ctxt, filename, context._error_log)
  */
-    goto __pyx_L36;
+    goto __pyx_L37;
   }
 
-  /* "src/lxml/parser.pxi":729
+  /* "src/lxml/parser.pxi":732
  *             _raiseParseError(c_ctxt, filename, None)
  *     else:
  *         if result.URL is NULL and filename is not None:             # <<<<<<<<<<<<<<
@@ -115350,15 +115441,15 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     if (__pyx_t_1) {
     } else {
       __pyx_t_2 = __pyx_t_1;
-      goto __pyx_L39_bool_binop_done;
+      goto __pyx_L40_bool_binop_done;
     }
     __pyx_t_1 = (__pyx_v_filename != Py_None);
     __pyx_t_3 = (__pyx_t_1 != 0);
     __pyx_t_2 = __pyx_t_3;
-    __pyx_L39_bool_binop_done:;
+    __pyx_L40_bool_binop_done:;
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":730
+      /* "src/lxml/parser.pxi":733
  *     else:
  *         if result.URL is NULL and filename is not None:
  *             result.URL = tree.xmlStrdup(_xcstr(filename))             # <<<<<<<<<<<<<<
@@ -115367,7 +115458,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_v_result->URL = xmlStrdup((const xmlChar*)PyBytes_AS_STRING(__pyx_v_filename));
 
-      /* "src/lxml/parser.pxi":729
+      /* "src/lxml/parser.pxi":732
  *             _raiseParseError(c_ctxt, filename, None)
  *     else:
  *         if result.URL is NULL and filename is not None:             # <<<<<<<<<<<<<<
@@ -115376,7 +115467,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     }
 
-    /* "src/lxml/parser.pxi":731
+    /* "src/lxml/parser.pxi":734
  *         if result.URL is NULL and filename is not None:
  *             result.URL = tree.xmlStrdup(_xcstr(filename))
  *         if result.encoding is NULL:             # <<<<<<<<<<<<<<
@@ -115386,7 +115477,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_2 = ((__pyx_v_result->encoding == NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":732
+      /* "src/lxml/parser.pxi":735
  *             result.URL = tree.xmlStrdup(_xcstr(filename))
  *         if result.encoding is NULL:
  *             result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")             # <<<<<<<<<<<<<<
@@ -115395,7 +115486,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_v_result->encoding = xmlStrdup(((unsigned char *)((unsigned char *)((char const *)"UTF-8"))));
 
-      /* "src/lxml/parser.pxi":731
+      /* "src/lxml/parser.pxi":734
  *         if result.URL is NULL and filename is not None:
  *             result.URL = tree.xmlStrdup(_xcstr(filename))
  *         if result.encoding is NULL:             # <<<<<<<<<<<<<<
@@ -115404,9 +115495,9 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     }
   }
-  __pyx_L36:;
+  __pyx_L37:;
 
-  /* "src/lxml/parser.pxi":734
+  /* "src/lxml/parser.pxi":737
  *             result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")
  * 
  *     if context._validator is not None and \             # <<<<<<<<<<<<<<
@@ -115418,10 +115509,10 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   if (__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
-    goto __pyx_L43_bool_binop_done;
+    goto __pyx_L44_bool_binop_done;
   }
 
-  /* "src/lxml/parser.pxi":735
+  /* "src/lxml/parser.pxi":738
  * 
  *     if context._validator is not None and \
  *            context._validator._add_default_attributes:             # <<<<<<<<<<<<<<
@@ -115430,9 +115521,9 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
   __pyx_t_1 = (__pyx_v_context->_validator->_add_default_attributes != 0);
   __pyx_t_2 = __pyx_t_1;
-  __pyx_L43_bool_binop_done:;
+  __pyx_L44_bool_binop_done:;
 
-  /* "src/lxml/parser.pxi":734
+  /* "src/lxml/parser.pxi":737
  *             result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")
  * 
  *     if context._validator is not None and \             # <<<<<<<<<<<<<<
@@ -115441,7 +115532,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":739
+    /* "src/lxml/parser.pxi":742
  *         # support inserting default attributes during parse-time
  *         # validation
  *         context._validator.inject_default_attributes(result)             # <<<<<<<<<<<<<<
@@ -115450,7 +115541,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
     __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_inject_default_attributes(__pyx_v_context->_validator, __pyx_v_result);
 
-    /* "src/lxml/parser.pxi":734
+    /* "src/lxml/parser.pxi":737
  *             result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")
  * 
  *     if context._validator is not None and \             # <<<<<<<<<<<<<<
@@ -115459,7 +115550,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":741
+  /* "src/lxml/parser.pxi":744
  *         context._validator.inject_default_attributes(result)
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -115469,7 +115560,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":668
+  /* "src/lxml/parser.pxi":671
  *                              filename)
  * 
  * cdef xmlDoc* _handleParseResult(_ParserContext context,             # <<<<<<<<<<<<<<
@@ -115492,7 +115583,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":743
+/* "src/lxml/parser.pxi":746
  *     return result
  * 
  * cdef int _fixHtmlDictNames(tree.xmlDict* c_dict, xmlDoc* c_doc) nogil:             # <<<<<<<<<<<<<<
@@ -115506,7 +115597,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   int __pyx_t_1;
   xmlNode *__pyx_t_2;
 
-  /* "src/lxml/parser.pxi":745
+  /* "src/lxml/parser.pxi":748
  * cdef int _fixHtmlDictNames(tree.xmlDict* c_dict, xmlDoc* c_doc) nogil:
  *     cdef xmlNode* c_node
  *     if c_doc is NULL:             # <<<<<<<<<<<<<<
@@ -115516,7 +115607,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   __pyx_t_1 = ((__pyx_v_c_doc == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":746
+    /* "src/lxml/parser.pxi":749
  *     cdef xmlNode* c_node
  *     if c_doc is NULL:
  *         return 0             # <<<<<<<<<<<<<<
@@ -115526,7 +115617,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/parser.pxi":745
+    /* "src/lxml/parser.pxi":748
  * cdef int _fixHtmlDictNames(tree.xmlDict* c_dict, xmlDoc* c_doc) nogil:
  *     cdef xmlNode* c_node
  *     if c_doc is NULL:             # <<<<<<<<<<<<<<
@@ -115535,7 +115626,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
  */
   }
 
-  /* "src/lxml/parser.pxi":747
+  /* "src/lxml/parser.pxi":750
  *     if c_doc is NULL:
  *         return 0
  *     c_node = c_doc.children             # <<<<<<<<<<<<<<
@@ -115545,7 +115636,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   __pyx_t_2 = __pyx_v_c_doc->children;
   __pyx_v_c_node = __pyx_t_2;
 
-  /* "src/lxml/parser.pxi":748
+  /* "src/lxml/parser.pxi":751
  *         return 0
  *     c_node = c_doc.children
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)             # <<<<<<<<<<<<<<
@@ -115554,7 +115645,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
  */
   BEGIN_FOR_EACH_ELEMENT_FROM(((xmlNode *)__pyx_v_c_doc), __pyx_v_c_node, 1);
 
-  /* "src/lxml/parser.pxi":749
+  /* "src/lxml/parser.pxi":752
  *     c_node = c_doc.children
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -115564,7 +115655,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   __pyx_t_1 = ((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":750
+    /* "src/lxml/parser.pxi":753
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:             # <<<<<<<<<<<<<<
@@ -115574,7 +115665,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
     __pyx_t_1 = ((__pyx_f_4lxml_5etree__fixHtmlDictNodeNames(__pyx_v_c_dict, __pyx_v_c_node) < 0) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":751
+      /* "src/lxml/parser.pxi":754
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
  *             return -1             # <<<<<<<<<<<<<<
@@ -115584,7 +115675,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
       __pyx_r = -1;
       goto __pyx_L0;
 
-      /* "src/lxml/parser.pxi":750
+      /* "src/lxml/parser.pxi":753
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:             # <<<<<<<<<<<<<<
@@ -115593,7 +115684,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
  */
     }
 
-    /* "src/lxml/parser.pxi":749
+    /* "src/lxml/parser.pxi":752
  *     c_node = c_doc.children
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -115602,7 +115693,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
  */
   }
 
-  /* "src/lxml/parser.pxi":752
+  /* "src/lxml/parser.pxi":755
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
  *             return -1
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)             # <<<<<<<<<<<<<<
@@ -115611,7 +115702,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
  */
   END_FOR_EACH_ELEMENT_FROM(__pyx_v_c_node);
 
-  /* "src/lxml/parser.pxi":753
+  /* "src/lxml/parser.pxi":756
  *             return -1
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)
  *     return 0             # <<<<<<<<<<<<<<
@@ -115621,7 +115712,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":743
+  /* "src/lxml/parser.pxi":746
  *     return result
  * 
  * cdef int _fixHtmlDictNames(tree.xmlDict* c_dict, xmlDoc* c_doc) nogil:             # <<<<<<<<<<<<<<
@@ -115634,7 +115725,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":755
+/* "src/lxml/parser.pxi":758
  *     return 0
  * 
  * cdef int _fixHtmlDictSubtreeNames(tree.xmlDict* c_dict, xmlDoc* c_doc,             # <<<<<<<<<<<<<<
@@ -115647,7 +115738,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
   int __pyx_r;
   int __pyx_t_1;
 
-  /* "src/lxml/parser.pxi":762
+  /* "src/lxml/parser.pxi":765
  *     """
  *     cdef xmlNode* c_node
  *     if not c_doc:             # <<<<<<<<<<<<<<
@@ -115657,7 +115748,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
   __pyx_t_1 = ((!(__pyx_v_c_doc != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":763
+    /* "src/lxml/parser.pxi":766
  *     cdef xmlNode* c_node
  *     if not c_doc:
  *         return 0             # <<<<<<<<<<<<<<
@@ -115667,7 +115758,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/parser.pxi":762
+    /* "src/lxml/parser.pxi":765
  *     """
  *     cdef xmlNode* c_node
  *     if not c_doc:             # <<<<<<<<<<<<<<
@@ -115676,7 +115767,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
  */
   }
 
-  /* "src/lxml/parser.pxi":764
+  /* "src/lxml/parser.pxi":767
  *     if not c_doc:
  *         return 0
  *     if not c_start_node:             # <<<<<<<<<<<<<<
@@ -115686,7 +115777,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
   __pyx_t_1 = ((!(__pyx_v_c_start_node != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":765
+    /* "src/lxml/parser.pxi":768
  *         return 0
  *     if not c_start_node:
  *         return _fixHtmlDictNames(c_dict, c_doc)             # <<<<<<<<<<<<<<
@@ -115696,7 +115787,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
     __pyx_r = __pyx_f_4lxml_5etree__fixHtmlDictNames(__pyx_v_c_dict, __pyx_v_c_doc);
     goto __pyx_L0;
 
-    /* "src/lxml/parser.pxi":764
+    /* "src/lxml/parser.pxi":767
  *     if not c_doc:
  *         return 0
  *     if not c_start_node:             # <<<<<<<<<<<<<<
@@ -115705,7 +115796,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
  */
   }
 
-  /* "src/lxml/parser.pxi":766
+  /* "src/lxml/parser.pxi":769
  *     if not c_start_node:
  *         return _fixHtmlDictNames(c_dict, c_doc)
  *     c_node = c_start_node             # <<<<<<<<<<<<<<
@@ -115714,7 +115805,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
  */
   __pyx_v_c_node = __pyx_v_c_start_node;
 
-  /* "src/lxml/parser.pxi":767
+  /* "src/lxml/parser.pxi":770
  *         return _fixHtmlDictNames(c_dict, c_doc)
  *     c_node = c_start_node
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)             # <<<<<<<<<<<<<<
@@ -115723,7 +115814,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
  */
   BEGIN_FOR_EACH_ELEMENT_FROM(((xmlNode *)__pyx_v_c_doc), __pyx_v_c_node, 1);
 
-  /* "src/lxml/parser.pxi":768
+  /* "src/lxml/parser.pxi":771
  *     c_node = c_start_node
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -115733,7 +115824,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
   __pyx_t_1 = ((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":769
+    /* "src/lxml/parser.pxi":772
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:             # <<<<<<<<<<<<<<
@@ -115743,7 +115834,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
     __pyx_t_1 = ((__pyx_f_4lxml_5etree__fixHtmlDictNodeNames(__pyx_v_c_dict, __pyx_v_c_node) < 0) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":770
+      /* "src/lxml/parser.pxi":773
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
  *             return -1             # <<<<<<<<<<<<<<
@@ -115753,7 +115844,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
       __pyx_r = -1;
       goto __pyx_L0;
 
-      /* "src/lxml/parser.pxi":769
+      /* "src/lxml/parser.pxi":772
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:             # <<<<<<<<<<<<<<
@@ -115762,7 +115853,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
  */
     }
 
-    /* "src/lxml/parser.pxi":768
+    /* "src/lxml/parser.pxi":771
  *     c_node = c_start_node
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -115771,7 +115862,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
  */
   }
 
-  /* "src/lxml/parser.pxi":771
+  /* "src/lxml/parser.pxi":774
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
  *             return -1
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)             # <<<<<<<<<<<<<<
@@ -115780,7 +115871,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
  */
   END_FOR_EACH_ELEMENT_FROM(__pyx_v_c_node);
 
-  /* "src/lxml/parser.pxi":772
+  /* "src/lxml/parser.pxi":775
  *             return -1
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)
  *     return 0             # <<<<<<<<<<<<<<
@@ -115790,7 +115881,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":755
+  /* "src/lxml/parser.pxi":758
  *     return 0
  * 
  * cdef int _fixHtmlDictSubtreeNames(tree.xmlDict* c_dict, xmlDoc* c_doc,             # <<<<<<<<<<<<<<
@@ -115803,7 +115894,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":774
+/* "src/lxml/parser.pxi":777
  *     return 0
  * 
  * cdef inline int _fixHtmlDictNodeNames(tree.xmlDict* c_dict,             # <<<<<<<<<<<<<<
@@ -115818,7 +115909,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   int __pyx_t_1;
   xmlNode *__pyx_t_2;
 
-  /* "src/lxml/parser.pxi":777
+  /* "src/lxml/parser.pxi":780
  *                                       xmlNode* c_node) nogil:
  *     cdef xmlNode* c_attr
  *     c_name = tree.xmlDictLookup(c_dict, c_node.name, -1)             # <<<<<<<<<<<<<<
@@ -115827,7 +115918,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
   __pyx_v_c_name = xmlDictLookup(__pyx_v_c_dict, __pyx_v_c_node->name, -1);
 
-  /* "src/lxml/parser.pxi":778
+  /* "src/lxml/parser.pxi":781
  *     cdef xmlNode* c_attr
  *     c_name = tree.xmlDictLookup(c_dict, c_node.name, -1)
  *     if c_name is NULL:             # <<<<<<<<<<<<<<
@@ -115837,7 +115928,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   __pyx_t_1 = ((__pyx_v_c_name == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":779
+    /* "src/lxml/parser.pxi":782
  *     c_name = tree.xmlDictLookup(c_dict, c_node.name, -1)
  *     if c_name is NULL:
  *         return -1             # <<<<<<<<<<<<<<
@@ -115847,7 +115938,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     __pyx_r = -1;
     goto __pyx_L0;
 
-    /* "src/lxml/parser.pxi":778
+    /* "src/lxml/parser.pxi":781
  *     cdef xmlNode* c_attr
  *     c_name = tree.xmlDictLookup(c_dict, c_node.name, -1)
  *     if c_name is NULL:             # <<<<<<<<<<<<<<
@@ -115856,7 +115947,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
   }
 
-  /* "src/lxml/parser.pxi":780
+  /* "src/lxml/parser.pxi":783
  *     if c_name is NULL:
  *         return -1
  *     if c_name is not c_node.name:             # <<<<<<<<<<<<<<
@@ -115866,7 +115957,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   __pyx_t_1 = ((__pyx_v_c_name != __pyx_v_c_node->name) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":781
+    /* "src/lxml/parser.pxi":784
  *         return -1
  *     if c_name is not c_node.name:
  *         tree.xmlFree(<char*>c_node.name)             # <<<<<<<<<<<<<<
@@ -115875,7 +115966,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
     xmlFree(((char *)__pyx_v_c_node->name));
 
-    /* "src/lxml/parser.pxi":782
+    /* "src/lxml/parser.pxi":785
  *     if c_name is not c_node.name:
  *         tree.xmlFree(<char*>c_node.name)
  *         c_node.name = c_name             # <<<<<<<<<<<<<<
@@ -115884,7 +115975,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
     __pyx_v_c_node->name = __pyx_v_c_name;
 
-    /* "src/lxml/parser.pxi":780
+    /* "src/lxml/parser.pxi":783
  *     if c_name is NULL:
  *         return -1
  *     if c_name is not c_node.name:             # <<<<<<<<<<<<<<
@@ -115893,7 +115984,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
   }
 
-  /* "src/lxml/parser.pxi":783
+  /* "src/lxml/parser.pxi":786
  *         tree.xmlFree(<char*>c_node.name)
  *         c_node.name = c_name
  *     c_attr = <xmlNode*>c_node.properties             # <<<<<<<<<<<<<<
@@ -115902,7 +115993,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
   __pyx_v_c_attr = ((xmlNode *)__pyx_v_c_node->properties);
 
-  /* "src/lxml/parser.pxi":784
+  /* "src/lxml/parser.pxi":787
  *         c_node.name = c_name
  *     c_attr = <xmlNode*>c_node.properties
  *     while c_attr is not NULL:             # <<<<<<<<<<<<<<
@@ -115913,7 +116004,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     __pyx_t_1 = ((__pyx_v_c_attr != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "src/lxml/parser.pxi":785
+    /* "src/lxml/parser.pxi":788
  *     c_attr = <xmlNode*>c_node.properties
  *     while c_attr is not NULL:
  *         c_name = tree.xmlDictLookup(c_dict, c_attr.name, -1)             # <<<<<<<<<<<<<<
@@ -115922,7 +116013,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
     __pyx_v_c_name = xmlDictLookup(__pyx_v_c_dict, __pyx_v_c_attr->name, -1);
 
-    /* "src/lxml/parser.pxi":786
+    /* "src/lxml/parser.pxi":789
  *     while c_attr is not NULL:
  *         c_name = tree.xmlDictLookup(c_dict, c_attr.name, -1)
  *         if c_name is NULL:             # <<<<<<<<<<<<<<
@@ -115932,7 +116023,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     __pyx_t_1 = ((__pyx_v_c_name == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":787
+      /* "src/lxml/parser.pxi":790
  *         c_name = tree.xmlDictLookup(c_dict, c_attr.name, -1)
  *         if c_name is NULL:
  *             return -1             # <<<<<<<<<<<<<<
@@ -115942,7 +116033,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
       __pyx_r = -1;
       goto __pyx_L0;
 
-      /* "src/lxml/parser.pxi":786
+      /* "src/lxml/parser.pxi":789
  *     while c_attr is not NULL:
  *         c_name = tree.xmlDictLookup(c_dict, c_attr.name, -1)
  *         if c_name is NULL:             # <<<<<<<<<<<<<<
@@ -115951,7 +116042,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
     }
 
-    /* "src/lxml/parser.pxi":788
+    /* "src/lxml/parser.pxi":791
  *         if c_name is NULL:
  *             return -1
  *         if c_name is not c_attr.name:             # <<<<<<<<<<<<<<
@@ -115961,7 +116052,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     __pyx_t_1 = ((__pyx_v_c_name != __pyx_v_c_attr->name) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":789
+      /* "src/lxml/parser.pxi":792
  *             return -1
  *         if c_name is not c_attr.name:
  *             tree.xmlFree(<char*>c_attr.name)             # <<<<<<<<<<<<<<
@@ -115970,7 +116061,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
       xmlFree(((char *)__pyx_v_c_attr->name));
 
-      /* "src/lxml/parser.pxi":790
+      /* "src/lxml/parser.pxi":793
  *         if c_name is not c_attr.name:
  *             tree.xmlFree(<char*>c_attr.name)
  *             c_attr.name = c_name             # <<<<<<<<<<<<<<
@@ -115979,7 +116070,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
       __pyx_v_c_attr->name = __pyx_v_c_name;
 
-      /* "src/lxml/parser.pxi":788
+      /* "src/lxml/parser.pxi":791
  *         if c_name is NULL:
  *             return -1
  *         if c_name is not c_attr.name:             # <<<<<<<<<<<<<<
@@ -115988,7 +116079,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
     }
 
-    /* "src/lxml/parser.pxi":791
+    /* "src/lxml/parser.pxi":794
  *             tree.xmlFree(<char*>c_attr.name)
  *             c_attr.name = c_name
  *         c_attr = c_attr.next             # <<<<<<<<<<<<<<
@@ -115999,7 +116090,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     __pyx_v_c_attr = __pyx_t_2;
   }
 
-  /* "src/lxml/parser.pxi":792
+  /* "src/lxml/parser.pxi":795
  *             c_attr.name = c_name
  *         c_attr = c_attr.next
  *     return 0             # <<<<<<<<<<<<<<
@@ -116009,7 +116100,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":774
+  /* "src/lxml/parser.pxi":777
  *     return 0
  * 
  * cdef inline int _fixHtmlDictNodeNames(tree.xmlDict* c_dict,             # <<<<<<<<<<<<<<
@@ -116022,7 +116113,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":812
+/* "src/lxml/parser.pxi":815
  *     cdef tuple _events_to_collect  # (event_types, tag)
  * 
  *     def __init__(self, int parse_options, bint for_html, XMLSchema schema,             # <<<<<<<<<<<<<<
@@ -116085,53 +116176,53 @@ static int __pyx_pw_4lxml_5etree_11_BaseParser_1__init__(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_for_html)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 1); __PYX_ERR(2, 812, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 1); __PYX_ERR(2, 815, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_schema)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 2); __PYX_ERR(2, 812, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 2); __PYX_ERR(2, 815, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_remove_comments)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 3); __PYX_ERR(2, 812, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 3); __PYX_ERR(2, 815, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_remove_pis)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 4); __PYX_ERR(2, 812, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 4); __PYX_ERR(2, 815, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_strip_cdata)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 5); __PYX_ERR(2, 812, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 5); __PYX_ERR(2, 815, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  6:
         if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_collect_ids)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 6); __PYX_ERR(2, 812, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 6); __PYX_ERR(2, 815, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  7:
         if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 7); __PYX_ERR(2, 812, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 7); __PYX_ERR(2, 815, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  8:
         if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_encoding)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 8); __PYX_ERR(2, 812, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 8); __PYX_ERR(2, 815, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(2, 812, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(2, 815, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 9) {
       goto __pyx_L5_argtuple_error;
@@ -116146,8 +116237,8 @@ static int __pyx_pw_4lxml_5etree_11_BaseParser_1__init__(PyObject *__pyx_v_self,
       values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
       values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
     }
-    __pyx_v_parse_options = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_parse_options == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 812, __pyx_L3_error)
-    __pyx_v_for_html = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_for_html == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 812, __pyx_L3_error)
+    __pyx_v_parse_options = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_parse_options == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 815, __pyx_L3_error)
+    __pyx_v_for_html = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_for_html == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 815, __pyx_L3_error)
     __pyx_v_schema = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)values[2]);
     __pyx_v_remove_comments = values[3];
     __pyx_v_remove_pis = values[4];
@@ -116158,13 +116249,13 @@ static int __pyx_pw_4lxml_5etree_11_BaseParser_1__init__(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 812, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 815, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._BaseParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) __PYX_ERR(2, 812, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) __PYX_ERR(2, 815, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_11_BaseParser___init__(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_parse_options, __pyx_v_for_html, __pyx_v_schema, __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_collect_ids, __pyx_v_target, __pyx_v_encoding);
 
   /* function exit code */
@@ -116193,7 +116284,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_encoding);
 
-  /* "src/lxml/parser.pxi":817
+  /* "src/lxml/parser.pxi":820
  *         cdef tree.xmlCharEncodingHandler* enchandler
  *         cdef int c_encoding
  *         if not isinstance(self, (XMLParser, HTMLParser)):             # <<<<<<<<<<<<<<
@@ -116214,7 +116305,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/parser.pxi":818
+    /* "src/lxml/parser.pxi":821
  *         cdef int c_encoding
  *         if not isinstance(self, (XMLParser, HTMLParser)):
  *             raise TypeError, u"This class cannot be instantiated"             # <<<<<<<<<<<<<<
@@ -116222,9 +116313,9 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  *         self._parse_options = parse_options
  */
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_This_class_cannot_be_instantiate, 0, 0);
-    __PYX_ERR(2, 818, __pyx_L1_error)
+    __PYX_ERR(2, 821, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":817
+    /* "src/lxml/parser.pxi":820
  *         cdef tree.xmlCharEncodingHandler* enchandler
  *         cdef int c_encoding
  *         if not isinstance(self, (XMLParser, HTMLParser)):             # <<<<<<<<<<<<<<
@@ -116233,7 +116324,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  */
   }
 
-  /* "src/lxml/parser.pxi":820
+  /* "src/lxml/parser.pxi":823
  *             raise TypeError, u"This class cannot be instantiated"
  * 
  *         self._parse_options = parse_options             # <<<<<<<<<<<<<<
@@ -116242,7 +116333,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  */
   __pyx_v_self->_parse_options = __pyx_v_parse_options;
 
-  /* "src/lxml/parser.pxi":821
+  /* "src/lxml/parser.pxi":824
  * 
  *         self._parse_options = parse_options
  *         self.target = target             # <<<<<<<<<<<<<<
@@ -116255,7 +116346,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   __Pyx_DECREF(__pyx_v_self->target);
   __pyx_v_self->target = __pyx_v_target;
 
-  /* "src/lxml/parser.pxi":822
+  /* "src/lxml/parser.pxi":825
  *         self._parse_options = parse_options
  *         self.target = target
  *         self._for_html = for_html             # <<<<<<<<<<<<<<
@@ -116264,47 +116355,47 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  */
   __pyx_v_self->_for_html = __pyx_v_for_html;
 
-  /* "src/lxml/parser.pxi":823
+  /* "src/lxml/parser.pxi":826
  *         self.target = target
  *         self._for_html = for_html
  *         self._remove_comments = remove_comments             # <<<<<<<<<<<<<<
  *         self._remove_pis = remove_pis
  *         self._strip_cdata = strip_cdata
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_remove_comments); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 823, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_remove_comments); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 826, __pyx_L1_error)
   __pyx_v_self->_remove_comments = __pyx_t_2;
 
-  /* "src/lxml/parser.pxi":824
+  /* "src/lxml/parser.pxi":827
  *         self._for_html = for_html
  *         self._remove_comments = remove_comments
  *         self._remove_pis = remove_pis             # <<<<<<<<<<<<<<
  *         self._strip_cdata = strip_cdata
  *         self._collect_ids = collect_ids
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_remove_pis); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 824, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_remove_pis); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 827, __pyx_L1_error)
   __pyx_v_self->_remove_pis = __pyx_t_2;
 
-  /* "src/lxml/parser.pxi":825
+  /* "src/lxml/parser.pxi":828
  *         self._remove_comments = remove_comments
  *         self._remove_pis = remove_pis
  *         self._strip_cdata = strip_cdata             # <<<<<<<<<<<<<<
  *         self._collect_ids = collect_ids
  *         self._schema = schema
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_strip_cdata); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 825, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_strip_cdata); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 828, __pyx_L1_error)
   __pyx_v_self->_strip_cdata = __pyx_t_2;
 
-  /* "src/lxml/parser.pxi":826
+  /* "src/lxml/parser.pxi":829
  *         self._remove_pis = remove_pis
  *         self._strip_cdata = strip_cdata
  *         self._collect_ids = collect_ids             # <<<<<<<<<<<<<<
  *         self._schema = schema
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_collect_ids); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 826, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_collect_ids); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 829, __pyx_L1_error)
   __pyx_v_self->_collect_ids = __pyx_t_2;
 
-  /* "src/lxml/parser.pxi":827
+  /* "src/lxml/parser.pxi":830
  *         self._strip_cdata = strip_cdata
  *         self._collect_ids = collect_ids
  *         self._schema = schema             # <<<<<<<<<<<<<<
@@ -116317,14 +116408,14 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_schema));
   __pyx_v_self->_schema = __pyx_v_schema;
 
-  /* "src/lxml/parser.pxi":829
+  /* "src/lxml/parser.pxi":832
  *         self._schema = schema
  * 
  *         self._resolvers = _ResolverRegistry()             # <<<<<<<<<<<<<<
  * 
  *         if encoding is None:
  */
-  __pyx_t_4 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ResolverRegistry)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 829, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ResolverRegistry)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 832, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __Pyx_GOTREF(__pyx_v_self->_resolvers);
@@ -116332,7 +116423,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   __pyx_v_self->_resolvers = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "src/lxml/parser.pxi":831
+  /* "src/lxml/parser.pxi":834
  *         self._resolvers = _ResolverRegistry()
  * 
  *         if encoding is None:             # <<<<<<<<<<<<<<
@@ -116343,7 +116434,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":832
+    /* "src/lxml/parser.pxi":835
  * 
  *         if encoding is None:
  *             self._default_encoding = None             # <<<<<<<<<<<<<<
@@ -116356,7 +116447,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
     __Pyx_DECREF(__pyx_v_self->_default_encoding);
     __pyx_v_self->_default_encoding = Py_None;
 
-    /* "src/lxml/parser.pxi":831
+    /* "src/lxml/parser.pxi":834
  *         self._resolvers = _ResolverRegistry()
  * 
  *         if encoding is None:             # <<<<<<<<<<<<<<
@@ -116366,7 +116457,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
     goto __pyx_L6;
   }
 
-  /* "src/lxml/parser.pxi":834
+  /* "src/lxml/parser.pxi":837
  *             self._default_encoding = None
  *         else:
  *             encoding = _utf8(encoding)             # <<<<<<<<<<<<<<
@@ -116374,12 +116465,12 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  *             if enchandler is NULL:
  */
   /*else*/ {
-    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_encoding); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 834, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_encoding); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 837, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/parser.pxi":835
+    /* "src/lxml/parser.pxi":838
  *         else:
  *             encoding = _utf8(encoding)
  *             enchandler = tree.xmlFindCharEncodingHandler(_cstr(encoding))             # <<<<<<<<<<<<<<
@@ -116388,7 +116479,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  */
     __pyx_v_enchandler = xmlFindCharEncodingHandler(PyBytes_AS_STRING(__pyx_v_encoding));
 
-    /* "src/lxml/parser.pxi":836
+    /* "src/lxml/parser.pxi":839
  *             encoding = _utf8(encoding)
  *             enchandler = tree.xmlFindCharEncodingHandler(_cstr(encoding))
  *             if enchandler is NULL:             # <<<<<<<<<<<<<<
@@ -116398,14 +116489,14 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
     __pyx_t_1 = ((__pyx_v_enchandler == NULL) != 0);
     if (unlikely(__pyx_t_1)) {
 
-      /* "src/lxml/parser.pxi":837
+      /* "src/lxml/parser.pxi":840
  *             enchandler = tree.xmlFindCharEncodingHandler(_cstr(encoding))
  *             if enchandler is NULL:
  *                 raise LookupError, f"unknown encoding: '{encoding}'"             # <<<<<<<<<<<<<<
  *             tree.xmlCharEncCloseFunc(enchandler)
  *             self._default_encoding = encoding
  */
-      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 837, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 840, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = 0;
       __pyx_t_6 = 127;
@@ -116413,7 +116504,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
       __pyx_t_5 += 19;
       __Pyx_GIVEREF(__pyx_kp_u_unknown_encoding);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_unknown_encoding);
-      __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_encoding, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 837, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_encoding, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 840, __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);
@@ -116424,14 +116515,14 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
       __pyx_t_5 += 1;
       __Pyx_GIVEREF(__pyx_kp_u__22);
       PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__22);
-      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 837, __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(2, 840, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_builtin_LookupError, __pyx_t_7, 0, 0);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __PYX_ERR(2, 837, __pyx_L1_error)
+      __PYX_ERR(2, 840, __pyx_L1_error)
 
-      /* "src/lxml/parser.pxi":836
+      /* "src/lxml/parser.pxi":839
  *             encoding = _utf8(encoding)
  *             enchandler = tree.xmlFindCharEncodingHandler(_cstr(encoding))
  *             if enchandler is NULL:             # <<<<<<<<<<<<<<
@@ -116440,7 +116531,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  */
     }
 
-    /* "src/lxml/parser.pxi":838
+    /* "src/lxml/parser.pxi":841
  *             if enchandler is NULL:
  *                 raise LookupError, f"unknown encoding: '{encoding}'"
  *             tree.xmlCharEncCloseFunc(enchandler)             # <<<<<<<<<<<<<<
@@ -116449,7 +116540,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  */
     (void)(xmlCharEncCloseFunc(__pyx_v_enchandler));
 
-    /* "src/lxml/parser.pxi":839
+    /* "src/lxml/parser.pxi":842
  *                 raise LookupError, f"unknown encoding: '{encoding}'"
  *             tree.xmlCharEncCloseFunc(enchandler)
  *             self._default_encoding = encoding             # <<<<<<<<<<<<<<
@@ -116464,7 +116555,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   }
   __pyx_L6:;
 
-  /* "src/lxml/parser.pxi":812
+  /* "src/lxml/parser.pxi":815
  *     cdef tuple _events_to_collect  # (event_types, tag)
  * 
  *     def __init__(self, int parse_options, bint for_html, XMLSchema schema,             # <<<<<<<<<<<<<<
@@ -116486,7 +116577,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":841
+/* "src/lxml/parser.pxi":844
  *             self._default_encoding = encoding
  * 
  *     cdef _setBaseURL(self, base_url):             # <<<<<<<<<<<<<<
@@ -116503,23 +116594,23 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__setBaseURL(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_setBaseURL", 0);
 
-  /* "src/lxml/parser.pxi":842
+  /* "src/lxml/parser.pxi":845
  * 
  *     cdef _setBaseURL(self, base_url):
  *         self._filename = _encodeFilename(base_url)             # <<<<<<<<<<<<<<
  * 
  *     cdef _collectEvents(self, event_types, tag):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_base_url); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 842, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_base_url); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 845, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 842, __pyx_L1_error)
+  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 845, __pyx_L1_error)
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_filename);
   __Pyx_DECREF(__pyx_v_self->_filename);
   __pyx_v_self->_filename = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":841
+  /* "src/lxml/parser.pxi":844
  *             self._default_encoding = encoding
  * 
  *     cdef _setBaseURL(self, base_url):             # <<<<<<<<<<<<<<
@@ -116540,7 +116631,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__setBaseURL(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":844
+/* "src/lxml/parser.pxi":847
  *         self._filename = _encodeFilename(base_url)
  * 
  *     cdef _collectEvents(self, event_types, tag):             # <<<<<<<<<<<<<<
@@ -116562,7 +116653,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
   __Pyx_RefNannySetupContext("_collectEvents", 0);
   __Pyx_INCREF(__pyx_v_event_types);
 
-  /* "src/lxml/parser.pxi":845
+  /* "src/lxml/parser.pxi":848
  * 
  *     cdef _collectEvents(self, event_types, tag):
  *         if event_types is None:             # <<<<<<<<<<<<<<
@@ -116573,7 +116664,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":846
+    /* "src/lxml/parser.pxi":849
  *     cdef _collectEvents(self, event_types, tag):
  *         if event_types is None:
  *             event_types = ()             # <<<<<<<<<<<<<<
@@ -116583,7 +116674,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
     __Pyx_INCREF(__pyx_empty_tuple);
     __Pyx_DECREF_SET(__pyx_v_event_types, __pyx_empty_tuple);
 
-    /* "src/lxml/parser.pxi":845
+    /* "src/lxml/parser.pxi":848
  * 
  *     cdef _collectEvents(self, event_types, tag):
  *         if event_types is None:             # <<<<<<<<<<<<<<
@@ -116593,7 +116684,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
     goto __pyx_L3;
   }
 
-  /* "src/lxml/parser.pxi":848
+  /* "src/lxml/parser.pxi":851
  *             event_types = ()
  *         else:
  *             event_types = tuple(set(event_types))             # <<<<<<<<<<<<<<
@@ -116601,33 +116692,33 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
  *         self._events_to_collect = (event_types, tag)
  */
   /*else*/ {
-    __pyx_t_3 = PySet_New(__pyx_v_event_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 848, __pyx_L1_error)
+    __pyx_t_3 = PySet_New(__pyx_v_event_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 851, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 848, __pyx_L1_error)
+    __pyx_t_4 = PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 851, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_event_types, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/parser.pxi":849
+    /* "src/lxml/parser.pxi":852
  *         else:
  *             event_types = tuple(set(event_types))
  *             _buildParseEventFilter(event_types)  # purely for validation             # <<<<<<<<<<<<<<
  *         self._events_to_collect = (event_types, tag)
  * 
  */
-    __pyx_t_5 = __pyx_f_4lxml_5etree__buildParseEventFilter(__pyx_v_event_types); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 849, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_4lxml_5etree__buildParseEventFilter(__pyx_v_event_types); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 852, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "src/lxml/parser.pxi":850
+  /* "src/lxml/parser.pxi":853
  *             event_types = tuple(set(event_types))
  *             _buildParseEventFilter(event_types)  # purely for validation
  *         self._events_to_collect = (event_types, tag)             # <<<<<<<<<<<<<<
  * 
  *     cdef _ParserContext _getParserContext(self):
  */
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 850, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 853, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_event_types);
   __Pyx_GIVEREF(__pyx_v_event_types);
@@ -116641,7 +116732,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
   __pyx_v_self->_events_to_collect = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "src/lxml/parser.pxi":844
+  /* "src/lxml/parser.pxi":847
  *         self._filename = _encodeFilename(base_url)
  * 
  *     cdef _collectEvents(self, event_types, tag):             # <<<<<<<<<<<<<<
@@ -116664,7 +116755,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":852
+/* "src/lxml/parser.pxi":855
  *         self._events_to_collect = (event_types, tag)
  * 
  *     cdef _ParserContext _getParserContext(self):             # <<<<<<<<<<<<<<
@@ -116688,7 +116779,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_getParserContext", 0);
 
-  /* "src/lxml/parser.pxi":854
+  /* "src/lxml/parser.pxi":857
  *     cdef _ParserContext _getParserContext(self):
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         if self._parser_context is None:             # <<<<<<<<<<<<<<
@@ -116699,7 +116790,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":855
+    /* "src/lxml/parser.pxi":858
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         if self._parser_context is None:
  *             self._parser_context = self._createContext(self.target, None)             # <<<<<<<<<<<<<<
@@ -116708,7 +116799,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
  */
     __pyx_t_3 = __pyx_v_self->target;
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_createContext(__pyx_v_self, __pyx_t_3, Py_None)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 855, __pyx_L1_error)
+    __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_createContext(__pyx_v_self, __pyx_t_3, Py_None)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 858, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GIVEREF(__pyx_t_4);
@@ -116717,7 +116808,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_v_self->_parser_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/parser.pxi":856
+    /* "src/lxml/parser.pxi":859
  *         if self._parser_context is None:
  *             self._parser_context = self._createContext(self.target, None)
  *             self._parser_context._collect_ids = self._collect_ids             # <<<<<<<<<<<<<<
@@ -116727,7 +116818,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_2 = __pyx_v_self->_collect_ids;
     __pyx_v_self->_parser_context->_collect_ids = __pyx_t_2;
 
-    /* "src/lxml/parser.pxi":857
+    /* "src/lxml/parser.pxi":860
  *             self._parser_context = self._createContext(self.target, None)
  *             self._parser_context._collect_ids = self._collect_ids
  *             if self._schema is not None:             # <<<<<<<<<<<<<<
@@ -116738,17 +116829,17 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":859
+      /* "src/lxml/parser.pxi":862
  *             if self._schema is not None:
  *                 self._parser_context._validator = \
  *                     self._schema._newSaxValidator(             # <<<<<<<<<<<<<<
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newParserCtxt()
  */
-      __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLSchema *)__pyx_v_self->_schema->__pyx_base.__pyx_vtab)->_newSaxValidator(__pyx_v_self->_schema, (__pyx_v_self->_parse_options & XML_PARSE_DTDATTR))); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 859, __pyx_L1_error)
+      __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLSchema *)__pyx_v_self->_schema->__pyx_base.__pyx_vtab)->_newSaxValidator(__pyx_v_self->_schema, (__pyx_v_self->_parse_options & XML_PARSE_DTDATTR))); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 862, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
 
-      /* "src/lxml/parser.pxi":858
+      /* "src/lxml/parser.pxi":861
  *             self._parser_context._collect_ids = self._collect_ids
  *             if self._schema is not None:
  *                 self._parser_context._validator = \             # <<<<<<<<<<<<<<
@@ -116761,7 +116852,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
       __pyx_v_self->_parser_context->_validator = ((struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "src/lxml/parser.pxi":857
+      /* "src/lxml/parser.pxi":860
  *             self._parser_context = self._createContext(self.target, None)
  *             self._parser_context._collect_ids = self._collect_ids
  *             if self._schema is not None:             # <<<<<<<<<<<<<<
@@ -116770,17 +116861,17 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
  */
     }
 
-    /* "src/lxml/parser.pxi":861
+    /* "src/lxml/parser.pxi":864
  *                     self._schema._newSaxValidator(
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newParserCtxt()             # <<<<<<<<<<<<<<
  *             _initParserContext(self._parser_context, self._resolvers, pctxt)
  *             self._configureSaxContext(pctxt)
  */
-    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_newParserCtxt(__pyx_v_self); if (unlikely(__pyx_t_5 == ((xmlParserCtxt *)NULL))) __PYX_ERR(2, 861, __pyx_L1_error)
+    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_newParserCtxt(__pyx_v_self); if (unlikely(__pyx_t_5 == ((xmlParserCtxt *)NULL))) __PYX_ERR(2, 864, __pyx_L1_error)
     __pyx_v_pctxt = __pyx_t_5;
 
-    /* "src/lxml/parser.pxi":862
+    /* "src/lxml/parser.pxi":865
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newParserCtxt()
  *             _initParserContext(self._parser_context, self._resolvers, pctxt)             # <<<<<<<<<<<<<<
@@ -116791,22 +116882,22 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __Pyx_INCREF(__pyx_t_4);
     __pyx_t_3 = ((PyObject *)__pyx_v_self->_resolvers);
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_6 = __pyx_f_4lxml_5etree__initParserContext(((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_4), ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_3), __pyx_v_pctxt); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 862, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_4lxml_5etree__initParserContext(((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_4), ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_3), __pyx_v_pctxt); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 865, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "src/lxml/parser.pxi":863
+    /* "src/lxml/parser.pxi":866
  *             pctxt = self._newParserCtxt()
  *             _initParserContext(self._parser_context, self._resolvers, pctxt)
  *             self._configureSaxContext(pctxt)             # <<<<<<<<<<<<<<
  *         return self._parser_context
  * 
  */
-    __pyx_t_7 = __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(__pyx_v_self, __pyx_v_pctxt); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 863, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(__pyx_v_self, __pyx_v_pctxt); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 866, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":854
+    /* "src/lxml/parser.pxi":857
  *     cdef _ParserContext _getParserContext(self):
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         if self._parser_context is None:             # <<<<<<<<<<<<<<
@@ -116815,7 +116906,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
  */
   }
 
-  /* "src/lxml/parser.pxi":864
+  /* "src/lxml/parser.pxi":867
  *             _initParserContext(self._parser_context, self._resolvers, pctxt)
  *             self._configureSaxContext(pctxt)
  *         return self._parser_context             # <<<<<<<<<<<<<<
@@ -116827,7 +116918,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_r = __pyx_v_self->_parser_context;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":852
+  /* "src/lxml/parser.pxi":855
  *         self._events_to_collect = (event_types, tag)
  * 
  *     cdef _ParserContext _getParserContext(self):             # <<<<<<<<<<<<<<
@@ -116848,7 +116939,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":866
+/* "src/lxml/parser.pxi":869
  *         return self._parser_context
  * 
  *     cdef _ParserContext _getPushParserContext(self):             # <<<<<<<<<<<<<<
@@ -116872,7 +116963,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_getPushParserContext", 0);
 
-  /* "src/lxml/parser.pxi":868
+  /* "src/lxml/parser.pxi":871
  *     cdef _ParserContext _getPushParserContext(self):
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         if self._push_parser_context is None:             # <<<<<<<<<<<<<<
@@ -116883,7 +116974,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":870
+    /* "src/lxml/parser.pxi":873
  *         if self._push_parser_context is None:
  *             self._push_parser_context = self._createContext(
  *                 self.target, self._events_to_collect)             # <<<<<<<<<<<<<<
@@ -116895,14 +116986,14 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_4 = __pyx_v_self->_events_to_collect;
     __Pyx_INCREF(__pyx_t_4);
 
-    /* "src/lxml/parser.pxi":869
+    /* "src/lxml/parser.pxi":872
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         if self._push_parser_context is None:
  *             self._push_parser_context = self._createContext(             # <<<<<<<<<<<<<<
  *                 self.target, self._events_to_collect)
  *             self._push_parser_context._collect_ids = self._collect_ids
  */
-    __pyx_t_5 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_createContext(__pyx_v_self, __pyx_t_3, __pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 869, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_createContext(__pyx_v_self, __pyx_t_3, __pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 872, __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;
@@ -116912,7 +117003,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_v_self->_push_parser_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "src/lxml/parser.pxi":871
+    /* "src/lxml/parser.pxi":874
  *             self._push_parser_context = self._createContext(
  *                 self.target, self._events_to_collect)
  *             self._push_parser_context._collect_ids = self._collect_ids             # <<<<<<<<<<<<<<
@@ -116922,7 +117013,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_2 = __pyx_v_self->_collect_ids;
     __pyx_v_self->_push_parser_context->_collect_ids = __pyx_t_2;
 
-    /* "src/lxml/parser.pxi":872
+    /* "src/lxml/parser.pxi":875
  *                 self.target, self._events_to_collect)
  *             self._push_parser_context._collect_ids = self._collect_ids
  *             if self._schema is not None:             # <<<<<<<<<<<<<<
@@ -116933,17 +117024,17 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":874
+      /* "src/lxml/parser.pxi":877
  *             if self._schema is not None:
  *                 self._push_parser_context._validator = \
  *                     self._schema._newSaxValidator(             # <<<<<<<<<<<<<<
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newPushParserCtxt()
  */
-      __pyx_t_5 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLSchema *)__pyx_v_self->_schema->__pyx_base.__pyx_vtab)->_newSaxValidator(__pyx_v_self->_schema, (__pyx_v_self->_parse_options & XML_PARSE_DTDATTR))); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 874, __pyx_L1_error)
+      __pyx_t_5 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLSchema *)__pyx_v_self->_schema->__pyx_base.__pyx_vtab)->_newSaxValidator(__pyx_v_self->_schema, (__pyx_v_self->_parse_options & XML_PARSE_DTDATTR))); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 877, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
 
-      /* "src/lxml/parser.pxi":873
+      /* "src/lxml/parser.pxi":876
  *             self._push_parser_context._collect_ids = self._collect_ids
  *             if self._schema is not None:
  *                 self._push_parser_context._validator = \             # <<<<<<<<<<<<<<
@@ -116956,7 +117047,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
       __pyx_v_self->_push_parser_context->_validator = ((struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)__pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "src/lxml/parser.pxi":872
+      /* "src/lxml/parser.pxi":875
  *                 self.target, self._events_to_collect)
  *             self._push_parser_context._collect_ids = self._collect_ids
  *             if self._schema is not None:             # <<<<<<<<<<<<<<
@@ -116965,17 +117056,17 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
  */
     }
 
-    /* "src/lxml/parser.pxi":876
+    /* "src/lxml/parser.pxi":879
  *                     self._schema._newSaxValidator(
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newPushParserCtxt()             # <<<<<<<<<<<<<<
  *             _initParserContext(
  *                 self._push_parser_context, self._resolvers, pctxt)
  */
-    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_newPushParserCtxt(__pyx_v_self); if (unlikely(__pyx_t_6 == ((xmlParserCtxt *)NULL))) __PYX_ERR(2, 876, __pyx_L1_error)
+    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_newPushParserCtxt(__pyx_v_self); if (unlikely(__pyx_t_6 == ((xmlParserCtxt *)NULL))) __PYX_ERR(2, 879, __pyx_L1_error)
     __pyx_v_pctxt = __pyx_t_6;
 
-    /* "src/lxml/parser.pxi":878
+    /* "src/lxml/parser.pxi":881
  *             pctxt = self._newPushParserCtxt()
  *             _initParserContext(
  *                 self._push_parser_context, self._resolvers, pctxt)             # <<<<<<<<<<<<<<
@@ -116987,29 +117078,29 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_4 = ((PyObject *)__pyx_v_self->_resolvers);
     __Pyx_INCREF(__pyx_t_4);
 
-    /* "src/lxml/parser.pxi":877
+    /* "src/lxml/parser.pxi":880
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newPushParserCtxt()
  *             _initParserContext(             # <<<<<<<<<<<<<<
  *                 self._push_parser_context, self._resolvers, pctxt)
  *             self._configureSaxContext(pctxt)
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__initParserContext(((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_5), ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_4), __pyx_v_pctxt); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 877, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__initParserContext(((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_5), ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_4), __pyx_v_pctxt); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 880, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "src/lxml/parser.pxi":879
+    /* "src/lxml/parser.pxi":882
  *             _initParserContext(
  *                 self._push_parser_context, self._resolvers, pctxt)
  *             self._configureSaxContext(pctxt)             # <<<<<<<<<<<<<<
  *         return self._push_parser_context
  * 
  */
-    __pyx_t_7 = __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(__pyx_v_self, __pyx_v_pctxt); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 879, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(__pyx_v_self, __pyx_v_pctxt); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 882, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":868
+    /* "src/lxml/parser.pxi":871
  *     cdef _ParserContext _getPushParserContext(self):
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         if self._push_parser_context is None:             # <<<<<<<<<<<<<<
@@ -117018,7 +117109,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
  */
   }
 
-  /* "src/lxml/parser.pxi":880
+  /* "src/lxml/parser.pxi":883
  *                 self._push_parser_context, self._resolvers, pctxt)
  *             self._configureSaxContext(pctxt)
  *         return self._push_parser_context             # <<<<<<<<<<<<<<
@@ -117030,7 +117121,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_r = __pyx_v_self->_push_parser_context;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":866
+  /* "src/lxml/parser.pxi":869
  *         return self._parser_context
  * 
  *     cdef _ParserContext _getPushParserContext(self):             # <<<<<<<<<<<<<<
@@ -117051,7 +117142,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":882
+/* "src/lxml/parser.pxi":885
  *         return self._push_parser_context
  * 
  *     cdef _ParserContext _createContext(self, target, events_to_collect):             # <<<<<<<<<<<<<<
@@ -117077,7 +117168,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_createContext", 0);
 
-  /* "src/lxml/parser.pxi":884
+  /* "src/lxml/parser.pxi":887
  *     cdef _ParserContext _createContext(self, target, events_to_collect):
  *         cdef _SaxParserContext sax_context
  *         if target is not None:             # <<<<<<<<<<<<<<
@@ -117088,28 +117179,28 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":885
+    /* "src/lxml/parser.pxi":888
  *         cdef _SaxParserContext sax_context
  *         if target is not None:
  *             sax_context = _TargetParserContext(self)             # <<<<<<<<<<<<<<
  *             (<_TargetParserContext>sax_context)._setTarget(target)
  *         elif events_to_collect:
  */
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree__TargetParserContext), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 885, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree__TargetParserContext), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 888, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_sax_context = ((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "src/lxml/parser.pxi":886
+    /* "src/lxml/parser.pxi":889
  *         if target is not None:
  *             sax_context = _TargetParserContext(self)
  *             (<_TargetParserContext>sax_context)._setTarget(target)             # <<<<<<<<<<<<<<
  *         elif events_to_collect:
  *             sax_context = _SaxParserContext(self)
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree_20_TargetParserContext__setTarget(((struct __pyx_obj_4lxml_5etree__TargetParserContext *)__pyx_v_sax_context), __pyx_v_target); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 886, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree_20_TargetParserContext__setTarget(((struct __pyx_obj_4lxml_5etree__TargetParserContext *)__pyx_v_sax_context), __pyx_v_target); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 889, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":884
+    /* "src/lxml/parser.pxi":887
  *     cdef _ParserContext _createContext(self, target, events_to_collect):
  *         cdef _SaxParserContext sax_context
  *         if target is not None:             # <<<<<<<<<<<<<<
@@ -117119,29 +117210,29 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     goto __pyx_L3;
   }
 
-  /* "src/lxml/parser.pxi":887
+  /* "src/lxml/parser.pxi":890
  *             sax_context = _TargetParserContext(self)
  *             (<_TargetParserContext>sax_context)._setTarget(target)
  *         elif events_to_collect:             # <<<<<<<<<<<<<<
  *             sax_context = _SaxParserContext(self)
  *         else:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_events_to_collect); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 887, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_events_to_collect); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 890, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":888
+    /* "src/lxml/parser.pxi":891
  *             (<_TargetParserContext>sax_context)._setTarget(target)
  *         elif events_to_collect:
  *             sax_context = _SaxParserContext(self)             # <<<<<<<<<<<<<<
  *         else:
  *             # nothing special to configure
  */
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree__SaxParserContext), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 888, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree__SaxParserContext), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 891, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_sax_context = ((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "src/lxml/parser.pxi":887
+    /* "src/lxml/parser.pxi":890
  *             sax_context = _TargetParserContext(self)
  *             (<_TargetParserContext>sax_context)._setTarget(target)
  *         elif events_to_collect:             # <<<<<<<<<<<<<<
@@ -117151,7 +117242,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     goto __pyx_L3;
   }
 
-  /* "src/lxml/parser.pxi":891
+  /* "src/lxml/parser.pxi":894
  *         else:
  *             # nothing special to configure
  *             return _ParserContext()             # <<<<<<<<<<<<<<
@@ -117160,7 +117251,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
  */
   /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ParserContext)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 891, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ParserContext)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 894, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_3);
     __pyx_t_3 = 0;
@@ -117168,17 +117259,17 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   }
   __pyx_L3:;
 
-  /* "src/lxml/parser.pxi":892
+  /* "src/lxml/parser.pxi":895
  *             # nothing special to configure
  *             return _ParserContext()
  *         if events_to_collect:             # <<<<<<<<<<<<<<
  *             events, tag = events_to_collect
  *             sax_context._setEventFilter(events, tag)
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_events_to_collect); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 892, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_events_to_collect); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 895, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":893
+    /* "src/lxml/parser.pxi":896
  *             return _ParserContext()
  *         if events_to_collect:
  *             events, tag = events_to_collect             # <<<<<<<<<<<<<<
@@ -117191,7 +117282,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(2, 893, __pyx_L1_error)
+        __PYX_ERR(2, 896, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -117204,21 +117295,21 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
       __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_5);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 893, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 896, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 893, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 896, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_6 = PyObject_GetIter(__pyx_v_events_to_collect); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 893, __pyx_L1_error)
+      __pyx_t_6 = PyObject_GetIter(__pyx_v_events_to_collect); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 896, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
       index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_3);
       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(2, 893, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(2, 896, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L6_unpacking_done;
@@ -117226,7 +117317,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(2, 893, __pyx_L1_error)
+      __PYX_ERR(2, 896, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __pyx_v_events = __pyx_t_3;
@@ -117234,18 +117325,18 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_v_tag = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "src/lxml/parser.pxi":894
+    /* "src/lxml/parser.pxi":897
  *         if events_to_collect:
  *             events, tag = events_to_collect
  *             sax_context._setEventFilter(events, tag)             # <<<<<<<<<<<<<<
  *         return sax_context
  * 
  */
-    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__SaxParserContext *)__pyx_v_sax_context->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->_setEventFilter(__pyx_v_sax_context, __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 894, __pyx_L1_error)
+    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__SaxParserContext *)__pyx_v_sax_context->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->_setEventFilter(__pyx_v_sax_context, __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 897, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "src/lxml/parser.pxi":892
+    /* "src/lxml/parser.pxi":895
  *             # nothing special to configure
  *             return _ParserContext()
  *         if events_to_collect:             # <<<<<<<<<<<<<<
@@ -117254,7 +117345,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
  */
   }
 
-  /* "src/lxml/parser.pxi":895
+  /* "src/lxml/parser.pxi":898
  *             events, tag = events_to_collect
  *             sax_context._setEventFilter(events, tag)
  *         return sax_context             # <<<<<<<<<<<<<<
@@ -117266,7 +117357,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_r = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_v_sax_context);
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":882
+  /* "src/lxml/parser.pxi":885
  *         return self._push_parser_context
  * 
  *     cdef _ParserContext _createContext(self, target, events_to_collect):             # <<<<<<<<<<<<<<
@@ -117290,7 +117381,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":898
+/* "src/lxml/parser.pxi":901
  * 
  *     @cython.final
  *     cdef int _configureSaxContext(self, xmlparser.xmlParserCtxt* pctxt) except -1:             # <<<<<<<<<<<<<<
@@ -117304,7 +117395,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("_configureSaxContext", 0);
 
-  /* "src/lxml/parser.pxi":899
+  /* "src/lxml/parser.pxi":902
  *     @cython.final
  *     cdef int _configureSaxContext(self, xmlparser.xmlParserCtxt* pctxt) except -1:
  *         if self._remove_comments:             # <<<<<<<<<<<<<<
@@ -117314,7 +117405,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
   __pyx_t_1 = (__pyx_v_self->_remove_comments != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":900
+    /* "src/lxml/parser.pxi":903
  *     cdef int _configureSaxContext(self, xmlparser.xmlParserCtxt* pctxt) except -1:
  *         if self._remove_comments:
  *             pctxt.sax.comment = NULL             # <<<<<<<<<<<<<<
@@ -117323,7 +117414,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
  */
     __pyx_v_pctxt->sax->comment = NULL;
 
-    /* "src/lxml/parser.pxi":899
+    /* "src/lxml/parser.pxi":902
  *     @cython.final
  *     cdef int _configureSaxContext(self, xmlparser.xmlParserCtxt* pctxt) except -1:
  *         if self._remove_comments:             # <<<<<<<<<<<<<<
@@ -117332,7 +117423,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
  */
   }
 
-  /* "src/lxml/parser.pxi":901
+  /* "src/lxml/parser.pxi":904
  *         if self._remove_comments:
  *             pctxt.sax.comment = NULL
  *         if self._remove_pis:             # <<<<<<<<<<<<<<
@@ -117342,7 +117433,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
   __pyx_t_1 = (__pyx_v_self->_remove_pis != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":902
+    /* "src/lxml/parser.pxi":905
  *             pctxt.sax.comment = NULL
  *         if self._remove_pis:
  *             pctxt.sax.processingInstruction = NULL             # <<<<<<<<<<<<<<
@@ -117351,7 +117442,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
  */
     __pyx_v_pctxt->sax->processingInstruction = NULL;
 
-    /* "src/lxml/parser.pxi":901
+    /* "src/lxml/parser.pxi":904
  *         if self._remove_comments:
  *             pctxt.sax.comment = NULL
  *         if self._remove_pis:             # <<<<<<<<<<<<<<
@@ -117360,7 +117451,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
  */
   }
 
-  /* "src/lxml/parser.pxi":903
+  /* "src/lxml/parser.pxi":906
  *         if self._remove_pis:
  *             pctxt.sax.processingInstruction = NULL
  *         if self._strip_cdata:             # <<<<<<<<<<<<<<
@@ -117370,7 +117461,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
   __pyx_t_1 = (__pyx_v_self->_strip_cdata != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":905
+    /* "src/lxml/parser.pxi":908
  *         if self._strip_cdata:
  *             # hard switch-off for CDATA nodes => makes them plain text
  *             pctxt.sax.cdataBlock = NULL             # <<<<<<<<<<<<<<
@@ -117379,7 +117470,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
  */
     __pyx_v_pctxt->sax->cdataBlock = NULL;
 
-    /* "src/lxml/parser.pxi":903
+    /* "src/lxml/parser.pxi":906
  *         if self._remove_pis:
  *             pctxt.sax.processingInstruction = NULL
  *         if self._strip_cdata:             # <<<<<<<<<<<<<<
@@ -117388,7 +117479,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
  */
   }
 
-  /* "src/lxml/parser.pxi":898
+  /* "src/lxml/parser.pxi":901
  * 
  *     @cython.final
  *     cdef int _configureSaxContext(self, xmlparser.xmlParserCtxt* pctxt) except -1:             # <<<<<<<<<<<<<<
@@ -117402,7 +117493,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__configureSaxContext(struct __pyx_
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":907
+/* "src/lxml/parser.pxi":910
  *             pctxt.sax.cdataBlock = NULL
  * 
  *     cdef int _registerHtmlErrorHandler(self, xmlparser.xmlParserCtxt* c_ctxt) except -1:             # <<<<<<<<<<<<<<
@@ -117422,7 +117513,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_registerHtmlErrorHandler", 0);
 
-  /* "src/lxml/parser.pxi":908
+  /* "src/lxml/parser.pxi":911
  * 
  *     cdef int _registerHtmlErrorHandler(self, xmlparser.xmlParserCtxt* c_ctxt) except -1:
  *         cdef xmlparser.xmlSAXHandler* sax = c_ctxt.sax             # <<<<<<<<<<<<<<
@@ -117432,7 +117523,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   __pyx_t_1 = __pyx_v_c_ctxt->sax;
   __pyx_v_sax = __pyx_t_1;
 
-  /* "src/lxml/parser.pxi":909
+  /* "src/lxml/parser.pxi":912
  *     cdef int _registerHtmlErrorHandler(self, xmlparser.xmlParserCtxt* c_ctxt) except -1:
  *         cdef xmlparser.xmlSAXHandler* sax = c_ctxt.sax
  *         if sax is not NULL and sax.initialized and sax.initialized != xmlparser.XML_SAX2_MAGIC:             # <<<<<<<<<<<<<<
@@ -117456,7 +117547,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":911
+    /* "src/lxml/parser.pxi":914
  *         if sax is not NULL and sax.initialized and sax.initialized != xmlparser.XML_SAX2_MAGIC:
  *             # need to extend SAX1 context to SAX2 to get proper error reports
  *             if <xmlparser.xmlSAXHandlerV1*>sax is &htmlparser.htmlDefaultSAXHandler:             # <<<<<<<<<<<<<<
@@ -117466,7 +117557,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
     __pyx_t_2 = ((((xmlSAXHandlerV1 *)__pyx_v_sax) == (&htmlDefaultSAXHandler)) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":912
+      /* "src/lxml/parser.pxi":915
  *             # need to extend SAX1 context to SAX2 to get proper error reports
  *             if <xmlparser.xmlSAXHandlerV1*>sax is &htmlparser.htmlDefaultSAXHandler:
  *                 sax = <xmlparser.xmlSAXHandler*> tree.xmlMalloc(sizeof(xmlparser.xmlSAXHandler))             # <<<<<<<<<<<<<<
@@ -117475,7 +117566,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
       __pyx_v_sax = ((xmlSAXHandler *)xmlMalloc((sizeof(xmlSAXHandler))));
 
-      /* "src/lxml/parser.pxi":913
+      /* "src/lxml/parser.pxi":916
  *             if <xmlparser.xmlSAXHandlerV1*>sax is &htmlparser.htmlDefaultSAXHandler:
  *                 sax = <xmlparser.xmlSAXHandler*> tree.xmlMalloc(sizeof(xmlparser.xmlSAXHandler))
  *                 if sax is NULL:             # <<<<<<<<<<<<<<
@@ -117485,16 +117576,16 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
       __pyx_t_2 = ((__pyx_v_sax == NULL) != 0);
       if (unlikely(__pyx_t_2)) {
 
-        /* "src/lxml/parser.pxi":914
+        /* "src/lxml/parser.pxi":917
  *                 sax = <xmlparser.xmlSAXHandler*> tree.xmlMalloc(sizeof(xmlparser.xmlSAXHandler))
  *                 if sax is NULL:
  *                     raise MemoryError()             # <<<<<<<<<<<<<<
  *                 cstring_h.memcpy(sax, &htmlparser.htmlDefaultSAXHandler,
  *                                  sizeof(htmlparser.htmlDefaultSAXHandler))
  */
-        PyErr_NoMemory(); __PYX_ERR(2, 914, __pyx_L1_error)
+        PyErr_NoMemory(); __PYX_ERR(2, 917, __pyx_L1_error)
 
-        /* "src/lxml/parser.pxi":913
+        /* "src/lxml/parser.pxi":916
  *             if <xmlparser.xmlSAXHandlerV1*>sax is &htmlparser.htmlDefaultSAXHandler:
  *                 sax = <xmlparser.xmlSAXHandler*> tree.xmlMalloc(sizeof(xmlparser.xmlSAXHandler))
  *                 if sax is NULL:             # <<<<<<<<<<<<<<
@@ -117503,7 +117594,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
       }
 
-      /* "src/lxml/parser.pxi":915
+      /* "src/lxml/parser.pxi":918
  *                 if sax is NULL:
  *                     raise MemoryError()
  *                 cstring_h.memcpy(sax, &htmlparser.htmlDefaultSAXHandler,             # <<<<<<<<<<<<<<
@@ -117512,7 +117603,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
       (void)(memcpy(__pyx_v_sax, (&htmlDefaultSAXHandler), (sizeof(htmlDefaultSAXHandler))));
 
-      /* "src/lxml/parser.pxi":917
+      /* "src/lxml/parser.pxi":920
  *                 cstring_h.memcpy(sax, &htmlparser.htmlDefaultSAXHandler,
  *                                  sizeof(htmlparser.htmlDefaultSAXHandler))
  *                 c_ctxt.sax = sax             # <<<<<<<<<<<<<<
@@ -117521,7 +117612,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
       __pyx_v_c_ctxt->sax = __pyx_v_sax;
 
-      /* "src/lxml/parser.pxi":911
+      /* "src/lxml/parser.pxi":914
  *         if sax is not NULL and sax.initialized and sax.initialized != xmlparser.XML_SAX2_MAGIC:
  *             # need to extend SAX1 context to SAX2 to get proper error reports
  *             if <xmlparser.xmlSAXHandlerV1*>sax is &htmlparser.htmlDefaultSAXHandler:             # <<<<<<<<<<<<<<
@@ -117530,7 +117621,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
     }
 
-    /* "src/lxml/parser.pxi":918
+    /* "src/lxml/parser.pxi":921
  *                                  sizeof(htmlparser.htmlDefaultSAXHandler))
  *                 c_ctxt.sax = sax
  *             sax.initialized = xmlparser.XML_SAX2_MAGIC             # <<<<<<<<<<<<<<
@@ -117539,7 +117630,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
     __pyx_v_sax->initialized = XML_SAX2_MAGIC;
 
-    /* "src/lxml/parser.pxi":919
+    /* "src/lxml/parser.pxi":922
  *                 c_ctxt.sax = sax
  *             sax.initialized = xmlparser.XML_SAX2_MAGIC
  *             sax.serror = _receiveParserError             # <<<<<<<<<<<<<<
@@ -117548,7 +117639,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
     __pyx_v_sax->serror = __pyx_f_4lxml_5etree__receiveParserError;
 
-    /* "src/lxml/parser.pxi":920
+    /* "src/lxml/parser.pxi":923
  *             sax.initialized = xmlparser.XML_SAX2_MAGIC
  *             sax.serror = _receiveParserError
  *             sax.startElementNs = NULL             # <<<<<<<<<<<<<<
@@ -117557,7 +117648,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
     __pyx_v_sax->startElementNs = NULL;
 
-    /* "src/lxml/parser.pxi":921
+    /* "src/lxml/parser.pxi":924
  *             sax.serror = _receiveParserError
  *             sax.startElementNs = NULL
  *             sax.endElementNs = NULL             # <<<<<<<<<<<<<<
@@ -117566,7 +117657,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
     __pyx_v_sax->endElementNs = NULL;
 
-    /* "src/lxml/parser.pxi":922
+    /* "src/lxml/parser.pxi":925
  *             sax.startElementNs = NULL
  *             sax.endElementNs = NULL
  *             sax._private = NULL             # <<<<<<<<<<<<<<
@@ -117575,7 +117666,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
     __pyx_v_sax->_private = NULL;
 
-    /* "src/lxml/parser.pxi":909
+    /* "src/lxml/parser.pxi":912
  *     cdef int _registerHtmlErrorHandler(self, xmlparser.xmlParserCtxt* c_ctxt) except -1:
  *         cdef xmlparser.xmlSAXHandler* sax = c_ctxt.sax
  *         if sax is not NULL and sax.initialized and sax.initialized != xmlparser.XML_SAX2_MAGIC:             # <<<<<<<<<<<<<<
@@ -117584,7 +117675,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
   }
 
-  /* "src/lxml/parser.pxi":923
+  /* "src/lxml/parser.pxi":926
  *             sax.endElementNs = NULL
  *             sax._private = NULL
  *         return 0             # <<<<<<<<<<<<<<
@@ -117594,7 +117685,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":907
+  /* "src/lxml/parser.pxi":910
  *             pctxt.sax.cdataBlock = NULL
  * 
  *     cdef int _registerHtmlErrorHandler(self, xmlparser.xmlParserCtxt* c_ctxt) except -1:             # <<<<<<<<<<<<<<
@@ -117611,7 +117702,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":925
+/* "src/lxml/parser.pxi":928
  *         return 0
  * 
  *     cdef xmlparser.xmlParserCtxt* _newParserCtxt(self) except NULL:             # <<<<<<<<<<<<<<
@@ -117630,7 +117721,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_newParserCtxt", 0);
 
-  /* "src/lxml/parser.pxi":927
+  /* "src/lxml/parser.pxi":930
  *     cdef xmlparser.xmlParserCtxt* _newParserCtxt(self) except NULL:
  *         cdef xmlparser.xmlParserCtxt* c_ctxt
  *         if self._for_html:             # <<<<<<<<<<<<<<
@@ -117640,7 +117731,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   __pyx_t_1 = (__pyx_v_self->_for_html != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":928
+    /* "src/lxml/parser.pxi":931
  *         cdef xmlparser.xmlParserCtxt* c_ctxt
  *         if self._for_html:
  *             c_ctxt = htmlparser.htmlCreateMemoryParserCtxt('dummy', 5)             # <<<<<<<<<<<<<<
@@ -117649,7 +117740,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
  */
     __pyx_v_c_ctxt = htmlCreateMemoryParserCtxt(((char *)"dummy"), 5);
 
-    /* "src/lxml/parser.pxi":929
+    /* "src/lxml/parser.pxi":932
  *         if self._for_html:
  *             c_ctxt = htmlparser.htmlCreateMemoryParserCtxt('dummy', 5)
  *             if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -117659,16 +117750,16 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
     __pyx_t_1 = ((__pyx_v_c_ctxt != NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/parser.pxi":930
+      /* "src/lxml/parser.pxi":933
  *             c_ctxt = htmlparser.htmlCreateMemoryParserCtxt('dummy', 5)
  *             if c_ctxt is not NULL:
  *                 self._registerHtmlErrorHandler(c_ctxt)             # <<<<<<<<<<<<<<
  *         else:
  *             c_ctxt = xmlparser.xmlNewParserCtxt()
  */
-      __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_registerHtmlErrorHandler(__pyx_v_self, __pyx_v_c_ctxt); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 930, __pyx_L1_error)
+      __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_registerHtmlErrorHandler(__pyx_v_self, __pyx_v_c_ctxt); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 933, __pyx_L1_error)
 
-      /* "src/lxml/parser.pxi":929
+      /* "src/lxml/parser.pxi":932
  *         if self._for_html:
  *             c_ctxt = htmlparser.htmlCreateMemoryParserCtxt('dummy', 5)
  *             if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -117677,7 +117768,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
  */
     }
 
-    /* "src/lxml/parser.pxi":927
+    /* "src/lxml/parser.pxi":930
  *     cdef xmlparser.xmlParserCtxt* _newParserCtxt(self) except NULL:
  *         cdef xmlparser.xmlParserCtxt* c_ctxt
  *         if self._for_html:             # <<<<<<<<<<<<<<
@@ -117687,7 +117778,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
     goto __pyx_L3;
   }
 
-  /* "src/lxml/parser.pxi":932
+  /* "src/lxml/parser.pxi":935
  *                 self._registerHtmlErrorHandler(c_ctxt)
  *         else:
  *             c_ctxt = xmlparser.xmlNewParserCtxt()             # <<<<<<<<<<<<<<
@@ -117699,7 +117790,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   }
   __pyx_L3:;
 
-  /* "src/lxml/parser.pxi":933
+  /* "src/lxml/parser.pxi":936
  *         else:
  *             c_ctxt = xmlparser.xmlNewParserCtxt()
  *         if c_ctxt is NULL:             # <<<<<<<<<<<<<<
@@ -117709,16 +117800,16 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   __pyx_t_1 = ((__pyx_v_c_ctxt == NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/parser.pxi":934
+    /* "src/lxml/parser.pxi":937
  *             c_ctxt = xmlparser.xmlNewParserCtxt()
  *         if c_ctxt is NULL:
  *             raise MemoryError             # <<<<<<<<<<<<<<
  *         c_ctxt.sax.startDocument = _initSaxDocument
  *         return c_ctxt
  */
-    PyErr_NoMemory(); __PYX_ERR(2, 934, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(2, 937, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":933
+    /* "src/lxml/parser.pxi":936
  *         else:
  *             c_ctxt = xmlparser.xmlNewParserCtxt()
  *         if c_ctxt is NULL:             # <<<<<<<<<<<<<<
@@ -117727,7 +117818,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
  */
   }
 
-  /* "src/lxml/parser.pxi":935
+  /* "src/lxml/parser.pxi":938
  *         if c_ctxt is NULL:
  *             raise MemoryError
  *         c_ctxt.sax.startDocument = _initSaxDocument             # <<<<<<<<<<<<<<
@@ -117736,7 +117827,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
  */
   __pyx_v_c_ctxt->sax->startDocument = __pyx_f_4lxml_5etree__initSaxDocument;
 
-  /* "src/lxml/parser.pxi":936
+  /* "src/lxml/parser.pxi":939
  *             raise MemoryError
  *         c_ctxt.sax.startDocument = _initSaxDocument
  *         return c_ctxt             # <<<<<<<<<<<<<<
@@ -117746,7 +117837,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   __pyx_r = __pyx_v_c_ctxt;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":925
+  /* "src/lxml/parser.pxi":928
  *         return 0
  * 
  *     cdef xmlparser.xmlParserCtxt* _newParserCtxt(self) except NULL:             # <<<<<<<<<<<<<<
@@ -117763,7 +117854,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":938
+/* "src/lxml/parser.pxi":941
  *         return c_ctxt
  * 
  *     cdef xmlparser.xmlParserCtxt* _newPushParserCtxt(self) except NULL:             # <<<<<<<<<<<<<<
@@ -117785,7 +117876,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_newPushParserCtxt", 0);
 
-  /* "src/lxml/parser.pxi":940
+  /* "src/lxml/parser.pxi":943
  *     cdef xmlparser.xmlParserCtxt* _newPushParserCtxt(self) except NULL:
  *         cdef xmlparser.xmlParserCtxt* c_ctxt
  *         cdef char* c_filename = _cstr(self._filename) if self._filename is not None else NULL             # <<<<<<<<<<<<<<
@@ -117803,7 +117894,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   }
   __pyx_v_c_filename = __pyx_t_1;
 
-  /* "src/lxml/parser.pxi":941
+  /* "src/lxml/parser.pxi":944
  *         cdef xmlparser.xmlParserCtxt* c_ctxt
  *         cdef char* c_filename = _cstr(self._filename) if self._filename is not None else NULL
  *         if self._for_html:             # <<<<<<<<<<<<<<
@@ -117813,7 +117904,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   __pyx_t_2 = (__pyx_v_self->_for_html != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":942
+    /* "src/lxml/parser.pxi":945
  *         cdef char* c_filename = _cstr(self._filename) if self._filename is not None else NULL
  *         if self._for_html:
  *             c_ctxt = htmlparser.htmlCreatePushParserCtxt(             # <<<<<<<<<<<<<<
@@ -117822,7 +117913,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
  */
     __pyx_v_c_ctxt = htmlCreatePushParserCtxt(NULL, NULL, NULL, 0, __pyx_v_c_filename, XML_CHAR_ENCODING_NONE);
 
-    /* "src/lxml/parser.pxi":944
+    /* "src/lxml/parser.pxi":947
  *             c_ctxt = htmlparser.htmlCreatePushParserCtxt(
  *                 NULL, NULL, NULL, 0, c_filename, tree.XML_CHAR_ENCODING_NONE)
  *             if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -117832,16 +117923,16 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
     __pyx_t_2 = ((__pyx_v_c_ctxt != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":945
+      /* "src/lxml/parser.pxi":948
  *                 NULL, NULL, NULL, 0, c_filename, tree.XML_CHAR_ENCODING_NONE)
  *             if c_ctxt is not NULL:
  *                 self._registerHtmlErrorHandler(c_ctxt)             # <<<<<<<<<<<<<<
  *                 htmlparser.htmlCtxtUseOptions(c_ctxt, self._parse_options)
  *         else:
  */
-      __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_registerHtmlErrorHandler(__pyx_v_self, __pyx_v_c_ctxt); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 945, __pyx_L1_error)
+      __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_registerHtmlErrorHandler(__pyx_v_self, __pyx_v_c_ctxt); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 948, __pyx_L1_error)
 
-      /* "src/lxml/parser.pxi":946
+      /* "src/lxml/parser.pxi":949
  *             if c_ctxt is not NULL:
  *                 self._registerHtmlErrorHandler(c_ctxt)
  *                 htmlparser.htmlCtxtUseOptions(c_ctxt, self._parse_options)             # <<<<<<<<<<<<<<
@@ -117850,7 +117941,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
  */
       (void)(htmlCtxtUseOptions(__pyx_v_c_ctxt, __pyx_v_self->_parse_options));
 
-      /* "src/lxml/parser.pxi":944
+      /* "src/lxml/parser.pxi":947
  *             c_ctxt = htmlparser.htmlCreatePushParserCtxt(
  *                 NULL, NULL, NULL, 0, c_filename, tree.XML_CHAR_ENCODING_NONE)
  *             if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -117859,7 +117950,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
  */
     }
 
-    /* "src/lxml/parser.pxi":941
+    /* "src/lxml/parser.pxi":944
  *         cdef xmlparser.xmlParserCtxt* c_ctxt
  *         cdef char* c_filename = _cstr(self._filename) if self._filename is not None else NULL
  *         if self._for_html:             # <<<<<<<<<<<<<<
@@ -117869,7 +117960,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
     goto __pyx_L3;
   }
 
-  /* "src/lxml/parser.pxi":948
+  /* "src/lxml/parser.pxi":951
  *                 htmlparser.htmlCtxtUseOptions(c_ctxt, self._parse_options)
  *         else:
  *             c_ctxt = xmlparser.xmlCreatePushParserCtxt(             # <<<<<<<<<<<<<<
@@ -117878,7 +117969,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
  */
   /*else*/ {
 
-    /* "src/lxml/parser.pxi":949
+    /* "src/lxml/parser.pxi":952
  *         else:
  *             c_ctxt = xmlparser.xmlCreatePushParserCtxt(
  *                 NULL, NULL, NULL, 0, c_filename)             # <<<<<<<<<<<<<<
@@ -117887,7 +117978,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
  */
     __pyx_v_c_ctxt = xmlCreatePushParserCtxt(NULL, NULL, NULL, 0, __pyx_v_c_filename);
 
-    /* "src/lxml/parser.pxi":950
+    /* "src/lxml/parser.pxi":953
  *             c_ctxt = xmlparser.xmlCreatePushParserCtxt(
  *                 NULL, NULL, NULL, 0, c_filename)
  *             if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -117897,7 +117988,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
     __pyx_t_2 = ((__pyx_v_c_ctxt != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":951
+      /* "src/lxml/parser.pxi":954
  *                 NULL, NULL, NULL, 0, c_filename)
  *             if c_ctxt is not NULL:
  *                 xmlparser.xmlCtxtUseOptions(c_ctxt, self._parse_options)             # <<<<<<<<<<<<<<
@@ -117906,7 +117997,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
  */
       (void)(xmlCtxtUseOptions(__pyx_v_c_ctxt, __pyx_v_self->_parse_options));
 
-      /* "src/lxml/parser.pxi":950
+      /* "src/lxml/parser.pxi":953
  *             c_ctxt = xmlparser.xmlCreatePushParserCtxt(
  *                 NULL, NULL, NULL, 0, c_filename)
  *             if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -117917,7 +118008,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   }
   __pyx_L3:;
 
-  /* "src/lxml/parser.pxi":952
+  /* "src/lxml/parser.pxi":955
  *             if c_ctxt is not NULL:
  *                 xmlparser.xmlCtxtUseOptions(c_ctxt, self._parse_options)
  *         if c_ctxt is NULL:             # <<<<<<<<<<<<<<
@@ -117927,16 +118018,16 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   __pyx_t_2 = ((__pyx_v_c_ctxt == NULL) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/parser.pxi":953
+    /* "src/lxml/parser.pxi":956
  *                 xmlparser.xmlCtxtUseOptions(c_ctxt, self._parse_options)
  *         if c_ctxt is NULL:
  *             raise MemoryError()             # <<<<<<<<<<<<<<
  *         c_ctxt.sax.startDocument = _initSaxDocument
  *         return c_ctxt
  */
-    PyErr_NoMemory(); __PYX_ERR(2, 953, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(2, 956, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":952
+    /* "src/lxml/parser.pxi":955
  *             if c_ctxt is not NULL:
  *                 xmlparser.xmlCtxtUseOptions(c_ctxt, self._parse_options)
  *         if c_ctxt is NULL:             # <<<<<<<<<<<<<<
@@ -117945,7 +118036,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
  */
   }
 
-  /* "src/lxml/parser.pxi":954
+  /* "src/lxml/parser.pxi":957
  *         if c_ctxt is NULL:
  *             raise MemoryError()
  *         c_ctxt.sax.startDocument = _initSaxDocument             # <<<<<<<<<<<<<<
@@ -117954,7 +118045,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
  */
   __pyx_v_c_ctxt->sax->startDocument = __pyx_f_4lxml_5etree__initSaxDocument;
 
-  /* "src/lxml/parser.pxi":955
+  /* "src/lxml/parser.pxi":958
  *             raise MemoryError()
  *         c_ctxt.sax.startDocument = _initSaxDocument
  *         return c_ctxt             # <<<<<<<<<<<<<<
@@ -117964,7 +118055,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   __pyx_r = __pyx_v_c_ctxt;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":938
+  /* "src/lxml/parser.pxi":941
  *         return c_ctxt
  * 
  *     cdef xmlparser.xmlParserCtxt* _newPushParserCtxt(self) except NULL:             # <<<<<<<<<<<<<<
@@ -117982,7 +118073,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":958
+/* "src/lxml/parser.pxi":961
  * 
  *     @property
  *     def error_log(self):             # <<<<<<<<<<<<<<
@@ -118013,19 +118104,19 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9error_log___get__(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "src/lxml/parser.pxi":962
+  /* "src/lxml/parser.pxi":965
  *         """
  *         cdef _ParserContext context
  *         context = self._getParserContext()             # <<<<<<<<<<<<<<
  *         return context._error_log.copy()
  * 
  */
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 962, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 965, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":963
+  /* "src/lxml/parser.pxi":966
  *         cdef _ParserContext context
  *         context = self._getParserContext()
  *         return context._error_log.copy()             # <<<<<<<<<<<<<<
@@ -118033,13 +118124,13 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9error_log___get__(struct _
  *     @property
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_context->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_context->_error_log), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 963, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_context->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_context->_error_log), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 966, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":958
+  /* "src/lxml/parser.pxi":961
  * 
  *     @property
  *     def error_log(self):             # <<<<<<<<<<<<<<
@@ -118059,7 +118150,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9error_log___get__(struct _
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":966
+/* "src/lxml/parser.pxi":969
  * 
  *     @property
  *     def resolvers(self):             # <<<<<<<<<<<<<<
@@ -118085,7 +118176,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9resolvers___get__(struct _
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "src/lxml/parser.pxi":968
+  /* "src/lxml/parser.pxi":971
  *     def resolvers(self):
  *         """The custom resolver registry of this parser."""
  *         return self._resolvers             # <<<<<<<<<<<<<<
@@ -118097,7 +118188,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9resolvers___get__(struct _
   __pyx_r = ((PyObject *)__pyx_v_self->_resolvers);
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":966
+  /* "src/lxml/parser.pxi":969
  * 
  *     @property
  *     def resolvers(self):             # <<<<<<<<<<<<<<
@@ -118112,7 +118203,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9resolvers___get__(struct _
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":971
+/* "src/lxml/parser.pxi":974
  * 
  *     @property
  *     def version(self):             # <<<<<<<<<<<<<<
@@ -118143,7 +118234,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_7version___get__(CYTHON_UNU
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "src/lxml/parser.pxi":973
+  /* "src/lxml/parser.pxi":976
  *     def version(self):
  *         """The version of the underlying XML parser."""
  *         return u"libxml2 %d.%d.%d" % LIBXML_VERSION             # <<<<<<<<<<<<<<
@@ -118151,16 +118242,16 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_7version___get__(CYTHON_UNU
  *     def setElementClassLookup(self, ElementClassLookup lookup = None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_LIBXML_VERSION); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 973, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_LIBXML_VERSION); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 976, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_libxml2_d_d_d, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 973, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_libxml2_d_d_d, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 976, __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/parser.pxi":971
+  /* "src/lxml/parser.pxi":974
  * 
  *     @property
  *     def version(self):             # <<<<<<<<<<<<<<
@@ -118180,7 +118271,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_7version___get__(CYTHON_UNU
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":975
+/* "src/lxml/parser.pxi":978
  *         return u"libxml2 %d.%d.%d" % LIBXML_VERSION
  * 
  *     def setElementClassLookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
@@ -118222,7 +118313,7 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_3setElementClassLookup(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setElementClassLookup") < 0)) __PYX_ERR(2, 975, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setElementClassLookup") < 0)) __PYX_ERR(2, 978, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -118236,13 +118327,13 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_3setElementClassLookup(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setElementClassLookup", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 975, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setElementClassLookup", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 978, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._BaseParser.setElementClassLookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup), __pyx_ptype_4lxml_5etree_ElementClassLookup, 1, "lookup", 0))) __PYX_ERR(2, 975, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup), __pyx_ptype_4lxml_5etree_ElementClassLookup, 1, "lookup", 0))) __PYX_ERR(2, 978, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_11_BaseParser_2setElementClassLookup(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_lookup);
 
   /* function exit code */
@@ -118265,14 +118356,14 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_2setElementClassLookup(stru
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setElementClassLookup", 0);
 
-  /* "src/lxml/parser.pxi":977
+  /* "src/lxml/parser.pxi":980
  *     def setElementClassLookup(self, ElementClassLookup lookup = None):
  *         u":deprecated: use ``parser.set_element_class_lookup(lookup)`` instead."
  *         self.set_element_class_lookup(lookup)             # <<<<<<<<<<<<<<
  * 
  *     def set_element_class_lookup(self, ElementClassLookup lookup = None):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 977, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 980, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -118286,12 +118377,12 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_2setElementClassLookup(stru
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)__pyx_v_lookup)) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_lookup));
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 977, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 980, __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/parser.pxi":975
+  /* "src/lxml/parser.pxi":978
  *         return u"libxml2 %d.%d.%d" % LIBXML_VERSION
  * 
  *     def setElementClassLookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
@@ -118314,7 +118405,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_2setElementClassLookup(stru
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":979
+/* "src/lxml/parser.pxi":982
  *         self.set_element_class_lookup(lookup)
  * 
  *     def set_element_class_lookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
@@ -118356,7 +118447,7 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_5set_element_class_lookup(P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_element_class_lookup") < 0)) __PYX_ERR(2, 979, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_element_class_lookup") < 0)) __PYX_ERR(2, 982, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -118370,13 +118461,13 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_5set_element_class_lookup(P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_element_class_lookup", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 979, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_element_class_lookup", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 982, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._BaseParser.set_element_class_lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup), __pyx_ptype_4lxml_5etree_ElementClassLookup, 1, "lookup", 0))) __PYX_ERR(2, 979, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup), __pyx_ptype_4lxml_5etree_ElementClassLookup, 1, "lookup", 0))) __PYX_ERR(2, 982, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_11_BaseParser_4set_element_class_lookup(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_lookup);
 
   /* function exit code */
@@ -118393,7 +118484,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_4set_element_class_lookup(s
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_element_class_lookup", 0);
 
-  /* "src/lxml/parser.pxi":986
+  /* "src/lxml/parser.pxi":989
  *         Reset it by passing None or nothing.
  *         """
  *         self._class_lookup = lookup             # <<<<<<<<<<<<<<
@@ -118406,7 +118497,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_4set_element_class_lookup(s
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_class_lookup));
   __pyx_v_self->_class_lookup = __pyx_v_lookup;
 
-  /* "src/lxml/parser.pxi":979
+  /* "src/lxml/parser.pxi":982
  *         self.set_element_class_lookup(lookup)
  * 
  *     def set_element_class_lookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
@@ -118421,7 +118512,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_4set_element_class_lookup(s
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":988
+/* "src/lxml/parser.pxi":991
  *         self._class_lookup = lookup
  * 
  *     cdef _BaseParser _copy(self):             # <<<<<<<<<<<<<<
@@ -118443,14 +118534,14 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copy", 0);
 
-  /* "src/lxml/parser.pxi":991
+  /* "src/lxml/parser.pxi":994
  *         u"Create a new parser with the same configuration."
  *         cdef _BaseParser parser
  *         parser = self.__class__()             # <<<<<<<<<<<<<<
  *         parser._parse_options = self._parse_options
  *         parser._for_html = self._for_html
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 991, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 994, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -118464,14 +118555,14 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   }
   __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(2, 991, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 994, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__BaseParser))))) __PYX_ERR(2, 991, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__BaseParser))))) __PYX_ERR(2, 994, __pyx_L1_error)
   __pyx_v_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":992
+  /* "src/lxml/parser.pxi":995
  *         cdef _BaseParser parser
  *         parser = self.__class__()
  *         parser._parse_options = self._parse_options             # <<<<<<<<<<<<<<
@@ -118481,7 +118572,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_t_4 = __pyx_v_self->_parse_options;
   __pyx_v_parser->_parse_options = __pyx_t_4;
 
-  /* "src/lxml/parser.pxi":993
+  /* "src/lxml/parser.pxi":996
  *         parser = self.__class__()
  *         parser._parse_options = self._parse_options
  *         parser._for_html = self._for_html             # <<<<<<<<<<<<<<
@@ -118491,7 +118582,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_t_5 = __pyx_v_self->_for_html;
   __pyx_v_parser->_for_html = __pyx_t_5;
 
-  /* "src/lxml/parser.pxi":994
+  /* "src/lxml/parser.pxi":997
  *         parser._parse_options = self._parse_options
  *         parser._for_html = self._for_html
  *         parser._remove_comments = self._remove_comments             # <<<<<<<<<<<<<<
@@ -118501,7 +118592,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_t_5 = __pyx_v_self->_remove_comments;
   __pyx_v_parser->_remove_comments = __pyx_t_5;
 
-  /* "src/lxml/parser.pxi":995
+  /* "src/lxml/parser.pxi":998
  *         parser._for_html = self._for_html
  *         parser._remove_comments = self._remove_comments
  *         parser._remove_pis = self._remove_pis             # <<<<<<<<<<<<<<
@@ -118511,7 +118602,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_t_5 = __pyx_v_self->_remove_pis;
   __pyx_v_parser->_remove_pis = __pyx_t_5;
 
-  /* "src/lxml/parser.pxi":996
+  /* "src/lxml/parser.pxi":999
  *         parser._remove_comments = self._remove_comments
  *         parser._remove_pis = self._remove_pis
  *         parser._strip_cdata = self._strip_cdata             # <<<<<<<<<<<<<<
@@ -118521,7 +118612,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_t_5 = __pyx_v_self->_strip_cdata;
   __pyx_v_parser->_strip_cdata = __pyx_t_5;
 
-  /* "src/lxml/parser.pxi":997
+  /* "src/lxml/parser.pxi":1000
  *         parser._remove_pis = self._remove_pis
  *         parser._strip_cdata = self._strip_cdata
  *         parser._filename = self._filename             # <<<<<<<<<<<<<<
@@ -118536,7 +118627,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_filename = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":998
+  /* "src/lxml/parser.pxi":1001
  *         parser._strip_cdata = self._strip_cdata
  *         parser._filename = self._filename
  *         parser._resolvers = self._resolvers             # <<<<<<<<<<<<<<
@@ -118551,7 +118642,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_resolvers = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":999
+  /* "src/lxml/parser.pxi":1002
  *         parser._filename = self._filename
  *         parser._resolvers = self._resolvers
  *         parser.target = self.target             # <<<<<<<<<<<<<<
@@ -118566,7 +118657,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->target = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":1000
+  /* "src/lxml/parser.pxi":1003
  *         parser._resolvers = self._resolvers
  *         parser.target = self.target
  *         parser._class_lookup  = self._class_lookup             # <<<<<<<<<<<<<<
@@ -118581,7 +118672,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_class_lookup = ((struct LxmlElementClassLookup *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":1001
+  /* "src/lxml/parser.pxi":1004
  *         parser.target = self.target
  *         parser._class_lookup  = self._class_lookup
  *         parser._default_encoding = self._default_encoding             # <<<<<<<<<<<<<<
@@ -118596,7 +118687,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_default_encoding = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":1002
+  /* "src/lxml/parser.pxi":1005
  *         parser._class_lookup  = self._class_lookup
  *         parser._default_encoding = self._default_encoding
  *         parser._schema = self._schema             # <<<<<<<<<<<<<<
@@ -118611,7 +118702,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_schema = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":1003
+  /* "src/lxml/parser.pxi":1006
  *         parser._default_encoding = self._default_encoding
  *         parser._schema = self._schema
  *         parser._events_to_collect = self._events_to_collect             # <<<<<<<<<<<<<<
@@ -118626,7 +118717,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_events_to_collect = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":1004
+  /* "src/lxml/parser.pxi":1007
  *         parser._schema = self._schema
  *         parser._events_to_collect = self._events_to_collect
  *         return parser             # <<<<<<<<<<<<<<
@@ -118638,7 +118729,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_r = __pyx_v_parser;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":988
+  /* "src/lxml/parser.pxi":991
  *         self._class_lookup = lookup
  * 
  *     cdef _BaseParser _copy(self):             # <<<<<<<<<<<<<<
@@ -118660,7 +118751,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1006
+/* "src/lxml/parser.pxi":1009
  *         return parser
  * 
  *     def copy(self):             # <<<<<<<<<<<<<<
@@ -118692,7 +118783,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_6copy(struct __pyx_obj_4lxm
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("copy", 0);
 
-  /* "src/lxml/parser.pxi":1011
+  /* "src/lxml/parser.pxi":1014
  *         Create a new parser with the same configuration.
  *         """
  *         return self._copy()             # <<<<<<<<<<<<<<
@@ -118700,13 +118791,13 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_6copy(struct __pyx_obj_4lxm
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_copy(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1011, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_copy(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1014, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1006
+  /* "src/lxml/parser.pxi":1009
  *         return parser
  * 
  *     def copy(self):             # <<<<<<<<<<<<<<
@@ -118725,7 +118816,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_6copy(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1013
+/* "src/lxml/parser.pxi":1016
  *         return self._copy()
  * 
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
@@ -118787,7 +118878,7 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_9makeelement(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "makeelement") < 0)) __PYX_ERR(2, 1013, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "makeelement") < 0)) __PYX_ERR(2, 1016, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -118806,7 +118897,7 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_9makeelement(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("makeelement", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1013, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("makeelement", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1016, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__extra); __pyx_v__extra = 0;
   __Pyx_AddTraceback("lxml.etree._BaseParser.makeelement", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -118830,7 +118921,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_8makeelement(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("makeelement", 0);
 
-  /* "src/lxml/parser.pxi":1018
+  /* "src/lxml/parser.pxi":1021
  *         Creates a new element associated with this parser.
  *         """
  *         return _makeElement(_tag, NULL, None, self, None, None,             # <<<<<<<<<<<<<<
@@ -118839,20 +118930,20 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_8makeelement(struct __pyx_o
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "src/lxml/parser.pxi":1019
+  /* "src/lxml/parser.pxi":1022
  *         """
  *         return _makeElement(_tag, NULL, None, self, None, None,
  *                             attrib, nsmap, _extra)             # <<<<<<<<<<<<<<
  * 
  *     # internal parser methods
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__makeElement(__pyx_v__tag, NULL, ((struct LxmlDocument *)Py_None), __pyx_v_self, Py_None, Py_None, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1018, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__makeElement(__pyx_v__tag, NULL, ((struct LxmlDocument *)Py_None), __pyx_v_self, Py_None, Py_None, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1021, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1013
+  /* "src/lxml/parser.pxi":1016
  *         return self._copy()
  * 
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
@@ -118871,7 +118962,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_8makeelement(struct __pyx_o
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1023
+/* "src/lxml/parser.pxi":1026
  *     # internal parser methods
  * 
  *     cdef xmlDoc* _parseUnicodeDoc(self, utext, char* c_filename) except NULL:             # <<<<<<<<<<<<<<
@@ -118913,7 +119004,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseUnicodeDoc", 0);
 
-  /* "src/lxml/parser.pxi":1032
+  /* "src/lxml/parser.pxi":1035
  *         cdef int buffer_len, c_kind
  *         cdef const_char* c_text
  *         cdef const_char* c_encoding = _PY_UNICODE_ENCODING             # <<<<<<<<<<<<<<
@@ -118922,7 +119013,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
   __pyx_v_c_encoding = __pyx_v_4lxml_5etree__PY_UNICODE_ENCODING;
 
-  /* "src/lxml/parser.pxi":1034
+  /* "src/lxml/parser.pxi":1037
  *         cdef const_char* c_encoding = _PY_UNICODE_ENCODING
  *         cdef bint is_pep393_string = (
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(utext))             # <<<<<<<<<<<<<<
@@ -118940,7 +119031,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   __pyx_L3_bool_binop_done:;
   __pyx_v_is_pep393_string = __pyx_t_1;
 
-  /* "src/lxml/parser.pxi":1035
+  /* "src/lxml/parser.pxi":1038
  *         cdef bint is_pep393_string = (
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(utext))
  *         if is_pep393_string:             # <<<<<<<<<<<<<<
@@ -118950,7 +119041,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   __pyx_t_1 = (__pyx_v_is_pep393_string != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1036
+    /* "src/lxml/parser.pxi":1039
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(utext))
  *         if is_pep393_string:
  *             c_text = <const_char*>python.PyUnicode_DATA(utext)             # <<<<<<<<<<<<<<
@@ -118959,7 +119050,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_v_c_text = ((const char *)PyUnicode_DATA(__pyx_v_utext));
 
-    /* "src/lxml/parser.pxi":1037
+    /* "src/lxml/parser.pxi":1040
  *         if is_pep393_string:
  *             c_text = <const_char*>python.PyUnicode_DATA(utext)
  *             py_buffer_len = python.PyUnicode_GET_LENGTH(utext)             # <<<<<<<<<<<<<<
@@ -118968,7 +119059,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_v_py_buffer_len = PyUnicode_GET_LENGTH(__pyx_v_utext);
 
-    /* "src/lxml/parser.pxi":1038
+    /* "src/lxml/parser.pxi":1041
  *             c_text = <const_char*>python.PyUnicode_DATA(utext)
  *             py_buffer_len = python.PyUnicode_GET_LENGTH(utext)
  *             c_kind = python.PyUnicode_KIND(utext)             # <<<<<<<<<<<<<<
@@ -118977,7 +119068,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_v_c_kind = PyUnicode_KIND(__pyx_v_utext);
 
-    /* "src/lxml/parser.pxi":1039
+    /* "src/lxml/parser.pxi":1042
  *             py_buffer_len = python.PyUnicode_GET_LENGTH(utext)
  *             c_kind = python.PyUnicode_KIND(utext)
  *             if c_kind == 1:             # <<<<<<<<<<<<<<
@@ -118987,7 +119078,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
     switch (__pyx_v_c_kind) {
       case 1:
 
-      /* "src/lxml/parser.pxi":1040
+      /* "src/lxml/parser.pxi":1043
  *             c_kind = python.PyUnicode_KIND(utext)
  *             if c_kind == 1:
  *                 c_encoding = 'ISO-8859-1'             # <<<<<<<<<<<<<<
@@ -118996,7 +119087,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
       __pyx_v_c_encoding = ((const char *)"ISO-8859-1");
 
-      /* "src/lxml/parser.pxi":1039
+      /* "src/lxml/parser.pxi":1042
  *             py_buffer_len = python.PyUnicode_GET_LENGTH(utext)
  *             c_kind = python.PyUnicode_KIND(utext)
  *             if c_kind == 1:             # <<<<<<<<<<<<<<
@@ -119006,7 +119097,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       break;
       case 2:
 
-      /* "src/lxml/parser.pxi":1042
+      /* "src/lxml/parser.pxi":1045
  *                 c_encoding = 'ISO-8859-1'
  *             elif c_kind == 2:
  *                 py_buffer_len *= 2             # <<<<<<<<<<<<<<
@@ -119015,7 +119106,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
       __pyx_v_py_buffer_len = (__pyx_v_py_buffer_len * 2);
 
-      /* "src/lxml/parser.pxi":1043
+      /* "src/lxml/parser.pxi":1046
  *             elif c_kind == 2:
  *                 py_buffer_len *= 2
  *                 if python.PY_BIG_ENDIAN:             # <<<<<<<<<<<<<<
@@ -119025,7 +119116,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       __pyx_t_1 = (PY_BIG_ENDIAN != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/parser.pxi":1044
+        /* "src/lxml/parser.pxi":1047
  *                 py_buffer_len *= 2
  *                 if python.PY_BIG_ENDIAN:
  *                     c_encoding = 'UTF-16BE'  # actually UCS-2             # <<<<<<<<<<<<<<
@@ -119034,7 +119125,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
         __pyx_v_c_encoding = ((const char *)"UTF-16BE");
 
-        /* "src/lxml/parser.pxi":1043
+        /* "src/lxml/parser.pxi":1046
  *             elif c_kind == 2:
  *                 py_buffer_len *= 2
  *                 if python.PY_BIG_ENDIAN:             # <<<<<<<<<<<<<<
@@ -119044,7 +119135,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
         goto __pyx_L6;
       }
 
-      /* "src/lxml/parser.pxi":1046
+      /* "src/lxml/parser.pxi":1049
  *                     c_encoding = 'UTF-16BE'  # actually UCS-2
  *                 else:
  *                     c_encoding = 'UTF-16LE'  # actually UCS-2             # <<<<<<<<<<<<<<
@@ -119056,7 +119147,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       }
       __pyx_L6:;
 
-      /* "src/lxml/parser.pxi":1041
+      /* "src/lxml/parser.pxi":1044
  *             if c_kind == 1:
  *                 c_encoding = 'ISO-8859-1'
  *             elif c_kind == 2:             # <<<<<<<<<<<<<<
@@ -119066,7 +119157,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       break;
       case 4:
 
-      /* "src/lxml/parser.pxi":1048
+      /* "src/lxml/parser.pxi":1051
  *                     c_encoding = 'UTF-16LE'  # actually UCS-2
  *             elif c_kind == 4:
  *                 py_buffer_len *= 4             # <<<<<<<<<<<<<<
@@ -119075,7 +119166,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
       __pyx_v_py_buffer_len = (__pyx_v_py_buffer_len * 4);
 
-      /* "src/lxml/parser.pxi":1049
+      /* "src/lxml/parser.pxi":1052
  *             elif c_kind == 4:
  *                 py_buffer_len *= 4
  *                 if python.PY_BIG_ENDIAN:             # <<<<<<<<<<<<<<
@@ -119085,7 +119176,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       __pyx_t_1 = (PY_BIG_ENDIAN != 0);
       if (__pyx_t_1) {
 
-        /* "src/lxml/parser.pxi":1050
+        /* "src/lxml/parser.pxi":1053
  *                 py_buffer_len *= 4
  *                 if python.PY_BIG_ENDIAN:
  *                     c_encoding = 'UCS-4BE'             # <<<<<<<<<<<<<<
@@ -119094,7 +119185,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
         __pyx_v_c_encoding = ((const char *)"UCS-4BE");
 
-        /* "src/lxml/parser.pxi":1049
+        /* "src/lxml/parser.pxi":1052
  *             elif c_kind == 4:
  *                 py_buffer_len *= 4
  *                 if python.PY_BIG_ENDIAN:             # <<<<<<<<<<<<<<
@@ -119104,7 +119195,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
         goto __pyx_L7;
       }
 
-      /* "src/lxml/parser.pxi":1052
+      /* "src/lxml/parser.pxi":1055
  *                     c_encoding = 'UCS-4BE'
  *                 else:
  *                     c_encoding = 'UCS-4LE'             # <<<<<<<<<<<<<<
@@ -119116,7 +119207,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       }
       __pyx_L7:;
 
-      /* "src/lxml/parser.pxi":1047
+      /* "src/lxml/parser.pxi":1050
  *                 else:
  *                     c_encoding = 'UTF-16LE'  # actually UCS-2
  *             elif c_kind == 4:             # <<<<<<<<<<<<<<
@@ -119126,7 +119217,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       break;
       default:
 
-      /* "src/lxml/parser.pxi":1054
+      /* "src/lxml/parser.pxi":1057
  *                     c_encoding = 'UCS-4LE'
  *             else:
  *                 assert False, f"Illegal Unicode kind {c_kind}"             # <<<<<<<<<<<<<<
@@ -119134,23 +119225,23 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  *             py_buffer_len = python.PyUnicode_GET_DATA_SIZE(utext)
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
+      if (unlikely(__pyx_assertions_enabled())) {
         if (unlikely(!0)) {
-          __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_v_c_kind, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1054, __pyx_L1_error)
+          __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_v_c_kind, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1057, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Illegal_Unicode_kind, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1054, __pyx_L1_error)
+          __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Illegal_Unicode_kind, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1057, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_4);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          __PYX_ERR(2, 1054, __pyx_L1_error)
+          __PYX_ERR(2, 1057, __pyx_L1_error)
         }
       }
       #endif
       break;
     }
 
-    /* "src/lxml/parser.pxi":1035
+    /* "src/lxml/parser.pxi":1038
  *         cdef bint is_pep393_string = (
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(utext))
  *         if is_pep393_string:             # <<<<<<<<<<<<<<
@@ -119160,7 +119251,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
     goto __pyx_L5;
   }
 
-  /* "src/lxml/parser.pxi":1056
+  /* "src/lxml/parser.pxi":1059
  *                 assert False, f"Illegal Unicode kind {c_kind}"
  *         else:
  *             py_buffer_len = python.PyUnicode_GET_DATA_SIZE(utext)             # <<<<<<<<<<<<<<
@@ -119170,7 +119261,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   /*else*/ {
     __pyx_v_py_buffer_len = PyUnicode_GET_DATA_SIZE(__pyx_v_utext);
 
-    /* "src/lxml/parser.pxi":1057
+    /* "src/lxml/parser.pxi":1060
  *         else:
  *             py_buffer_len = python.PyUnicode_GET_DATA_SIZE(utext)
  *             c_text = python.PyUnicode_AS_DATA(utext)             # <<<<<<<<<<<<<<
@@ -119181,7 +119272,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   }
   __pyx_L5:;
 
-  /* "src/lxml/parser.pxi":1058
+  /* "src/lxml/parser.pxi":1061
  *             py_buffer_len = python.PyUnicode_GET_DATA_SIZE(utext)
  *             c_text = python.PyUnicode_AS_DATA(utext)
  *         assert 0 <= py_buffer_len <= limits.INT_MAX             # <<<<<<<<<<<<<<
@@ -119189,19 +119280,19 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  * 
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_1 = (0 <= __pyx_v_py_buffer_len);
     if (__pyx_t_1) {
       __pyx_t_1 = (__pyx_v_py_buffer_len <= INT_MAX);
     }
     if (unlikely(!(__pyx_t_1 != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(2, 1058, __pyx_L1_error)
+      __PYX_ERR(2, 1061, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/parser.pxi":1059
+  /* "src/lxml/parser.pxi":1062
  *             c_text = python.PyUnicode_AS_DATA(utext)
  *         assert 0 <= py_buffer_len <= limits.INT_MAX
  *         buffer_len = py_buffer_len             # <<<<<<<<<<<<<<
@@ -119210,28 +119301,28 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
   __pyx_v_buffer_len = __pyx_v_py_buffer_len;
 
-  /* "src/lxml/parser.pxi":1061
+  /* "src/lxml/parser.pxi":1064
  *         buffer_len = py_buffer_len
  * 
  *         context = self._getParserContext()             # <<<<<<<<<<<<<<
  *         context.prepare()
  *         try:
  */
-  __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1061, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1064, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "src/lxml/parser.pxi":1062
+  /* "src/lxml/parser.pxi":1065
  * 
  *         context = self._getParserContext()
  *         context.prepare()             # <<<<<<<<<<<<<<
  *         try:
  *             pctxt = context._c_ctxt
  */
-  __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context, NULL); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 1062, __pyx_L1_error)
+  __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context, NULL); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 1065, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1063
+  /* "src/lxml/parser.pxi":1066
  *         context = self._getParserContext()
  *         context.prepare()
  *         try:             # <<<<<<<<<<<<<<
@@ -119240,7 +119331,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
   /*try:*/ {
 
-    /* "src/lxml/parser.pxi":1064
+    /* "src/lxml/parser.pxi":1067
  *         context.prepare()
  *         try:
  *             pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -119250,7 +119341,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
     __pyx_t_6 = __pyx_v_context->_c_ctxt;
     __pyx_v_pctxt = __pyx_t_6;
 
-    /* "src/lxml/parser.pxi":1065
+    /* "src/lxml/parser.pxi":1068
  *         try:
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
@@ -119259,7 +119350,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
 
-    /* "src/lxml/parser.pxi":1066
+    /* "src/lxml/parser.pxi":1069
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             orig_options = pctxt.options             # <<<<<<<<<<<<<<
@@ -119269,7 +119360,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
     __pyx_t_5 = __pyx_v_pctxt->options;
     __pyx_v_orig_options = __pyx_t_5;
 
-    /* "src/lxml/parser.pxi":1067
+    /* "src/lxml/parser.pxi":1070
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -119284,7 +119375,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
         #endif
         /*try:*/ {
 
-          /* "src/lxml/parser.pxi":1068
+          /* "src/lxml/parser.pxi":1071
  *             orig_options = pctxt.options
  *             with nogil:
  *                 if self._for_html:             # <<<<<<<<<<<<<<
@@ -119294,7 +119385,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
           __pyx_t_1 = (__pyx_v_self->_for_html != 0);
           if (__pyx_t_1) {
 
-            /* "src/lxml/parser.pxi":1069
+            /* "src/lxml/parser.pxi":1072
  *             with nogil:
  *                 if self._for_html:
  *                     result = htmlparser.htmlCtxtReadMemory(             # <<<<<<<<<<<<<<
@@ -119303,7 +119394,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
             __pyx_v_result = htmlCtxtReadMemory(__pyx_v_pctxt, __pyx_v_c_text, __pyx_v_buffer_len, __pyx_v_c_filename, __pyx_v_c_encoding, __pyx_v_self->_parse_options);
 
-            /* "src/lxml/parser.pxi":1072
+            /* "src/lxml/parser.pxi":1075
  *                         pctxt, c_text, buffer_len, c_filename, c_encoding,
  *                         self._parse_options)
  *                     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -119313,7 +119404,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
             __pyx_t_1 = ((__pyx_v_result != NULL) != 0);
             if (__pyx_t_1) {
 
-              /* "src/lxml/parser.pxi":1073
+              /* "src/lxml/parser.pxi":1076
  *                         self._parse_options)
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:             # <<<<<<<<<<<<<<
@@ -119323,7 +119414,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
               __pyx_t_1 = ((__pyx_f_4lxml_5etree__fixHtmlDictNames(__pyx_v_pctxt->dict, __pyx_v_result) < 0) != 0);
               if (__pyx_t_1) {
 
-                /* "src/lxml/parser.pxi":1074
+                /* "src/lxml/parser.pxi":1077
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -119332,7 +119423,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
                 xmlFreeDoc(__pyx_v_result);
 
-                /* "src/lxml/parser.pxi":1075
+                /* "src/lxml/parser.pxi":1078
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)
  *                             result = NULL             # <<<<<<<<<<<<<<
@@ -119341,7 +119432,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
                 __pyx_v_result = NULL;
 
-                /* "src/lxml/parser.pxi":1073
+                /* "src/lxml/parser.pxi":1076
  *                         self._parse_options)
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:             # <<<<<<<<<<<<<<
@@ -119350,7 +119441,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
               }
 
-              /* "src/lxml/parser.pxi":1072
+              /* "src/lxml/parser.pxi":1075
  *                         pctxt, c_text, buffer_len, c_filename, c_encoding,
  *                         self._parse_options)
  *                     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -119359,7 +119450,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
             }
 
-            /* "src/lxml/parser.pxi":1068
+            /* "src/lxml/parser.pxi":1071
  *             orig_options = pctxt.options
  *             with nogil:
  *                 if self._for_html:             # <<<<<<<<<<<<<<
@@ -119369,7 +119460,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
             goto __pyx_L14;
           }
 
-          /* "src/lxml/parser.pxi":1077
+          /* "src/lxml/parser.pxi":1080
  *                             result = NULL
  *                 else:
  *                     result = xmlparser.xmlCtxtReadMemory(             # <<<<<<<<<<<<<<
@@ -119378,7 +119469,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
           /*else*/ {
 
-            /* "src/lxml/parser.pxi":1079
+            /* "src/lxml/parser.pxi":1082
  *                     result = xmlparser.xmlCtxtReadMemory(
  *                         pctxt, c_text, buffer_len, c_filename, c_encoding,
  *                         self._parse_options)             # <<<<<<<<<<<<<<
@@ -119390,7 +119481,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
           __pyx_L14:;
         }
 
-        /* "src/lxml/parser.pxi":1067
+        /* "src/lxml/parser.pxi":1070
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -119409,7 +119500,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
         }
     }
 
-    /* "src/lxml/parser.pxi":1080
+    /* "src/lxml/parser.pxi":1083
  *                         pctxt, c_text, buffer_len, c_filename, c_encoding,
  *                         self._parse_options)
  *             pctxt.options = orig_options # work around libxml2 problem             # <<<<<<<<<<<<<<
@@ -119418,19 +119509,19 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_v_pctxt->options = __pyx_v_orig_options;
 
-    /* "src/lxml/parser.pxi":1082
+    /* "src/lxml/parser.pxi":1085
  *             pctxt.options = orig_options # work around libxml2 problem
  * 
  *             return context._handleParseResultDoc(self, result, None)             # <<<<<<<<<<<<<<
  *         finally:
  *             context.cleanup()
  */
-    __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, Py_None); if (unlikely(__pyx_t_7 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1082, __pyx_L9_error)
+    __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, Py_None); if (unlikely(__pyx_t_7 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1085, __pyx_L9_error)
     __pyx_r = __pyx_t_7;
     goto __pyx_L8_return;
   }
 
-  /* "src/lxml/parser.pxi":1084
+  /* "src/lxml/parser.pxi":1087
  *             return context._handleParseResultDoc(self, result, None)
  *         finally:
  *             context.cleanup()             # <<<<<<<<<<<<<<
@@ -119455,7 +119546,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       __Pyx_XGOTREF(__pyx_t_15);
       __pyx_t_5 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
       {
-        __pyx_t_16 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(2, 1084, __pyx_L18_error)
+        __pyx_t_16 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(2, 1087, __pyx_L18_error)
       }
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
@@ -119485,13 +119576,13 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
     }
     __pyx_L8_return: {
       __pyx_t_7 = __pyx_r;
-      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(2, 1084, __pyx_L1_error)
+      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(2, 1087, __pyx_L1_error)
       __pyx_r = __pyx_t_7;
       goto __pyx_L0;
     }
   }
 
-  /* "src/lxml/parser.pxi":1023
+  /* "src/lxml/parser.pxi":1026
  *     # internal parser methods
  * 
  *     cdef xmlDoc* _parseUnicodeDoc(self, utext, char* c_filename) except NULL:             # <<<<<<<<<<<<<<
@@ -119511,7 +119602,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1086
+/* "src/lxml/parser.pxi":1089
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDoc(self, char* c_text, int c_len,             # <<<<<<<<<<<<<<
@@ -119548,28 +119639,28 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseDoc", 0);
 
-  /* "src/lxml/parser.pxi":1095
+  /* "src/lxml/parser.pxi":1098
  *         cdef char* c_encoding
  *         cdef tree.xmlCharEncoding enc
  *         context = self._getParserContext()             # <<<<<<<<<<<<<<
  *         context.prepare()
  *         try:
  */
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1095, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1098, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":1096
+  /* "src/lxml/parser.pxi":1099
  *         cdef tree.xmlCharEncoding enc
  *         context = self._getParserContext()
  *         context.prepare()             # <<<<<<<<<<<<<<
  *         try:
  *             pctxt = context._c_ctxt
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context, NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1096, __pyx_L1_error)
+  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context, NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1099, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1097
+  /* "src/lxml/parser.pxi":1100
  *         context = self._getParserContext()
  *         context.prepare()
  *         try:             # <<<<<<<<<<<<<<
@@ -119578,7 +119669,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
   /*try:*/ {
 
-    /* "src/lxml/parser.pxi":1098
+    /* "src/lxml/parser.pxi":1101
  *         context.prepare()
  *         try:
  *             pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -119588,7 +119679,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     __pyx_t_3 = __pyx_v_context->_c_ctxt;
     __pyx_v_pctxt = __pyx_t_3;
 
-    /* "src/lxml/parser.pxi":1099
+    /* "src/lxml/parser.pxi":1102
  *         try:
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
@@ -119597,7 +119688,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
 
-    /* "src/lxml/parser.pxi":1101
+    /* "src/lxml/parser.pxi":1104
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  * 
  *             if self._default_encoding is None:             # <<<<<<<<<<<<<<
@@ -119608,7 +119699,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     __pyx_t_5 = (__pyx_t_4 != 0);
     if (__pyx_t_5) {
 
-      /* "src/lxml/parser.pxi":1102
+      /* "src/lxml/parser.pxi":1105
  * 
  *             if self._default_encoding is None:
  *                 c_encoding = NULL             # <<<<<<<<<<<<<<
@@ -119617,7 +119708,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
       __pyx_v_c_encoding = NULL;
 
-      /* "src/lxml/parser.pxi":1105
+      /* "src/lxml/parser.pxi":1108
  *                 # libxml2 (at least 2.9.3) does not recognise UTF-32 BOMs
  *                 # NOTE: limit to problematic cases because it changes character offsets
  *                 if c_len >= 4 and (c_text[0] == '\xFF' and c_text[1] == '\xFE' and             # <<<<<<<<<<<<<<
@@ -119643,7 +119734,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
         goto __pyx_L8_bool_binop_done;
       }
 
-      /* "src/lxml/parser.pxi":1106
+      /* "src/lxml/parser.pxi":1109
  *                 # NOTE: limit to problematic cases because it changes character offsets
  *                 if c_len >= 4 and (c_text[0] == '\xFF' and c_text[1] == '\xFE' and
  *                                    c_text[2] == 0 and c_text[3] == 0):             # <<<<<<<<<<<<<<
@@ -119660,7 +119751,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
       __pyx_t_5 = __pyx_t_4;
       __pyx_L8_bool_binop_done:;
 
-      /* "src/lxml/parser.pxi":1105
+      /* "src/lxml/parser.pxi":1108
  *                 # libxml2 (at least 2.9.3) does not recognise UTF-32 BOMs
  *                 # NOTE: limit to problematic cases because it changes character offsets
  *                 if c_len >= 4 and (c_text[0] == '\xFF' and c_text[1] == '\xFE' and             # <<<<<<<<<<<<<<
@@ -119669,7 +119760,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
       if (__pyx_t_5) {
 
-        /* "src/lxml/parser.pxi":1107
+        /* "src/lxml/parser.pxi":1110
  *                 if c_len >= 4 and (c_text[0] == '\xFF' and c_text[1] == '\xFE' and
  *                                    c_text[2] == 0 and c_text[3] == 0):
  *                     c_encoding = "UTF-32LE"             # <<<<<<<<<<<<<<
@@ -119678,7 +119769,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
         __pyx_v_c_encoding = ((char *)"UTF-32LE");
 
-        /* "src/lxml/parser.pxi":1108
+        /* "src/lxml/parser.pxi":1111
  *                                    c_text[2] == 0 and c_text[3] == 0):
  *                     c_encoding = "UTF-32LE"
  *                     c_text += 4             # <<<<<<<<<<<<<<
@@ -119687,7 +119778,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
         __pyx_v_c_text = (__pyx_v_c_text + 4);
 
-        /* "src/lxml/parser.pxi":1109
+        /* "src/lxml/parser.pxi":1112
  *                     c_encoding = "UTF-32LE"
  *                     c_text += 4
  *                     c_len -= 4             # <<<<<<<<<<<<<<
@@ -119696,7 +119787,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
         __pyx_v_c_len = (__pyx_v_c_len - 4);
 
-        /* "src/lxml/parser.pxi":1105
+        /* "src/lxml/parser.pxi":1108
  *                 # libxml2 (at least 2.9.3) does not recognise UTF-32 BOMs
  *                 # NOTE: limit to problematic cases because it changes character offsets
  *                 if c_len >= 4 and (c_text[0] == '\xFF' and c_text[1] == '\xFE' and             # <<<<<<<<<<<<<<
@@ -119706,7 +119797,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
         goto __pyx_L7;
       }
 
-      /* "src/lxml/parser.pxi":1110
+      /* "src/lxml/parser.pxi":1113
  *                     c_text += 4
  *                     c_len -= 4
  *                 elif c_len >= 4 and (c_text[0] == 0 and c_text[1] == 0 and             # <<<<<<<<<<<<<<
@@ -119732,7 +119823,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
         goto __pyx_L13_bool_binop_done;
       }
 
-      /* "src/lxml/parser.pxi":1111
+      /* "src/lxml/parser.pxi":1114
  *                     c_len -= 4
  *                 elif c_len >= 4 and (c_text[0] == 0 and c_text[1] == 0 and
  *                                      c_text[2] == '\xFE' and c_text[3] == '\xFF'):             # <<<<<<<<<<<<<<
@@ -119749,7 +119840,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
       __pyx_t_5 = __pyx_t_4;
       __pyx_L13_bool_binop_done:;
 
-      /* "src/lxml/parser.pxi":1110
+      /* "src/lxml/parser.pxi":1113
  *                     c_text += 4
  *                     c_len -= 4
  *                 elif c_len >= 4 and (c_text[0] == 0 and c_text[1] == 0 and             # <<<<<<<<<<<<<<
@@ -119758,7 +119849,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
       if (__pyx_t_5) {
 
-        /* "src/lxml/parser.pxi":1112
+        /* "src/lxml/parser.pxi":1115
  *                 elif c_len >= 4 and (c_text[0] == 0 and c_text[1] == 0 and
  *                                      c_text[2] == '\xFE' and c_text[3] == '\xFF'):
  *                     c_encoding = "UTF-32BE"             # <<<<<<<<<<<<<<
@@ -119767,7 +119858,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
         __pyx_v_c_encoding = ((char *)"UTF-32BE");
 
-        /* "src/lxml/parser.pxi":1113
+        /* "src/lxml/parser.pxi":1116
  *                                      c_text[2] == '\xFE' and c_text[3] == '\xFF'):
  *                     c_encoding = "UTF-32BE"
  *                     c_text += 4             # <<<<<<<<<<<<<<
@@ -119776,7 +119867,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
         __pyx_v_c_text = (__pyx_v_c_text + 4);
 
-        /* "src/lxml/parser.pxi":1114
+        /* "src/lxml/parser.pxi":1117
  *                     c_encoding = "UTF-32BE"
  *                     c_text += 4
  *                     c_len -= 4             # <<<<<<<<<<<<<<
@@ -119785,7 +119876,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
         __pyx_v_c_len = (__pyx_v_c_len - 4);
 
-        /* "src/lxml/parser.pxi":1110
+        /* "src/lxml/parser.pxi":1113
  *                     c_text += 4
  *                     c_len -= 4
  *                 elif c_len >= 4 and (c_text[0] == 0 and c_text[1] == 0 and             # <<<<<<<<<<<<<<
@@ -119795,7 +119886,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
         goto __pyx_L7;
       }
 
-      /* "src/lxml/parser.pxi":1117
+      /* "src/lxml/parser.pxi":1120
  *                 else:
  *                     # no BOM => try to determine encoding
  *                     enc = tree.xmlDetectCharEncoding(<const_xmlChar*>c_text, c_len)             # <<<<<<<<<<<<<<
@@ -119805,7 +119896,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
       /*else*/ {
         __pyx_v_enc = xmlDetectCharEncoding(((const xmlChar *)__pyx_v_c_text), __pyx_v_c_len);
 
-        /* "src/lxml/parser.pxi":1118
+        /* "src/lxml/parser.pxi":1121
  *                     # no BOM => try to determine encoding
  *                     enc = tree.xmlDetectCharEncoding(<const_xmlChar*>c_text, c_len)
  *                     if enc == tree.XML_CHAR_ENCODING_UCS4LE:             # <<<<<<<<<<<<<<
@@ -119815,7 +119906,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
         switch (__pyx_v_enc) {
           case XML_CHAR_ENCODING_UCS4LE:
 
-          /* "src/lxml/parser.pxi":1119
+          /* "src/lxml/parser.pxi":1122
  *                     enc = tree.xmlDetectCharEncoding(<const_xmlChar*>c_text, c_len)
  *                     if enc == tree.XML_CHAR_ENCODING_UCS4LE:
  *                         c_encoding = 'UTF-32LE'             # <<<<<<<<<<<<<<
@@ -119824,7 +119915,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
           __pyx_v_c_encoding = ((char *)"UTF-32LE");
 
-          /* "src/lxml/parser.pxi":1118
+          /* "src/lxml/parser.pxi":1121
  *                     # no BOM => try to determine encoding
  *                     enc = tree.xmlDetectCharEncoding(<const_xmlChar*>c_text, c_len)
  *                     if enc == tree.XML_CHAR_ENCODING_UCS4LE:             # <<<<<<<<<<<<<<
@@ -119834,7 +119925,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
           break;
           case XML_CHAR_ENCODING_UCS4BE:
 
-          /* "src/lxml/parser.pxi":1121
+          /* "src/lxml/parser.pxi":1124
  *                         c_encoding = 'UTF-32LE'
  *                     elif enc == tree.XML_CHAR_ENCODING_UCS4BE:
  *                         c_encoding = 'UTF-32BE'             # <<<<<<<<<<<<<<
@@ -119843,7 +119934,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
           __pyx_v_c_encoding = ((char *)"UTF-32BE");
 
-          /* "src/lxml/parser.pxi":1120
+          /* "src/lxml/parser.pxi":1123
  *                     if enc == tree.XML_CHAR_ENCODING_UCS4LE:
  *                         c_encoding = 'UTF-32LE'
  *                     elif enc == tree.XML_CHAR_ENCODING_UCS4BE:             # <<<<<<<<<<<<<<
@@ -119856,7 +119947,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
       }
       __pyx_L7:;
 
-      /* "src/lxml/parser.pxi":1101
+      /* "src/lxml/parser.pxi":1104
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  * 
  *             if self._default_encoding is None:             # <<<<<<<<<<<<<<
@@ -119866,7 +119957,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
       goto __pyx_L6;
     }
 
-    /* "src/lxml/parser.pxi":1123
+    /* "src/lxml/parser.pxi":1126
  *                         c_encoding = 'UTF-32BE'
  *             else:
  *                 c_encoding = _cstr(self._default_encoding)             # <<<<<<<<<<<<<<
@@ -119881,7 +119972,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     }
     __pyx_L6:;
 
-    /* "src/lxml/parser.pxi":1125
+    /* "src/lxml/parser.pxi":1128
  *                 c_encoding = _cstr(self._default_encoding)
  * 
  *             orig_options = pctxt.options             # <<<<<<<<<<<<<<
@@ -119891,7 +119982,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     __pyx_t_2 = __pyx_v_pctxt->options;
     __pyx_v_orig_options = __pyx_t_2;
 
-    /* "src/lxml/parser.pxi":1126
+    /* "src/lxml/parser.pxi":1129
  * 
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -119906,7 +119997,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
         #endif
         /*try:*/ {
 
-          /* "src/lxml/parser.pxi":1127
+          /* "src/lxml/parser.pxi":1130
  *             orig_options = pctxt.options
  *             with nogil:
  *                 if self._for_html:             # <<<<<<<<<<<<<<
@@ -119916,7 +120007,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
           __pyx_t_5 = (__pyx_v_self->_for_html != 0);
           if (__pyx_t_5) {
 
-            /* "src/lxml/parser.pxi":1128
+            /* "src/lxml/parser.pxi":1131
  *             with nogil:
  *                 if self._for_html:
  *                     result = htmlparser.htmlCtxtReadMemory(             # <<<<<<<<<<<<<<
@@ -119925,7 +120016,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
             __pyx_v_result = htmlCtxtReadMemory(__pyx_v_pctxt, __pyx_v_c_text, __pyx_v_c_len, __pyx_v_c_filename, __pyx_v_c_encoding, __pyx_v_self->_parse_options);
 
-            /* "src/lxml/parser.pxi":1131
+            /* "src/lxml/parser.pxi":1134
  *                         pctxt, c_text, c_len, c_filename,
  *                         c_encoding, self._parse_options)
  *                     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -119935,7 +120026,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
             __pyx_t_5 = ((__pyx_v_result != NULL) != 0);
             if (__pyx_t_5) {
 
-              /* "src/lxml/parser.pxi":1132
+              /* "src/lxml/parser.pxi":1135
  *                         c_encoding, self._parse_options)
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:             # <<<<<<<<<<<<<<
@@ -119945,7 +120036,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
               __pyx_t_5 = ((__pyx_f_4lxml_5etree__fixHtmlDictNames(__pyx_v_pctxt->dict, __pyx_v_result) < 0) != 0);
               if (__pyx_t_5) {
 
-                /* "src/lxml/parser.pxi":1133
+                /* "src/lxml/parser.pxi":1136
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -119954,7 +120045,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
                 xmlFreeDoc(__pyx_v_result);
 
-                /* "src/lxml/parser.pxi":1134
+                /* "src/lxml/parser.pxi":1137
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)
  *                             result = NULL             # <<<<<<<<<<<<<<
@@ -119963,7 +120054,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
                 __pyx_v_result = NULL;
 
-                /* "src/lxml/parser.pxi":1132
+                /* "src/lxml/parser.pxi":1135
  *                         c_encoding, self._parse_options)
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:             # <<<<<<<<<<<<<<
@@ -119972,7 +120063,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
               }
 
-              /* "src/lxml/parser.pxi":1131
+              /* "src/lxml/parser.pxi":1134
  *                         pctxt, c_text, c_len, c_filename,
  *                         c_encoding, self._parse_options)
  *                     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -119981,7 +120072,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
             }
 
-            /* "src/lxml/parser.pxi":1127
+            /* "src/lxml/parser.pxi":1130
  *             orig_options = pctxt.options
  *             with nogil:
  *                 if self._for_html:             # <<<<<<<<<<<<<<
@@ -119991,7 +120082,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
             goto __pyx_L21;
           }
 
-          /* "src/lxml/parser.pxi":1136
+          /* "src/lxml/parser.pxi":1139
  *                             result = NULL
  *                 else:
  *                     result = xmlparser.xmlCtxtReadMemory(             # <<<<<<<<<<<<<<
@@ -120000,7 +120091,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
           /*else*/ {
 
-            /* "src/lxml/parser.pxi":1138
+            /* "src/lxml/parser.pxi":1141
  *                     result = xmlparser.xmlCtxtReadMemory(
  *                         pctxt, c_text, c_len, c_filename,
  *                         c_encoding, self._parse_options)             # <<<<<<<<<<<<<<
@@ -120012,7 +120103,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
           __pyx_L21:;
         }
 
-        /* "src/lxml/parser.pxi":1126
+        /* "src/lxml/parser.pxi":1129
  * 
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -120031,7 +120122,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
         }
     }
 
-    /* "src/lxml/parser.pxi":1139
+    /* "src/lxml/parser.pxi":1142
  *                         pctxt, c_text, c_len, c_filename,
  *                         c_encoding, self._parse_options)
  *             pctxt.options = orig_options # work around libxml2 problem             # <<<<<<<<<<<<<<
@@ -120040,19 +120131,19 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
     __pyx_v_pctxt->options = __pyx_v_orig_options;
 
-    /* "src/lxml/parser.pxi":1141
+    /* "src/lxml/parser.pxi":1144
  *             pctxt.options = orig_options # work around libxml2 problem
  * 
  *             return context._handleParseResultDoc(self, result, None)             # <<<<<<<<<<<<<<
  *         finally:
  *             context.cleanup()
  */
-    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, Py_None); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1141, __pyx_L4_error)
+    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, Py_None); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1144, __pyx_L4_error)
     __pyx_r = __pyx_t_6;
     goto __pyx_L3_return;
   }
 
-  /* "src/lxml/parser.pxi":1143
+  /* "src/lxml/parser.pxi":1146
  *             return context._handleParseResultDoc(self, result, None)
  *         finally:
  *             context.cleanup()             # <<<<<<<<<<<<<<
@@ -120076,7 +120167,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
       __Pyx_XGOTREF(__pyx_t_14);
       __pyx_t_2 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
       {
-        __pyx_t_15 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(2, 1143, __pyx_L25_error)
+        __pyx_t_15 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(2, 1146, __pyx_L25_error)
       }
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_12);
@@ -120106,13 +120197,13 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     }
     __pyx_L3_return: {
       __pyx_t_6 = __pyx_r;
-      __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 1143, __pyx_L1_error)
+      __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 1146, __pyx_L1_error)
       __pyx_r = __pyx_t_6;
       goto __pyx_L0;
     }
   }
 
-  /* "src/lxml/parser.pxi":1086
+  /* "src/lxml/parser.pxi":1089
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDoc(self, char* c_text, int c_len,             # <<<<<<<<<<<<<<
@@ -120131,7 +120222,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1145
+/* "src/lxml/parser.pxi":1148
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDocFromFile(self, char* c_filename) except NULL:             # <<<<<<<<<<<<<<
@@ -120167,7 +120258,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseDocFromFile", 0);
 
-  /* "src/lxml/parser.pxi":1150
+  /* "src/lxml/parser.pxi":1153
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         cdef char* c_encoding
  *         result = NULL             # <<<<<<<<<<<<<<
@@ -120176,28 +120267,28 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
   __pyx_v_result = NULL;
 
-  /* "src/lxml/parser.pxi":1152
+  /* "src/lxml/parser.pxi":1155
  *         result = NULL
  * 
  *         context = self._getParserContext()             # <<<<<<<<<<<<<<
  *         context.prepare()
  *         try:
  */
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1152, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":1153
+  /* "src/lxml/parser.pxi":1156
  * 
  *         context = self._getParserContext()
  *         context.prepare()             # <<<<<<<<<<<<<<
  *         try:
  *             pctxt = context._c_ctxt
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context, NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1153, __pyx_L1_error)
+  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context, NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1156, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1154
+  /* "src/lxml/parser.pxi":1157
  *         context = self._getParserContext()
  *         context.prepare()
  *         try:             # <<<<<<<<<<<<<<
@@ -120206,7 +120297,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
   /*try:*/ {
 
-    /* "src/lxml/parser.pxi":1155
+    /* "src/lxml/parser.pxi":1158
  *         context.prepare()
  *         try:
  *             pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -120216,7 +120307,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     __pyx_t_3 = __pyx_v_context->_c_ctxt;
     __pyx_v_pctxt = __pyx_t_3;
 
-    /* "src/lxml/parser.pxi":1156
+    /* "src/lxml/parser.pxi":1159
  *         try:
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
@@ -120225,7 +120316,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
 
-    /* "src/lxml/parser.pxi":1158
+    /* "src/lxml/parser.pxi":1161
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  * 
  *             if self._default_encoding is None:             # <<<<<<<<<<<<<<
@@ -120236,7 +120327,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     __pyx_t_5 = (__pyx_t_4 != 0);
     if (__pyx_t_5) {
 
-      /* "src/lxml/parser.pxi":1159
+      /* "src/lxml/parser.pxi":1162
  * 
  *             if self._default_encoding is None:
  *                 c_encoding = NULL             # <<<<<<<<<<<<<<
@@ -120245,7 +120336,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
       __pyx_v_c_encoding = NULL;
 
-      /* "src/lxml/parser.pxi":1158
+      /* "src/lxml/parser.pxi":1161
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  * 
  *             if self._default_encoding is None:             # <<<<<<<<<<<<<<
@@ -120255,7 +120346,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
       goto __pyx_L6;
     }
 
-    /* "src/lxml/parser.pxi":1161
+    /* "src/lxml/parser.pxi":1164
  *                 c_encoding = NULL
  *             else:
  *                 c_encoding = _cstr(self._default_encoding)             # <<<<<<<<<<<<<<
@@ -120270,7 +120361,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     }
     __pyx_L6:;
 
-    /* "src/lxml/parser.pxi":1163
+    /* "src/lxml/parser.pxi":1166
  *                 c_encoding = _cstr(self._default_encoding)
  * 
  *             orig_options = pctxt.options             # <<<<<<<<<<<<<<
@@ -120280,7 +120371,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     __pyx_t_2 = __pyx_v_pctxt->options;
     __pyx_v_orig_options = __pyx_t_2;
 
-    /* "src/lxml/parser.pxi":1164
+    /* "src/lxml/parser.pxi":1167
  * 
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -120295,7 +120386,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
         #endif
         /*try:*/ {
 
-          /* "src/lxml/parser.pxi":1165
+          /* "src/lxml/parser.pxi":1168
  *             orig_options = pctxt.options
  *             with nogil:
  *                 if self._for_html:             # <<<<<<<<<<<<<<
@@ -120305,7 +120396,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
           __pyx_t_5 = (__pyx_v_self->_for_html != 0);
           if (__pyx_t_5) {
 
-            /* "src/lxml/parser.pxi":1166
+            /* "src/lxml/parser.pxi":1169
  *             with nogil:
  *                 if self._for_html:
  *                     result = htmlparser.htmlCtxtReadFile(             # <<<<<<<<<<<<<<
@@ -120314,7 +120405,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
             __pyx_v_result = htmlCtxtReadFile(__pyx_v_pctxt, __pyx_v_c_filename, __pyx_v_c_encoding, __pyx_v_self->_parse_options);
 
-            /* "src/lxml/parser.pxi":1168
+            /* "src/lxml/parser.pxi":1171
  *                     result = htmlparser.htmlCtxtReadFile(
  *                         pctxt, c_filename, c_encoding, self._parse_options)
  *                     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -120324,7 +120415,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
             __pyx_t_5 = ((__pyx_v_result != NULL) != 0);
             if (__pyx_t_5) {
 
-              /* "src/lxml/parser.pxi":1169
+              /* "src/lxml/parser.pxi":1172
  *                         pctxt, c_filename, c_encoding, self._parse_options)
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:             # <<<<<<<<<<<<<<
@@ -120334,7 +120425,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
               __pyx_t_5 = ((__pyx_f_4lxml_5etree__fixHtmlDictNames(__pyx_v_pctxt->dict, __pyx_v_result) < 0) != 0);
               if (__pyx_t_5) {
 
-                /* "src/lxml/parser.pxi":1170
+                /* "src/lxml/parser.pxi":1173
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -120343,7 +120434,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
                 xmlFreeDoc(__pyx_v_result);
 
-                /* "src/lxml/parser.pxi":1171
+                /* "src/lxml/parser.pxi":1174
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)
  *                             result = NULL             # <<<<<<<<<<<<<<
@@ -120352,7 +120443,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
                 __pyx_v_result = NULL;
 
-                /* "src/lxml/parser.pxi":1169
+                /* "src/lxml/parser.pxi":1172
  *                         pctxt, c_filename, c_encoding, self._parse_options)
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:             # <<<<<<<<<<<<<<
@@ -120361,7 +120452,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
               }
 
-              /* "src/lxml/parser.pxi":1168
+              /* "src/lxml/parser.pxi":1171
  *                     result = htmlparser.htmlCtxtReadFile(
  *                         pctxt, c_filename, c_encoding, self._parse_options)
  *                     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -120370,7 +120461,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
             }
 
-            /* "src/lxml/parser.pxi":1165
+            /* "src/lxml/parser.pxi":1168
  *             orig_options = pctxt.options
  *             with nogil:
  *                 if self._for_html:             # <<<<<<<<<<<<<<
@@ -120380,7 +120471,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
             goto __pyx_L10;
           }
 
-          /* "src/lxml/parser.pxi":1173
+          /* "src/lxml/parser.pxi":1176
  *                             result = NULL
  *                 else:
  *                     result = xmlparser.xmlCtxtReadFile(             # <<<<<<<<<<<<<<
@@ -120389,7 +120480,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
           /*else*/ {
 
-            /* "src/lxml/parser.pxi":1174
+            /* "src/lxml/parser.pxi":1177
  *                 else:
  *                     result = xmlparser.xmlCtxtReadFile(
  *                         pctxt, c_filename, c_encoding, self._parse_options)             # <<<<<<<<<<<<<<
@@ -120401,7 +120492,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
           __pyx_L10:;
         }
 
-        /* "src/lxml/parser.pxi":1164
+        /* "src/lxml/parser.pxi":1167
  * 
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -120420,7 +120511,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
         }
     }
 
-    /* "src/lxml/parser.pxi":1175
+    /* "src/lxml/parser.pxi":1178
  *                     result = xmlparser.xmlCtxtReadFile(
  *                         pctxt, c_filename, c_encoding, self._parse_options)
  *             pctxt.options = orig_options # work around libxml2 problem             # <<<<<<<<<<<<<<
@@ -120429,22 +120520,22 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
     __pyx_v_pctxt->options = __pyx_v_orig_options;
 
-    /* "src/lxml/parser.pxi":1177
+    /* "src/lxml/parser.pxi":1180
  *             pctxt.options = orig_options # work around libxml2 problem
  * 
  *             return context._handleParseResultDoc(self, result, c_filename)             # <<<<<<<<<<<<<<
  *         finally:
  *             context.cleanup()
  */
-    __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_c_filename); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1177, __pyx_L4_error)
+    __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_c_filename); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1180, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1177, __pyx_L4_error)
+    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1180, __pyx_L4_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_r = __pyx_t_6;
     goto __pyx_L3_return;
   }
 
-  /* "src/lxml/parser.pxi":1179
+  /* "src/lxml/parser.pxi":1182
  *             return context._handleParseResultDoc(self, result, c_filename)
  *         finally:
  *             context.cleanup()             # <<<<<<<<<<<<<<
@@ -120468,7 +120559,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
       __Pyx_XGOTREF(__pyx_t_14);
       __pyx_t_2 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
       {
-        __pyx_t_15 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(2, 1179, __pyx_L14_error)
+        __pyx_t_15 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(2, 1182, __pyx_L14_error)
       }
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_12);
@@ -120498,13 +120589,13 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     }
     __pyx_L3_return: {
       __pyx_t_6 = __pyx_r;
-      __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 1179, __pyx_L1_error)
+      __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 1182, __pyx_L1_error)
       __pyx_r = __pyx_t_6;
       goto __pyx_L0;
     }
   }
 
-  /* "src/lxml/parser.pxi":1145
+  /* "src/lxml/parser.pxi":1148
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDocFromFile(self, char* c_filename) except NULL:             # <<<<<<<<<<<<<<
@@ -120523,7 +120614,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1181
+/* "src/lxml/parser.pxi":1184
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDocFromFilelike(self, filelike, filename,             # <<<<<<<<<<<<<<
@@ -120560,18 +120651,18 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
   __Pyx_RefNannySetupContext("_parseDocFromFilelike", 0);
   __Pyx_INCREF(__pyx_v_filename);
 
-  /* "src/lxml/parser.pxi":1188
+  /* "src/lxml/parser.pxi":1191
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         cdef char* c_filename
  *         if not filename:             # <<<<<<<<<<<<<<
  *             filename = None
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_filename); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1188, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_filename); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1191, __pyx_L1_error)
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1189
+    /* "src/lxml/parser.pxi":1192
  *         cdef char* c_filename
  *         if not filename:
  *             filename = None             # <<<<<<<<<<<<<<
@@ -120581,7 +120672,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
     __Pyx_INCREF(Py_None);
     __Pyx_DECREF_SET(__pyx_v_filename, Py_None);
 
-    /* "src/lxml/parser.pxi":1188
+    /* "src/lxml/parser.pxi":1191
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         cdef char* c_filename
  *         if not filename:             # <<<<<<<<<<<<<<
@@ -120590,28 +120681,28 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
  */
   }
 
-  /* "src/lxml/parser.pxi":1191
+  /* "src/lxml/parser.pxi":1194
  *             filename = None
  * 
  *         context = self._getParserContext()             # <<<<<<<<<<<<<<
  *         context.prepare()
  *         try:
  */
-  __pyx_t_3 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1191, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1194, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "src/lxml/parser.pxi":1192
+  /* "src/lxml/parser.pxi":1195
  * 
  *         context = self._getParserContext()
  *         context.prepare()             # <<<<<<<<<<<<<<
  *         try:
  *             pctxt = context._c_ctxt
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context, NULL); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 1192, __pyx_L1_error)
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context, NULL); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 1195, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1193
+  /* "src/lxml/parser.pxi":1196
  *         context = self._getParserContext()
  *         context.prepare()
  *         try:             # <<<<<<<<<<<<<<
@@ -120620,7 +120711,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
  */
   /*try:*/ {
 
-    /* "src/lxml/parser.pxi":1194
+    /* "src/lxml/parser.pxi":1197
  *         context.prepare()
  *         try:
  *             pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -120630,7 +120721,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
     __pyx_t_5 = __pyx_v_context->_c_ctxt;
     __pyx_v_pctxt = __pyx_t_5;
 
-    /* "src/lxml/parser.pxi":1195
+    /* "src/lxml/parser.pxi":1198
  *         try:
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
@@ -120639,14 +120730,14 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
  */
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
 
-    /* "src/lxml/parser.pxi":1198
+    /* "src/lxml/parser.pxi":1201
  *             file_context = _FileReaderContext(
  *                 filelike, context, filename,
  *                 encoding or self._default_encoding)             # <<<<<<<<<<<<<<
  *             result = file_context._readDoc(pctxt, self._parse_options)
  * 
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_encoding); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1198, __pyx_L5_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_encoding); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1201, __pyx_L5_error)
     if (!__pyx_t_2) {
     } else {
       __Pyx_INCREF(__pyx_v_encoding);
@@ -120657,14 +120748,14 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
     __pyx_t_3 = __pyx_v_self->_default_encoding;
     __pyx_L7_bool_binop_done:;
 
-    /* "src/lxml/parser.pxi":1196
+    /* "src/lxml/parser.pxi":1199
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             file_context = _FileReaderContext(             # <<<<<<<<<<<<<<
  *                 filelike, context, filename,
  *                 encoding or self._default_encoding)
  */
-    __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1196, __pyx_L5_error)
+    __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1199, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_filelike);
     __Pyx_GIVEREF(__pyx_v_filelike);
@@ -120678,13 +120769,13 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__FileReaderContext), __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1196, __pyx_L5_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__FileReaderContext), __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1199, __pyx_L5_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_v_file_context = ((struct __pyx_obj_4lxml_5etree__FileReaderContext *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "src/lxml/parser.pxi":1199
+    /* "src/lxml/parser.pxi":1202
  *                 filelike, context, filename,
  *                 encoding or self._default_encoding)
  *             result = file_context._readDoc(pctxt, self._parse_options)             # <<<<<<<<<<<<<<
@@ -120693,19 +120784,19 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
  */
     __pyx_v_result = __pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(__pyx_v_file_context, __pyx_v_pctxt, __pyx_v_self->_parse_options);
 
-    /* "src/lxml/parser.pxi":1201
+    /* "src/lxml/parser.pxi":1204
  *             result = file_context._readDoc(pctxt, self._parse_options)
  * 
  *             return context._handleParseResultDoc(             # <<<<<<<<<<<<<<
  *                 self, result, filename)
  *         finally:
  */
-    __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, __pyx_v_filename); if (unlikely(__pyx_t_7 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1201, __pyx_L5_error)
+    __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, __pyx_v_filename); if (unlikely(__pyx_t_7 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1204, __pyx_L5_error)
     __pyx_r = __pyx_t_7;
     goto __pyx_L4_return;
   }
 
-  /* "src/lxml/parser.pxi":1204
+  /* "src/lxml/parser.pxi":1207
  *                 self, result, filename)
  *         finally:
  *             context.cleanup()             # <<<<<<<<<<<<<<
@@ -120730,7 +120821,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
       __Pyx_XGOTREF(__pyx_t_15);
       __pyx_t_4 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
       {
-        __pyx_t_16 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(2, 1204, __pyx_L10_error)
+        __pyx_t_16 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(2, 1207, __pyx_L10_error)
       }
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
@@ -120760,13 +120851,13 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
     }
     __pyx_L4_return: {
       __pyx_t_7 = __pyx_r;
-      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(2, 1204, __pyx_L1_error)
+      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(2, 1207, __pyx_L1_error)
       __pyx_r = __pyx_t_7;
       goto __pyx_L0;
     }
   }
 
-  /* "src/lxml/parser.pxi":1181
+  /* "src/lxml/parser.pxi":1184
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDocFromFilelike(self, filelike, filename,             # <<<<<<<<<<<<<<
@@ -120788,7 +120879,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":808
+/* "src/lxml/parser.pxi":811
  *     cdef XMLSchema _schema
  *     cdef bytes _filename
  *     cdef readonly object target             # <<<<<<<<<<<<<<
@@ -120825,7 +120916,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_6target___get__(struct __py
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1207
+/* "src/lxml/parser.pxi":1210
  * 
  * 
  * cdef void _initSaxDocument(void* ctxt) with gil:             # <<<<<<<<<<<<<<
@@ -120849,7 +120940,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
   #endif
   __Pyx_RefNannySetupContext("_initSaxDocument", 0);
 
-  /* "src/lxml/parser.pxi":1208
+  /* "src/lxml/parser.pxi":1211
  * 
  * cdef void _initSaxDocument(void* ctxt) with gil:
  *     xmlparser.xmlSAX2StartDocument(ctxt)             # <<<<<<<<<<<<<<
@@ -120858,7 +120949,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
   xmlSAX2StartDocument(__pyx_v_ctxt);
 
-  /* "src/lxml/parser.pxi":1209
+  /* "src/lxml/parser.pxi":1212
  * cdef void _initSaxDocument(void* ctxt) with gil:
  *     xmlparser.xmlSAX2StartDocument(ctxt)
  *     c_ctxt = <xmlparser.xmlParserCtxt*>ctxt             # <<<<<<<<<<<<<<
@@ -120867,7 +120958,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
   __pyx_v_c_ctxt = ((xmlParserCtxt *)__pyx_v_ctxt);
 
-  /* "src/lxml/parser.pxi":1210
+  /* "src/lxml/parser.pxi":1213
  *     xmlparser.xmlSAX2StartDocument(ctxt)
  *     c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
  *     c_doc = c_ctxt.myDoc             # <<<<<<<<<<<<<<
@@ -120877,7 +120968,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
   __pyx_t_1 = __pyx_v_c_ctxt->myDoc;
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "src/lxml/parser.pxi":1213
+  /* "src/lxml/parser.pxi":1216
  * 
  *     # set up document dict
  *     if c_doc and c_ctxt.dict and not c_doc.dict:             # <<<<<<<<<<<<<<
@@ -120901,7 +120992,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1215
+    /* "src/lxml/parser.pxi":1218
  *     if c_doc and c_ctxt.dict and not c_doc.dict:
  *         # I have no idea why libxml2 disables this - we need it
  *         c_ctxt.dictNames = 1             # <<<<<<<<<<<<<<
@@ -120910,7 +121001,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
     __pyx_v_c_ctxt->dictNames = 1;
 
-    /* "src/lxml/parser.pxi":1216
+    /* "src/lxml/parser.pxi":1219
  *         # I have no idea why libxml2 disables this - we need it
  *         c_ctxt.dictNames = 1
  *         c_doc.dict = c_ctxt.dict             # <<<<<<<<<<<<<<
@@ -120920,7 +121011,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
     __pyx_t_4 = __pyx_v_c_ctxt->dict;
     __pyx_v_c_doc->dict = __pyx_t_4;
 
-    /* "src/lxml/parser.pxi":1217
+    /* "src/lxml/parser.pxi":1220
  *         c_ctxt.dictNames = 1
  *         c_doc.dict = c_ctxt.dict
  *         xmlparser.xmlDictReference(c_ctxt.dict)             # <<<<<<<<<<<<<<
@@ -120929,7 +121020,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
     (void)(xmlDictReference(__pyx_v_c_ctxt->dict));
 
-    /* "src/lxml/parser.pxi":1213
+    /* "src/lxml/parser.pxi":1216
  * 
  *     # set up document dict
  *     if c_doc and c_ctxt.dict and not c_doc.dict:             # <<<<<<<<<<<<<<
@@ -120938,7 +121029,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
   }
 
-  /* "src/lxml/parser.pxi":1220
+  /* "src/lxml/parser.pxi":1223
  * 
  *     # set up XML ID hash table
  *     if c_ctxt._private:             # <<<<<<<<<<<<<<
@@ -120948,7 +121039,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
   __pyx_t_2 = (__pyx_v_c_ctxt->_private != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1221
+    /* "src/lxml/parser.pxi":1224
  *     # set up XML ID hash table
  *     if c_ctxt._private:
  *         context = <_ParserContext>c_ctxt._private             # <<<<<<<<<<<<<<
@@ -120960,7 +121051,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
     __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "src/lxml/parser.pxi":1222
+    /* "src/lxml/parser.pxi":1225
  *     if c_ctxt._private:
  *         context = <_ParserContext>c_ctxt._private
  *         if context._collect_ids:             # <<<<<<<<<<<<<<
@@ -120970,7 +121061,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
     __pyx_t_2 = (__pyx_v_context->_collect_ids != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":1224
+      /* "src/lxml/parser.pxi":1227
  *         if context._collect_ids:
  *             # keep the global parser dict from filling up with XML IDs
  *             if c_doc and not c_doc.ids:             # <<<<<<<<<<<<<<
@@ -120988,7 +121079,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
       __pyx_L10_bool_binop_done:;
       if (__pyx_t_2) {
 
-        /* "src/lxml/parser.pxi":1226
+        /* "src/lxml/parser.pxi":1229
  *             if c_doc and not c_doc.ids:
  *                 # memory errors are not fatal here
  *                 c_dict = xmlparser.xmlDictCreate()             # <<<<<<<<<<<<<<
@@ -120997,7 +121088,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
         __pyx_v_c_dict = xmlDictCreate();
 
-        /* "src/lxml/parser.pxi":1227
+        /* "src/lxml/parser.pxi":1230
  *                 # memory errors are not fatal here
  *                 c_dict = xmlparser.xmlDictCreate()
  *                 if c_dict:             # <<<<<<<<<<<<<<
@@ -121007,7 +121098,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
         __pyx_t_2 = (__pyx_v_c_dict != 0);
         if (__pyx_t_2) {
 
-          /* "src/lxml/parser.pxi":1228
+          /* "src/lxml/parser.pxi":1231
  *                 c_dict = xmlparser.xmlDictCreate()
  *                 if c_dict:
  *                     c_doc.ids = tree.xmlHashCreateDict(0, c_dict)             # <<<<<<<<<<<<<<
@@ -121016,7 +121107,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
           __pyx_v_c_doc->ids = xmlHashCreateDict(0, __pyx_v_c_dict);
 
-          /* "src/lxml/parser.pxi":1229
+          /* "src/lxml/parser.pxi":1232
  *                 if c_dict:
  *                     c_doc.ids = tree.xmlHashCreateDict(0, c_dict)
  *                     xmlparser.xmlDictFree(c_dict)             # <<<<<<<<<<<<<<
@@ -121025,7 +121116,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
           xmlDictFree(__pyx_v_c_dict);
 
-          /* "src/lxml/parser.pxi":1227
+          /* "src/lxml/parser.pxi":1230
  *                 # memory errors are not fatal here
  *                 c_dict = xmlparser.xmlDictCreate()
  *                 if c_dict:             # <<<<<<<<<<<<<<
@@ -121035,7 +121126,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
           goto __pyx_L12;
         }
 
-        /* "src/lxml/parser.pxi":1231
+        /* "src/lxml/parser.pxi":1234
  *                     xmlparser.xmlDictFree(c_dict)
  *                 else:
  *                     c_doc.ids = tree.xmlHashCreate(0)             # <<<<<<<<<<<<<<
@@ -121047,7 +121138,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
         }
         __pyx_L12:;
 
-        /* "src/lxml/parser.pxi":1224
+        /* "src/lxml/parser.pxi":1227
  *         if context._collect_ids:
  *             # keep the global parser dict from filling up with XML IDs
  *             if c_doc and not c_doc.ids:             # <<<<<<<<<<<<<<
@@ -121056,7 +121147,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
       }
 
-      /* "src/lxml/parser.pxi":1222
+      /* "src/lxml/parser.pxi":1225
  *     if c_ctxt._private:
  *         context = <_ParserContext>c_ctxt._private
  *         if context._collect_ids:             # <<<<<<<<<<<<<<
@@ -121066,7 +121157,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
       goto __pyx_L8;
     }
 
-    /* "src/lxml/parser.pxi":1233
+    /* "src/lxml/parser.pxi":1236
  *                     c_doc.ids = tree.xmlHashCreate(0)
  *         else:
  *             c_ctxt.loadsubset |= xmlparser.XML_SKIP_IDS             # <<<<<<<<<<<<<<
@@ -121076,7 +121167,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
     /*else*/ {
       __pyx_v_c_ctxt->loadsubset = (__pyx_v_c_ctxt->loadsubset | XML_SKIP_IDS);
 
-      /* "src/lxml/parser.pxi":1234
+      /* "src/lxml/parser.pxi":1237
  *         else:
  *             c_ctxt.loadsubset |= xmlparser.XML_SKIP_IDS
  *             if c_doc and c_doc.ids and not tree.xmlHashSize(c_doc.ids):             # <<<<<<<<<<<<<<
@@ -121100,7 +121191,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
       __pyx_L14_bool_binop_done:;
       if (__pyx_t_2) {
 
-        /* "src/lxml/parser.pxi":1236
+        /* "src/lxml/parser.pxi":1239
  *             if c_doc and c_doc.ids and not tree.xmlHashSize(c_doc.ids):
  *                 # already initialised but empty => clear
  *                 tree.xmlHashFree(c_doc.ids, NULL)             # <<<<<<<<<<<<<<
@@ -121109,7 +121200,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
         xmlHashFree(__pyx_v_c_doc->ids, NULL);
 
-        /* "src/lxml/parser.pxi":1237
+        /* "src/lxml/parser.pxi":1240
  *                 # already initialised but empty => clear
  *                 tree.xmlHashFree(c_doc.ids, NULL)
  *                 c_doc.ids = NULL             # <<<<<<<<<<<<<<
@@ -121118,7 +121209,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
         __pyx_v_c_doc->ids = NULL;
 
-        /* "src/lxml/parser.pxi":1234
+        /* "src/lxml/parser.pxi":1237
  *         else:
  *             c_ctxt.loadsubset |= xmlparser.XML_SKIP_IDS
  *             if c_doc and c_doc.ids and not tree.xmlHashSize(c_doc.ids):             # <<<<<<<<<<<<<<
@@ -121129,7 +121220,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
     }
     __pyx_L8:;
 
-    /* "src/lxml/parser.pxi":1220
+    /* "src/lxml/parser.pxi":1223
  * 
  *     # set up XML ID hash table
  *     if c_ctxt._private:             # <<<<<<<<<<<<<<
@@ -121138,7 +121229,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
  */
   }
 
-  /* "src/lxml/parser.pxi":1207
+  /* "src/lxml/parser.pxi":1210
  * 
  * 
  * cdef void _initSaxDocument(void* ctxt) with gil:             # <<<<<<<<<<<<<<
@@ -121154,7 +121245,7 @@ static void __pyx_f_4lxml_5etree__initSaxDocument(void *__pyx_v_ctxt) {
   #endif
 }
 
-/* "src/lxml/parser.pxi":1248
+/* "src/lxml/parser.pxi":1251
  * 
  *     @property
  *     def feed_error_log(self):             # <<<<<<<<<<<<<<
@@ -121185,7 +121276,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_14feed_error_log___get__(st
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "src/lxml/parser.pxi":1254
+  /* "src/lxml/parser.pxi":1257
  *         different from what the ``error_log`` property returns.
  *         """
  *         return self._getPushParserContext()._error_log.copy()             # <<<<<<<<<<<<<<
@@ -121193,16 +121284,16 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_14feed_error_log___get__(st
  *     cpdef feed(self, data):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1254, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1257, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1)->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1)->_error_log), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1254, __pyx_L1_error)
+  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1)->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1)->_error_log), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1257, __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/parser.pxi":1248
+  /* "src/lxml/parser.pxi":1251
  * 
  *     @property
  *     def feed_error_log(self):             # <<<<<<<<<<<<<<
@@ -121222,7 +121313,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_14feed_error_log___get__(st
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1256
+/* "src/lxml/parser.pxi":1259
  *         return self._getPushParserContext()._error_log.copy()
  * 
  *     cpdef feed(self, data):             # <<<<<<<<<<<<<<
@@ -121286,7 +121377,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
       PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
       #endif
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_feed); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1256, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_feed); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1259, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_4lxml_5etree_11_FeedParser_1feed)) {
         __Pyx_XDECREF(__pyx_r);
@@ -121303,7 +121394,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
         }
         __pyx_t_2 = (__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_2)) __PYX_ERR(2, 1256, __pyx_L1_error)
+        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1259, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_r = __pyx_t_2;
@@ -121324,7 +121415,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     #endif
   }
 
-  /* "src/lxml/parser.pxi":1282
+  /* "src/lxml/parser.pxi":1285
  *         cdef int buffer_len
  *         cdef int error
  *         cdef bint recover = self._parse_options & xmlparser.XML_PARSE_RECOVER             # <<<<<<<<<<<<<<
@@ -121333,7 +121424,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
   __pyx_v_recover = (__pyx_v_self->__pyx_base._parse_options & XML_PARSE_RECOVER);
 
-  /* "src/lxml/parser.pxi":1284
+  /* "src/lxml/parser.pxi":1287
  *         cdef bint recover = self._parse_options & xmlparser.XML_PARSE_RECOVER
  * 
  *         if isinstance(data, bytes):             # <<<<<<<<<<<<<<
@@ -121344,7 +121435,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
 
-    /* "src/lxml/parser.pxi":1285
+    /* "src/lxml/parser.pxi":1288
  * 
  *         if isinstance(data, bytes):
  *             if self._default_encoding is None:             # <<<<<<<<<<<<<<
@@ -121355,7 +121446,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_t_5 = (__pyx_t_6 != 0);
     if (__pyx_t_5) {
 
-      /* "src/lxml/parser.pxi":1286
+      /* "src/lxml/parser.pxi":1289
  *         if isinstance(data, bytes):
  *             if self._default_encoding is None:
  *                 c_encoding = NULL             # <<<<<<<<<<<<<<
@@ -121364,7 +121455,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       __pyx_v_c_encoding = NULL;
 
-      /* "src/lxml/parser.pxi":1285
+      /* "src/lxml/parser.pxi":1288
  * 
  *         if isinstance(data, bytes):
  *             if self._default_encoding is None:             # <<<<<<<<<<<<<<
@@ -121374,7 +121465,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       goto __pyx_L4;
     }
 
-    /* "src/lxml/parser.pxi":1288
+    /* "src/lxml/parser.pxi":1291
  *                 c_encoding = NULL
  *             else:
  *                 c_encoding = self._default_encoding             # <<<<<<<<<<<<<<
@@ -121382,12 +121473,12 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  *             py_buffer_len = python.PyBytes_GET_SIZE(data)
  */
     /*else*/ {
-      __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_v_self->__pyx_base._default_encoding); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(2, 1288, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_v_self->__pyx_base._default_encoding); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(2, 1291, __pyx_L1_error)
       __pyx_v_c_encoding = __pyx_t_7;
     }
     __pyx_L4:;
 
-    /* "src/lxml/parser.pxi":1289
+    /* "src/lxml/parser.pxi":1292
  *             else:
  *                 c_encoding = self._default_encoding
  *             char_data = _cstr(data)             # <<<<<<<<<<<<<<
@@ -121396,7 +121487,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_char_data = PyBytes_AS_STRING(__pyx_v_data);
 
-    /* "src/lxml/parser.pxi":1290
+    /* "src/lxml/parser.pxi":1293
  *                 c_encoding = self._default_encoding
  *             char_data = _cstr(data)
  *             py_buffer_len = python.PyBytes_GET_SIZE(data)             # <<<<<<<<<<<<<<
@@ -121405,7 +121496,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_py_buffer_len = PyBytes_GET_SIZE(__pyx_v_data);
 
-    /* "src/lxml/parser.pxi":1291
+    /* "src/lxml/parser.pxi":1294
  *             char_data = _cstr(data)
  *             py_buffer_len = python.PyBytes_GET_SIZE(data)
  *             ustart = 0             # <<<<<<<<<<<<<<
@@ -121414,7 +121505,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_ustart = 0;
 
-    /* "src/lxml/parser.pxi":1284
+    /* "src/lxml/parser.pxi":1287
  *         cdef bint recover = self._parse_options & xmlparser.XML_PARSE_RECOVER
  * 
  *         if isinstance(data, bytes):             # <<<<<<<<<<<<<<
@@ -121424,7 +121515,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     goto __pyx_L3;
   }
 
-  /* "src/lxml/parser.pxi":1292
+  /* "src/lxml/parser.pxi":1295
  *             py_buffer_len = python.PyBytes_GET_SIZE(data)
  *             ustart = 0
  *         elif isinstance(data, unicode):             # <<<<<<<<<<<<<<
@@ -121435,7 +121526,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (likely(__pyx_t_6)) {
 
-    /* "src/lxml/parser.pxi":1293
+    /* "src/lxml/parser.pxi":1296
  *             ustart = 0
  *         elif isinstance(data, unicode):
  *             c_encoding = b"UTF-8"             # <<<<<<<<<<<<<<
@@ -121444,7 +121535,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_c_encoding = ((const char *)"UTF-8");
 
-    /* "src/lxml/parser.pxi":1294
+    /* "src/lxml/parser.pxi":1297
  *         elif isinstance(data, unicode):
  *             c_encoding = b"UTF-8"
  *             char_data = NULL             # <<<<<<<<<<<<<<
@@ -121453,7 +121544,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_char_data = NULL;
 
-    /* "src/lxml/parser.pxi":1295
+    /* "src/lxml/parser.pxi":1298
  *             c_encoding = b"UTF-8"
  *             char_data = NULL
  *             py_buffer_len = len(<unicode> data)             # <<<<<<<<<<<<<<
@@ -121462,12 +121553,12 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     if (unlikely(__pyx_v_data == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-      __PYX_ERR(2, 1295, __pyx_L1_error)
+      __PYX_ERR(2, 1298, __pyx_L1_error)
     }
-    __pyx_t_8 = __Pyx_PyUnicode_GET_LENGTH(((PyObject*)__pyx_v_data)); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 1295, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyUnicode_GET_LENGTH(((PyObject*)__pyx_v_data)); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 1298, __pyx_L1_error)
     __pyx_v_py_buffer_len = __pyx_t_8;
 
-    /* "src/lxml/parser.pxi":1296
+    /* "src/lxml/parser.pxi":1299
  *             char_data = NULL
  *             py_buffer_len = len(<unicode> data)
  *             ustart = 0             # <<<<<<<<<<<<<<
@@ -121476,7 +121567,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_ustart = 0;
 
-    /* "src/lxml/parser.pxi":1292
+    /* "src/lxml/parser.pxi":1295
  *             py_buffer_len = python.PyBytes_GET_SIZE(data)
  *             ustart = 0
  *         elif isinstance(data, unicode):             # <<<<<<<<<<<<<<
@@ -121486,7 +121577,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     goto __pyx_L3;
   }
 
-  /* "src/lxml/parser.pxi":1298
+  /* "src/lxml/parser.pxi":1301
  *             ustart = 0
  *         else:
  *             raise TypeError, u"Parsing requires string data"             # <<<<<<<<<<<<<<
@@ -121495,23 +121586,23 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
   /*else*/ {
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_Parsing_requires_string_data, 0, 0);
-    __PYX_ERR(2, 1298, __pyx_L1_error)
+    __PYX_ERR(2, 1301, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "src/lxml/parser.pxi":1300
+  /* "src/lxml/parser.pxi":1303
  *             raise TypeError, u"Parsing requires string data"
  * 
  *         context = self._getPushParserContext()             # <<<<<<<<<<<<<<
  *         pctxt = context._c_ctxt
  *         error = 0
  */
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1300, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":1301
+  /* "src/lxml/parser.pxi":1304
  * 
  *         context = self._getPushParserContext()
  *         pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -121521,7 +121612,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   __pyx_t_9 = __pyx_v_context->_c_ctxt;
   __pyx_v_pctxt = __pyx_t_9;
 
-  /* "src/lxml/parser.pxi":1302
+  /* "src/lxml/parser.pxi":1305
  *         context = self._getPushParserContext()
  *         pctxt = context._c_ctxt
  *         error = 0             # <<<<<<<<<<<<<<
@@ -121530,7 +121621,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
   __pyx_v_error = 0;
 
-  /* "src/lxml/parser.pxi":1303
+  /* "src/lxml/parser.pxi":1306
  *         pctxt = context._c_ctxt
  *         error = 0
  *         if not self._feed_parser_running:             # <<<<<<<<<<<<<<
@@ -121540,7 +121631,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   __pyx_t_6 = ((!(__pyx_v_self->_feed_parser_running != 0)) != 0);
   if (__pyx_t_6) {
 
-    /* "src/lxml/parser.pxi":1304
+    /* "src/lxml/parser.pxi":1307
  *         error = 0
  *         if not self._feed_parser_running:
  *             context.prepare(set_document_loader=False)             # <<<<<<<<<<<<<<
@@ -121549,9 +121640,9 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_t_11.__pyx_n = 1;
     __pyx_t_11.set_document_loader = 0;
-    __pyx_t_10 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context, &__pyx_t_11); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(2, 1304, __pyx_L1_error)
+    __pyx_t_10 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context, &__pyx_t_11); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(2, 1307, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":1305
+    /* "src/lxml/parser.pxi":1308
  *         if not self._feed_parser_running:
  *             context.prepare(set_document_loader=False)
  *             self._feed_parser_running = 1             # <<<<<<<<<<<<<<
@@ -121560,7 +121651,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_self->_feed_parser_running = 1;
 
-    /* "src/lxml/parser.pxi":1307
+    /* "src/lxml/parser.pxi":1310
  *             self._feed_parser_running = 1
  *             c_filename = (_cstr(self._filename)
  *                           if self._filename is not None else NULL)             # <<<<<<<<<<<<<<
@@ -121570,7 +121661,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_t_6 = (__pyx_v_self->__pyx_base._filename != ((PyObject*)Py_None));
     if ((__pyx_t_6 != 0)) {
 
-      /* "src/lxml/parser.pxi":1306
+      /* "src/lxml/parser.pxi":1309
  *             context.prepare(set_document_loader=False)
  *             self._feed_parser_running = 1
  *             c_filename = (_cstr(self._filename)             # <<<<<<<<<<<<<<
@@ -121583,7 +121674,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     } else {
 
-      /* "src/lxml/parser.pxi":1307
+      /* "src/lxml/parser.pxi":1310
  *             self._feed_parser_running = 1
  *             c_filename = (_cstr(self._filename)
  *                           if self._filename is not None else NULL)             # <<<<<<<<<<<<<<
@@ -121594,7 +121685,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     }
     __pyx_v_c_filename = __pyx_t_12;
 
-    /* "src/lxml/parser.pxi":1313
+    /* "src/lxml/parser.pxi":1316
  *             # however if we give it all we got, we'll have nothing for
  *             # *mlParseChunk() and things go wrong.
  *             buffer_len = 0             # <<<<<<<<<<<<<<
@@ -121603,7 +121694,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_buffer_len = 0;
 
-    /* "src/lxml/parser.pxi":1314
+    /* "src/lxml/parser.pxi":1317
  *             # *mlParseChunk() and things go wrong.
  *             buffer_len = 0
  *             if char_data is not NULL:             # <<<<<<<<<<<<<<
@@ -121613,7 +121704,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_t_6 = ((__pyx_v_char_data != NULL) != 0);
     if (__pyx_t_6) {
 
-      /* "src/lxml/parser.pxi":1315
+      /* "src/lxml/parser.pxi":1318
  *             buffer_len = 0
  *             if char_data is not NULL:
  *                 buffer_len = 4 if py_buffer_len > 4 else <int>py_buffer_len             # <<<<<<<<<<<<<<
@@ -121627,7 +121718,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       }
       __pyx_v_buffer_len = __pyx_t_10;
 
-      /* "src/lxml/parser.pxi":1314
+      /* "src/lxml/parser.pxi":1317
  *             # *mlParseChunk() and things go wrong.
  *             buffer_len = 0
  *             if char_data is not NULL:             # <<<<<<<<<<<<<<
@@ -121636,7 +121727,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     }
 
-    /* "src/lxml/parser.pxi":1316
+    /* "src/lxml/parser.pxi":1319
  *             if char_data is not NULL:
  *                 buffer_len = 4 if py_buffer_len > 4 else <int>py_buffer_len
  *             orig_loader = _register_document_loader()             # <<<<<<<<<<<<<<
@@ -121645,7 +121736,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_orig_loader = __pyx_f_4lxml_5etree__register_document_loader();
 
-    /* "src/lxml/parser.pxi":1317
+    /* "src/lxml/parser.pxi":1320
  *                 buffer_len = 4 if py_buffer_len > 4 else <int>py_buffer_len
  *             orig_loader = _register_document_loader()
  *             if self._for_html:             # <<<<<<<<<<<<<<
@@ -121655,17 +121746,17 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_t_6 = (__pyx_v_self->__pyx_base._for_html != 0);
     if (__pyx_t_6) {
 
-      /* "src/lxml/parser.pxi":1318
+      /* "src/lxml/parser.pxi":1321
  *             orig_loader = _register_document_loader()
  *             if self._for_html:
  *                 error = _htmlCtxtResetPush(             # <<<<<<<<<<<<<<
  *                     pctxt, char_data, buffer_len, c_filename, c_encoding,
  *                     self._parse_options)
  */
-      __pyx_t_10 = __pyx_f_4lxml_5etree__htmlCtxtResetPush(__pyx_v_pctxt, __pyx_v_char_data, __pyx_v_buffer_len, __pyx_v_c_filename, __pyx_v_c_encoding, __pyx_v_self->__pyx_base._parse_options); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(2, 1318, __pyx_L1_error)
+      __pyx_t_10 = __pyx_f_4lxml_5etree__htmlCtxtResetPush(__pyx_v_pctxt, __pyx_v_char_data, __pyx_v_buffer_len, __pyx_v_c_filename, __pyx_v_c_encoding, __pyx_v_self->__pyx_base._parse_options); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(2, 1321, __pyx_L1_error)
       __pyx_v_error = __pyx_t_10;
 
-      /* "src/lxml/parser.pxi":1317
+      /* "src/lxml/parser.pxi":1320
  *                 buffer_len = 4 if py_buffer_len > 4 else <int>py_buffer_len
  *             orig_loader = _register_document_loader()
  *             if self._for_html:             # <<<<<<<<<<<<<<
@@ -121675,7 +121766,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       goto __pyx_L7;
     }
 
-    /* "src/lxml/parser.pxi":1322
+    /* "src/lxml/parser.pxi":1325
  *                     self._parse_options)
  *             else:
  *                 xmlparser.xmlCtxtUseOptions(pctxt, self._parse_options)             # <<<<<<<<<<<<<<
@@ -121685,7 +121776,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     /*else*/ {
       (void)(xmlCtxtUseOptions(__pyx_v_pctxt, __pyx_v_self->__pyx_base._parse_options));
 
-      /* "src/lxml/parser.pxi":1323
+      /* "src/lxml/parser.pxi":1326
  *             else:
  *                 xmlparser.xmlCtxtUseOptions(pctxt, self._parse_options)
  *                 error = xmlparser.xmlCtxtResetPush(             # <<<<<<<<<<<<<<
@@ -121696,7 +121787,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     }
     __pyx_L7:;
 
-    /* "src/lxml/parser.pxi":1325
+    /* "src/lxml/parser.pxi":1328
  *                 error = xmlparser.xmlCtxtResetPush(
  *                     pctxt, char_data, buffer_len, c_filename, c_encoding)
  *             _reset_document_loader(orig_loader)             # <<<<<<<<<<<<<<
@@ -121705,7 +121796,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_f_4lxml_5etree__reset_document_loader(__pyx_v_orig_loader);
 
-    /* "src/lxml/parser.pxi":1326
+    /* "src/lxml/parser.pxi":1329
  *                     pctxt, char_data, buffer_len, c_filename, c_encoding)
  *             _reset_document_loader(orig_loader)
  *             py_buffer_len -= buffer_len             # <<<<<<<<<<<<<<
@@ -121714,7 +121805,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_py_buffer_len = (__pyx_v_py_buffer_len - __pyx_v_buffer_len);
 
-    /* "src/lxml/parser.pxi":1327
+    /* "src/lxml/parser.pxi":1330
  *             _reset_document_loader(orig_loader)
  *             py_buffer_len -= buffer_len
  *             char_data += buffer_len             # <<<<<<<<<<<<<<
@@ -121723,7 +121814,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_char_data = (__pyx_v_char_data + __pyx_v_buffer_len);
 
-    /* "src/lxml/parser.pxi":1328
+    /* "src/lxml/parser.pxi":1331
  *             py_buffer_len -= buffer_len
  *             char_data += buffer_len
  *             if error:             # <<<<<<<<<<<<<<
@@ -121733,16 +121824,16 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_t_6 = (__pyx_v_error != 0);
     if (unlikely(__pyx_t_6)) {
 
-      /* "src/lxml/parser.pxi":1329
+      /* "src/lxml/parser.pxi":1332
  *             char_data += buffer_len
  *             if error:
  *                 raise MemoryError()             # <<<<<<<<<<<<<<
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  * 
  */
-      PyErr_NoMemory(); __PYX_ERR(2, 1329, __pyx_L1_error)
+      PyErr_NoMemory(); __PYX_ERR(2, 1332, __pyx_L1_error)
 
-      /* "src/lxml/parser.pxi":1328
+      /* "src/lxml/parser.pxi":1331
  *             py_buffer_len -= buffer_len
  *             char_data += buffer_len
  *             if error:             # <<<<<<<<<<<<<<
@@ -121751,7 +121842,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     }
 
-    /* "src/lxml/parser.pxi":1330
+    /* "src/lxml/parser.pxi":1333
  *             if error:
  *                 raise MemoryError()
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
@@ -121760,7 +121851,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
 
-    /* "src/lxml/parser.pxi":1303
+    /* "src/lxml/parser.pxi":1306
  *         pctxt = context._c_ctxt
  *         error = 0
  *         if not self._feed_parser_running:             # <<<<<<<<<<<<<<
@@ -121769,7 +121860,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
   }
 
-  /* "src/lxml/parser.pxi":1334
+  /* "src/lxml/parser.pxi":1337
  *         #print pctxt.charset, 'NONE' if c_encoding is NULL else c_encoding
  * 
  *         fixup_error = 0             # <<<<<<<<<<<<<<
@@ -121778,7 +121869,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
   __pyx_v_fixup_error = 0;
 
-  /* "src/lxml/parser.pxi":1335
+  /* "src/lxml/parser.pxi":1338
  * 
  *         fixup_error = 0
  *         while py_buffer_len > 0 and (error == 0 or recover):             # <<<<<<<<<<<<<<
@@ -121803,7 +121894,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_L11_bool_binop_done:;
     if (!__pyx_t_6) break;
 
-    /* "src/lxml/parser.pxi":1336
+    /* "src/lxml/parser.pxi":1339
  *         fixup_error = 0
  *         while py_buffer_len > 0 and (error == 0 or recover):
  *             if char_data is NULL:             # <<<<<<<<<<<<<<
@@ -121813,7 +121904,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_t_6 = ((__pyx_v_char_data == NULL) != 0);
     if (__pyx_t_6) {
 
-      /* "src/lxml/parser.pxi":1338
+      /* "src/lxml/parser.pxi":1341
  *             if char_data is NULL:
  *                 # Unicode parsing by converting chunks to UTF-8
  *                 buffer_len = 2**19  # len(bytes) <= 4 * (2**19) == 2 MiB             # <<<<<<<<<<<<<<
@@ -121822,7 +121913,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       __pyx_v_buffer_len = 0x80000;
 
-      /* "src/lxml/parser.pxi":1339
+      /* "src/lxml/parser.pxi":1342
  *                 # Unicode parsing by converting chunks to UTF-8
  *                 buffer_len = 2**19  # len(bytes) <= 4 * (2**19) == 2 MiB
  *                 bstring = (<unicode> data)[ustart : ustart+buffer_len].encode('UTF-8')             # <<<<<<<<<<<<<<
@@ -121831,17 +121922,17 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       if (unlikely(__pyx_v_data == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(2, 1339, __pyx_L1_error)
+        __PYX_ERR(2, 1342, __pyx_L1_error)
       }
-      __pyx_t_1 = __Pyx_PyUnicode_Substring(((PyObject*)__pyx_v_data), __pyx_v_ustart, (__pyx_v_ustart + __pyx_v_buffer_len)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1339, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyUnicode_Substring(((PyObject*)__pyx_v_data), __pyx_v_ustart, (__pyx_v_ustart + __pyx_v_buffer_len)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1342, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_2 = PyUnicode_AsUTF8String(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1339, __pyx_L1_error)
+      __pyx_t_2 = PyUnicode_AsUTF8String(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1342, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_XDECREF_SET(__pyx_v_bstring, ((PyObject*)__pyx_t_2));
       __pyx_t_2 = 0;
 
-      /* "src/lxml/parser.pxi":1340
+      /* "src/lxml/parser.pxi":1343
  *                 buffer_len = 2**19  # len(bytes) <= 4 * (2**19) == 2 MiB
  *                 bstring = (<unicode> data)[ustart : ustart+buffer_len].encode('UTF-8')
  *                 ustart += buffer_len             # <<<<<<<<<<<<<<
@@ -121850,7 +121941,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       __pyx_v_ustart = (__pyx_v_ustart + __pyx_v_buffer_len);
 
-      /* "src/lxml/parser.pxi":1341
+      /* "src/lxml/parser.pxi":1344
  *                 bstring = (<unicode> data)[ustart : ustart+buffer_len].encode('UTF-8')
  *                 ustart += buffer_len
  *                 py_buffer_len -= buffer_len  # may end up < 0             # <<<<<<<<<<<<<<
@@ -121859,7 +121950,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       __pyx_v_py_buffer_len = (__pyx_v_py_buffer_len - __pyx_v_buffer_len);
 
-      /* "src/lxml/parser.pxi":1342
+      /* "src/lxml/parser.pxi":1345
  *                 ustart += buffer_len
  *                 py_buffer_len -= buffer_len  # may end up < 0
  *                 error, fixup_error = _parse_data_chunk(pctxt, <const char*> bstring, <int> len(bstring))             # <<<<<<<<<<<<<<
@@ -121868,21 +121959,21 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       if (unlikely(__pyx_v_bstring == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
-        __PYX_ERR(2, 1342, __pyx_L1_error)
+        __PYX_ERR(2, 1345, __pyx_L1_error)
       }
-      __pyx_t_13 = __Pyx_PyBytes_AsString(__pyx_v_bstring); if (unlikely((!__pyx_t_13) && PyErr_Occurred())) __PYX_ERR(2, 1342, __pyx_L1_error)
+      __pyx_t_13 = __Pyx_PyBytes_AsString(__pyx_v_bstring); if (unlikely((!__pyx_t_13) && PyErr_Occurred())) __PYX_ERR(2, 1345, __pyx_L1_error)
       if (unlikely(__pyx_v_bstring == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-        __PYX_ERR(2, 1342, __pyx_L1_error)
+        __PYX_ERR(2, 1345, __pyx_L1_error)
       }
-      __pyx_t_8 = PyBytes_GET_SIZE(__pyx_v_bstring); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 1342, __pyx_L1_error)
+      __pyx_t_8 = PyBytes_GET_SIZE(__pyx_v_bstring); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 1345, __pyx_L1_error)
       __pyx_t_14 = __pyx_f_4lxml_5etree__parse_data_chunk(__pyx_v_pctxt, ((char const *)__pyx_t_13), ((int)__pyx_t_8));
       __pyx_t_10 = __pyx_t_14.f0;
       __pyx_t_15 = __pyx_t_14.f1;
       __pyx_v_error = __pyx_t_10;
       __pyx_v_fixup_error = __pyx_t_15;
 
-      /* "src/lxml/parser.pxi":1336
+      /* "src/lxml/parser.pxi":1339
  *         fixup_error = 0
  *         while py_buffer_len > 0 and (error == 0 or recover):
  *             if char_data is NULL:             # <<<<<<<<<<<<<<
@@ -121892,7 +121983,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       goto __pyx_L14;
     }
 
-    /* "src/lxml/parser.pxi":1345
+    /* "src/lxml/parser.pxi":1348
  *             else:
  *                 # Direct byte string parsing.
  *                 buffer_len = <int>py_buffer_len if py_buffer_len <= limits.INT_MAX else limits.INT_MAX             # <<<<<<<<<<<<<<
@@ -121907,7 +121998,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       }
       __pyx_v_buffer_len = __pyx_t_15;
 
-      /* "src/lxml/parser.pxi":1346
+      /* "src/lxml/parser.pxi":1349
  *                 # Direct byte string parsing.
  *                 buffer_len = <int>py_buffer_len if py_buffer_len <= limits.INT_MAX else limits.INT_MAX
  *                 error, fixup_error = _parse_data_chunk(pctxt, char_data, buffer_len)             # <<<<<<<<<<<<<<
@@ -121920,7 +122011,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       __pyx_v_error = __pyx_t_15;
       __pyx_v_fixup_error = __pyx_t_10;
 
-      /* "src/lxml/parser.pxi":1347
+      /* "src/lxml/parser.pxi":1350
  *                 buffer_len = <int>py_buffer_len if py_buffer_len <= limits.INT_MAX else limits.INT_MAX
  *                 error, fixup_error = _parse_data_chunk(pctxt, char_data, buffer_len)
  *                 py_buffer_len -= buffer_len             # <<<<<<<<<<<<<<
@@ -121929,7 +122020,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       __pyx_v_py_buffer_len = (__pyx_v_py_buffer_len - __pyx_v_buffer_len);
 
-      /* "src/lxml/parser.pxi":1348
+      /* "src/lxml/parser.pxi":1351
  *                 error, fixup_error = _parse_data_chunk(pctxt, char_data, buffer_len)
  *                 py_buffer_len -= buffer_len
  *                 char_data += buffer_len             # <<<<<<<<<<<<<<
@@ -121940,7 +122031,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     }
     __pyx_L14:;
 
-    /* "src/lxml/parser.pxi":1350
+    /* "src/lxml/parser.pxi":1353
  *                 char_data += buffer_len
  * 
  *             if fixup_error:             # <<<<<<<<<<<<<<
@@ -121950,16 +122041,16 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_t_6 = (__pyx_v_fixup_error != 0);
     if (__pyx_t_6) {
 
-      /* "src/lxml/parser.pxi":1351
+      /* "src/lxml/parser.pxi":1354
  * 
  *             if fixup_error:
  *                 context.store_exception(MemoryError())             # <<<<<<<<<<<<<<
  * 
  *             if context._has_raised():
  */
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context), __pyx_n_s_store_exception); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1351, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context), __pyx_n_s_store_exception); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1354, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_builtin_MemoryError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1351, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_builtin_MemoryError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1354, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_4 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -121974,12 +122065,12 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __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_2)) __PYX_ERR(2, 1351, __pyx_L1_error)
+      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1354, __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/parser.pxi":1350
+      /* "src/lxml/parser.pxi":1353
  *                 char_data += buffer_len
  * 
  *             if fixup_error:             # <<<<<<<<<<<<<<
@@ -121988,18 +122079,18 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     }
 
-    /* "src/lxml/parser.pxi":1353
+    /* "src/lxml/parser.pxi":1356
  *                 context.store_exception(MemoryError())
  * 
  *             if context._has_raised():             # <<<<<<<<<<<<<<
  *                 # propagate Python exceptions immediately
  *                 recover = 0
  */
-    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._has_raised(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1353, __pyx_L1_error)
+    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._has_raised(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1356, __pyx_L1_error)
     __pyx_t_5 = (__pyx_t_6 != 0);
     if (__pyx_t_5) {
 
-      /* "src/lxml/parser.pxi":1355
+      /* "src/lxml/parser.pxi":1358
  *             if context._has_raised():
  *                 # propagate Python exceptions immediately
  *                 recover = 0             # <<<<<<<<<<<<<<
@@ -122008,7 +122099,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       __pyx_v_recover = 0;
 
-      /* "src/lxml/parser.pxi":1356
+      /* "src/lxml/parser.pxi":1359
  *                 # propagate Python exceptions immediately
  *                 recover = 0
  *                 error = 1             # <<<<<<<<<<<<<<
@@ -122017,7 +122108,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       __pyx_v_error = 1;
 
-      /* "src/lxml/parser.pxi":1357
+      /* "src/lxml/parser.pxi":1360
  *                 recover = 0
  *                 error = 1
  *                 break             # <<<<<<<<<<<<<<
@@ -122026,7 +122117,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       goto __pyx_L10_break;
 
-      /* "src/lxml/parser.pxi":1353
+      /* "src/lxml/parser.pxi":1356
  *                 context.store_exception(MemoryError())
  * 
  *             if context._has_raised():             # <<<<<<<<<<<<<<
@@ -122035,7 +122126,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     }
 
-    /* "src/lxml/parser.pxi":1359
+    /* "src/lxml/parser.pxi":1362
  *                 break
  * 
  *             if error and not pctxt.replaceEntities and not pctxt.validate:             # <<<<<<<<<<<<<<
@@ -122059,14 +122150,14 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_L18_bool_binop_done:;
     if (__pyx_t_5) {
 
-      /* "src/lxml/parser.pxi":1361
+      /* "src/lxml/parser.pxi":1364
  *             if error and not pctxt.replaceEntities and not pctxt.validate:
  *                 # in this mode, we ignore errors about undefined entities
  *                 for entry in context._error_log.filter_from_errors():             # <<<<<<<<<<<<<<
  *                     if entry.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                            entry.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  */
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context->_error_log), __pyx_n_s_filter_from_errors); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1361, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context->_error_log), __pyx_n_s_filter_from_errors); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1364, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_3 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -122080,16 +122171,16 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       }
       __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(2, 1361, __pyx_L1_error)
+      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1364, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
         __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
         __pyx_t_16 = NULL;
       } else {
-        __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1361, __pyx_L1_error)
+        __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1364, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_16 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 1361, __pyx_L1_error)
+        __pyx_t_16 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 1364, __pyx_L1_error)
       }
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       for (;;) {
@@ -122097,17 +122188,17 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
           if (likely(PyList_CheckExact(__pyx_t_1))) {
             if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(2, 1361, __pyx_L1_error)
+            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(2, 1364, __pyx_L1_error)
             #else
-            __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1361, __pyx_L1_error)
+            __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1364, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_2);
             #endif
           } else {
             if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
             #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(2, 1361, __pyx_L1_error)
+            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(2, 1364, __pyx_L1_error)
             #else
-            __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1361, __pyx_L1_error)
+            __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1364, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_2);
             #endif
           }
@@ -122117,7 +122208,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
               if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else __PYX_ERR(2, 1361, __pyx_L1_error)
+              else __PYX_ERR(2, 1364, __pyx_L1_error)
             }
             break;
           }
@@ -122126,24 +122217,24 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
         __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_2);
         __pyx_t_2 = 0;
 
-        /* "src/lxml/parser.pxi":1362
+        /* "src/lxml/parser.pxi":1365
  *                 # in this mode, we ignore errors about undefined entities
  *                 for entry in context._error_log.filter_from_errors():
  *                     if entry.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \             # <<<<<<<<<<<<<<
  *                            entry.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  *                         break
  */
-        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_n_s_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1362, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_n_s_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1365, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1362, __pyx_L1_error)
+        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1365, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_WAR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1362, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_WAR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1365, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1362, __pyx_L1_error)
+        __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1365, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 1362, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 1365, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         if (__pyx_t_6) {
         } else {
@@ -122151,29 +122242,29 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
           goto __pyx_L24_bool_binop_done;
         }
 
-        /* "src/lxml/parser.pxi":1363
+        /* "src/lxml/parser.pxi":1366
  *                 for entry in context._error_log.filter_from_errors():
  *                     if entry.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                            entry.type != ErrorTypes.ERR_UNDECLARED_ENTITY:             # <<<<<<<<<<<<<<
  *                         break
  *                 else:
  */
-        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_n_s_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1363, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_n_s_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1366, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1363, __pyx_L1_error)
+        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1366, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ERR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1363, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ERR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1366, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __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(2, 1363, __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(2, 1366, __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(2, 1363, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 1366, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_5 = __pyx_t_6;
         __pyx_L24_bool_binop_done:;
 
-        /* "src/lxml/parser.pxi":1362
+        /* "src/lxml/parser.pxi":1365
  *                 # in this mode, we ignore errors about undefined entities
  *                 for entry in context._error_log.filter_from_errors():
  *                     if entry.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \             # <<<<<<<<<<<<<<
@@ -122182,7 +122273,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
         if (__pyx_t_5) {
 
-          /* "src/lxml/parser.pxi":1364
+          /* "src/lxml/parser.pxi":1367
  *                     if entry.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                            entry.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  *                         break             # <<<<<<<<<<<<<<
@@ -122191,7 +122282,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
           goto __pyx_L22_break;
 
-          /* "src/lxml/parser.pxi":1362
+          /* "src/lxml/parser.pxi":1365
  *                 # in this mode, we ignore errors about undefined entities
  *                 for entry in context._error_log.filter_from_errors():
  *                     if entry.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \             # <<<<<<<<<<<<<<
@@ -122200,7 +122291,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
         }
 
-        /* "src/lxml/parser.pxi":1361
+        /* "src/lxml/parser.pxi":1364
  *             if error and not pctxt.replaceEntities and not pctxt.validate:
  *                 # in this mode, we ignore errors about undefined entities
  *                 for entry in context._error_log.filter_from_errors():             # <<<<<<<<<<<<<<
@@ -122210,7 +122301,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       }
       /*else*/ {
 
-        /* "src/lxml/parser.pxi":1366
+        /* "src/lxml/parser.pxi":1369
  *                         break
  *                 else:
  *                     error = 0             # <<<<<<<<<<<<<<
@@ -122220,7 +122311,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
         __pyx_v_error = 0;
       }
 
-      /* "src/lxml/parser.pxi":1361
+      /* "src/lxml/parser.pxi":1364
  *             if error and not pctxt.replaceEntities and not pctxt.validate:
  *                 # in this mode, we ignore errors about undefined entities
  *                 for entry in context._error_log.filter_from_errors():             # <<<<<<<<<<<<<<
@@ -122230,7 +122321,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       __pyx_L22_break:;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "src/lxml/parser.pxi":1359
+      /* "src/lxml/parser.pxi":1362
  *                 break
  * 
  *             if error and not pctxt.replaceEntities and not pctxt.validate:             # <<<<<<<<<<<<<<
@@ -122241,7 +122332,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   }
   __pyx_L10_break:;
 
-  /* "src/lxml/parser.pxi":1368
+  /* "src/lxml/parser.pxi":1371
  *                     error = 0
  * 
  *         if not pctxt.wellFormed and pctxt.disableSAX and context._has_raised():             # <<<<<<<<<<<<<<
@@ -122252,21 +122343,21 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   if (__pyx_t_6) {
   } else {
     __pyx_t_5 = __pyx_t_6;
-    goto __pyx_L28_bool_binop_done;
+    goto __pyx_L29_bool_binop_done;
   }
   __pyx_t_6 = (__pyx_v_pctxt->disableSAX != 0);
   if (__pyx_t_6) {
   } else {
     __pyx_t_5 = __pyx_t_6;
-    goto __pyx_L28_bool_binop_done;
+    goto __pyx_L29_bool_binop_done;
   }
-  __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._has_raised(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1368, __pyx_L1_error)
+  __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._has_raised(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1371, __pyx_L1_error)
   __pyx_t_17 = (__pyx_t_6 != 0);
   __pyx_t_5 = __pyx_t_17;
-  __pyx_L28_bool_binop_done:;
+  __pyx_L29_bool_binop_done:;
   if (__pyx_t_5) {
 
-    /* "src/lxml/parser.pxi":1370
+    /* "src/lxml/parser.pxi":1373
  *         if not pctxt.wellFormed and pctxt.disableSAX and context._has_raised():
  *             # propagate Python exceptions immediately
  *             recover = 0             # <<<<<<<<<<<<<<
@@ -122275,7 +122366,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_recover = 0;
 
-    /* "src/lxml/parser.pxi":1371
+    /* "src/lxml/parser.pxi":1374
  *             # propagate Python exceptions immediately
  *             recover = 0
  *             error = 1             # <<<<<<<<<<<<<<
@@ -122284,7 +122375,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_error = 1;
 
-    /* "src/lxml/parser.pxi":1368
+    /* "src/lxml/parser.pxi":1371
  *                     error = 0
  * 
  *         if not pctxt.wellFormed and pctxt.disableSAX and context._has_raised():             # <<<<<<<<<<<<<<
@@ -122293,7 +122384,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
   }
 
-  /* "src/lxml/parser.pxi":1373
+  /* "src/lxml/parser.pxi":1376
  *             error = 1
  * 
  *         if fixup_error or not recover and (error or not pctxt.wellFormed):             # <<<<<<<<<<<<<<
@@ -122304,26 +122395,26 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   if (!__pyx_t_17) {
   } else {
     __pyx_t_5 = __pyx_t_17;
-    goto __pyx_L32_bool_binop_done;
+    goto __pyx_L33_bool_binop_done;
   }
   __pyx_t_17 = ((!(__pyx_v_recover != 0)) != 0);
   if (__pyx_t_17) {
   } else {
     __pyx_t_5 = __pyx_t_17;
-    goto __pyx_L32_bool_binop_done;
+    goto __pyx_L33_bool_binop_done;
   }
   __pyx_t_17 = (__pyx_v_error != 0);
   if (!__pyx_t_17) {
   } else {
     __pyx_t_5 = __pyx_t_17;
-    goto __pyx_L32_bool_binop_done;
+    goto __pyx_L33_bool_binop_done;
   }
   __pyx_t_17 = ((!(__pyx_v_pctxt->wellFormed != 0)) != 0);
   __pyx_t_5 = __pyx_t_17;
-  __pyx_L32_bool_binop_done:;
+  __pyx_L33_bool_binop_done:;
   if (__pyx_t_5) {
 
-    /* "src/lxml/parser.pxi":1374
+    /* "src/lxml/parser.pxi":1377
  * 
  *         if fixup_error or not recover and (error or not pctxt.wellFormed):
  *             self._feed_parser_running = 0             # <<<<<<<<<<<<<<
@@ -122332,7 +122423,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_self->_feed_parser_running = 0;
 
-    /* "src/lxml/parser.pxi":1375
+    /* "src/lxml/parser.pxi":1378
  *         if fixup_error or not recover and (error or not pctxt.wellFormed):
  *             self._feed_parser_running = 0
  *             try:             # <<<<<<<<<<<<<<
@@ -122341,19 +122432,19 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     /*try:*/ {
 
-      /* "src/lxml/parser.pxi":1376
+      /* "src/lxml/parser.pxi":1379
  *             self._feed_parser_running = 0
  *             try:
  *                 context._handleParseResult(self, pctxt.myDoc, None)             # <<<<<<<<<<<<<<
  *             finally:
  *                 context.cleanup()
  */
-      __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResult(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_pctxt->myDoc, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1376, __pyx_L37_error)
+      __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResult(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_pctxt->myDoc, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1379, __pyx_L38_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
 
-    /* "src/lxml/parser.pxi":1378
+    /* "src/lxml/parser.pxi":1381
  *                 context._handleParseResult(self, pctxt.myDoc, None)
  *             finally:
  *                 context.cleanup()             # <<<<<<<<<<<<<<
@@ -122362,10 +122453,10 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     /*finally:*/ {
       /*normal exit:*/{
-        __pyx_t_10 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(2, 1378, __pyx_L1_error)
-        goto __pyx_L38;
+        __pyx_t_10 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(2, 1381, __pyx_L1_error)
+        goto __pyx_L39;
       }
-      __pyx_L37_error:;
+      __pyx_L38_error:;
       /*exception exit:*/{
         __Pyx_PyThreadState_declare
         __Pyx_PyThreadState_assign
@@ -122384,7 +122475,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
         __Pyx_XGOTREF(__pyx_t_24);
         __pyx_t_10 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
         {
-          __pyx_t_25 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_25 == ((int)-1))) __PYX_ERR(2, 1378, __pyx_L40_error)
+          __pyx_t_25 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_25 == ((int)-1))) __PYX_ERR(2, 1381, __pyx_L41_error)
         }
         if (PY_MAJOR_VERSION >= 3) {
           __Pyx_XGIVEREF(__pyx_t_22);
@@ -122399,7 +122490,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
         __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
         __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_18;
         goto __pyx_L1_error;
-        __pyx_L40_error:;
+        __pyx_L41_error:;
         if (PY_MAJOR_VERSION >= 3) {
           __Pyx_XGIVEREF(__pyx_t_22);
           __Pyx_XGIVEREF(__pyx_t_23);
@@ -122412,10 +122503,10 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
         __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
         goto __pyx_L1_error;
       }
-      __pyx_L38:;
+      __pyx_L39:;
     }
 
-    /* "src/lxml/parser.pxi":1373
+    /* "src/lxml/parser.pxi":1376
  *             error = 1
  * 
  *         if fixup_error or not recover and (error or not pctxt.wellFormed):             # <<<<<<<<<<<<<<
@@ -122424,7 +122515,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
   }
 
-  /* "src/lxml/parser.pxi":1256
+  /* "src/lxml/parser.pxi":1259
  *         return self._getPushParserContext()._error_log.copy()
  * 
  *     cpdef feed(self, data):             # <<<<<<<<<<<<<<
@@ -122475,7 +122566,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("feed", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_11_FeedParser_feed(__pyx_v_self, __pyx_v_data, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1256, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_11_FeedParser_feed(__pyx_v_self, __pyx_v_data, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -122492,7 +122583,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1380
+/* "src/lxml/parser.pxi":1383
  *                 context.cleanup()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -122539,7 +122630,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
       PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
       #endif
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1380, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1383, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_4lxml_5etree_11_FeedParser_3close)) {
         __Pyx_XDECREF(__pyx_r);
@@ -122556,7 +122647,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
         }
         __pyx_t_2 = (__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_2)) __PYX_ERR(2, 1380, __pyx_L1_error)
+        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1383, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_r = __pyx_t_2;
@@ -122577,7 +122668,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     #endif
   }
 
-  /* "src/lxml/parser.pxi":1391
+  /* "src/lxml/parser.pxi":1394
  *         parser interface, all other usage is undefined.
  *         """
  *         if not self._feed_parser_running:             # <<<<<<<<<<<<<<
@@ -122587,27 +122678,27 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   __pyx_t_5 = ((!(__pyx_v_self->_feed_parser_running != 0)) != 0);
   if (unlikely(__pyx_t_5)) {
 
-    /* "src/lxml/parser.pxi":1392
+    /* "src/lxml/parser.pxi":1395
  *         """
  *         if not self._feed_parser_running:
  *             raise XMLSyntaxError(u"no element found",             # <<<<<<<<<<<<<<
  *                                  xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0,
  *                                  self._filename)
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1392, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1395, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
 
-    /* "src/lxml/parser.pxi":1393
+    /* "src/lxml/parser.pxi":1396
  *         if not self._feed_parser_running:
  *             raise XMLSyntaxError(u"no element found",
  *                                  xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0,             # <<<<<<<<<<<<<<
  *                                  self._filename)
  * 
  */
-    __pyx_t_3 = __Pyx_PyInt_From_xmlParserErrors(XML_ERR_INTERNAL_ERROR); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1393, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyInt_From_xmlParserErrors(XML_ERR_INTERNAL_ERROR); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1396, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
 
-    /* "src/lxml/parser.pxi":1394
+    /* "src/lxml/parser.pxi":1397
  *             raise XMLSyntaxError(u"no element found",
  *                                  xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0,
  *                                  self._filename)             # <<<<<<<<<<<<<<
@@ -122629,7 +122720,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     #if CYTHON_FAST_PYCALL
     if (PyFunction_Check(__pyx_t_2)) {
       PyObject *__pyx_temp[6] = {__pyx_t_4, __pyx_kp_u_no_element_found, __pyx_t_3, __pyx_int_0, __pyx_int_0, __pyx_v_self->__pyx_base._filename};
-      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1392, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1395, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -122638,14 +122729,14 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     #if CYTHON_FAST_PYCCALL
     if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
       PyObject *__pyx_temp[6] = {__pyx_t_4, __pyx_kp_u_no_element_found, __pyx_t_3, __pyx_int_0, __pyx_int_0, __pyx_v_self->__pyx_base._filename};
-      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1392, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1395, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     } else
     #endif
     {
-      __pyx_t_7 = PyTuple_New(5+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1392, __pyx_L1_error)
+      __pyx_t_7 = PyTuple_New(5+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1395, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       if (__pyx_t_4) {
         __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -122665,16 +122756,16 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
       __Pyx_GIVEREF(__pyx_v_self->__pyx_base._filename);
       PyTuple_SET_ITEM(__pyx_t_7, 4+__pyx_t_6, __pyx_v_self->__pyx_base._filename);
       __pyx_t_3 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1392, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1395, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __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(2, 1392, __pyx_L1_error)
+    __PYX_ERR(2, 1395, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":1391
+    /* "src/lxml/parser.pxi":1394
  *         parser interface, all other usage is undefined.
  *         """
  *         if not self._feed_parser_running:             # <<<<<<<<<<<<<<
@@ -122683,19 +122774,19 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
   }
 
-  /* "src/lxml/parser.pxi":1396
+  /* "src/lxml/parser.pxi":1399
  *                                  self._filename)
  * 
  *         context = self._getPushParserContext()             # <<<<<<<<<<<<<<
  *         pctxt = context._c_ctxt
  * 
  */
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1396, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1399, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":1397
+  /* "src/lxml/parser.pxi":1400
  * 
  *         context = self._getPushParserContext()
  *         pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -122705,7 +122796,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   __pyx_t_8 = __pyx_v_context->_c_ctxt;
   __pyx_v_pctxt = __pyx_t_8;
 
-  /* "src/lxml/parser.pxi":1399
+  /* "src/lxml/parser.pxi":1402
  *         pctxt = context._c_ctxt
  * 
  *         self._feed_parser_running = 0             # <<<<<<<<<<<<<<
@@ -122714,7 +122805,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
   __pyx_v_self->_feed_parser_running = 0;
 
-  /* "src/lxml/parser.pxi":1400
+  /* "src/lxml/parser.pxi":1403
  * 
  *         self._feed_parser_running = 0
  *         if self._for_html:             # <<<<<<<<<<<<<<
@@ -122724,7 +122815,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   __pyx_t_5 = (__pyx_v_self->__pyx_base._for_html != 0);
   if (__pyx_t_5) {
 
-    /* "src/lxml/parser.pxi":1401
+    /* "src/lxml/parser.pxi":1404
  *         self._feed_parser_running = 0
  *         if self._for_html:
  *             htmlparser.htmlParseChunk(pctxt, NULL, 0, 1)             # <<<<<<<<<<<<<<
@@ -122733,7 +122824,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
     (void)(htmlParseChunk(__pyx_v_pctxt, NULL, 0, 1));
 
-    /* "src/lxml/parser.pxi":1400
+    /* "src/lxml/parser.pxi":1403
  * 
  *         self._feed_parser_running = 0
  *         if self._for_html:             # <<<<<<<<<<<<<<
@@ -122743,7 +122834,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     goto __pyx_L4;
   }
 
-  /* "src/lxml/parser.pxi":1403
+  /* "src/lxml/parser.pxi":1406
  *             htmlparser.htmlParseChunk(pctxt, NULL, 0, 1)
  *         else:
  *             xmlparser.xmlParseChunk(pctxt, NULL, 0, 1)             # <<<<<<<<<<<<<<
@@ -122755,7 +122846,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   }
   __pyx_L4:;
 
-  /* "src/lxml/parser.pxi":1405
+  /* "src/lxml/parser.pxi":1408
  *             xmlparser.xmlParseChunk(pctxt, NULL, 0, 1)
  * 
  *         if (pctxt.recovery and not pctxt.disableSAX and             # <<<<<<<<<<<<<<
@@ -122775,7 +122866,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     goto __pyx_L6_bool_binop_done;
   }
 
-  /* "src/lxml/parser.pxi":1406
+  /* "src/lxml/parser.pxi":1409
  * 
  *         if (pctxt.recovery and not pctxt.disableSAX and
  *                 isinstance(context, _SaxParserContext)):             # <<<<<<<<<<<<<<
@@ -122787,7 +122878,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   __pyx_t_5 = __pyx_t_10;
   __pyx_L6_bool_binop_done:;
 
-  /* "src/lxml/parser.pxi":1405
+  /* "src/lxml/parser.pxi":1408
  *             xmlparser.xmlParseChunk(pctxt, NULL, 0, 1)
  * 
  *         if (pctxt.recovery and not pctxt.disableSAX and             # <<<<<<<<<<<<<<
@@ -122796,16 +122887,16 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
   if (__pyx_t_5) {
 
-    /* "src/lxml/parser.pxi":1408
+    /* "src/lxml/parser.pxi":1411
  *                 isinstance(context, _SaxParserContext)):
  *             # apply any left-over 'end' events
  *             (<_SaxParserContext>context).flushEvents()             # <<<<<<<<<<<<<<
  * 
  *         try:
  */
-    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__SaxParserContext *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_v_context)->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->flushEvents(((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_v_context)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1408, __pyx_L1_error)
+    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__SaxParserContext *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_v_context)->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->flushEvents(((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_v_context)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1411, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":1405
+    /* "src/lxml/parser.pxi":1408
  *             xmlparser.xmlParseChunk(pctxt, NULL, 0, 1)
  * 
  *         if (pctxt.recovery and not pctxt.disableSAX and             # <<<<<<<<<<<<<<
@@ -122814,7 +122905,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
   }
 
-  /* "src/lxml/parser.pxi":1410
+  /* "src/lxml/parser.pxi":1413
  *             (<_SaxParserContext>context).flushEvents()
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -122823,20 +122914,20 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
   /*try:*/ {
 
-    /* "src/lxml/parser.pxi":1411
+    /* "src/lxml/parser.pxi":1414
  * 
  *         try:
  *             result = context._handleParseResult(self, pctxt.myDoc, None)             # <<<<<<<<<<<<<<
  *         finally:
  *             context.cleanup()
  */
-    __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResult(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_pctxt->myDoc, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1411, __pyx_L10_error)
+    __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResult(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_pctxt->myDoc, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1414, __pyx_L10_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_v_result = __pyx_t_1;
     __pyx_t_1 = 0;
   }
 
-  /* "src/lxml/parser.pxi":1413
+  /* "src/lxml/parser.pxi":1416
  *             result = context._handleParseResult(self, pctxt.myDoc, None)
  *         finally:
  *             context.cleanup()             # <<<<<<<<<<<<<<
@@ -122845,7 +122936,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1413, __pyx_L1_error)
+      __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1416, __pyx_L1_error)
       goto __pyx_L11;
     }
     __pyx_L10_error:;
@@ -122868,7 +122959,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
       __Pyx_XGOTREF(__pyx_t_18);
       __pyx_t_6 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
       {
-        __pyx_t_19 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(2, 1413, __pyx_L13_error)
+        __pyx_t_19 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(2, 1416, __pyx_L13_error)
       }
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_16);
@@ -122899,7 +122990,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     __pyx_L11:;
   }
 
-  /* "src/lxml/parser.pxi":1415
+  /* "src/lxml/parser.pxi":1418
  *             context.cleanup()
  * 
  *         if isinstance(result, _Document):             # <<<<<<<<<<<<<<
@@ -122910,7 +123001,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   __pyx_t_10 = (__pyx_t_5 != 0);
   if (__pyx_t_10) {
 
-    /* "src/lxml/parser.pxi":1416
+    /* "src/lxml/parser.pxi":1419
  * 
  *         if isinstance(result, _Document):
  *             return (<_Document>result).getroot()             # <<<<<<<<<<<<<<
@@ -122918,13 +123009,13 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  *             return result
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getroot(((struct LxmlDocument *)__pyx_v_result)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1416, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree_9_Document_getroot(((struct LxmlDocument *)__pyx_v_result)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1419, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/parser.pxi":1415
+    /* "src/lxml/parser.pxi":1418
  *             context.cleanup()
  * 
  *         if isinstance(result, _Document):             # <<<<<<<<<<<<<<
@@ -122933,7 +123024,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
   }
 
-  /* "src/lxml/parser.pxi":1418
+  /* "src/lxml/parser.pxi":1421
  *             return (<_Document>result).getroot()
  *         else:
  *             return result             # <<<<<<<<<<<<<<
@@ -122947,7 +123038,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     goto __pyx_L0;
   }
 
-  /* "src/lxml/parser.pxi":1380
+  /* "src/lxml/parser.pxi":1383
  *                 context.cleanup()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -122996,7 +123087,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_2close(struct __pyx_obj_4lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_11_FeedParser_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1380, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_11_FeedParser_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1383, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -123013,7 +123104,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_2close(struct __pyx_obj_4lx
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1421
+/* "src/lxml/parser.pxi":1424
  * 
  * 
  * cdef (int, int) _parse_data_chunk(xmlparser.xmlParserCtxt* c_ctxt,             # <<<<<<<<<<<<<<
@@ -123035,7 +123126,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
   __pyx_ctuple_int__and_int __pyx_t_5;
   __Pyx_RefNannySetupContext("_parse_data_chunk", 0);
 
-  /* "src/lxml/parser.pxi":1423
+  /* "src/lxml/parser.pxi":1426
  * cdef (int, int) _parse_data_chunk(xmlparser.xmlParserCtxt* c_ctxt,
  *                                   const char* char_data, int buffer_len):
  *     fixup_error = 0             # <<<<<<<<<<<<<<
@@ -123044,7 +123135,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
  */
   __pyx_v_fixup_error = 0;
 
-  /* "src/lxml/parser.pxi":1424
+  /* "src/lxml/parser.pxi":1427
  *                                   const char* char_data, int buffer_len):
  *     fixup_error = 0
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -123059,7 +123150,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
       #endif
       /*try:*/ {
 
-        /* "src/lxml/parser.pxi":1425
+        /* "src/lxml/parser.pxi":1428
  *     fixup_error = 0
  *     with nogil:
  *         if c_ctxt.html:             # <<<<<<<<<<<<<<
@@ -123069,7 +123160,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
         __pyx_t_1 = (__pyx_v_c_ctxt->html != 0);
         if (__pyx_t_1) {
 
-          /* "src/lxml/parser.pxi":1426
+          /* "src/lxml/parser.pxi":1429
  *     with nogil:
  *         if c_ctxt.html:
  *             c_node = c_ctxt.node  # last node where the parser stopped             # <<<<<<<<<<<<<<
@@ -123079,7 +123170,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
           __pyx_t_2 = __pyx_v_c_ctxt->node;
           __pyx_v_c_node = __pyx_t_2;
 
-          /* "src/lxml/parser.pxi":1427
+          /* "src/lxml/parser.pxi":1430
  *         if c_ctxt.html:
  *             c_node = c_ctxt.node  # last node where the parser stopped
  *             orig_loader = _register_document_loader()             # <<<<<<<<<<<<<<
@@ -123088,7 +123179,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
  */
           __pyx_v_orig_loader = __pyx_f_4lxml_5etree__register_document_loader();
 
-          /* "src/lxml/parser.pxi":1428
+          /* "src/lxml/parser.pxi":1431
  *             c_node = c_ctxt.node  # last node where the parser stopped
  *             orig_loader = _register_document_loader()
  *             error = htmlparser.htmlParseChunk(c_ctxt, char_data, buffer_len, 0)             # <<<<<<<<<<<<<<
@@ -123097,7 +123188,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
  */
           __pyx_v_error = htmlParseChunk(__pyx_v_c_ctxt, __pyx_v_char_data, __pyx_v_buffer_len, 0);
 
-          /* "src/lxml/parser.pxi":1429
+          /* "src/lxml/parser.pxi":1432
  *             orig_loader = _register_document_loader()
  *             error = htmlparser.htmlParseChunk(c_ctxt, char_data, buffer_len, 0)
  *             _reset_document_loader(orig_loader)             # <<<<<<<<<<<<<<
@@ -123106,7 +123197,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
  */
           __pyx_f_4lxml_5etree__reset_document_loader(__pyx_v_orig_loader);
 
-          /* "src/lxml/parser.pxi":1431
+          /* "src/lxml/parser.pxi":1434
  *             _reset_document_loader(orig_loader)
  *             # and now for the fun part: move node names to the dict
  *             if c_ctxt.myDoc:             # <<<<<<<<<<<<<<
@@ -123116,7 +123207,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
           __pyx_t_1 = (__pyx_v_c_ctxt->myDoc != 0);
           if (__pyx_t_1) {
 
-            /* "src/lxml/parser.pxi":1432
+            /* "src/lxml/parser.pxi":1435
  *             # and now for the fun part: move node names to the dict
  *             if c_ctxt.myDoc:
  *                 fixup_error = _fixHtmlDictSubtreeNames(             # <<<<<<<<<<<<<<
@@ -123125,7 +123216,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
  */
             __pyx_v_fixup_error = __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(__pyx_v_c_ctxt->dict, __pyx_v_c_ctxt->myDoc, __pyx_v_c_node);
 
-            /* "src/lxml/parser.pxi":1434
+            /* "src/lxml/parser.pxi":1437
  *                 fixup_error = _fixHtmlDictSubtreeNames(
  *                     c_ctxt.dict, c_ctxt.myDoc, c_node)
  *                 if c_ctxt.myDoc.dict and c_ctxt.myDoc.dict is not c_ctxt.dict:             # <<<<<<<<<<<<<<
@@ -123143,7 +123234,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
             __pyx_L9_bool_binop_done:;
             if (__pyx_t_1) {
 
-              /* "src/lxml/parser.pxi":1435
+              /* "src/lxml/parser.pxi":1438
  *                     c_ctxt.dict, c_ctxt.myDoc, c_node)
  *                 if c_ctxt.myDoc.dict and c_ctxt.myDoc.dict is not c_ctxt.dict:
  *                     xmlparser.xmlDictFree(c_ctxt.myDoc.dict)             # <<<<<<<<<<<<<<
@@ -123152,7 +123243,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
  */
               xmlDictFree(__pyx_v_c_ctxt->myDoc->dict);
 
-              /* "src/lxml/parser.pxi":1436
+              /* "src/lxml/parser.pxi":1439
  *                 if c_ctxt.myDoc.dict and c_ctxt.myDoc.dict is not c_ctxt.dict:
  *                     xmlparser.xmlDictFree(c_ctxt.myDoc.dict)
  *                     c_ctxt.myDoc.dict = c_ctxt.dict             # <<<<<<<<<<<<<<
@@ -123162,7 +123253,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
               __pyx_t_4 = __pyx_v_c_ctxt->dict;
               __pyx_v_c_ctxt->myDoc->dict = __pyx_t_4;
 
-              /* "src/lxml/parser.pxi":1437
+              /* "src/lxml/parser.pxi":1440
  *                     xmlparser.xmlDictFree(c_ctxt.myDoc.dict)
  *                     c_ctxt.myDoc.dict = c_ctxt.dict
  *                     xmlparser.xmlDictReference(c_ctxt.dict)             # <<<<<<<<<<<<<<
@@ -123171,7 +123262,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
  */
               (void)(xmlDictReference(__pyx_v_c_ctxt->dict));
 
-              /* "src/lxml/parser.pxi":1434
+              /* "src/lxml/parser.pxi":1437
  *                 fixup_error = _fixHtmlDictSubtreeNames(
  *                     c_ctxt.dict, c_ctxt.myDoc, c_node)
  *                 if c_ctxt.myDoc.dict and c_ctxt.myDoc.dict is not c_ctxt.dict:             # <<<<<<<<<<<<<<
@@ -123180,7 +123271,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
  */
             }
 
-            /* "src/lxml/parser.pxi":1431
+            /* "src/lxml/parser.pxi":1434
  *             _reset_document_loader(orig_loader)
  *             # and now for the fun part: move node names to the dict
  *             if c_ctxt.myDoc:             # <<<<<<<<<<<<<<
@@ -123189,7 +123280,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
  */
           }
 
-          /* "src/lxml/parser.pxi":1425
+          /* "src/lxml/parser.pxi":1428
  *     fixup_error = 0
  *     with nogil:
  *         if c_ctxt.html:             # <<<<<<<<<<<<<<
@@ -123199,7 +123290,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
           goto __pyx_L6;
         }
 
-        /* "src/lxml/parser.pxi":1439
+        /* "src/lxml/parser.pxi":1442
  *                     xmlparser.xmlDictReference(c_ctxt.dict)
  *         else:
  *             orig_loader = _register_document_loader()             # <<<<<<<<<<<<<<
@@ -123209,7 +123300,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
         /*else*/ {
           __pyx_v_orig_loader = __pyx_f_4lxml_5etree__register_document_loader();
 
-          /* "src/lxml/parser.pxi":1440
+          /* "src/lxml/parser.pxi":1443
  *         else:
  *             orig_loader = _register_document_loader()
  *             error = xmlparser.xmlParseChunk(c_ctxt, char_data, buffer_len, 0)             # <<<<<<<<<<<<<<
@@ -123218,7 +123309,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
  */
           __pyx_v_error = xmlParseChunk(__pyx_v_c_ctxt, __pyx_v_char_data, __pyx_v_buffer_len, 0);
 
-          /* "src/lxml/parser.pxi":1441
+          /* "src/lxml/parser.pxi":1444
  *             orig_loader = _register_document_loader()
  *             error = xmlparser.xmlParseChunk(c_ctxt, char_data, buffer_len, 0)
  *             _reset_document_loader(orig_loader)             # <<<<<<<<<<<<<<
@@ -123230,7 +123321,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
         __pyx_L6:;
       }
 
-      /* "src/lxml/parser.pxi":1424
+      /* "src/lxml/parser.pxi":1427
  *                                   const char* char_data, int buffer_len):
  *     fixup_error = 0
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -123249,7 +123340,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
       }
   }
 
-  /* "src/lxml/parser.pxi":1442
+  /* "src/lxml/parser.pxi":1445
  *             error = xmlparser.xmlParseChunk(c_ctxt, char_data, buffer_len, 0)
  *             _reset_document_loader(orig_loader)
  *     return (error, fixup_error)             # <<<<<<<<<<<<<<
@@ -123261,7 +123352,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1421
+  /* "src/lxml/parser.pxi":1424
  * 
  * 
  * cdef (int, int) _parse_data_chunk(xmlparser.xmlParserCtxt* c_ctxt,             # <<<<<<<<<<<<<<
@@ -123275,7 +123366,7 @@ static __pyx_ctuple_int__and_int __pyx_f_4lxml_5etree__parse_data_chunk(xmlParse
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1445
+/* "src/lxml/parser.pxi":1448
  * 
  * 
  * cdef int _htmlCtxtResetPush(xmlparser.xmlParserCtxt* c_ctxt,             # <<<<<<<<<<<<<<
@@ -123290,7 +123381,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("_htmlCtxtResetPush", 0);
 
-  /* "src/lxml/parser.pxi":1451
+  /* "src/lxml/parser.pxi":1454
  *     cdef xmlparser.xmlParserInput* c_input_stream
  *     # libxml2 lacks an HTML push parser setup function
  *     error = xmlparser.xmlCtxtResetPush(             # <<<<<<<<<<<<<<
@@ -123299,7 +123390,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
  */
   __pyx_v_error = xmlCtxtResetPush(__pyx_v_c_ctxt, __pyx_v_c_data, __pyx_v_buffer_len, __pyx_v_c_filename, __pyx_v_c_encoding);
 
-  /* "src/lxml/parser.pxi":1453
+  /* "src/lxml/parser.pxi":1456
  *     error = xmlparser.xmlCtxtResetPush(
  *         c_ctxt, c_data, buffer_len, c_filename, c_encoding)
  *     if error:             # <<<<<<<<<<<<<<
@@ -123309,7 +123400,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   __pyx_t_1 = (__pyx_v_error != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1454
+    /* "src/lxml/parser.pxi":1457
  *         c_ctxt, c_data, buffer_len, c_filename, c_encoding)
  *     if error:
  *         return error             # <<<<<<<<<<<<<<
@@ -123319,7 +123410,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
     __pyx_r = __pyx_v_error;
     goto __pyx_L0;
 
-    /* "src/lxml/parser.pxi":1453
+    /* "src/lxml/parser.pxi":1456
  *     error = xmlparser.xmlCtxtResetPush(
  *         c_ctxt, c_data, buffer_len, c_filename, c_encoding)
  *     if error:             # <<<<<<<<<<<<<<
@@ -123328,7 +123419,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
  */
   }
 
-  /* "src/lxml/parser.pxi":1457
+  /* "src/lxml/parser.pxi":1460
  * 
  *     # fix libxml2 setup for HTML
  *     c_ctxt.progressive = 1             # <<<<<<<<<<<<<<
@@ -123337,7 +123428,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
  */
   __pyx_v_c_ctxt->progressive = 1;
 
-  /* "src/lxml/parser.pxi":1458
+  /* "src/lxml/parser.pxi":1461
  *     # fix libxml2 setup for HTML
  *     c_ctxt.progressive = 1
  *     c_ctxt.html = 1             # <<<<<<<<<<<<<<
@@ -123346,7 +123437,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
  */
   __pyx_v_c_ctxt->html = 1;
 
-  /* "src/lxml/parser.pxi":1459
+  /* "src/lxml/parser.pxi":1462
  *     c_ctxt.progressive = 1
  *     c_ctxt.html = 1
  *     htmlparser.htmlCtxtUseOptions(c_ctxt, parse_options)             # <<<<<<<<<<<<<<
@@ -123355,7 +123446,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
  */
   (void)(htmlCtxtUseOptions(__pyx_v_c_ctxt, __pyx_v_parse_options));
 
-  /* "src/lxml/parser.pxi":1461
+  /* "src/lxml/parser.pxi":1464
  *     htmlparser.htmlCtxtUseOptions(c_ctxt, parse_options)
  * 
  *     return 0             # <<<<<<<<<<<<<<
@@ -123365,7 +123456,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1445
+  /* "src/lxml/parser.pxi":1448
  * 
  * 
  * cdef int _htmlCtxtResetPush(xmlparser.xmlParserCtxt* c_ctxt,             # <<<<<<<<<<<<<<
@@ -123379,7 +123470,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1522
+/* "src/lxml/parser.pxi":1525
  *     apply to the default parser.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -123419,7 +123510,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_False);
 
-    /* "src/lxml/parser.pxi":1523
+    /* "src/lxml/parser.pxi":1526
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,
  *                  dtd_validation=False, load_dtd=False, no_network=True,             # <<<<<<<<<<<<<<
@@ -123430,7 +123521,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
     values[3] = ((PyObject *)Py_False);
     values[4] = ((PyObject *)Py_True);
 
-    /* "src/lxml/parser.pxi":1524
+    /* "src/lxml/parser.pxi":1527
  *     def __init__(self, *, encoding=None, attribute_defaults=False,
  *                  dtd_validation=False, load_dtd=False, no_network=True,
  *                  ns_clean=False, recover=False, XMLSchema schema=None,             # <<<<<<<<<<<<<<
@@ -123441,7 +123532,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
     values[6] = ((PyObject *)Py_False);
     values[7] = (PyObject *)((struct __pyx_obj_4lxml_5etree_XMLSchema *)Py_None);
 
-    /* "src/lxml/parser.pxi":1525
+    /* "src/lxml/parser.pxi":1528
  *                  dtd_validation=False, load_dtd=False, no_network=True,
  *                  ns_clean=False, recover=False, XMLSchema schema=None,
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,             # <<<<<<<<<<<<<<
@@ -123452,7 +123543,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
     values[9] = ((PyObject *)Py_False);
     values[10] = ((PyObject *)Py_True);
 
-    /* "src/lxml/parser.pxi":1526
+    /* "src/lxml/parser.pxi":1529
  *                  ns_clean=False, recover=False, XMLSchema schema=None,
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,
  *                  remove_comments=False, remove_pis=False, strip_cdata=True,             # <<<<<<<<<<<<<<
@@ -123463,7 +123554,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
     values[12] = ((PyObject *)Py_False);
     values[13] = ((PyObject *)Py_True);
 
-    /* "src/lxml/parser.pxi":1527
+    /* "src/lxml/parser.pxi":1530
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,
  *                  remove_comments=False, remove_pis=False, strip_cdata=True,
  *                  collect_ids=True, target=None, compact=True):             # <<<<<<<<<<<<<<
@@ -123489,7 +123580,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) __PYX_ERR(2, 1522, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) __PYX_ERR(2, 1525, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 0) {
       goto __pyx_L5_argtuple_error;
@@ -123515,16 +123606,16 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1522, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1525, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.XMLParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) __PYX_ERR(2, 1524, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) __PYX_ERR(2, 1527, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_9XMLParser___init__(((struct __pyx_obj_4lxml_5etree_XMLParser *)__pyx_v_self), __pyx_v_encoding, __pyx_v_attribute_defaults, __pyx_v_dtd_validation, __pyx_v_load_dtd, __pyx_v_no_network, __pyx_v_ns_clean, __pyx_v_recover, __pyx_v_schema, __pyx_v_huge_tree, __pyx_v_remove_blank_text, __pyx_v_resolve_entities, __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_collect_ids, __pyx_v_target, __pyx_v_compact);
 
-  /* "src/lxml/parser.pxi":1522
+  /* "src/lxml/parser.pxi":1525
  *     apply to the default parser.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -123558,7 +123649,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "src/lxml/parser.pxi":1529
+  /* "src/lxml/parser.pxi":1532
  *                  collect_ids=True, target=None, compact=True):
  *         cdef int parse_options
  *         parse_options = _XML_DEFAULT_PARSE_OPTIONS             # <<<<<<<<<<<<<<
@@ -123567,17 +123658,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   __pyx_v_parse_options = __pyx_v_4lxml_5etree__XML_DEFAULT_PARSE_OPTIONS;
 
-  /* "src/lxml/parser.pxi":1530
+  /* "src/lxml/parser.pxi":1533
  *         cdef int parse_options
  *         parse_options = _XML_DEFAULT_PARSE_OPTIONS
  *         if load_dtd:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if dtd_validation:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_load_dtd); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1530, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_load_dtd); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1533, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1531
+    /* "src/lxml/parser.pxi":1534
  *         parse_options = _XML_DEFAULT_PARSE_OPTIONS
  *         if load_dtd:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD             # <<<<<<<<<<<<<<
@@ -123586,7 +123677,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options | XML_PARSE_DTDLOAD);
 
-    /* "src/lxml/parser.pxi":1530
+    /* "src/lxml/parser.pxi":1533
  *         cdef int parse_options
  *         parse_options = _XML_DEFAULT_PARSE_OPTIONS
  *         if load_dtd:             # <<<<<<<<<<<<<<
@@ -123595,17 +123686,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1532
+  /* "src/lxml/parser.pxi":1535
  *         if load_dtd:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if dtd_validation:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDVALID | \
  *                             xmlparser.XML_PARSE_DTDLOAD
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_dtd_validation); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1532, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_dtd_validation); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1535, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1533
+    /* "src/lxml/parser.pxi":1536
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if dtd_validation:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDVALID | \             # <<<<<<<<<<<<<<
@@ -123614,7 +123705,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = ((__pyx_v_parse_options | XML_PARSE_DTDVALID) | XML_PARSE_DTDLOAD);
 
-    /* "src/lxml/parser.pxi":1532
+    /* "src/lxml/parser.pxi":1535
  *         if load_dtd:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if dtd_validation:             # <<<<<<<<<<<<<<
@@ -123623,17 +123714,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1535
+  /* "src/lxml/parser.pxi":1538
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDVALID | \
  *                             xmlparser.XML_PARSE_DTDLOAD
  *         if attribute_defaults:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDATTR
  *             if schema is None:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_attribute_defaults); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1535, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_attribute_defaults); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1538, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1536
+    /* "src/lxml/parser.pxi":1539
  *                             xmlparser.XML_PARSE_DTDLOAD
  *         if attribute_defaults:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDATTR             # <<<<<<<<<<<<<<
@@ -123642,7 +123733,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options | XML_PARSE_DTDATTR);
 
-    /* "src/lxml/parser.pxi":1537
+    /* "src/lxml/parser.pxi":1540
  *         if attribute_defaults:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDATTR
  *             if schema is None:             # <<<<<<<<<<<<<<
@@ -123653,7 +123744,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":1538
+      /* "src/lxml/parser.pxi":1541
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDATTR
  *             if schema is None:
  *                 parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD             # <<<<<<<<<<<<<<
@@ -123662,7 +123753,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
       __pyx_v_parse_options = (__pyx_v_parse_options | XML_PARSE_DTDLOAD);
 
-      /* "src/lxml/parser.pxi":1537
+      /* "src/lxml/parser.pxi":1540
  *         if attribute_defaults:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDATTR
  *             if schema is None:             # <<<<<<<<<<<<<<
@@ -123671,7 +123762,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     }
 
-    /* "src/lxml/parser.pxi":1535
+    /* "src/lxml/parser.pxi":1538
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDVALID | \
  *                             xmlparser.XML_PARSE_DTDLOAD
  *         if attribute_defaults:             # <<<<<<<<<<<<<<
@@ -123680,17 +123771,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1539
+  /* "src/lxml/parser.pxi":1542
  *             if schema is None:
  *                 parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if ns_clean:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_NSCLEAN
  *         if recover:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ns_clean); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1539, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ns_clean); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1542, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1540
+    /* "src/lxml/parser.pxi":1543
  *                 parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if ns_clean:
  *             parse_options = parse_options | xmlparser.XML_PARSE_NSCLEAN             # <<<<<<<<<<<<<<
@@ -123699,7 +123790,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options | XML_PARSE_NSCLEAN);
 
-    /* "src/lxml/parser.pxi":1539
+    /* "src/lxml/parser.pxi":1542
  *             if schema is None:
  *                 parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if ns_clean:             # <<<<<<<<<<<<<<
@@ -123708,17 +123799,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1541
+  /* "src/lxml/parser.pxi":1544
  *         if ns_clean:
  *             parse_options = parse_options | xmlparser.XML_PARSE_NSCLEAN
  *         if recover:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_RECOVER
  *         if remove_blank_text:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_recover); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1541, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_recover); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1544, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1542
+    /* "src/lxml/parser.pxi":1545
  *             parse_options = parse_options | xmlparser.XML_PARSE_NSCLEAN
  *         if recover:
  *             parse_options = parse_options | xmlparser.XML_PARSE_RECOVER             # <<<<<<<<<<<<<<
@@ -123727,7 +123818,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options | XML_PARSE_RECOVER);
 
-    /* "src/lxml/parser.pxi":1541
+    /* "src/lxml/parser.pxi":1544
  *         if ns_clean:
  *             parse_options = parse_options | xmlparser.XML_PARSE_NSCLEAN
  *         if recover:             # <<<<<<<<<<<<<<
@@ -123736,17 +123827,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1543
+  /* "src/lxml/parser.pxi":1546
  *         if recover:
  *             parse_options = parse_options | xmlparser.XML_PARSE_RECOVER
  *         if remove_blank_text:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_NOBLANKS
  *         if huge_tree:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_remove_blank_text); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1543, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_remove_blank_text); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1546, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1544
+    /* "src/lxml/parser.pxi":1547
  *             parse_options = parse_options | xmlparser.XML_PARSE_RECOVER
  *         if remove_blank_text:
  *             parse_options = parse_options | xmlparser.XML_PARSE_NOBLANKS             # <<<<<<<<<<<<<<
@@ -123755,7 +123846,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options | XML_PARSE_NOBLANKS);
 
-    /* "src/lxml/parser.pxi":1543
+    /* "src/lxml/parser.pxi":1546
  *         if recover:
  *             parse_options = parse_options | xmlparser.XML_PARSE_RECOVER
  *         if remove_blank_text:             # <<<<<<<<<<<<<<
@@ -123764,17 +123855,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1545
+  /* "src/lxml/parser.pxi":1548
  *         if remove_blank_text:
  *             parse_options = parse_options | xmlparser.XML_PARSE_NOBLANKS
  *         if huge_tree:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE
  *         if not no_network:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_huge_tree); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1545, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_huge_tree); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1548, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1546
+    /* "src/lxml/parser.pxi":1549
  *             parse_options = parse_options | xmlparser.XML_PARSE_NOBLANKS
  *         if huge_tree:
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE             # <<<<<<<<<<<<<<
@@ -123783,7 +123874,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options | XML_PARSE_HUGE);
 
-    /* "src/lxml/parser.pxi":1545
+    /* "src/lxml/parser.pxi":1548
  *         if remove_blank_text:
  *             parse_options = parse_options | xmlparser.XML_PARSE_NOBLANKS
  *         if huge_tree:             # <<<<<<<<<<<<<<
@@ -123792,18 +123883,18 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1547
+  /* "src/lxml/parser.pxi":1550
  *         if huge_tree:
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE
  *         if not no_network:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NONET
  *         if not compact:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_no_network); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1547, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_no_network); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1550, __pyx_L1_error)
   __pyx_t_1 = ((!__pyx_t_2) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1548
+    /* "src/lxml/parser.pxi":1551
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE
  *         if not no_network:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NONET             # <<<<<<<<<<<<<<
@@ -123812,7 +123903,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options ^ XML_PARSE_NONET);
 
-    /* "src/lxml/parser.pxi":1547
+    /* "src/lxml/parser.pxi":1550
  *         if huge_tree:
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE
  *         if not no_network:             # <<<<<<<<<<<<<<
@@ -123821,18 +123912,18 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1549
+  /* "src/lxml/parser.pxi":1552
  *         if not no_network:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NONET
  *         if not compact:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_COMPACT
  *         if not resolve_entities:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_compact); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1549, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_compact); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1552, __pyx_L1_error)
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1550
+    /* "src/lxml/parser.pxi":1553
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NONET
  *         if not compact:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_COMPACT             # <<<<<<<<<<<<<<
@@ -123841,7 +123932,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options ^ XML_PARSE_COMPACT);
 
-    /* "src/lxml/parser.pxi":1549
+    /* "src/lxml/parser.pxi":1552
  *         if not no_network:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NONET
  *         if not compact:             # <<<<<<<<<<<<<<
@@ -123850,18 +123941,18 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1551
+  /* "src/lxml/parser.pxi":1554
  *         if not compact:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_COMPACT
  *         if not resolve_entities:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOENT
  *         if not strip_cdata:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_resolve_entities); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1551, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_resolve_entities); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1554, __pyx_L1_error)
   __pyx_t_1 = ((!__pyx_t_2) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1552
+    /* "src/lxml/parser.pxi":1555
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_COMPACT
  *         if not resolve_entities:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOENT             # <<<<<<<<<<<<<<
@@ -123870,7 +123961,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options ^ XML_PARSE_NOENT);
 
-    /* "src/lxml/parser.pxi":1551
+    /* "src/lxml/parser.pxi":1554
  *         if not compact:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_COMPACT
  *         if not resolve_entities:             # <<<<<<<<<<<<<<
@@ -123879,18 +123970,18 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1553
+  /* "src/lxml/parser.pxi":1556
  *         if not resolve_entities:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOENT
  *         if not strip_cdata:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOCDATA
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_strip_cdata); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1553, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_strip_cdata); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1556, __pyx_L1_error)
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1554
+    /* "src/lxml/parser.pxi":1557
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOENT
  *         if not strip_cdata:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOCDATA             # <<<<<<<<<<<<<<
@@ -123899,7 +123990,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options ^ XML_PARSE_NOCDATA);
 
-    /* "src/lxml/parser.pxi":1553
+    /* "src/lxml/parser.pxi":1556
  *         if not resolve_entities:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOENT
  *         if not strip_cdata:             # <<<<<<<<<<<<<<
@@ -123908,19 +123999,19 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/parser.pxi":1556
+  /* "src/lxml/parser.pxi":1559
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOCDATA
  * 
  *         _BaseParser.__init__(self, parse_options, 0, schema,             # <<<<<<<<<<<<<<
  *                              remove_comments, remove_pis, strip_cdata,
  *                              collect_ids, target, encoding)
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser), __pyx_n_s_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1556, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser), __pyx_n_s_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_parse_options); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1556, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_parse_options); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
 
-  /* "src/lxml/parser.pxi":1558
+  /* "src/lxml/parser.pxi":1561
  *         _BaseParser.__init__(self, parse_options, 0, schema,
  *                              remove_comments, remove_pis, strip_cdata,
  *                              collect_ids, target, encoding)             # <<<<<<<<<<<<<<
@@ -123942,7 +124033,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[11] = {__pyx_t_6, ((PyObject *)__pyx_v_self), __pyx_t_5, __pyx_int_0, ((PyObject *)__pyx_v_schema), __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_collect_ids, __pyx_v_target, __pyx_v_encoding};
-    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 10+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1556, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 10+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1559, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -123951,14 +124042,14 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[11] = {__pyx_t_6, ((PyObject *)__pyx_v_self), __pyx_t_5, __pyx_int_0, ((PyObject *)__pyx_v_schema), __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_collect_ids, __pyx_v_target, __pyx_v_encoding};
-    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 10+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1556, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 10+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1559, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else
   #endif
   {
-    __pyx_t_8 = PyTuple_New(10+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1556, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(10+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1559, __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;
@@ -123993,14 +124084,14 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
     __Pyx_GIVEREF(__pyx_v_encoding);
     PyTuple_SET_ITEM(__pyx_t_8, 9+__pyx_t_7, __pyx_v_encoding);
     __pyx_t_5 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1556, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1559, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   }
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/lxml/parser.pxi":1522
+  /* "src/lxml/parser.pxi":1525
  *     apply to the default parser.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -124024,7 +124115,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1579
+/* "src/lxml/parser.pxi":1582
  *     source, you can pass the ``base_url``.
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):             # <<<<<<<<<<<<<<
@@ -124078,7 +124169,7 @@ static int __pyx_pw_4lxml_5etree_13XMLPullParser_1__init__(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) __PYX_ERR(2, 1579, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) __PYX_ERR(2, 1582, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -124094,7 +124185,7 @@ static int __pyx_pw_4lxml_5etree_13XMLPullParser_1__init__(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1579, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1582, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
   __Pyx_AddTraceback("lxml.etree.XMLPullParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -124124,30 +124215,30 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_events);
 
-  /* "src/lxml/parser.pxi":1580
+  /* "src/lxml/parser.pxi":1583
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
  *         XMLParser.__init__(self, **kwargs)             # <<<<<<<<<<<<<<
  *         if events is None:
  *             events = ('end',)
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree_XMLParser), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1580, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree_XMLParser), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1580, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __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 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1580, __pyx_L1_error)
+  __pyx_t_3 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1583, __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, 1580, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1583, __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":1581
+  /* "src/lxml/parser.pxi":1584
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
  *         XMLParser.__init__(self, **kwargs)
  *         if events is None:             # <<<<<<<<<<<<<<
@@ -124158,7 +124249,7 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
 
-    /* "src/lxml/parser.pxi":1582
+    /* "src/lxml/parser.pxi":1585
  *         XMLParser.__init__(self, **kwargs)
  *         if events is None:
  *             events = ('end',)             # <<<<<<<<<<<<<<
@@ -124168,7 +124259,7 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
     __Pyx_INCREF(__pyx_tuple__57);
     __Pyx_DECREF_SET(__pyx_v_events, __pyx_tuple__57);
 
-    /* "src/lxml/parser.pxi":1581
+    /* "src/lxml/parser.pxi":1584
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
  *         XMLParser.__init__(self, **kwargs)
  *         if events is None:             # <<<<<<<<<<<<<<
@@ -124177,29 +124268,29 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
  */
   }
 
-  /* "src/lxml/parser.pxi":1583
+  /* "src/lxml/parser.pxi":1586
  *         if events is None:
  *             events = ('end',)
  *         self._setBaseURL(base_url)             # <<<<<<<<<<<<<<
  *         self._collectEvents(events, tag)
  * 
  */
-  __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, 1583, __pyx_L1_error)
+  __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, 1586, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "src/lxml/parser.pxi":1584
+  /* "src/lxml/parser.pxi":1587
  *             events = ('end',)
  *         self._setBaseURL(base_url)
  *         self._collectEvents(events, tag)             # <<<<<<<<<<<<<<
  * 
  *     def read_events(self):
  */
-  __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, 1584, __pyx_L1_error)
+  __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, 1587, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "src/lxml/parser.pxi":1579
+  /* "src/lxml/parser.pxi":1582
  *     source, you can pass the ``base_url``.
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):             # <<<<<<<<<<<<<<
@@ -124223,7 +124314,7 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1586
+/* "src/lxml/parser.pxi":1589
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
@@ -124254,7 +124345,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13XMLPullParser_2read_events(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read_events", 0);
 
-  /* "src/lxml/parser.pxi":1587
+  /* "src/lxml/parser.pxi":1590
  * 
  *     def read_events(self):
  *         return (<_SaxParserContext?>self._getPushParserContext()).events_iterator             # <<<<<<<<<<<<<<
@@ -124262,15 +124353,15 @@ static PyObject *__pyx_pf_4lxml_5etree_13XMLPullParser_2read_events(struct __pyx
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1587, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__SaxParserContext)))) __PYX_ERR(2, 1587, __pyx_L1_error)
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__SaxParserContext)))) __PYX_ERR(2, 1590, __pyx_L1_error)
   __Pyx_INCREF(((PyObject *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_1)->events_iterator));
   __pyx_r = ((PyObject *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_1)->events_iterator);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1586
+  /* "src/lxml/parser.pxi":1589
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
@@ -124289,7 +124380,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13XMLPullParser_2read_events(struct __pyx
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1605
+/* "src/lxml/parser.pxi":1608
  *     and thus ignores comments and processing instructions.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -124328,7 +124419,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_False);
 
-    /* "src/lxml/parser.pxi":1606
+    /* "src/lxml/parser.pxi":1609
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,
  *                  dtd_validation=False, load_dtd=False, no_network=True,             # <<<<<<<<<<<<<<
@@ -124339,7 +124430,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
     values[3] = ((PyObject *)Py_False);
     values[4] = ((PyObject *)Py_True);
 
-    /* "src/lxml/parser.pxi":1607
+    /* "src/lxml/parser.pxi":1610
  *     def __init__(self, *, encoding=None, attribute_defaults=False,
  *                  dtd_validation=False, load_dtd=False, no_network=True,
  *                  ns_clean=False, recover=False, schema=None,             # <<<<<<<<<<<<<<
@@ -124350,7 +124441,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
     values[6] = ((PyObject *)Py_False);
     values[7] = ((PyObject *)Py_None);
 
-    /* "src/lxml/parser.pxi":1608
+    /* "src/lxml/parser.pxi":1611
  *                  dtd_validation=False, load_dtd=False, no_network=True,
  *                  ns_clean=False, recover=False, schema=None,
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,             # <<<<<<<<<<<<<<
@@ -124361,7 +124452,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
     values[9] = ((PyObject *)Py_False);
     values[10] = ((PyObject *)Py_True);
 
-    /* "src/lxml/parser.pxi":1609
+    /* "src/lxml/parser.pxi":1612
  *                  ns_clean=False, recover=False, schema=None,
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,
  *                  remove_comments=True, remove_pis=True, strip_cdata=True,             # <<<<<<<<<<<<<<
@@ -124372,7 +124463,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
     values[12] = ((PyObject *)Py_True);
     values[13] = ((PyObject *)Py_True);
 
-    /* "src/lxml/parser.pxi":1610
+    /* "src/lxml/parser.pxi":1613
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,
  *                  remove_comments=True, remove_pis=True, strip_cdata=True,
  *                  target=None, compact=True):             # <<<<<<<<<<<<<<
@@ -124397,7 +124488,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_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(2, 1605, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) __PYX_ERR(2, 1608, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 0) {
       goto __pyx_L5_argtuple_error;
@@ -124422,7 +124513,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_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(2, 1605, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1608, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.ETCompatXMLParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -124430,7 +124521,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_5etree_17ETCompatXMLParser___init__(((struct __pyx_obj_4lxml_5etree_ETCompatXMLParser *)__pyx_v_self), __pyx_v_encoding, __pyx_v_attribute_defaults, __pyx_v_dtd_validation, __pyx_v_load_dtd, __pyx_v_no_network, __pyx_v_ns_clean, __pyx_v_recover, __pyx_v_schema, __pyx_v_huge_tree, __pyx_v_remove_blank_text, __pyx_v_resolve_entities, __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_target, __pyx_v_compact);
 
-  /* "src/lxml/parser.pxi":1605
+  /* "src/lxml/parser.pxi":1608
  *     and thus ignores comments and processing instructions.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -124455,182 +124546,182 @@ static int __pyx_pf_4lxml_5etree_17ETCompatXMLParser___init__(struct __pyx_obj_4
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "src/lxml/parser.pxi":1611
+  /* "src/lxml/parser.pxi":1614
  *                  remove_comments=True, remove_pis=True, strip_cdata=True,
  *                  target=None, compact=True):
  *         XMLParser.__init__(self,             # <<<<<<<<<<<<<<
  *                            attribute_defaults=attribute_defaults,
  *                            dtd_validation=dtd_validation,
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree_XMLParser), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1611, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree_XMLParser), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1614, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1611, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1614, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
 
-  /* "src/lxml/parser.pxi":1612
+  /* "src/lxml/parser.pxi":1615
  *                  target=None, compact=True):
  *         XMLParser.__init__(self,
  *                            attribute_defaults=attribute_defaults,             # <<<<<<<<<<<<<<
  *                            dtd_validation=dtd_validation,
  *                            load_dtd=load_dtd,
  */
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(16); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1612, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(16); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1615, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_attribute_defaults, __pyx_v_attribute_defaults) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_attribute_defaults, __pyx_v_attribute_defaults) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1613
+  /* "src/lxml/parser.pxi":1616
  *         XMLParser.__init__(self,
  *                            attribute_defaults=attribute_defaults,
  *                            dtd_validation=dtd_validation,             # <<<<<<<<<<<<<<
  *                            load_dtd=load_dtd,
  *                            no_network=no_network,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtd_validation, __pyx_v_dtd_validation) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtd_validation, __pyx_v_dtd_validation) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1614
+  /* "src/lxml/parser.pxi":1617
  *                            attribute_defaults=attribute_defaults,
  *                            dtd_validation=dtd_validation,
  *                            load_dtd=load_dtd,             # <<<<<<<<<<<<<<
  *                            no_network=no_network,
  *                            ns_clean=ns_clean,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_load_dtd, __pyx_v_load_dtd) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_load_dtd, __pyx_v_load_dtd) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1615
+  /* "src/lxml/parser.pxi":1618
  *                            dtd_validation=dtd_validation,
  *                            load_dtd=load_dtd,
  *                            no_network=no_network,             # <<<<<<<<<<<<<<
  *                            ns_clean=ns_clean,
  *                            recover=recover,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_no_network, __pyx_v_no_network) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_no_network, __pyx_v_no_network) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1616
+  /* "src/lxml/parser.pxi":1619
  *                            load_dtd=load_dtd,
  *                            no_network=no_network,
  *                            ns_clean=ns_clean,             # <<<<<<<<<<<<<<
  *                            recover=recover,
  *                            remove_blank_text=remove_blank_text,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_ns_clean, __pyx_v_ns_clean) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_ns_clean, __pyx_v_ns_clean) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1617
+  /* "src/lxml/parser.pxi":1620
  *                            no_network=no_network,
  *                            ns_clean=ns_clean,
  *                            recover=recover,             # <<<<<<<<<<<<<<
  *                            remove_blank_text=remove_blank_text,
  *                            huge_tree=huge_tree,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_recover, __pyx_v_recover) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_recover, __pyx_v_recover) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1618
+  /* "src/lxml/parser.pxi":1621
  *                            ns_clean=ns_clean,
  *                            recover=recover,
  *                            remove_blank_text=remove_blank_text,             # <<<<<<<<<<<<<<
  *                            huge_tree=huge_tree,
  *                            compact=compact,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_blank_text, __pyx_v_remove_blank_text) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_blank_text, __pyx_v_remove_blank_text) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1619
+  /* "src/lxml/parser.pxi":1622
  *                            recover=recover,
  *                            remove_blank_text=remove_blank_text,
  *                            huge_tree=huge_tree,             # <<<<<<<<<<<<<<
  *                            compact=compact,
  *                            resolve_entities=resolve_entities,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_huge_tree, __pyx_v_huge_tree) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_huge_tree, __pyx_v_huge_tree) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1620
+  /* "src/lxml/parser.pxi":1623
  *                            remove_blank_text=remove_blank_text,
  *                            huge_tree=huge_tree,
  *                            compact=compact,             # <<<<<<<<<<<<<<
  *                            resolve_entities=resolve_entities,
  *                            remove_comments=remove_comments,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_compact, __pyx_v_compact) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_compact, __pyx_v_compact) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1621
+  /* "src/lxml/parser.pxi":1624
  *                            huge_tree=huge_tree,
  *                            compact=compact,
  *                            resolve_entities=resolve_entities,             # <<<<<<<<<<<<<<
  *                            remove_comments=remove_comments,
  *                            remove_pis=remove_pis,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_resolve_entities, __pyx_v_resolve_entities) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_resolve_entities, __pyx_v_resolve_entities) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1622
+  /* "src/lxml/parser.pxi":1625
  *                            compact=compact,
  *                            resolve_entities=resolve_entities,
  *                            remove_comments=remove_comments,             # <<<<<<<<<<<<<<
  *                            remove_pis=remove_pis,
  *                            strip_cdata=strip_cdata,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_comments, __pyx_v_remove_comments) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_comments, __pyx_v_remove_comments) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1623
+  /* "src/lxml/parser.pxi":1626
  *                            resolve_entities=resolve_entities,
  *                            remove_comments=remove_comments,
  *                            remove_pis=remove_pis,             # <<<<<<<<<<<<<<
  *                            strip_cdata=strip_cdata,
  *                            target=target,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_pis, __pyx_v_remove_pis) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_pis, __pyx_v_remove_pis) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1624
+  /* "src/lxml/parser.pxi":1627
  *                            remove_comments=remove_comments,
  *                            remove_pis=remove_pis,
  *                            strip_cdata=strip_cdata,             # <<<<<<<<<<<<<<
  *                            target=target,
  *                            encoding=encoding,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_strip_cdata, __pyx_v_strip_cdata) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_strip_cdata, __pyx_v_strip_cdata) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1625
+  /* "src/lxml/parser.pxi":1628
  *                            remove_pis=remove_pis,
  *                            strip_cdata=strip_cdata,
  *                            target=target,             # <<<<<<<<<<<<<<
  *                            encoding=encoding,
  *                            schema=schema)
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_target, __pyx_v_target) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_target, __pyx_v_target) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1626
+  /* "src/lxml/parser.pxi":1629
  *                            strip_cdata=strip_cdata,
  *                            target=target,
  *                            encoding=encoding,             # <<<<<<<<<<<<<<
  *                            schema=schema)
  * 
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_encoding, __pyx_v_encoding) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_encoding, __pyx_v_encoding) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1627
+  /* "src/lxml/parser.pxi":1630
  *                            target=target,
  *                            encoding=encoding,
  *                            schema=schema)             # <<<<<<<<<<<<<<
  * 
  * # ET 1.2 compatible name
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_schema, __pyx_v_schema) < 0) __PYX_ERR(2, 1612, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_schema, __pyx_v_schema) < 0) __PYX_ERR(2, 1615, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1611
+  /* "src/lxml/parser.pxi":1614
  *                  remove_comments=True, remove_pis=True, strip_cdata=True,
  *                  target=None, compact=True):
  *         XMLParser.__init__(self,             # <<<<<<<<<<<<<<
  *                            attribute_defaults=attribute_defaults,
  *                            dtd_validation=dtd_validation,
  */
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1611, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1614, __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":1605
+  /* "src/lxml/parser.pxi":1608
  *     and thus ignores comments and processing instructions.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -124653,7 +124744,7 @@ static int __pyx_pf_4lxml_5etree_17ETCompatXMLParser___init__(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1638
+/* "src/lxml/parser.pxi":1641
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)
  * 
  * def set_default_parser(_BaseParser parser=None):             # <<<<<<<<<<<<<<
@@ -124695,7 +124786,7 @@ static PyObject *__pyx_pw_4lxml_5etree_47set_default_parser(PyObject *__pyx_self
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_default_parser") < 0)) __PYX_ERR(2, 1638, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_default_parser") < 0)) __PYX_ERR(2, 1641, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -124709,13 +124800,13 @@ static PyObject *__pyx_pw_4lxml_5etree_47set_default_parser(PyObject *__pyx_self
   }
   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(2, 1638, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_default_parser", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1641, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.set_default_parser", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(2, 1638, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) __PYX_ERR(2, 1641, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_46set_default_parser(__pyx_self, __pyx_v_parser);
 
   /* function exit code */
@@ -124735,7 +124826,7 @@ static PyObject *__pyx_pf_4lxml_5etree_46set_default_parser(CYTHON_UNUSED PyObje
   __Pyx_RefNannySetupContext("set_default_parser", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "src/lxml/parser.pxi":1650
+  /* "src/lxml/parser.pxi":1653
  *     parser for each thread explicitly or use a parser pool.
  *     """
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -124746,7 +124837,7 @@ static PyObject *__pyx_pf_4lxml_5etree_46set_default_parser(CYTHON_UNUSED PyObje
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1651
+    /* "src/lxml/parser.pxi":1654
  *     """
  *     if parser is None:
  *         parser = __DEFAULT_XML_PARSER             # <<<<<<<<<<<<<<
@@ -124756,7 +124847,7 @@ static PyObject *__pyx_pf_4lxml_5etree_46set_default_parser(CYTHON_UNUSED PyObje
     __Pyx_INCREF(((PyObject *)__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER));
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER));
 
-    /* "src/lxml/parser.pxi":1650
+    /* "src/lxml/parser.pxi":1653
  *     parser for each thread explicitly or use a parser pool.
  *     """
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -124765,7 +124856,7 @@ static PyObject *__pyx_pf_4lxml_5etree_46set_default_parser(CYTHON_UNUSED PyObje
  */
   }
 
-  /* "src/lxml/parser.pxi":1652
+  /* "src/lxml/parser.pxi":1655
  *     if parser is None:
  *         parser = __DEFAULT_XML_PARSER
  *     __GLOBAL_PARSER_CONTEXT.setDefaultParser(parser)             # <<<<<<<<<<<<<<
@@ -124774,7 +124865,7 @@ static PyObject *__pyx_pf_4lxml_5etree_46set_default_parser(CYTHON_UNUSED PyObje
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_setDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_parser);
 
-  /* "src/lxml/parser.pxi":1638
+  /* "src/lxml/parser.pxi":1641
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)
  * 
  * def set_default_parser(_BaseParser parser=None):             # <<<<<<<<<<<<<<
@@ -124790,7 +124881,7 @@ static PyObject *__pyx_pf_4lxml_5etree_46set_default_parser(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1654
+/* "src/lxml/parser.pxi":1657
  *     __GLOBAL_PARSER_CONTEXT.setDefaultParser(parser)
  * 
  * def get_default_parser():             # <<<<<<<<<<<<<<
@@ -124822,7 +124913,7 @@ static PyObject *__pyx_pf_4lxml_5etree_48get_default_parser(CYTHON_UNUSED PyObje
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_default_parser", 0);
 
-  /* "src/lxml/parser.pxi":1656
+  /* "src/lxml/parser.pxi":1659
  * def get_default_parser():
  *     u"get_default_parser()"
  *     return __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
@@ -124830,13 +124921,13 @@ static PyObject *__pyx_pf_4lxml_5etree_48get_default_parser(CYTHON_UNUSED PyObje
  * ############################################################
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1656, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1659, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1654
+  /* "src/lxml/parser.pxi":1657
  *     __GLOBAL_PARSER_CONTEXT.setDefaultParser(parser)
  * 
  * def get_default_parser():             # <<<<<<<<<<<<<<
@@ -124855,7 +124946,7 @@ static PyObject *__pyx_pf_4lxml_5etree_48get_default_parser(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1705
+/* "src/lxml/parser.pxi":1708
  *     reasons.
  *     """
  *     def __init__(self, *, encoding=None, remove_blank_text=False,             # <<<<<<<<<<<<<<
@@ -124891,7 +124982,7 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_False);
 
-    /* "src/lxml/parser.pxi":1706
+    /* "src/lxml/parser.pxi":1709
  *     """
  *     def __init__(self, *, encoding=None, remove_blank_text=False,
  *                  remove_comments=False, remove_pis=False, strip_cdata=True,             # <<<<<<<<<<<<<<
@@ -124902,7 +124993,7 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
     values[3] = ((PyObject *)Py_False);
     values[4] = ((PyObject *)Py_True);
 
-    /* "src/lxml/parser.pxi":1707
+    /* "src/lxml/parser.pxi":1710
  *     def __init__(self, *, encoding=None, remove_blank_text=False,
  *                  remove_comments=False, remove_pis=False, strip_cdata=True,
  *                  no_network=True, target=None, XMLSchema schema=None,             # <<<<<<<<<<<<<<
@@ -124913,7 +125004,7 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
     values[6] = ((PyObject *)Py_None);
     values[7] = (PyObject *)((struct __pyx_obj_4lxml_5etree_XMLSchema *)Py_None);
 
-    /* "src/lxml/parser.pxi":1708
+    /* "src/lxml/parser.pxi":1711
  *                  remove_comments=False, remove_pis=False, strip_cdata=True,
  *                  no_network=True, target=None, XMLSchema schema=None,
  *                  recover=True, compact=True, default_doctype=True,             # <<<<<<<<<<<<<<
@@ -124924,7 +125015,7 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
     values[9] = ((PyObject *)Py_True);
     values[10] = ((PyObject *)Py_True);
 
-    /* "src/lxml/parser.pxi":1709
+    /* "src/lxml/parser.pxi":1712
  *                  no_network=True, target=None, XMLSchema schema=None,
  *                  recover=True, compact=True, default_doctype=True,
  *                  collect_ids=True, huge_tree=False):             # <<<<<<<<<<<<<<
@@ -124949,7 +125040,7 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) __PYX_ERR(2, 1705, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) __PYX_ERR(2, 1708, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 0) {
       goto __pyx_L5_argtuple_error;
@@ -124971,16 +125062,16 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1705, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1708, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.HTMLParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) __PYX_ERR(2, 1707, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) __PYX_ERR(2, 1710, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_10HTMLParser___init__(((struct __pyx_obj_4lxml_5etree_HTMLParser *)__pyx_v_self), __pyx_v_encoding, __pyx_v_remove_blank_text, __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_no_network, __pyx_v_target, __pyx_v_schema, __pyx_v_recover, __pyx_v_compact, __pyx_v_default_doctype, __pyx_v_collect_ids, __pyx_v_huge_tree);
 
-  /* "src/lxml/parser.pxi":1705
+  /* "src/lxml/parser.pxi":1708
  *     reasons.
  *     """
  *     def __init__(self, *, encoding=None, remove_blank_text=False,             # <<<<<<<<<<<<<<
@@ -125014,7 +125105,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "src/lxml/parser.pxi":1711
+  /* "src/lxml/parser.pxi":1714
  *                  collect_ids=True, huge_tree=False):
  *         cdef int parse_options
  *         parse_options = _HTML_DEFAULT_PARSE_OPTIONS             # <<<<<<<<<<<<<<
@@ -125023,17 +125114,17 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
   __pyx_v_parse_options = __pyx_v_4lxml_5etree__HTML_DEFAULT_PARSE_OPTIONS;
 
-  /* "src/lxml/parser.pxi":1712
+  /* "src/lxml/parser.pxi":1715
  *         cdef int parse_options
  *         parse_options = _HTML_DEFAULT_PARSE_OPTIONS
  *         if remove_blank_text:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | htmlparser.HTML_PARSE_NOBLANKS
  *         if not recover:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_remove_blank_text); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1712, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_remove_blank_text); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1715, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1713
+    /* "src/lxml/parser.pxi":1716
  *         parse_options = _HTML_DEFAULT_PARSE_OPTIONS
  *         if remove_blank_text:
  *             parse_options = parse_options | htmlparser.HTML_PARSE_NOBLANKS             # <<<<<<<<<<<<<<
@@ -125042,7 +125133,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
     __pyx_v_parse_options = (__pyx_v_parse_options | HTML_PARSE_NOBLANKS);
 
-    /* "src/lxml/parser.pxi":1712
+    /* "src/lxml/parser.pxi":1715
  *         cdef int parse_options
  *         parse_options = _HTML_DEFAULT_PARSE_OPTIONS
  *         if remove_blank_text:             # <<<<<<<<<<<<<<
@@ -125051,18 +125142,18 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":1714
+  /* "src/lxml/parser.pxi":1717
  *         if remove_blank_text:
  *             parse_options = parse_options | htmlparser.HTML_PARSE_NOBLANKS
  *         if not recover:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_RECOVER
  *         if not no_network:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_recover); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1714, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_recover); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1717, __pyx_L1_error)
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1715
+    /* "src/lxml/parser.pxi":1718
  *             parse_options = parse_options | htmlparser.HTML_PARSE_NOBLANKS
  *         if not recover:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_RECOVER             # <<<<<<<<<<<<<<
@@ -125071,7 +125162,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
     __pyx_v_parse_options = (__pyx_v_parse_options ^ HTML_PARSE_RECOVER);
 
-    /* "src/lxml/parser.pxi":1714
+    /* "src/lxml/parser.pxi":1717
  *         if remove_blank_text:
  *             parse_options = parse_options | htmlparser.HTML_PARSE_NOBLANKS
  *         if not recover:             # <<<<<<<<<<<<<<
@@ -125080,18 +125171,18 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":1716
+  /* "src/lxml/parser.pxi":1719
  *         if not recover:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_RECOVER
  *         if not no_network:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NONET
  *         if not compact:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_no_network); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1716, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_no_network); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1719, __pyx_L1_error)
   __pyx_t_1 = ((!__pyx_t_2) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1717
+    /* "src/lxml/parser.pxi":1720
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_RECOVER
  *         if not no_network:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NONET             # <<<<<<<<<<<<<<
@@ -125100,7 +125191,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
     __pyx_v_parse_options = (__pyx_v_parse_options ^ HTML_PARSE_NONET);
 
-    /* "src/lxml/parser.pxi":1716
+    /* "src/lxml/parser.pxi":1719
  *         if not recover:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_RECOVER
  *         if not no_network:             # <<<<<<<<<<<<<<
@@ -125109,18 +125200,18 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":1718
+  /* "src/lxml/parser.pxi":1721
  *         if not no_network:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NONET
  *         if not compact:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_COMPACT
  *         if not default_doctype:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_compact); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1718, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_compact); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1721, __pyx_L1_error)
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1719
+    /* "src/lxml/parser.pxi":1722
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NONET
  *         if not compact:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_COMPACT             # <<<<<<<<<<<<<<
@@ -125129,7 +125220,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
     __pyx_v_parse_options = (__pyx_v_parse_options ^ HTML_PARSE_COMPACT);
 
-    /* "src/lxml/parser.pxi":1718
+    /* "src/lxml/parser.pxi":1721
  *         if not no_network:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NONET
  *         if not compact:             # <<<<<<<<<<<<<<
@@ -125138,18 +125229,18 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":1720
+  /* "src/lxml/parser.pxi":1723
  *         if not compact:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_COMPACT
  *         if not default_doctype:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NODEFDTD
  *         if huge_tree:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_default_doctype); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1720, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_default_doctype); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1723, __pyx_L1_error)
   __pyx_t_1 = ((!__pyx_t_2) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1721
+    /* "src/lxml/parser.pxi":1724
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_COMPACT
  *         if not default_doctype:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NODEFDTD             # <<<<<<<<<<<<<<
@@ -125158,7 +125249,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
     __pyx_v_parse_options = (__pyx_v_parse_options ^ HTML_PARSE_NODEFDTD);
 
-    /* "src/lxml/parser.pxi":1720
+    /* "src/lxml/parser.pxi":1723
  *         if not compact:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_COMPACT
  *         if not default_doctype:             # <<<<<<<<<<<<<<
@@ -125167,17 +125258,17 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":1722
+  /* "src/lxml/parser.pxi":1725
  *         if not default_doctype:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NODEFDTD
  *         if huge_tree:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_huge_tree); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1722, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_huge_tree); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 1725, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1723
+    /* "src/lxml/parser.pxi":1726
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NODEFDTD
  *         if huge_tree:
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE             # <<<<<<<<<<<<<<
@@ -125186,7 +125277,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
     __pyx_v_parse_options = (__pyx_v_parse_options | XML_PARSE_HUGE);
 
-    /* "src/lxml/parser.pxi":1722
+    /* "src/lxml/parser.pxi":1725
  *         if not default_doctype:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NODEFDTD
  *         if huge_tree:             # <<<<<<<<<<<<<<
@@ -125195,19 +125286,19 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
   }
 
-  /* "src/lxml/parser.pxi":1725
+  /* "src/lxml/parser.pxi":1728
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE
  * 
  *         _BaseParser.__init__(self, parse_options, 1, schema,             # <<<<<<<<<<<<<<
  *                              remove_comments, remove_pis, strip_cdata,
  *                              collect_ids, target, encoding)
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser), __pyx_n_s_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1725, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser), __pyx_n_s_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1728, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_parse_options); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1725, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_parse_options); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1728, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
 
-  /* "src/lxml/parser.pxi":1727
+  /* "src/lxml/parser.pxi":1730
  *         _BaseParser.__init__(self, parse_options, 1, schema,
  *                              remove_comments, remove_pis, strip_cdata,
  *                              collect_ids, target, encoding)             # <<<<<<<<<<<<<<
@@ -125229,7 +125320,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[11] = {__pyx_t_6, ((PyObject *)__pyx_v_self), __pyx_t_5, __pyx_int_1, ((PyObject *)__pyx_v_schema), __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_collect_ids, __pyx_v_target, __pyx_v_encoding};
-    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 10+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1725, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 10+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1728, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -125238,14 +125329,14 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
     PyObject *__pyx_temp[11] = {__pyx_t_6, ((PyObject *)__pyx_v_self), __pyx_t_5, __pyx_int_1, ((PyObject *)__pyx_v_schema), __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_collect_ids, __pyx_v_target, __pyx_v_encoding};
-    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 10+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1725, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 10+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1728, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else
   #endif
   {
-    __pyx_t_8 = PyTuple_New(10+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1725, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(10+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1728, __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;
@@ -125280,14 +125371,14 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
     __Pyx_GIVEREF(__pyx_v_encoding);
     PyTuple_SET_ITEM(__pyx_t_8, 9+__pyx_t_7, __pyx_v_encoding);
     __pyx_t_5 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1725, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1728, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   }
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/lxml/parser.pxi":1705
+  /* "src/lxml/parser.pxi":1708
  *     reasons.
  *     """
  *     def __init__(self, *, encoding=None, remove_blank_text=False,             # <<<<<<<<<<<<<<
@@ -125311,7 +125402,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1752
+/* "src/lxml/parser.pxi":1755
  *     source, you can pass the ``base_url``.
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):             # <<<<<<<<<<<<<<
@@ -125365,7 +125456,7 @@ static int __pyx_pw_4lxml_5etree_14HTMLPullParser_1__init__(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) __PYX_ERR(2, 1752, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) __PYX_ERR(2, 1755, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -125381,7 +125472,7 @@ static int __pyx_pw_4lxml_5etree_14HTMLPullParser_1__init__(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1752, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1755, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
   __Pyx_AddTraceback("lxml.etree.HTMLPullParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -125411,30 +125502,30 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_events);
 
-  /* "src/lxml/parser.pxi":1753
+  /* "src/lxml/parser.pxi":1756
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
  *         HTMLParser.__init__(self, **kwargs)             # <<<<<<<<<<<<<<
  *         if events is None:
  *             events = ('end',)
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree_HTMLParser), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1753, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4lxml_5etree_HTMLParser), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1756, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1753, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1756, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __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 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1753, __pyx_L1_error)
+  __pyx_t_3 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1756, __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, 1753, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1756, __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":1754
+  /* "src/lxml/parser.pxi":1757
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
  *         HTMLParser.__init__(self, **kwargs)
  *         if events is None:             # <<<<<<<<<<<<<<
@@ -125445,7 +125536,7 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
 
-    /* "src/lxml/parser.pxi":1755
+    /* "src/lxml/parser.pxi":1758
  *         HTMLParser.__init__(self, **kwargs)
  *         if events is None:
  *             events = ('end',)             # <<<<<<<<<<<<<<
@@ -125455,7 +125546,7 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
     __Pyx_INCREF(__pyx_tuple__57);
     __Pyx_DECREF_SET(__pyx_v_events, __pyx_tuple__57);
 
-    /* "src/lxml/parser.pxi":1754
+    /* "src/lxml/parser.pxi":1757
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
  *         HTMLParser.__init__(self, **kwargs)
  *         if events is None:             # <<<<<<<<<<<<<<
@@ -125464,29 +125555,29 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
  */
   }
 
-  /* "src/lxml/parser.pxi":1756
+  /* "src/lxml/parser.pxi":1759
  *         if events is None:
  *             events = ('end',)
  *         self._setBaseURL(base_url)             # <<<<<<<<<<<<<<
  *         self._collectEvents(events, tag)
  * 
  */
-  __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, 1756, __pyx_L1_error)
+  __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, 1759, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "src/lxml/parser.pxi":1757
+  /* "src/lxml/parser.pxi":1760
  *             events = ('end',)
  *         self._setBaseURL(base_url)
  *         self._collectEvents(events, tag)             # <<<<<<<<<<<<<<
  * 
  *     def read_events(self):
  */
-  __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, 1757, __pyx_L1_error)
+  __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, 1760, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "src/lxml/parser.pxi":1752
+  /* "src/lxml/parser.pxi":1755
  *     source, you can pass the ``base_url``.
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):             # <<<<<<<<<<<<<<
@@ -125510,7 +125601,7 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1759
+/* "src/lxml/parser.pxi":1762
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
@@ -125541,7 +125632,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14HTMLPullParser_2read_events(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read_events", 0);
 
-  /* "src/lxml/parser.pxi":1760
+  /* "src/lxml/parser.pxi":1763
  * 
  *     def read_events(self):
  *         return (<_SaxParserContext?>self._getPushParserContext()).events_iterator             # <<<<<<<<<<<<<<
@@ -125549,15 +125640,15 @@ static PyObject *__pyx_pf_4lxml_5etree_14HTMLPullParser_2read_events(struct __py
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1760, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1763, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__SaxParserContext)))) __PYX_ERR(2, 1760, __pyx_L1_error)
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__SaxParserContext)))) __PYX_ERR(2, 1763, __pyx_L1_error)
   __Pyx_INCREF(((PyObject *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_1)->events_iterator));
   __pyx_r = ((PyObject *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_1)->events_iterator);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1759
+  /* "src/lxml/parser.pxi":1762
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
@@ -125576,7 +125667,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14HTMLPullParser_2read_events(struct __py
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1767
+/* "src/lxml/parser.pxi":1770
  * ############################################################
  * 
  * cdef xmlDoc* _parseDoc(text, filename, _BaseParser parser) except NULL:             # <<<<<<<<<<<<<<
@@ -125605,7 +125696,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   __Pyx_INCREF(__pyx_v_text);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "src/lxml/parser.pxi":1772
+  /* "src/lxml/parser.pxi":1775
  *     cdef Py_ssize_t c_len
  *     cdef bint is_pep393_string
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -125616,19 +125707,19 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1773
+    /* "src/lxml/parser.pxi":1776
  *     cdef bint is_pep393_string
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
  *     if not filename:
  *         c_filename = NULL
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1773, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1776, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "src/lxml/parser.pxi":1772
+    /* "src/lxml/parser.pxi":1775
  *     cdef Py_ssize_t c_len
  *     cdef bint is_pep393_string
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -125637,18 +125728,18 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
   }
 
-  /* "src/lxml/parser.pxi":1774
+  /* "src/lxml/parser.pxi":1777
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     if not filename:             # <<<<<<<<<<<<<<
  *         c_filename = NULL
  *     else:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_filename); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1774, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_filename); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1777, __pyx_L1_error)
   __pyx_t_1 = ((!__pyx_t_2) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1775
+    /* "src/lxml/parser.pxi":1778
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     if not filename:
  *         c_filename = NULL             # <<<<<<<<<<<<<<
@@ -125657,7 +125748,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
     __pyx_v_c_filename = NULL;
 
-    /* "src/lxml/parser.pxi":1774
+    /* "src/lxml/parser.pxi":1777
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     if not filename:             # <<<<<<<<<<<<<<
@@ -125667,7 +125758,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     goto __pyx_L4;
   }
 
-  /* "src/lxml/parser.pxi":1777
+  /* "src/lxml/parser.pxi":1780
  *         c_filename = NULL
  *     else:
  *         filename_utf = _encodeFilenameUTF8(filename)             # <<<<<<<<<<<<<<
@@ -125675,12 +125766,12 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  *     if isinstance(text, unicode):
  */
   /*else*/ {
-    __pyx_t_3 = __pyx_f_4lxml_5etree__encodeFilenameUTF8(__pyx_v_filename); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1777, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__encodeFilenameUTF8(__pyx_v_filename); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1780, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_filename_utf = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "src/lxml/parser.pxi":1778
+    /* "src/lxml/parser.pxi":1781
  *     else:
  *         filename_utf = _encodeFilenameUTF8(filename)
  *         c_filename = _cstr(filename_utf)             # <<<<<<<<<<<<<<
@@ -125691,7 +125782,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   }
   __pyx_L4:;
 
-  /* "src/lxml/parser.pxi":1779
+  /* "src/lxml/parser.pxi":1782
  *         filename_utf = _encodeFilenameUTF8(filename)
  *         c_filename = _cstr(filename_utf)
  *     if isinstance(text, unicode):             # <<<<<<<<<<<<<<
@@ -125702,7 +125793,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1781
+    /* "src/lxml/parser.pxi":1784
  *     if isinstance(text, unicode):
  *         is_pep393_string = (
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(text))             # <<<<<<<<<<<<<<
@@ -125720,7 +125811,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     __pyx_L6_bool_binop_done:;
     __pyx_v_is_pep393_string = __pyx_t_2;
 
-    /* "src/lxml/parser.pxi":1782
+    /* "src/lxml/parser.pxi":1785
  *         is_pep393_string = (
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(text))
  *         if is_pep393_string:             # <<<<<<<<<<<<<<
@@ -125730,7 +125821,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     __pyx_t_2 = (__pyx_v_is_pep393_string != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":1783
+      /* "src/lxml/parser.pxi":1786
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(text))
  *         if is_pep393_string:
  *             c_len = python.PyUnicode_GET_LENGTH(text) * python.PyUnicode_KIND(text)             # <<<<<<<<<<<<<<
@@ -125739,7 +125830,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
       __pyx_v_c_len = (PyUnicode_GET_LENGTH(__pyx_v_text) * PyUnicode_KIND(__pyx_v_text));
 
-      /* "src/lxml/parser.pxi":1782
+      /* "src/lxml/parser.pxi":1785
  *         is_pep393_string = (
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(text))
  *         if is_pep393_string:             # <<<<<<<<<<<<<<
@@ -125749,7 +125840,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
       goto __pyx_L8;
     }
 
-    /* "src/lxml/parser.pxi":1785
+    /* "src/lxml/parser.pxi":1788
  *             c_len = python.PyUnicode_GET_LENGTH(text) * python.PyUnicode_KIND(text)
  *         else:
  *             c_len = python.PyUnicode_GET_DATA_SIZE(text)             # <<<<<<<<<<<<<<
@@ -125761,7 +125852,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     }
     __pyx_L8:;
 
-    /* "src/lxml/parser.pxi":1786
+    /* "src/lxml/parser.pxi":1789
  *         else:
  *             c_len = python.PyUnicode_GET_DATA_SIZE(text)
  *         if c_len > limits.INT_MAX:             # <<<<<<<<<<<<<<
@@ -125771,7 +125862,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     __pyx_t_2 = ((__pyx_v_c_len > INT_MAX) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":1788
+      /* "src/lxml/parser.pxi":1791
  *         if c_len > limits.INT_MAX:
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 StringIO(text), filename, None)             # <<<<<<<<<<<<<<
@@ -125791,23 +125882,23 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
       }
       __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_text) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_text);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1788, __pyx_L1_error)
+      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1791, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "src/lxml/parser.pxi":1787
+      /* "src/lxml/parser.pxi":1790
  *             c_len = python.PyUnicode_GET_DATA_SIZE(text)
  *         if c_len > limits.INT_MAX:
  *             return (<_BaseParser>parser)._parseDocFromFilelike(             # <<<<<<<<<<<<<<
  *                 StringIO(text), filename, None)
  *         if _PY_UNICODE_ENCODING is NULL and not is_pep393_string:
  */
-      __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_3, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1787, __pyx_L1_error)
+      __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_3, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1790, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_6;
       goto __pyx_L0;
 
-      /* "src/lxml/parser.pxi":1786
+      /* "src/lxml/parser.pxi":1789
  *         else:
  *             c_len = python.PyUnicode_GET_DATA_SIZE(text)
  *         if c_len > limits.INT_MAX:             # <<<<<<<<<<<<<<
@@ -125816,7 +125907,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
     }
 
-    /* "src/lxml/parser.pxi":1789
+    /* "src/lxml/parser.pxi":1792
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 StringIO(text), filename, None)
  *         if _PY_UNICODE_ENCODING is NULL and not is_pep393_string:             # <<<<<<<<<<<<<<
@@ -125834,7 +125925,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     __pyx_L11_bool_binop_done:;
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":1790
+      /* "src/lxml/parser.pxi":1793
  *                 StringIO(text), filename, None)
  *         if _PY_UNICODE_ENCODING is NULL and not is_pep393_string:
  *             text = (<unicode>text).encode('utf8')             # <<<<<<<<<<<<<<
@@ -125843,14 +125934,14 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
       if (unlikely(__pyx_v_text == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode");
-        __PYX_ERR(2, 1790, __pyx_L1_error)
+        __PYX_ERR(2, 1793, __pyx_L1_error)
       }
-      __pyx_t_3 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_text)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1790, __pyx_L1_error)
+      __pyx_t_3 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_text)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1793, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "src/lxml/parser.pxi":1792
+      /* "src/lxml/parser.pxi":1795
  *             text = (<unicode>text).encode('utf8')
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 BytesIO(text), filename, "UTF-8")             # <<<<<<<<<<<<<<
@@ -125870,23 +125961,23 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
       }
       __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_text) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_text);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1792, __pyx_L1_error)
+      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1795, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "src/lxml/parser.pxi":1791
+      /* "src/lxml/parser.pxi":1794
  *         if _PY_UNICODE_ENCODING is NULL and not is_pep393_string:
  *             text = (<unicode>text).encode('utf8')
  *             return (<_BaseParser>parser)._parseDocFromFilelike(             # <<<<<<<<<<<<<<
  *                 BytesIO(text), filename, "UTF-8")
  *         return (<_BaseParser>parser)._parseUnicodeDoc(text, c_filename)
  */
-      __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_3, __pyx_v_filename, __pyx_kp_s_UTF_8); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1791, __pyx_L1_error)
+      __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_3, __pyx_v_filename, __pyx_kp_s_UTF_8); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1794, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_6;
       goto __pyx_L0;
 
-      /* "src/lxml/parser.pxi":1789
+      /* "src/lxml/parser.pxi":1792
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 StringIO(text), filename, None)
  *         if _PY_UNICODE_ENCODING is NULL and not is_pep393_string:             # <<<<<<<<<<<<<<
@@ -125895,18 +125986,18 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
     }
 
-    /* "src/lxml/parser.pxi":1793
+    /* "src/lxml/parser.pxi":1796
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 BytesIO(text), filename, "UTF-8")
  *         return (<_BaseParser>parser)._parseUnicodeDoc(text, c_filename)             # <<<<<<<<<<<<<<
  *     else:
  *         c_len = python.PyBytes_GET_SIZE(text)
  */
-    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseUnicodeDoc(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_text, __pyx_v_c_filename); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1793, __pyx_L1_error)
+    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseUnicodeDoc(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_text, __pyx_v_c_filename); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1796, __pyx_L1_error)
     __pyx_r = __pyx_t_6;
     goto __pyx_L0;
 
-    /* "src/lxml/parser.pxi":1779
+    /* "src/lxml/parser.pxi":1782
  *         filename_utf = _encodeFilenameUTF8(filename)
  *         c_filename = _cstr(filename_utf)
  *     if isinstance(text, unicode):             # <<<<<<<<<<<<<<
@@ -125915,7 +126006,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
   }
 
-  /* "src/lxml/parser.pxi":1795
+  /* "src/lxml/parser.pxi":1798
  *         return (<_BaseParser>parser)._parseUnicodeDoc(text, c_filename)
  *     else:
  *         c_len = python.PyBytes_GET_SIZE(text)             # <<<<<<<<<<<<<<
@@ -125925,7 +126016,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   /*else*/ {
     __pyx_v_c_len = PyBytes_GET_SIZE(__pyx_v_text);
 
-    /* "src/lxml/parser.pxi":1796
+    /* "src/lxml/parser.pxi":1799
  *     else:
  *         c_len = python.PyBytes_GET_SIZE(text)
  *         if c_len > limits.INT_MAX:             # <<<<<<<<<<<<<<
@@ -125935,7 +126026,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     __pyx_t_2 = ((__pyx_v_c_len > INT_MAX) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":1798
+      /* "src/lxml/parser.pxi":1801
  *         if c_len > limits.INT_MAX:
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 BytesIO(text), filename, None)             # <<<<<<<<<<<<<<
@@ -125955,23 +126046,23 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
       }
       __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_text) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_text);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1798, __pyx_L1_error)
+      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1801, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "src/lxml/parser.pxi":1797
+      /* "src/lxml/parser.pxi":1800
  *         c_len = python.PyBytes_GET_SIZE(text)
  *         if c_len > limits.INT_MAX:
  *             return (<_BaseParser>parser)._parseDocFromFilelike(             # <<<<<<<<<<<<<<
  *                 BytesIO(text), filename, None)
  *         c_text = _cstr(text)
  */
-      __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_3, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1797, __pyx_L1_error)
+      __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_3, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1800, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_6;
       goto __pyx_L0;
 
-      /* "src/lxml/parser.pxi":1796
+      /* "src/lxml/parser.pxi":1799
  *     else:
  *         c_len = python.PyBytes_GET_SIZE(text)
  *         if c_len > limits.INT_MAX:             # <<<<<<<<<<<<<<
@@ -125980,7 +126071,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
     }
 
-    /* "src/lxml/parser.pxi":1799
+    /* "src/lxml/parser.pxi":1802
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 BytesIO(text), filename, None)
  *         c_text = _cstr(text)             # <<<<<<<<<<<<<<
@@ -125989,19 +126080,19 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
     __pyx_v_c_text = PyBytes_AS_STRING(__pyx_v_text);
 
-    /* "src/lxml/parser.pxi":1800
+    /* "src/lxml/parser.pxi":1803
  *                 BytesIO(text), filename, None)
  *         c_text = _cstr(text)
  *         return (<_BaseParser>parser)._parseDoc(c_text, c_len, c_filename)             # <<<<<<<<<<<<<<
  * 
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:
  */
-    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDoc(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_c_text, __pyx_v_c_len, __pyx_v_c_filename); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1800, __pyx_L1_error)
+    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDoc(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_c_text, __pyx_v_c_len, __pyx_v_c_filename); if (unlikely(__pyx_t_6 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1803, __pyx_L1_error)
     __pyx_r = __pyx_t_6;
     goto __pyx_L0;
   }
 
-  /* "src/lxml/parser.pxi":1767
+  /* "src/lxml/parser.pxi":1770
  * ############################################################
  * 
  * cdef xmlDoc* _parseDoc(text, filename, _BaseParser parser) except NULL:             # <<<<<<<<<<<<<<
@@ -126024,7 +126115,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1802
+/* "src/lxml/parser.pxi":1805
  *         return (<_BaseParser>parser)._parseDoc(c_text, c_len, c_filename)
  * 
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:             # <<<<<<<<<<<<<<
@@ -126045,7 +126136,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFile(PyObject *__pyx_v_filename
   __Pyx_RefNannySetupContext("_parseDocFromFile", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "src/lxml/parser.pxi":1803
+  /* "src/lxml/parser.pxi":1806
  * 
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -126056,19 +126147,19 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFile(PyObject *__pyx_v_filename
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1804
+    /* "src/lxml/parser.pxi":1807
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
  *     return (<_BaseParser>parser)._parseDocFromFile(_cstr(filename8))
  * 
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1804, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1807, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "src/lxml/parser.pxi":1803
+    /* "src/lxml/parser.pxi":1806
  * 
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -126077,18 +126168,18 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFile(PyObject *__pyx_v_filename
  */
   }
 
-  /* "src/lxml/parser.pxi":1805
+  /* "src/lxml/parser.pxi":1808
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     return (<_BaseParser>parser)._parseDocFromFile(_cstr(filename8))             # <<<<<<<<<<<<<<
  * 
  * cdef xmlDoc* _parseDocFromFilelike(source, filename,
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFile(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), PyBytes_AS_STRING(__pyx_v_filename8)); if (unlikely(__pyx_t_4 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1805, __pyx_L1_error)
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFile(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), PyBytes_AS_STRING(__pyx_v_filename8)); if (unlikely(__pyx_t_4 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1808, __pyx_L1_error)
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1802
+  /* "src/lxml/parser.pxi":1805
  *         return (<_BaseParser>parser)._parseDoc(c_text, c_len, c_filename)
  * 
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:             # <<<<<<<<<<<<<<
@@ -126107,7 +126198,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFile(PyObject *__pyx_v_filename
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1807
+/* "src/lxml/parser.pxi":1810
  *     return (<_BaseParser>parser)._parseDocFromFile(_cstr(filename8))
  * 
  * cdef xmlDoc* _parseDocFromFilelike(source, filename,             # <<<<<<<<<<<<<<
@@ -126128,7 +126219,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFilelike(PyObject *__pyx_v_sour
   __Pyx_RefNannySetupContext("_parseDocFromFilelike", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "src/lxml/parser.pxi":1809
+  /* "src/lxml/parser.pxi":1812
  * cdef xmlDoc* _parseDocFromFilelike(source, filename,
  *                                    _BaseParser parser) except NULL:
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -126139,19 +126230,19 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFilelike(PyObject *__pyx_v_sour
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1810
+    /* "src/lxml/parser.pxi":1813
  *                                    _BaseParser parser) except NULL:
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
  *     return (<_BaseParser>parser)._parseDocFromFilelike(source, filename, None)
  * 
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1810, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1813, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "src/lxml/parser.pxi":1809
+    /* "src/lxml/parser.pxi":1812
  * cdef xmlDoc* _parseDocFromFilelike(source, filename,
  *                                    _BaseParser parser) except NULL:
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -126160,18 +126251,18 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFilelike(PyObject *__pyx_v_sour
  */
   }
 
-  /* "src/lxml/parser.pxi":1811
+  /* "src/lxml/parser.pxi":1814
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     return (<_BaseParser>parser)._parseDocFromFilelike(source, filename, None)             # <<<<<<<<<<<<<<
  * 
  * cdef xmlDoc* _newXMLDoc() except NULL:
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_source, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_4 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1811, __pyx_L1_error)
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_source, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_4 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1814, __pyx_L1_error)
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1807
+  /* "src/lxml/parser.pxi":1810
  *     return (<_BaseParser>parser)._parseDocFromFile(_cstr(filename8))
  * 
  * cdef xmlDoc* _parseDocFromFilelike(source, filename,             # <<<<<<<<<<<<<<
@@ -126190,7 +126281,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFilelike(PyObject *__pyx_v_sour
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1813
+/* "src/lxml/parser.pxi":1816
  *     return (<_BaseParser>parser)._parseDocFromFilelike(source, filename, None)
  * 
  * cdef xmlDoc* _newXMLDoc() except NULL:             # <<<<<<<<<<<<<<
@@ -126208,7 +126299,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_newXMLDoc", 0);
 
-  /* "src/lxml/parser.pxi":1815
+  /* "src/lxml/parser.pxi":1818
  * cdef xmlDoc* _newXMLDoc() except NULL:
  *     cdef xmlDoc* result
  *     result = tree.xmlNewDoc(NULL)             # <<<<<<<<<<<<<<
@@ -126217,7 +126308,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
  */
   __pyx_v_result = xmlNewDoc(NULL);
 
-  /* "src/lxml/parser.pxi":1816
+  /* "src/lxml/parser.pxi":1819
  *     cdef xmlDoc* result
  *     result = tree.xmlNewDoc(NULL)
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -126227,16 +126318,16 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   __pyx_t_1 = ((__pyx_v_result == NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/parser.pxi":1817
+    /* "src/lxml/parser.pxi":1820
  *     result = tree.xmlNewDoc(NULL)
  *     if result is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     if result.encoding is NULL:
  *         result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")
  */
-    PyErr_NoMemory(); __PYX_ERR(2, 1817, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(2, 1820, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":1816
+    /* "src/lxml/parser.pxi":1819
  *     cdef xmlDoc* result
  *     result = tree.xmlNewDoc(NULL)
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -126245,7 +126336,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
  */
   }
 
-  /* "src/lxml/parser.pxi":1818
+  /* "src/lxml/parser.pxi":1821
  *     if result is NULL:
  *         raise MemoryError()
  *     if result.encoding is NULL:             # <<<<<<<<<<<<<<
@@ -126255,7 +126346,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   __pyx_t_1 = ((__pyx_v_result->encoding == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1819
+    /* "src/lxml/parser.pxi":1822
  *         raise MemoryError()
  *     if result.encoding is NULL:
  *         result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")             # <<<<<<<<<<<<<<
@@ -126264,7 +126355,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
  */
     __pyx_v_result->encoding = xmlStrdup(((unsigned char *)((unsigned char *)((char const *)"UTF-8"))));
 
-    /* "src/lxml/parser.pxi":1818
+    /* "src/lxml/parser.pxi":1821
  *     if result is NULL:
  *         raise MemoryError()
  *     if result.encoding is NULL:             # <<<<<<<<<<<<<<
@@ -126273,7 +126364,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
  */
   }
 
-  /* "src/lxml/parser.pxi":1820
+  /* "src/lxml/parser.pxi":1823
  *     if result.encoding is NULL:
  *         result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)             # <<<<<<<<<<<<<<
@@ -126282,7 +126373,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_result);
 
-  /* "src/lxml/parser.pxi":1821
+  /* "src/lxml/parser.pxi":1824
  *         result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     return result             # <<<<<<<<<<<<<<
@@ -126292,7 +126383,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1813
+  /* "src/lxml/parser.pxi":1816
  *     return (<_BaseParser>parser)._parseDocFromFilelike(source, filename, None)
  * 
  * cdef xmlDoc* _newXMLDoc() except NULL:             # <<<<<<<<<<<<<<
@@ -126309,7 +126400,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1823
+/* "src/lxml/parser.pxi":1826
  *     return result
  * 
  * cdef xmlDoc* _newHTMLDoc() except NULL:             # <<<<<<<<<<<<<<
@@ -126327,7 +126418,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_newHTMLDoc", 0);
 
-  /* "src/lxml/parser.pxi":1825
+  /* "src/lxml/parser.pxi":1828
  * cdef xmlDoc* _newHTMLDoc() except NULL:
  *     cdef xmlDoc* result
  *     result = tree.htmlNewDoc(NULL, NULL)             # <<<<<<<<<<<<<<
@@ -126336,7 +126427,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
  */
   __pyx_v_result = htmlNewDoc(NULL, NULL);
 
-  /* "src/lxml/parser.pxi":1826
+  /* "src/lxml/parser.pxi":1829
  *     cdef xmlDoc* result
  *     result = tree.htmlNewDoc(NULL, NULL)
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -126346,16 +126437,16 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
   __pyx_t_1 = ((__pyx_v_result == NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/parser.pxi":1827
+    /* "src/lxml/parser.pxi":1830
  *     result = tree.htmlNewDoc(NULL, NULL)
  *     if result is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     return result
  */
-    PyErr_NoMemory(); __PYX_ERR(2, 1827, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(2, 1830, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":1826
+    /* "src/lxml/parser.pxi":1829
  *     cdef xmlDoc* result
  *     result = tree.htmlNewDoc(NULL, NULL)
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -126364,7 +126455,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
  */
   }
 
-  /* "src/lxml/parser.pxi":1828
+  /* "src/lxml/parser.pxi":1831
  *     if result is NULL:
  *         raise MemoryError()
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)             # <<<<<<<<<<<<<<
@@ -126373,7 +126464,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_result);
 
-  /* "src/lxml/parser.pxi":1829
+  /* "src/lxml/parser.pxi":1832
  *         raise MemoryError()
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     return result             # <<<<<<<<<<<<<<
@@ -126383,7 +126474,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1823
+  /* "src/lxml/parser.pxi":1826
  *     return result
  * 
  * cdef xmlDoc* _newHTMLDoc() except NULL:             # <<<<<<<<<<<<<<
@@ -126400,7 +126491,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1831
+/* "src/lxml/parser.pxi":1834
  *     return result
  * 
  * cdef xmlDoc* _copyDoc(xmlDoc* c_doc, int recursive) except NULL:             # <<<<<<<<<<<<<<
@@ -126418,7 +126509,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copyDoc", 0);
 
-  /* "src/lxml/parser.pxi":1833
+  /* "src/lxml/parser.pxi":1836
  * cdef xmlDoc* _copyDoc(xmlDoc* c_doc, int recursive) except NULL:
  *     cdef xmlDoc* result
  *     if recursive:             # <<<<<<<<<<<<<<
@@ -126428,7 +126519,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   __pyx_t_1 = (__pyx_v_recursive != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/parser.pxi":1834
+    /* "src/lxml/parser.pxi":1837
  *     cdef xmlDoc* result
  *     if recursive:
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -126443,7 +126534,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
         #endif
         /*try:*/ {
 
-          /* "src/lxml/parser.pxi":1835
+          /* "src/lxml/parser.pxi":1838
  *     if recursive:
  *         with nogil:
  *             result = tree.xmlCopyDoc(c_doc, recursive)             # <<<<<<<<<<<<<<
@@ -126453,7 +126544,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
           __pyx_v_result = xmlCopyDoc(__pyx_v_c_doc, __pyx_v_recursive);
         }
 
-        /* "src/lxml/parser.pxi":1834
+        /* "src/lxml/parser.pxi":1837
  *     cdef xmlDoc* result
  *     if recursive:
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -126472,7 +126563,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
         }
     }
 
-    /* "src/lxml/parser.pxi":1833
+    /* "src/lxml/parser.pxi":1836
  * cdef xmlDoc* _copyDoc(xmlDoc* c_doc, int recursive) except NULL:
  *     cdef xmlDoc* result
  *     if recursive:             # <<<<<<<<<<<<<<
@@ -126482,7 +126573,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
     goto __pyx_L3;
   }
 
-  /* "src/lxml/parser.pxi":1837
+  /* "src/lxml/parser.pxi":1840
  *             result = tree.xmlCopyDoc(c_doc, recursive)
  *     else:
  *         result = tree.xmlCopyDoc(c_doc, 0)             # <<<<<<<<<<<<<<
@@ -126494,7 +126585,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   }
   __pyx_L3:;
 
-  /* "src/lxml/parser.pxi":1838
+  /* "src/lxml/parser.pxi":1841
  *     else:
  *         result = tree.xmlCopyDoc(c_doc, 0)
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -126504,16 +126595,16 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   __pyx_t_1 = ((__pyx_v_result == NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/parser.pxi":1839
+    /* "src/lxml/parser.pxi":1842
  *         result = tree.xmlCopyDoc(c_doc, 0)
  *     if result is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     return result
  */
-    PyErr_NoMemory(); __PYX_ERR(2, 1839, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(2, 1842, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":1838
+    /* "src/lxml/parser.pxi":1841
  *     else:
  *         result = tree.xmlCopyDoc(c_doc, 0)
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -126522,7 +126613,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
  */
   }
 
-  /* "src/lxml/parser.pxi":1840
+  /* "src/lxml/parser.pxi":1843
  *     if result is NULL:
  *         raise MemoryError()
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)             # <<<<<<<<<<<<<<
@@ -126531,7 +126622,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_result);
 
-  /* "src/lxml/parser.pxi":1841
+  /* "src/lxml/parser.pxi":1844
  *         raise MemoryError()
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     return result             # <<<<<<<<<<<<<<
@@ -126541,7 +126632,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1831
+  /* "src/lxml/parser.pxi":1834
  *     return result
  * 
  * cdef xmlDoc* _copyDoc(xmlDoc* c_doc, int recursive) except NULL:             # <<<<<<<<<<<<<<
@@ -126558,7 +126649,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1843
+/* "src/lxml/parser.pxi":1846
  *     return result
  * 
  * cdef xmlDoc* _copyDocRoot(xmlDoc* c_doc, xmlNode* c_new_root) except NULL:             # <<<<<<<<<<<<<<
@@ -126578,7 +126669,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copyDocRoot", 0);
 
-  /* "src/lxml/parser.pxi":1847
+  /* "src/lxml/parser.pxi":1850
  *     cdef xmlDoc* result
  *     cdef xmlNode* c_node
  *     result = tree.xmlCopyDoc(c_doc, 0) # non recursive             # <<<<<<<<<<<<<<
@@ -126587,7 +126678,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
  */
   __pyx_v_result = xmlCopyDoc(__pyx_v_c_doc, 0);
 
-  /* "src/lxml/parser.pxi":1848
+  /* "src/lxml/parser.pxi":1851
  *     cdef xmlNode* c_node
  *     result = tree.xmlCopyDoc(c_doc, 0) # non recursive
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)             # <<<<<<<<<<<<<<
@@ -126596,7 +126687,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_result);
 
-  /* "src/lxml/parser.pxi":1849
+  /* "src/lxml/parser.pxi":1852
  *     result = tree.xmlCopyDoc(c_doc, 0) # non recursive
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -126611,7 +126702,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
       #endif
       /*try:*/ {
 
-        /* "src/lxml/parser.pxi":1850
+        /* "src/lxml/parser.pxi":1853
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     with nogil:
  *         c_node = tree.xmlDocCopyNode(c_new_root, result, 1) # recursive             # <<<<<<<<<<<<<<
@@ -126621,7 +126712,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
         __pyx_v_c_node = xmlDocCopyNode(__pyx_v_c_new_root, __pyx_v_result, 1);
       }
 
-      /* "src/lxml/parser.pxi":1849
+      /* "src/lxml/parser.pxi":1852
  *     result = tree.xmlCopyDoc(c_doc, 0) # non recursive
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -126640,7 +126731,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
       }
   }
 
-  /* "src/lxml/parser.pxi":1851
+  /* "src/lxml/parser.pxi":1854
  *     with nogil:
  *         c_node = tree.xmlDocCopyNode(c_new_root, result, 1) # recursive
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -126650,16 +126741,16 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/parser.pxi":1852
+    /* "src/lxml/parser.pxi":1855
  *         c_node = tree.xmlDocCopyNode(c_new_root, result, 1) # recursive
  *     if c_node is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     tree.xmlDocSetRootElement(result, c_node)
  *     _copyTail(c_new_root.next, c_node)
  */
-    PyErr_NoMemory(); __PYX_ERR(2, 1852, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(2, 1855, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":1851
+    /* "src/lxml/parser.pxi":1854
  *     with nogil:
  *         c_node = tree.xmlDocCopyNode(c_new_root, result, 1) # recursive
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -126668,7 +126759,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
  */
   }
 
-  /* "src/lxml/parser.pxi":1853
+  /* "src/lxml/parser.pxi":1856
  *     if c_node is NULL:
  *         raise MemoryError()
  *     tree.xmlDocSetRootElement(result, c_node)             # <<<<<<<<<<<<<<
@@ -126677,16 +126768,16 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
  */
   (void)(xmlDocSetRootElement(__pyx_v_result, __pyx_v_c_node));
 
-  /* "src/lxml/parser.pxi":1854
+  /* "src/lxml/parser.pxi":1857
  *         raise MemoryError()
  *     tree.xmlDocSetRootElement(result, c_node)
  *     _copyTail(c_new_root.next, c_node)             # <<<<<<<<<<<<<<
  *     return result
  * 
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__copyTail(__pyx_v_c_new_root->next, __pyx_v_c_node); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1854, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__copyTail(__pyx_v_c_new_root->next, __pyx_v_c_node); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1857, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1855
+  /* "src/lxml/parser.pxi":1858
  *     tree.xmlDocSetRootElement(result, c_node)
  *     _copyTail(c_new_root.next, c_node)
  *     return result             # <<<<<<<<<<<<<<
@@ -126696,7 +126787,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1843
+  /* "src/lxml/parser.pxi":1846
  *     return result
  * 
  * cdef xmlDoc* _copyDocRoot(xmlDoc* c_doc, xmlNode* c_new_root) except NULL:             # <<<<<<<<<<<<<<
@@ -126713,7 +126804,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1857
+/* "src/lxml/parser.pxi":1860
  *     return result
  * 
  * cdef xmlNode* _copyNodeToDoc(xmlNode* c_node, xmlDoc* c_doc) except NULL:             # <<<<<<<<<<<<<<
@@ -126732,7 +126823,7 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copyNodeToDoc", 0);
 
-  /* "src/lxml/parser.pxi":1860
+  /* "src/lxml/parser.pxi":1863
  *     u"Recursively copy the element into the document. c_doc is not modified."
  *     cdef xmlNode* c_root
  *     c_root = tree.xmlDocCopyNode(c_node, c_doc, 1) # recursive             # <<<<<<<<<<<<<<
@@ -126741,7 +126832,7 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
  */
   __pyx_v_c_root = xmlDocCopyNode(__pyx_v_c_node, __pyx_v_c_doc, 1);
 
-  /* "src/lxml/parser.pxi":1861
+  /* "src/lxml/parser.pxi":1864
  *     cdef xmlNode* c_root
  *     c_root = tree.xmlDocCopyNode(c_node, c_doc, 1) # recursive
  *     if c_root is NULL:             # <<<<<<<<<<<<<<
@@ -126751,16 +126842,16 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
   __pyx_t_1 = ((__pyx_v_c_root == NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/parser.pxi":1862
+    /* "src/lxml/parser.pxi":1865
  *     c_root = tree.xmlDocCopyNode(c_node, c_doc, 1) # recursive
  *     if c_root is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     _copyTail(c_node.next, c_root)
  *     return c_root
  */
-    PyErr_NoMemory(); __PYX_ERR(2, 1862, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(2, 1865, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":1861
+    /* "src/lxml/parser.pxi":1864
  *     cdef xmlNode* c_root
  *     c_root = tree.xmlDocCopyNode(c_node, c_doc, 1) # recursive
  *     if c_root is NULL:             # <<<<<<<<<<<<<<
@@ -126769,16 +126860,16 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
  */
   }
 
-  /* "src/lxml/parser.pxi":1863
+  /* "src/lxml/parser.pxi":1866
  *     if c_root is NULL:
  *         raise MemoryError()
  *     _copyTail(c_node.next, c_root)             # <<<<<<<<<<<<<<
  *     return c_root
  * 
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__copyTail(__pyx_v_c_node->next, __pyx_v_c_root); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1863, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__copyTail(__pyx_v_c_node->next, __pyx_v_c_root); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1866, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1864
+  /* "src/lxml/parser.pxi":1867
  *         raise MemoryError()
  *     _copyTail(c_node.next, c_root)
  *     return c_root             # <<<<<<<<<<<<<<
@@ -126788,7 +126879,7 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
   __pyx_r = __pyx_v_c_root;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1857
+  /* "src/lxml/parser.pxi":1860
  *     return result
  * 
  * cdef xmlNode* _copyNodeToDoc(xmlNode* c_node, xmlDoc* c_doc) except NULL:             # <<<<<<<<<<<<<<
@@ -126805,7 +126896,7 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1871
+/* "src/lxml/parser.pxi":1874
  * ############################################################
  * 
  * cdef _Document _parseDocument(source, _BaseParser parser, base_url):             # <<<<<<<<<<<<<<
@@ -126834,19 +126925,19 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   __Pyx_INCREF(__pyx_v_source);
   __Pyx_INCREF(__pyx_v_base_url);
 
-  /* "src/lxml/parser.pxi":1873
+  /* "src/lxml/parser.pxi":1876
  * cdef _Document _parseDocument(source, _BaseParser parser, base_url):
  *     cdef _Document doc
  *     source = _getFSPathOrObject(source)             # <<<<<<<<<<<<<<
  *     if _isString(source):
  *         # parse the file directly from the filesystem
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__getFSPathOrObject(__pyx_v_source); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1873, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__getFSPathOrObject(__pyx_v_source); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1876, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_source, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/parser.pxi":1874
+  /* "src/lxml/parser.pxi":1877
  *     cdef _Document doc
  *     source = _getFSPathOrObject(source)
  *     if _isString(source):             # <<<<<<<<<<<<<<
@@ -126856,22 +126947,22 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   __pyx_t_2 = (_isString(__pyx_v_source) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1876
+    /* "src/lxml/parser.pxi":1879
  *     if _isString(source):
  *         # parse the file directly from the filesystem
  *         doc = _parseDocumentFromURL(_encodeFilename(source), parser)             # <<<<<<<<<<<<<<
  *         # fix base URL if requested
  *         if base_url is not None:
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_source); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1876, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_source); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1879, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocumentFromURL(__pyx_t_1, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1876, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocumentFromURL(__pyx_t_1, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1879, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "src/lxml/parser.pxi":1878
+    /* "src/lxml/parser.pxi":1881
  *         doc = _parseDocumentFromURL(_encodeFilename(source), parser)
  *         # fix base URL if requested
  *         if base_url is not None:             # <<<<<<<<<<<<<<
@@ -126882,19 +126973,19 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
     __pyx_t_4 = (__pyx_t_2 != 0);
     if (__pyx_t_4) {
 
-      /* "src/lxml/parser.pxi":1879
+      /* "src/lxml/parser.pxi":1882
  *         # fix base URL if requested
  *         if base_url is not None:
  *             base_url = _encodeFilenameUTF8(base_url)             # <<<<<<<<<<<<<<
  *             if doc._c_doc.URL is not NULL:
  *                 tree.xmlFree(<char*>doc._c_doc.URL)
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree__encodeFilenameUTF8(__pyx_v_base_url); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1879, __pyx_L1_error)
+      __pyx_t_3 = __pyx_f_4lxml_5etree__encodeFilenameUTF8(__pyx_v_base_url); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1882, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_base_url, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "src/lxml/parser.pxi":1880
+      /* "src/lxml/parser.pxi":1883
  *         if base_url is not None:
  *             base_url = _encodeFilenameUTF8(base_url)
  *             if doc._c_doc.URL is not NULL:             # <<<<<<<<<<<<<<
@@ -126904,7 +126995,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
       __pyx_t_4 = ((__pyx_v_doc->_c_doc->URL != NULL) != 0);
       if (__pyx_t_4) {
 
-        /* "src/lxml/parser.pxi":1881
+        /* "src/lxml/parser.pxi":1884
  *             base_url = _encodeFilenameUTF8(base_url)
  *             if doc._c_doc.URL is not NULL:
  *                 tree.xmlFree(<char*>doc._c_doc.URL)             # <<<<<<<<<<<<<<
@@ -126913,7 +127004,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  */
         xmlFree(((char *)__pyx_v_doc->_c_doc->URL));
 
-        /* "src/lxml/parser.pxi":1880
+        /* "src/lxml/parser.pxi":1883
  *         if base_url is not None:
  *             base_url = _encodeFilenameUTF8(base_url)
  *             if doc._c_doc.URL is not NULL:             # <<<<<<<<<<<<<<
@@ -126922,7 +127013,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  */
       }
 
-      /* "src/lxml/parser.pxi":1882
+      /* "src/lxml/parser.pxi":1885
  *             if doc._c_doc.URL is not NULL:
  *                 tree.xmlFree(<char*>doc._c_doc.URL)
  *             doc._c_doc.URL = tree.xmlStrdup(_xcstr(base_url))             # <<<<<<<<<<<<<<
@@ -126931,7 +127022,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  */
       __pyx_v_doc->_c_doc->URL = xmlStrdup((const xmlChar*)PyBytes_AS_STRING(__pyx_v_base_url));
 
-      /* "src/lxml/parser.pxi":1878
+      /* "src/lxml/parser.pxi":1881
  *         doc = _parseDocumentFromURL(_encodeFilename(source), parser)
  *         # fix base URL if requested
  *         if base_url is not None:             # <<<<<<<<<<<<<<
@@ -126940,7 +127031,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  */
     }
 
-    /* "src/lxml/parser.pxi":1883
+    /* "src/lxml/parser.pxi":1886
  *                 tree.xmlFree(<char*>doc._c_doc.URL)
  *             doc._c_doc.URL = tree.xmlStrdup(_xcstr(base_url))
  *         return doc             # <<<<<<<<<<<<<<
@@ -126952,7 +127043,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
     __pyx_r = __pyx_v_doc;
     goto __pyx_L0;
 
-    /* "src/lxml/parser.pxi":1874
+    /* "src/lxml/parser.pxi":1877
  *     cdef _Document doc
  *     source = _getFSPathOrObject(source)
  *     if _isString(source):             # <<<<<<<<<<<<<<
@@ -126961,7 +127052,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  */
   }
 
-  /* "src/lxml/parser.pxi":1885
+  /* "src/lxml/parser.pxi":1888
  *         return doc
  * 
  *     if base_url is not None:             # <<<<<<<<<<<<<<
@@ -126972,7 +127063,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   __pyx_t_2 = (__pyx_t_4 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1886
+    /* "src/lxml/parser.pxi":1889
  * 
  *     if base_url is not None:
  *         url = base_url             # <<<<<<<<<<<<<<
@@ -126982,7 +127073,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
     __Pyx_INCREF(__pyx_v_base_url);
     __pyx_v_url = __pyx_v_base_url;
 
-    /* "src/lxml/parser.pxi":1885
+    /* "src/lxml/parser.pxi":1888
  *         return doc
  * 
  *     if base_url is not None:             # <<<<<<<<<<<<<<
@@ -126992,7 +127083,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
     goto __pyx_L6;
   }
 
-  /* "src/lxml/parser.pxi":1888
+  /* "src/lxml/parser.pxi":1891
  *         url = base_url
  *     else:
  *         url = _getFilenameForFile(source)             # <<<<<<<<<<<<<<
@@ -127000,41 +127091,41 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  *     if hasattr(source, u'getvalue') and hasattr(source, u'tell'):
  */
   /*else*/ {
-    __pyx_t_3 = __pyx_f_4lxml_5etree__getFilenameForFile(__pyx_v_source); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1888, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree__getFilenameForFile(__pyx_v_source); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1891, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_url = __pyx_t_3;
     __pyx_t_3 = 0;
   }
   __pyx_L6:;
 
-  /* "src/lxml/parser.pxi":1890
+  /* "src/lxml/parser.pxi":1893
  *         url = _getFilenameForFile(source)
  * 
  *     if hasattr(source, u'getvalue') and hasattr(source, u'tell'):             # <<<<<<<<<<<<<<
  *         # StringIO - reading from start?
  *         if source.tell() == 0:
  */
-  __pyx_t_4 = __Pyx_HasAttr(__pyx_v_source, __pyx_n_u_getvalue); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 1890, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_HasAttr(__pyx_v_source, __pyx_n_u_getvalue); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 1893, __pyx_L1_error)
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
   } else {
     __pyx_t_2 = __pyx_t_5;
     goto __pyx_L8_bool_binop_done;
   }
-  __pyx_t_5 = __Pyx_HasAttr(__pyx_v_source, __pyx_n_u_tell); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 1890, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_HasAttr(__pyx_v_source, __pyx_n_u_tell); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 1893, __pyx_L1_error)
   __pyx_t_4 = (__pyx_t_5 != 0);
   __pyx_t_2 = __pyx_t_4;
   __pyx_L8_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1892
+    /* "src/lxml/parser.pxi":1895
  *     if hasattr(source, u'getvalue') and hasattr(source, u'tell'):
  *         # StringIO - reading from start?
  *         if source.tell() == 0:             # <<<<<<<<<<<<<<
  *             return _parseMemoryDocument(source.getvalue(), url, parser)
  * 
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_tell); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1892, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_tell); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1895, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_6 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -127048,17 +127139,17 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
     }
     __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1892, __pyx_L1_error)
+    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1895, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_3, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1892, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_3, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1895, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1892, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 1895, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (__pyx_t_2) {
 
-      /* "src/lxml/parser.pxi":1893
+      /* "src/lxml/parser.pxi":1896
  *         # StringIO - reading from start?
  *         if source.tell() == 0:
  *             return _parseMemoryDocument(source.getvalue(), url, parser)             # <<<<<<<<<<<<<<
@@ -127066,7 +127157,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  *     # Support for file-like objects (urlgrabber.urlopen, ...)
  */
       __Pyx_XDECREF(((PyObject *)__pyx_r));
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1893, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1896, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_6 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -127080,17 +127171,17 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
       }
       __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1893, __pyx_L1_error)
+      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1896, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseMemoryDocument(__pyx_t_1, __pyx_v_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1893, __pyx_L1_error)
+      __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseMemoryDocument(__pyx_t_1, __pyx_v_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1896, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_r = ((struct LxmlDocument *)__pyx_t_3);
       __pyx_t_3 = 0;
       goto __pyx_L0;
 
-      /* "src/lxml/parser.pxi":1892
+      /* "src/lxml/parser.pxi":1895
  *     if hasattr(source, u'getvalue') and hasattr(source, u'tell'):
  *         # StringIO - reading from start?
  *         if source.tell() == 0:             # <<<<<<<<<<<<<<
@@ -127099,7 +127190,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  */
     }
 
-    /* "src/lxml/parser.pxi":1890
+    /* "src/lxml/parser.pxi":1893
  *         url = _getFilenameForFile(source)
  * 
  *     if hasattr(source, u'getvalue') and hasattr(source, u'tell'):             # <<<<<<<<<<<<<<
@@ -127108,18 +127199,18 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  */
   }
 
-  /* "src/lxml/parser.pxi":1896
+  /* "src/lxml/parser.pxi":1899
  * 
  *     # Support for file-like objects (urlgrabber.urlopen, ...)
  *     if hasattr(source, u'read'):             # <<<<<<<<<<<<<<
  *         return _parseFilelikeDocument(source, url, parser)
  * 
  */
-  __pyx_t_2 = __Pyx_HasAttr(__pyx_v_source, __pyx_n_u_read); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1896, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_HasAttr(__pyx_v_source, __pyx_n_u_read); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1899, __pyx_L1_error)
   __pyx_t_4 = (__pyx_t_2 != 0);
   if (__pyx_t_4) {
 
-    /* "src/lxml/parser.pxi":1897
+    /* "src/lxml/parser.pxi":1900
  *     # Support for file-like objects (urlgrabber.urlopen, ...)
  *     if hasattr(source, u'read'):
  *         return _parseFilelikeDocument(source, url, parser)             # <<<<<<<<<<<<<<
@@ -127127,13 +127218,13 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  *     raise TypeError, f"cannot parse from '{python._fqtypename(source).decode('UTF-8')}'"
  */
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseFilelikeDocument(__pyx_v_source, __pyx_v_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1897, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseFilelikeDocument(__pyx_v_source, __pyx_v_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1900, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = ((struct LxmlDocument *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/parser.pxi":1896
+    /* "src/lxml/parser.pxi":1899
  * 
  *     # Support for file-like objects (urlgrabber.urlopen, ...)
  *     if hasattr(source, u'read'):             # <<<<<<<<<<<<<<
@@ -127142,14 +127233,14 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  */
   }
 
-  /* "src/lxml/parser.pxi":1899
+  /* "src/lxml/parser.pxi":1902
  *         return _parseFilelikeDocument(source, url, parser)
  * 
  *     raise TypeError, f"cannot parse from '{python._fqtypename(source).decode('UTF-8')}'"             # <<<<<<<<<<<<<<
  * 
  * cdef _Document _parseDocumentFromURL(url, _BaseParser parser):
  */
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1899, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1902, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_7 = 0;
   __pyx_t_8 = 127;
@@ -127158,7 +127249,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   __Pyx_GIVEREF(__pyx_kp_u_cannot_parse_from);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_cannot_parse_from);
   __pyx_t_9 = _fqtypename(__pyx_v_source);
-  __pyx_t_1 = __Pyx_decode_c_string(__pyx_t_9, 0, strlen(__pyx_t_9), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1899, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_decode_c_string(__pyx_t_9, 0, strlen(__pyx_t_9), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1902, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_t_1);
   __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_8;
@@ -127170,14 +127261,14 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   __pyx_t_7 += 1;
   __Pyx_GIVEREF(__pyx_kp_u__22);
   PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__22);
-  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1899, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1902, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_Raise(__pyx_builtin_TypeError, __pyx_t_1, 0, 0);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __PYX_ERR(2, 1899, __pyx_L1_error)
+  __PYX_ERR(2, 1902, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1871
+  /* "src/lxml/parser.pxi":1874
  * ############################################################
  * 
  * cdef _Document _parseDocument(source, _BaseParser parser, base_url):             # <<<<<<<<<<<<<<
@@ -127202,7 +127293,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1901
+/* "src/lxml/parser.pxi":1904
  *     raise TypeError, f"cannot parse from '{python._fqtypename(source).decode('UTF-8')}'"
  * 
  * cdef _Document _parseDocumentFromURL(url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -127221,17 +127312,17 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocumentFromURL(PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseDocumentFromURL", 0);
 
-  /* "src/lxml/parser.pxi":1902
+  /* "src/lxml/parser.pxi":1905
  * 
  * cdef _Document _parseDocumentFromURL(url, _BaseParser parser):
  *     c_doc = _parseDocFromFile(url, parser)             # <<<<<<<<<<<<<<
  *     return _documentFactory(c_doc, parser)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__parseDocFromFile(__pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_1 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1902, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__parseDocFromFile(__pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_1 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1905, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "src/lxml/parser.pxi":1903
+  /* "src/lxml/parser.pxi":1906
  * cdef _Document _parseDocumentFromURL(url, _BaseParser parser):
  *     c_doc = _parseDocFromFile(url, parser)
  *     return _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
@@ -127239,13 +127330,13 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocumentFromURL(PyObject
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1903, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1906, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = ((struct LxmlDocument *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1901
+  /* "src/lxml/parser.pxi":1904
  *     raise TypeError, f"cannot parse from '{python._fqtypename(source).decode('UTF-8')}'"
  * 
  * cdef _Document _parseDocumentFromURL(url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -127264,7 +127355,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocumentFromURL(PyObject
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1905
+/* "src/lxml/parser.pxi":1908
  *     return _documentFactory(c_doc, parser)
  * 
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -127285,7 +127376,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseMemoryDocument", 0);
 
-  /* "src/lxml/parser.pxi":1906
+  /* "src/lxml/parser.pxi":1909
  * 
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):
  *     if isinstance(text, unicode):             # <<<<<<<<<<<<<<
@@ -127296,31 +127387,31 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/parser.pxi":1907
+    /* "src/lxml/parser.pxi":1910
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):
  *     if isinstance(text, unicode):
  *         if _hasEncodingDeclaration(text):             # <<<<<<<<<<<<<<
  *             raise ValueError(
  *                 u"Unicode strings with encoding declaration are not supported. "
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree__hasEncodingDeclaration(__pyx_v_text); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1907, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_4lxml_5etree__hasEncodingDeclaration(__pyx_v_text); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 1910, __pyx_L1_error)
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (unlikely(__pyx_t_1)) {
 
-      /* "src/lxml/parser.pxi":1908
+      /* "src/lxml/parser.pxi":1911
  *     if isinstance(text, unicode):
  *         if _hasEncodingDeclaration(text):
  *             raise ValueError(             # <<<<<<<<<<<<<<
  *                 u"Unicode strings with encoding declaration are not supported. "
  *                 u"Please use bytes input or XML fragments without declaration.")
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__58, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1908, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__58, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1911, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(2, 1908, __pyx_L1_error)
+      __PYX_ERR(2, 1911, __pyx_L1_error)
 
-      /* "src/lxml/parser.pxi":1907
+      /* "src/lxml/parser.pxi":1910
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):
  *     if isinstance(text, unicode):
  *         if _hasEncodingDeclaration(text):             # <<<<<<<<<<<<<<
@@ -127329,7 +127420,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
  */
     }
 
-    /* "src/lxml/parser.pxi":1906
+    /* "src/lxml/parser.pxi":1909
  * 
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):
  *     if isinstance(text, unicode):             # <<<<<<<<<<<<<<
@@ -127339,7 +127430,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
     goto __pyx_L3;
   }
 
-  /* "src/lxml/parser.pxi":1911
+  /* "src/lxml/parser.pxi":1914
  *                 u"Unicode strings with encoding declaration are not supported. "
  *                 u"Please use bytes input or XML fragments without declaration.")
  *     elif not isinstance(text, bytes):             # <<<<<<<<<<<<<<
@@ -127350,7 +127441,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/parser.pxi":1912
+    /* "src/lxml/parser.pxi":1915
  *                 u"Please use bytes input or XML fragments without declaration.")
  *     elif not isinstance(text, bytes):
  *         raise ValueError, u"can only parse strings"             # <<<<<<<<<<<<<<
@@ -127358,9 +127449,9 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
  *     return _documentFactory(c_doc, parser)
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_can_only_parse_strings, 0, 0);
-    __PYX_ERR(2, 1912, __pyx_L1_error)
+    __PYX_ERR(2, 1915, __pyx_L1_error)
 
-    /* "src/lxml/parser.pxi":1911
+    /* "src/lxml/parser.pxi":1914
  *                 u"Unicode strings with encoding declaration are not supported. "
  *                 u"Please use bytes input or XML fragments without declaration.")
  *     elif not isinstance(text, bytes):             # <<<<<<<<<<<<<<
@@ -127370,17 +127461,17 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
   }
   __pyx_L3:;
 
-  /* "src/lxml/parser.pxi":1913
+  /* "src/lxml/parser.pxi":1916
  *     elif not isinstance(text, bytes):
  *         raise ValueError, u"can only parse strings"
  *     c_doc = _parseDoc(text, url, parser)             # <<<<<<<<<<<<<<
  *     return _documentFactory(c_doc, parser)
  * 
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree__parseDoc(__pyx_v_text, __pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_4 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1913, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_4lxml_5etree__parseDoc(__pyx_v_text, __pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_4 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1916, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_4;
 
-  /* "src/lxml/parser.pxi":1914
+  /* "src/lxml/parser.pxi":1917
  *         raise ValueError, u"can only parse strings"
  *     c_doc = _parseDoc(text, url, parser)
  *     return _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
@@ -127388,13 +127479,13 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
  * cdef _Document _parseFilelikeDocument(source, url, _BaseParser parser):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1914, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1917, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = ((struct LxmlDocument *)__pyx_t_3);
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1905
+  /* "src/lxml/parser.pxi":1908
  *     return _documentFactory(c_doc, parser)
  * 
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -127413,7 +127504,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
   return __pyx_r;
 }
 
-/* "src/lxml/parser.pxi":1916
+/* "src/lxml/parser.pxi":1919
  *     return _documentFactory(c_doc, parser)
  * 
  * cdef _Document _parseFilelikeDocument(source, url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -127432,28 +127523,28 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseFilelikeDocument(PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseFilelikeDocument", 0);
 
-  /* "src/lxml/parser.pxi":1917
+  /* "src/lxml/parser.pxi":1920
  * 
  * cdef _Document _parseFilelikeDocument(source, url, _BaseParser parser):
  *     c_doc = _parseDocFromFilelike(source, url, parser)             # <<<<<<<<<<<<<<
  *     return _documentFactory(c_doc, parser)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__parseDocFromFilelike(__pyx_v_source, __pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_1 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1917, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__parseDocFromFilelike(__pyx_v_source, __pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_1 == ((xmlDoc *)NULL))) __PYX_ERR(2, 1920, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "src/lxml/parser.pxi":1918
+  /* "src/lxml/parser.pxi":1921
  * cdef _Document _parseFilelikeDocument(source, url, _BaseParser parser):
  *     c_doc = _parseDocFromFilelike(source, url, parser)
  *     return _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1918, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1921, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = ((struct LxmlDocument *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/parser.pxi":1916
+  /* "src/lxml/parser.pxi":1919
  *     return _documentFactory(c_doc, parser)
  * 
  * cdef _Document _parseFilelikeDocument(source, url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -132683,7 +132774,7 @@ static int __pyx_f_4lxml_5etree__pushSaxStartEvent(struct __pyx_obj_4lxml_5etree
  *         if context._event_filter & PARSE_EVENT_FILTER_START:
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
+      if (unlikely(__pyx_assertions_enabled())) {
         __pyx_t_1 = (((PyObject *)__pyx_v_context->__pyx_base._doc) != Py_None);
         if (unlikely(!(__pyx_t_1 != 0))) {
           PyErr_SetNone(PyExc_AssertionError);
@@ -133623,7 +133714,7 @@ static int __pyx_f_4lxml_5etree__pushSaxNsEndEvents(struct __pyx_obj_4lxml_5etre
   }
   __pyx_t_4 = __Pyx_PyList_Pop(__pyx_v_context->_ns_stack); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 535, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(3, 535, __pyx_L1_error)
+  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(3, 535, __pyx_L1_error)
   __pyx_v_declared_namespaces = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
@@ -133678,7 +133769,7 @@ static int __pyx_f_4lxml_5etree__pushSaxNsEndEvents(struct __pyx_obj_4lxml_5etre
     __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5--; if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 540, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
-    if (!(likely(PyTuple_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(3, 540, __pyx_L1_error)
+    if (!(likely(PyTuple_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(3, 540, __pyx_L1_error)
     __Pyx_XDECREF_SET(__pyx_v_prefix_uri, ((PyObject*)__pyx_t_6));
     __pyx_t_6 = 0;
 
@@ -136478,7 +136569,7 @@ static int __pyx_f_4lxml_5etree_11TreeBuilder__flush(struct __pyx_obj_4lxml_5etr
  *                 else:
  */
         #ifndef CYTHON_WITHOUT_ASSERTIONS
-        if (unlikely(!Py_OptimizeFlag)) {
+        if (unlikely(__pyx_assertions_enabled())) {
           __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_last), __pyx_n_s_tail); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 751, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_4);
           __pyx_t_2 = (__pyx_t_4 == Py_None);
@@ -136518,7 +136609,7 @@ static int __pyx_f_4lxml_5etree_11TreeBuilder__flush(struct __pyx_obj_4lxml_5etr
  */
       /*else*/ {
         #ifndef CYTHON_WITHOUT_ASSERTIONS
-        if (unlikely(!Py_OptimizeFlag)) {
+        if (unlikely(__pyx_assertions_enabled())) {
           __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_last), __pyx_n_s_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 754, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_4);
           __pyx_t_2 = (__pyx_t_4 == Py_None);
@@ -137880,7 +137971,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11TreeBuilder_8end(struct __pyx_obj_4lxml
  *         return element
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_last), __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 849, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_v_tag, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 849, __pyx_L1_error)
@@ -150233,7 +150324,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
         __pyx_t_2 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_f); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 794, __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, 794, __pyx_L4_error)
+        if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(9, 794, __pyx_L4_error)
         __pyx_v_filename8 = ((PyObject*)__pyx_t_2);
         __pyx_t_2 = 0;
 
@@ -150335,7 +150426,7 @@ static struct __pyx_obj_4lxml_5etree__FilelikeWriter *__pyx_f_4lxml_5etree__crea
  */
           __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, 801, __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, 801, __pyx_L4_error)
+          if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(9, 801, __pyx_L4_error)
           __Pyx_DECREF_SET(__pyx_v_filename8, ((PyObject*)__pyx_t_2));
           __pyx_t_2 = 0;
 
@@ -159562,7 +159653,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_2__enter__(struct __pyx_obj_4lxm
  *             self.output_file, self.encoding, self.compresslevel,
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_1 = (__pyx_v_self->output_file != Py_None);
     if (unlikely(!(__pyx_t_1 != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
@@ -159976,7 +160067,7 @@ static PyObject *__pyx_gb_4lxml_5etree_7xmlfile_8generator2(__pyx_CoroutineObjec
  *             raise TypeError("Cannot asynchronously write to a plain file")
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_1 = (__pyx_cur_scope->__pyx_v_self->output_file != Py_None);
     if (unlikely(!(__pyx_t_1 != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
@@ -161025,7 +161116,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  *         cdef int c_standalone
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
       __PYX_ERR(9, 1436, __pyx_L1_error)
@@ -161383,7 +161474,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
  *             return
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
       __PYX_ERR(9, 1465, __pyx_L1_error)
@@ -161607,7 +161698,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8method(struct _
  *         return _MethodChanger(self, c_method)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
       __PYX_ERR(9, 1483, __pyx_L1_error)
@@ -161822,7 +161913,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10element(struct
  *         if attrib is not None:
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
       __PYX_ERR(9, 1493, __pyx_L1_error)
@@ -162742,7 +162833,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  *         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, 1527, __pyx_L1_error)
+  if (!(likely(PyDict_CheckExact(__pyx_v_nsmap))||((__pyx_v_nsmap) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_nsmap)->tp_name), 0))) __PYX_ERR(9, 1527, __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, 1527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -162803,9 +162894,9 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  *         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, 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(PyBytes_CheckExact(__pyx_v_ns))||((__pyx_v_ns) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_ns)->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)||((void)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)||((void)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)
   __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, 1528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_v_prefix = __pyx_t_5;
@@ -162827,8 +162918,8 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  * 
  *         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, 1530, __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, 1530, __pyx_L1_error)
+  if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(9, 1530, __pyx_L1_error)
+  if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) __PYX_ERR(9, 1530, __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, 1530, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -162840,9 +162931,9 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  * 
  *         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, 1533, __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, 1533, __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, 1533, __pyx_L1_error)
+  if (!(likely(PyList_CheckExact(__pyx_v_attributes))||((__pyx_v_attributes) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_attributes)->tp_name), 0))) __PYX_ERR(9, 1533, __pyx_L1_error)
+  if (!(likely(PyDict_CheckExact(__pyx_v_flat_namespace_map))||((__pyx_v_flat_namespace_map) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_flat_namespace_map)->tp_name), 0))) __PYX_ERR(9, 1533, __pyx_L1_error)
+  if (!(likely(PyList_CheckExact(__pyx_v_new_namespaces))||((__pyx_v_new_namespaces) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_new_namespaces)->tp_name), 0))) __PYX_ERR(9, 1533, __pyx_L1_error)
 
   /* "src/lxml/serializer.pxi":1532
  *         self._write_qname(name, prefix)
@@ -163110,7 +163201,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  *                 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, 1549, __pyx_L1_error)
+      if (!(likely(PyBytes_CheckExact(__pyx_v_ns))||((__pyx_v_ns) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_ns)->tp_name), 0))) __PYX_ERR(9, 1549, __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, 1549, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 1549, __pyx_L1_error)
@@ -163375,8 +163466,8 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  *             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, 1560, __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, 1560, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(9, 1560, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) __PYX_ERR(9, 1560, __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, 1560, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -163699,8 +163790,8 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  *             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, 1580, __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, 1580, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(9, 1580, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) __PYX_ERR(9, 1580, __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, 1580, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -164513,7 +164604,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_12write(struct _
  * 
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
       __PYX_ERR(9, 1632, __pyx_L1_error)
@@ -165240,7 +165331,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_14flush(struct _
  *         self._handle_error(self._c_out.error)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
       __PYX_ERR(9, 1676, __pyx_L1_error)
@@ -165810,7 +165901,7 @@ 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, 1716, __pyx_L1_error)
+  if (!(likely(PyBytes_CheckExact(__pyx_v_data))||((__pyx_v_data) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_data)->tp_name), 0))) __PYX_ERR(9, 1716, __pyx_L1_error)
   __Pyx_INCREF(__pyx_v_data);
   __pyx_r = ((PyObject*)__pyx_v_data);
   goto __pyx_L0;
@@ -177372,7 +177463,7 @@ static void __pyx_f_4lxml_5etree__collectIdHashItemList(void *__pyx_v_payload, v
   } else {
     __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(15, 171, __pyx_L1_error)
   }
-  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(15, 171, __pyx_L1_error)
+  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(15, 171, __pyx_L1_error)
   __pyx_v_lst = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
   __pyx_v_doc = __pyx_t_5;
@@ -177645,7 +177736,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8XInclude_9error_log___get__(struct __pyx
  * 
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_1 = (((PyObject *)__pyx_v_self->_error_log) != Py_None);
     if (unlikely(!(__pyx_t_1 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XInclude_instance_not_initialise);
@@ -177792,7 +177883,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8XInclude_2__call__(struct __pyx_obj_4lxm
  *             parse_options = node._doc._parser._parse_options
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_2 = (((PyObject *)__pyx_v_self->_error_log) != Py_None);
     if (unlikely(!(__pyx_t_2 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XInclude_processor_not_initialis);
@@ -178419,7 +178510,7 @@ static PyObject *__pyx_pf_4lxml_5etree_61cleanup_namespaces(CYTHON_UNUSED PyObje
  * 
  * 
  */
-  if (!(likely(PySet_CheckExact(__pyx_v_keep_ns_prefixes))||((__pyx_v_keep_ns_prefixes) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_keep_ns_prefixes)->tp_name), 0))) __PYX_ERR(17, 30, __pyx_L1_error)
+  if (!(likely(PySet_CheckExact(__pyx_v_keep_ns_prefixes))||((__pyx_v_keep_ns_prefixes) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_keep_ns_prefixes)->tp_name), 0))) __PYX_ERR(17, 30, __pyx_L1_error)
   __pyx_t_4 = __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(__pyx_v_c_element, ((PyObject*)__pyx_v_keep_ns_prefixes)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(17, 30, __pyx_L1_error)
 
   /* "src/lxml/cleanup.pxi":3
@@ -181026,7 +181117,7 @@ static int __pyx_pf_4lxml_5etree_12_BaseContext_2__init__(struct __pyx_obj_4lxml
  *         self._namespaces = namespaces
  *         self._temp_refs  = _TempStore()
  */
-  if (!(likely(PyDict_CheckExact(__pyx_v_extensions))||((__pyx_v_extensions) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_extensions)->tp_name), 0))) __PYX_ERR(10, 95, __pyx_L1_error)
+  if (!(likely(PyDict_CheckExact(__pyx_v_extensions))||((__pyx_v_extensions) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_extensions)->tp_name), 0))) __PYX_ERR(10, 95, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_extensions;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -181042,7 +181133,7 @@ static int __pyx_pf_4lxml_5etree_12_BaseContext_2__init__(struct __pyx_obj_4lxml
  *         self._temp_refs  = _TempStore()
  *         self._temp_documents  = set()
  */
-  if (!(likely(PyList_CheckExact(__pyx_v_namespaces))||((__pyx_v_namespaces) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_namespaces)->tp_name), 0))) __PYX_ERR(10, 96, __pyx_L1_error)
+  if (!(likely(PyList_CheckExact(__pyx_v_namespaces))||((__pyx_v_namespaces) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_namespaces)->tp_name), 0))) __PYX_ERR(10, 96, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_namespaces;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -192903,7 +192994,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19_XPathEvaluatorBase_9error_log___get__(
  * 
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_1 = (((PyObject *)__pyx_v_self->_error_log) != Py_None);
     if (unlikely(!(__pyx_t_1 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XPath_evaluator_not_initialised);
@@ -194762,7 +194853,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21XPathElementEvaluator_2register_namespa
  * 
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->__pyx_base._xpathCtxt != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XPath_context_not_initialised);
       __PYX_ERR(18, 269, __pyx_L1_error)
@@ -194851,7 +194942,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21XPathElementEvaluator_4register_namespa
  *             self._context.addNamespace(prefix, uri)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->__pyx_base._xpathCtxt != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XPath_context_not_initialised);
       __PYX_ERR(18, 275, __pyx_L1_error)
@@ -195124,7 +195215,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21XPathElementEvaluator_6__call__(struct
  *         doc = self._element._doc
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->__pyx_base._xpathCtxt != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XPath_context_not_initialised);
       __PYX_ERR(18, 292, __pyx_L1_error)
@@ -195697,7 +195788,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22XPathDocumentEvaluator_2__call__(struct
  *         doc = self._element._doc
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->__pyx_base.__pyx_base._xpathCtxt != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XPath_context_not_initialised);
       __PYX_ERR(18, 341, __pyx_L1_error)
@@ -196767,7 +196858,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5XPath_4__call__(struct __pyx_obj_4lxml_5
  *         element  = _rootNodeOrRaise(_etree_or_element)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->__pyx_base._xpathCtxt != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XPath_context_not_initialised);
       __PYX_ERR(18, 429, __pyx_L1_error)
@@ -201221,7 +201312,7 @@ static int __pyx_pf_4lxml_5etree_22_XSLTQuotedStringParam___cinit__(struct __pyx
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":367
+/* "src/lxml/xslt.pxi":368
  *     cdef _ErrorLog _error_log
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -201250,7 +201341,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT___cinit__(struct __pyx_obj_4lxml_5etree_X
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "src/lxml/xslt.pxi":368
+  /* "src/lxml/xslt.pxi":369
  * 
  *     def __cinit__(self):
  *         self._c_style = NULL             # <<<<<<<<<<<<<<
@@ -201259,7 +201350,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT___cinit__(struct __pyx_obj_4lxml_5etree_X
  */
   __pyx_v_self->_c_style = NULL;
 
-  /* "src/lxml/xslt.pxi":367
+  /* "src/lxml/xslt.pxi":368
  *     cdef _ErrorLog _error_log
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -201273,7 +201364,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT___cinit__(struct __pyx_obj_4lxml_5etree_X
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":370
+/* "src/lxml/xslt.pxi":371
  *         self._c_style = NULL
  * 
  *     def __init__(self, xslt_input, *, extensions=None, regexp=True,             # <<<<<<<<<<<<<<
@@ -201300,7 +201391,7 @@ static int __pyx_pw_4lxml_5etree_4XSLT_3__init__(PyObject *__pyx_v_self, PyObjec
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_True);
 
-    /* "src/lxml/xslt.pxi":371
+    /* "src/lxml/xslt.pxi":372
  * 
  *     def __init__(self, xslt_input, *, extensions=None, regexp=True,
  *                  access_control=None):             # <<<<<<<<<<<<<<
@@ -201331,7 +201422,7 @@ static int __pyx_pw_4lxml_5etree_4XSLT_3__init__(PyObject *__pyx_v_self, PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(4, 370, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(4, 371, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -201345,7 +201436,7 @@ static int __pyx_pw_4lxml_5etree_4XSLT_3__init__(PyObject *__pyx_v_self, PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 370, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 371, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.XSLT.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -201353,7 +201444,7 @@ static int __pyx_pw_4lxml_5etree_4XSLT_3__init__(PyObject *__pyx_v_self, PyObjec
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_5etree_4XSLT_2__init__(((struct __pyx_obj_4lxml_5etree_XSLT *)__pyx_v_self), __pyx_v_xslt_input, __pyx_v_extensions, __pyx_v_regexp, __pyx_v_access_control);
 
-  /* "src/lxml/xslt.pxi":370
+  /* "src/lxml/xslt.pxi":371
  *         self._c_style = NULL
  * 
  *     def __init__(self, xslt_input, *, extensions=None, regexp=True,             # <<<<<<<<<<<<<<
@@ -201394,7 +201485,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "src/lxml/xslt.pxi":372
+  /* "src/lxml/xslt.pxi":373
  *     def __init__(self, xslt_input, *, extensions=None, regexp=True,
  *                  access_control=None):
  *         cdef xslt.xsltStylesheet* c_style = NULL             # <<<<<<<<<<<<<<
@@ -201403,38 +201494,38 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
   __pyx_v_c_style = NULL;
 
-  /* "src/lxml/xslt.pxi":377
+  /* "src/lxml/xslt.pxi":378
  *         cdef _Element root_node
  * 
  *         doc = _documentOrRaise(xslt_input)             # <<<<<<<<<<<<<<
  *         root_node = _rootNodeOrRaise(xslt_input)
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentOrRaise(__pyx_v_xslt_input)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 377, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentOrRaise(__pyx_v_xslt_input)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 378, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":378
+  /* "src/lxml/xslt.pxi":379
  * 
  *         doc = _documentOrRaise(xslt_input)
  *         root_node = _rootNodeOrRaise(xslt_input)             # <<<<<<<<<<<<<<
  * 
  *         # set access control or raise TypeError
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__rootNodeOrRaise(__pyx_v_xslt_input)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 378, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__rootNodeOrRaise(__pyx_v_xslt_input)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 379, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_root_node = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":381
+  /* "src/lxml/xslt.pxi":382
  * 
  *         # set access control or raise TypeError
  *         self._access_control = access_control             # <<<<<<<<<<<<<<
  * 
  *         # make a copy of the document as stylesheet parsing modifies it
  */
-  if (!(likely(((__pyx_v_access_control) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_access_control, __pyx_ptype_4lxml_5etree_XSLTAccessControl))))) __PYX_ERR(4, 381, __pyx_L1_error)
+  if (!(likely(((__pyx_v_access_control) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_access_control, __pyx_ptype_4lxml_5etree_XSLTAccessControl))))) __PYX_ERR(4, 382, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_access_control;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -201443,17 +201534,17 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   __pyx_v_self->_access_control = ((struct __pyx_obj_4lxml_5etree_XSLTAccessControl *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":384
+  /* "src/lxml/xslt.pxi":385
  * 
  *         # make a copy of the document as stylesheet parsing modifies it
  *         c_doc = _copyDocRoot(doc._c_doc, root_node._c_node)             # <<<<<<<<<<<<<<
  * 
  *         # make sure we always have a stylesheet URL
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__copyDocRoot(__pyx_v_doc->_c_doc, __pyx_v_root_node->_c_node); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(4, 384, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__copyDocRoot(__pyx_v_doc->_c_doc, __pyx_v_root_node->_c_node); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(4, 385, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_2;
 
-  /* "src/lxml/xslt.pxi":387
+  /* "src/lxml/xslt.pxi":388
  * 
  *         # make sure we always have a stylesheet URL
  *         if c_doc.URL is NULL:             # <<<<<<<<<<<<<<
@@ -201463,14 +201554,14 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   __pyx_t_3 = ((__pyx_v_c_doc->URL == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "src/lxml/xslt.pxi":389
+    /* "src/lxml/xslt.pxi":390
  *         if c_doc.URL is NULL:
  *             doc_url_utf = python.PyUnicode_AsASCIIString(
  *                 f"string://__STRING__XSLT__/{id(self)}.xslt")             # <<<<<<<<<<<<<<
  *             c_doc.URL = tree.xmlStrdup(_xcstr(doc_url_utf))
  * 
  */
-    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 389, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 390, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_4 = 0;
     __pyx_t_5 = 127;
@@ -201478,9 +201569,9 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
     __pyx_t_4 += 26;
     __Pyx_GIVEREF(__pyx_kp_u_string___STRING__XSLT);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_string___STRING__XSLT);
-    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 389, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 390, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 389, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 390, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_5;
@@ -201492,24 +201583,24 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
     __pyx_t_4 += 5;
     __Pyx_GIVEREF(__pyx_kp_u_xslt_2);
     PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_xslt_2);
-    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 389, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 390, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "src/lxml/xslt.pxi":388
+    /* "src/lxml/xslt.pxi":389
  *         # make sure we always have a stylesheet URL
  *         if c_doc.URL is NULL:
  *             doc_url_utf = python.PyUnicode_AsASCIIString(             # <<<<<<<<<<<<<<
  *                 f"string://__STRING__XSLT__/{id(self)}.xslt")
  *             c_doc.URL = tree.xmlStrdup(_xcstr(doc_url_utf))
  */
-    __pyx_t_1 = PyUnicode_AsASCIIString(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 388, __pyx_L1_error)
+    __pyx_t_1 = PyUnicode_AsASCIIString(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 389, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_v_doc_url_utf = ((PyObject*)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "src/lxml/xslt.pxi":390
+    /* "src/lxml/xslt.pxi":391
  *             doc_url_utf = python.PyUnicode_AsASCIIString(
  *                 f"string://__STRING__XSLT__/{id(self)}.xslt")
  *             c_doc.URL = tree.xmlStrdup(_xcstr(doc_url_utf))             # <<<<<<<<<<<<<<
@@ -201518,7 +201609,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
     __pyx_v_c_doc->URL = xmlStrdup((const xmlChar*)PyBytes_AS_STRING(__pyx_v_doc_url_utf));
 
-    /* "src/lxml/xslt.pxi":387
+    /* "src/lxml/xslt.pxi":388
  * 
  *         # make sure we always have a stylesheet URL
  *         if c_doc.URL is NULL:             # <<<<<<<<<<<<<<
@@ -201527,14 +201618,14 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
   }
 
-  /* "src/lxml/xslt.pxi":392
+  /* "src/lxml/xslt.pxi":393
  *             c_doc.URL = tree.xmlStrdup(_xcstr(doc_url_utf))
  * 
  *         self._error_log = _ErrorLog()             # <<<<<<<<<<<<<<
  *         self._xslt_resolver_context = _XSLTResolverContext()
  *         _initXSLTResolverContext(self._xslt_resolver_context, doc._parser)
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 392, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 393, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_error_log);
@@ -201542,14 +201633,14 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   __pyx_v_self->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":393
+  /* "src/lxml/xslt.pxi":394
  * 
  *         self._error_log = _ErrorLog()
  *         self._xslt_resolver_context = _XSLTResolverContext()             # <<<<<<<<<<<<<<
  *         _initXSLTResolverContext(self._xslt_resolver_context, doc._parser)
  *         # keep a copy in case we need to access the stylesheet via 'document()'
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__XSLTResolverContext)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 393, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__XSLTResolverContext)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 394, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_xslt_resolver_context);
@@ -201557,7 +201648,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   __pyx_v_self->_xslt_resolver_context = ((struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":394
+  /* "src/lxml/xslt.pxi":395
  *         self._error_log = _ErrorLog()
  *         self._xslt_resolver_context = _XSLTResolverContext()
  *         _initXSLTResolverContext(self._xslt_resolver_context, doc._parser)             # <<<<<<<<<<<<<<
@@ -201568,23 +201659,23 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   __Pyx_INCREF(__pyx_t_1);
   __pyx_t_7 = ((PyObject *)__pyx_v_doc->_parser);
   __Pyx_INCREF(__pyx_t_7);
-  __pyx_t_6 = __pyx_f_4lxml_5etree__initXSLTResolverContext(((struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)__pyx_t_1), ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_7)); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 394, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_4lxml_5etree__initXSLTResolverContext(((struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)__pyx_t_1), ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_7)); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 395, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "src/lxml/xslt.pxi":396
+  /* "src/lxml/xslt.pxi":397
  *         _initXSLTResolverContext(self._xslt_resolver_context, doc._parser)
  *         # keep a copy in case we need to access the stylesheet via 'document()'
  *         self._xslt_resolver_context._c_style_doc = _copyDoc(c_doc, 1)             # <<<<<<<<<<<<<<
  *         c_doc._private = <python.PyObject*>self._xslt_resolver_context
  * 
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__copyDoc(__pyx_v_c_doc, 1); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(4, 396, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__copyDoc(__pyx_v_c_doc, 1); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(4, 397, __pyx_L1_error)
   __pyx_v_self->_xslt_resolver_context->_c_style_doc = __pyx_t_2;
 
-  /* "src/lxml/xslt.pxi":397
+  /* "src/lxml/xslt.pxi":398
  *         # keep a copy in case we need to access the stylesheet via 'document()'
  *         self._xslt_resolver_context._c_style_doc = _copyDoc(c_doc, 1)
  *         c_doc._private = <python.PyObject*>self._xslt_resolver_context             # <<<<<<<<<<<<<<
@@ -201593,7 +201684,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
   __pyx_v_c_doc->_private = ((PyObject *)__pyx_v_self->_xslt_resolver_context);
 
-  /* "src/lxml/xslt.pxi":399
+  /* "src/lxml/xslt.pxi":400
  *         c_doc._private = <python.PyObject*>self._xslt_resolver_context
  * 
  *         with self._error_log:             # <<<<<<<<<<<<<<
@@ -201601,15 +201692,15 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  *             c_style = xslt.xsltParseStylesheetDoc(c_doc)
  */
   /*with:*/ {
-    __pyx_t_8 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_self->_error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 399, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_self->_error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 400, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_self->_error_log); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(4, 399, __pyx_L4_error)
+    __pyx_t_9 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_self->_error_log); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(4, 400, __pyx_L4_error)
     /*try:*/ {
       {
         (void)__pyx_t_10; (void)__pyx_t_11; (void)__pyx_t_12; /* mark used */
         /*try:*/ {
 
-          /* "src/lxml/xslt.pxi":400
+          /* "src/lxml/xslt.pxi":401
  * 
  *         with self._error_log:
  *             orig_loader = _register_document_loader()             # <<<<<<<<<<<<<<
@@ -201618,7 +201709,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
           __pyx_v_orig_loader = __pyx_f_4lxml_5etree__register_document_loader();
 
-          /* "src/lxml/xslt.pxi":401
+          /* "src/lxml/xslt.pxi":402
  *         with self._error_log:
  *             orig_loader = _register_document_loader()
  *             c_style = xslt.xsltParseStylesheetDoc(c_doc)             # <<<<<<<<<<<<<<
@@ -201627,7 +201718,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
           __pyx_v_c_style = xsltParseStylesheetDoc(__pyx_v_c_doc);
 
-          /* "src/lxml/xslt.pxi":402
+          /* "src/lxml/xslt.pxi":403
  *             orig_loader = _register_document_loader()
  *             c_style = xslt.xsltParseStylesheetDoc(c_doc)
  *             _reset_document_loader(orig_loader)             # <<<<<<<<<<<<<<
@@ -201636,7 +201727,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
           __pyx_f_4lxml_5etree__reset_document_loader(__pyx_v_orig_loader);
 
-          /* "src/lxml/xslt.pxi":399
+          /* "src/lxml/xslt.pxi":400
  *         c_doc._private = <python.PyObject*>self._xslt_resolver_context
  * 
  *         with self._error_log:             # <<<<<<<<<<<<<<
@@ -201651,7 +201742,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
         if (__pyx_t_8) {
           __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__35, NULL);
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-          if (unlikely(!__pyx_t_12)) __PYX_ERR(4, 399, __pyx_L1_error)
+          if (unlikely(!__pyx_t_12)) __PYX_ERR(4, 400, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_12);
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         }
@@ -201666,7 +201757,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
     __pyx_L14:;
   }
 
-  /* "src/lxml/xslt.pxi":404
+  /* "src/lxml/xslt.pxi":405
  *             _reset_document_loader(orig_loader)
  * 
  *         if c_style is NULL or c_style.errors:             # <<<<<<<<<<<<<<
@@ -201684,7 +201775,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   __pyx_L16_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "src/lxml/xslt.pxi":405
+    /* "src/lxml/xslt.pxi":406
  * 
  *         if c_style is NULL or c_style.errors:
  *             tree.xmlFreeDoc(c_doc)             # <<<<<<<<<<<<<<
@@ -201693,7 +201784,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
     xmlFreeDoc(__pyx_v_c_doc);
 
-    /* "src/lxml/xslt.pxi":406
+    /* "src/lxml/xslt.pxi":407
  *         if c_style is NULL or c_style.errors:
  *             tree.xmlFreeDoc(c_doc)
  *             if c_style is not NULL:             # <<<<<<<<<<<<<<
@@ -201703,7 +201794,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
     __pyx_t_3 = ((__pyx_v_c_style != NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "src/lxml/xslt.pxi":407
+      /* "src/lxml/xslt.pxi":408
  *             tree.xmlFreeDoc(c_doc)
  *             if c_style is not NULL:
  *                 xslt.xsltFreeStylesheet(c_style)             # <<<<<<<<<<<<<<
@@ -201712,7 +201803,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
       xsltFreeStylesheet(__pyx_v_c_style);
 
-      /* "src/lxml/xslt.pxi":406
+      /* "src/lxml/xslt.pxi":407
  *         if c_style is NULL or c_style.errors:
  *             tree.xmlFreeDoc(c_doc)
  *             if c_style is not NULL:             # <<<<<<<<<<<<<<
@@ -201721,16 +201812,16 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
     }
 
-    /* "src/lxml/xslt.pxi":408
+    /* "src/lxml/xslt.pxi":409
  *             if c_style is not NULL:
  *                 xslt.xsltFreeStylesheet(c_style)
  *             self._xslt_resolver_context._raise_if_stored()             # <<<<<<<<<<<<<<
  *             # last error seems to be the most accurate here
  *             if self._error_log.last_error is not None and \
  */
-    __pyx_t_9 = ((struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *)__pyx_v_self->_xslt_resolver_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._raise_if_stored(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_self->_xslt_resolver_context)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(4, 408, __pyx_L1_error)
+    __pyx_t_9 = ((struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *)__pyx_v_self->_xslt_resolver_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._raise_if_stored(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_self->_xslt_resolver_context)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(4, 409, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":410
+    /* "src/lxml/xslt.pxi":411
  *             self._xslt_resolver_context._raise_if_stored()
  *             # last error seems to be the most accurate here
  *             if self._error_log.last_error is not None and \             # <<<<<<<<<<<<<<
@@ -201745,21 +201836,21 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
       goto __pyx_L20_bool_binop_done;
     }
 
-    /* "src/lxml/xslt.pxi":411
+    /* "src/lxml/xslt.pxi":412
  *             # last error seems to be the most accurate here
  *             if self._error_log.last_error is not None and \
  *                     self._error_log.last_error.message:             # <<<<<<<<<<<<<<
  *                 raise XSLTParseError(self._error_log.last_error.message,
  *                                      self._error_log)
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_error_log->__pyx_base.__pyx_base.last_error, __pyx_n_s_message); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 411, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_error_log->__pyx_base.__pyx_base.last_error, __pyx_n_s_message); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 412, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(4, 411, __pyx_L1_error)
+    __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(4, 412, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_3 = __pyx_t_14;
     __pyx_L20_bool_binop_done:;
 
-    /* "src/lxml/xslt.pxi":410
+    /* "src/lxml/xslt.pxi":411
  *             self._xslt_resolver_context._raise_if_stored()
  *             # last error seems to be the most accurate here
  *             if self._error_log.last_error is not None and \             # <<<<<<<<<<<<<<
@@ -201768,24 +201859,24 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
     if (unlikely(__pyx_t_3)) {
 
-      /* "src/lxml/xslt.pxi":412
+      /* "src/lxml/xslt.pxi":413
  *             if self._error_log.last_error is not None and \
  *                     self._error_log.last_error.message:
  *                 raise XSLTParseError(self._error_log.last_error.message,             # <<<<<<<<<<<<<<
  *                                      self._error_log)
  *             else:
  */
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_error_log->__pyx_base.__pyx_base.last_error, __pyx_n_s_message); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 412, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_error_log->__pyx_base.__pyx_base.last_error, __pyx_n_s_message); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 413, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
 
-      /* "src/lxml/xslt.pxi":413
+      /* "src/lxml/xslt.pxi":414
  *                     self._error_log.last_error.message:
  *                 raise XSLTParseError(self._error_log.last_error.message,
  *                                      self._error_log)             # <<<<<<<<<<<<<<
  *             else:
  *                 raise XSLTParseError(
  */
-      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 412, __pyx_L1_error)
+      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 413, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6);
       PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
@@ -201794,21 +201885,21 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
       PyTuple_SET_ITEM(__pyx_t_7, 1, ((PyObject *)__pyx_v_self->_error_log));
       __pyx_t_6 = 0;
 
-      /* "src/lxml/xslt.pxi":412
+      /* "src/lxml/xslt.pxi":413
  *             if self._error_log.last_error is not None and \
  *                     self._error_log.last_error.message:
  *                 raise XSLTParseError(self._error_log.last_error.message,             # <<<<<<<<<<<<<<
  *                                      self._error_log)
  *             else:
  */
-      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XSLTParseError), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 412, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XSLTParseError), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 413, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_Raise(__pyx_t_6, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __PYX_ERR(4, 412, __pyx_L1_error)
+      __PYX_ERR(4, 413, __pyx_L1_error)
 
-      /* "src/lxml/xslt.pxi":410
+      /* "src/lxml/xslt.pxi":411
  *             self._xslt_resolver_context._raise_if_stored()
  *             # last error seems to be the most accurate here
  *             if self._error_log.last_error is not None and \             # <<<<<<<<<<<<<<
@@ -201817,7 +201908,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
     }
 
-    /* "src/lxml/xslt.pxi":415
+    /* "src/lxml/xslt.pxi":416
  *                                      self._error_log)
  *             else:
  *                 raise XSLTParseError(             # <<<<<<<<<<<<<<
@@ -201826,24 +201917,24 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
     /*else*/ {
 
-      /* "src/lxml/xslt.pxi":416
+      /* "src/lxml/xslt.pxi":417
  *             else:
  *                 raise XSLTParseError(
  *                     self._error_log._buildExceptionMessage(             # <<<<<<<<<<<<<<
  *                         u"Cannot parse stylesheet"),
  *                     self._error_log)
  */
-      __pyx_t_6 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), __pyx_kp_u_Cannot_parse_stylesheet); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 416, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), __pyx_kp_u_Cannot_parse_stylesheet); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 417, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
 
-      /* "src/lxml/xslt.pxi":415
+      /* "src/lxml/xslt.pxi":416
  *                                      self._error_log)
  *             else:
  *                 raise XSLTParseError(             # <<<<<<<<<<<<<<
  *                     self._error_log._buildExceptionMessage(
  *                         u"Cannot parse stylesheet"),
  */
-      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 415, __pyx_L1_error)
+      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 416, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6);
       PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
@@ -201851,15 +201942,15 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
       __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_error_log));
       PyTuple_SET_ITEM(__pyx_t_7, 1, ((PyObject *)__pyx_v_self->_error_log));
       __pyx_t_6 = 0;
-      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XSLTParseError), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 415, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XSLTParseError), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 416, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_Raise(__pyx_t_6, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __PYX_ERR(4, 415, __pyx_L1_error)
+      __PYX_ERR(4, 416, __pyx_L1_error)
     }
 
-    /* "src/lxml/xslt.pxi":404
+    /* "src/lxml/xslt.pxi":405
  *             _reset_document_loader(orig_loader)
  * 
  *         if c_style is NULL or c_style.errors:             # <<<<<<<<<<<<<<
@@ -201868,7 +201959,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
   }
 
-  /* "src/lxml/xslt.pxi":420
+  /* "src/lxml/xslt.pxi":421
  *                     self._error_log)
  * 
  *         c_doc._private = NULL # no longer used!             # <<<<<<<<<<<<<<
@@ -201877,7 +201968,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
   __pyx_v_c_doc->_private = NULL;
 
-  /* "src/lxml/xslt.pxi":421
+  /* "src/lxml/xslt.pxi":422
  * 
  *         c_doc._private = NULL # no longer used!
  *         self._c_style = c_style             # <<<<<<<<<<<<<<
@@ -201886,14 +201977,14 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  */
   __pyx_v_self->_c_style = __pyx_v_c_style;
 
-  /* "src/lxml/xslt.pxi":422
+  /* "src/lxml/xslt.pxi":423
  *         c_doc._private = NULL # no longer used!
  *         self._c_style = c_style
  *         self._context = _XSLTContext(None, extensions, self._error_log, regexp, True)             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
-  __pyx_t_6 = PyTuple_New(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 422, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 423, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
@@ -201910,7 +202001,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   __Pyx_INCREF(Py_True);
   __Pyx_GIVEREF(Py_True);
   PyTuple_SET_ITEM(__pyx_t_6, 4, Py_True);
-  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__XSLTContext), __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 422, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__XSLTContext), __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 423, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_GIVEREF(__pyx_t_7);
@@ -201919,7 +202010,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   __pyx_v_self->_context = ((struct __pyx_obj_4lxml_5etree__XSLTContext *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "src/lxml/xslt.pxi":370
+  /* "src/lxml/xslt.pxi":371
  *         self._c_style = NULL
  * 
  *     def __init__(self, xslt_input, *, extensions=None, regexp=True,             # <<<<<<<<<<<<<<
@@ -201944,7 +202035,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":424
+/* "src/lxml/xslt.pxi":425
  *         self._context = _XSLTContext(None, extensions, self._error_log, regexp, True)
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -201970,7 +202061,7 @@ static void __pyx_pf_4lxml_5etree_4XSLT_4__dealloc__(struct __pyx_obj_4lxml_5etr
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "src/lxml/xslt.pxi":425
+  /* "src/lxml/xslt.pxi":426
  * 
  *     def __dealloc__(self):
  *         if self._xslt_resolver_context is not None and \             # <<<<<<<<<<<<<<
@@ -201985,7 +202076,7 @@ static void __pyx_pf_4lxml_5etree_4XSLT_4__dealloc__(struct __pyx_obj_4lxml_5etr
     goto __pyx_L4_bool_binop_done;
   }
 
-  /* "src/lxml/xslt.pxi":426
+  /* "src/lxml/xslt.pxi":427
  *     def __dealloc__(self):
  *         if self._xslt_resolver_context is not None and \
  *                self._xslt_resolver_context._c_style_doc is not NULL:             # <<<<<<<<<<<<<<
@@ -201996,7 +202087,7 @@ static void __pyx_pf_4lxml_5etree_4XSLT_4__dealloc__(struct __pyx_obj_4lxml_5etr
   __pyx_t_1 = __pyx_t_3;
   __pyx_L4_bool_binop_done:;
 
-  /* "src/lxml/xslt.pxi":425
+  /* "src/lxml/xslt.pxi":426
  * 
  *     def __dealloc__(self):
  *         if self._xslt_resolver_context is not None and \             # <<<<<<<<<<<<<<
@@ -202005,7 +202096,7 @@ static void __pyx_pf_4lxml_5etree_4XSLT_4__dealloc__(struct __pyx_obj_4lxml_5etr
  */
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":427
+    /* "src/lxml/xslt.pxi":428
  *         if self._xslt_resolver_context is not None and \
  *                self._xslt_resolver_context._c_style_doc is not NULL:
  *             tree.xmlFreeDoc(self._xslt_resolver_context._c_style_doc)             # <<<<<<<<<<<<<<
@@ -202014,7 +202105,7 @@ static void __pyx_pf_4lxml_5etree_4XSLT_4__dealloc__(struct __pyx_obj_4lxml_5etr
  */
     xmlFreeDoc(__pyx_v_self->_xslt_resolver_context->_c_style_doc);
 
-    /* "src/lxml/xslt.pxi":425
+    /* "src/lxml/xslt.pxi":426
  * 
  *     def __dealloc__(self):
  *         if self._xslt_resolver_context is not None and \             # <<<<<<<<<<<<<<
@@ -202023,7 +202114,7 @@ static void __pyx_pf_4lxml_5etree_4XSLT_4__dealloc__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/xslt.pxi":429
+  /* "src/lxml/xslt.pxi":430
  *             tree.xmlFreeDoc(self._xslt_resolver_context._c_style_doc)
  *         # this cleans up the doc copy as well
  *         if self._c_style is not NULL:             # <<<<<<<<<<<<<<
@@ -202033,7 +202124,7 @@ static void __pyx_pf_4lxml_5etree_4XSLT_4__dealloc__(struct __pyx_obj_4lxml_5etr
   __pyx_t_1 = ((__pyx_v_self->_c_style != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":430
+    /* "src/lxml/xslt.pxi":431
  *         # this cleans up the doc copy as well
  *         if self._c_style is not NULL:
  *             xslt.xsltFreeStylesheet(self._c_style)             # <<<<<<<<<<<<<<
@@ -202042,7 +202133,7 @@ static void __pyx_pf_4lxml_5etree_4XSLT_4__dealloc__(struct __pyx_obj_4lxml_5etr
  */
     xsltFreeStylesheet(__pyx_v_self->_c_style);
 
-    /* "src/lxml/xslt.pxi":429
+    /* "src/lxml/xslt.pxi":430
  *             tree.xmlFreeDoc(self._xslt_resolver_context._c_style_doc)
  *         # this cleans up the doc copy as well
  *         if self._c_style is not NULL:             # <<<<<<<<<<<<<<
@@ -202051,7 +202142,7 @@ static void __pyx_pf_4lxml_5etree_4XSLT_4__dealloc__(struct __pyx_obj_4lxml_5etr
  */
   }
 
-  /* "src/lxml/xslt.pxi":424
+  /* "src/lxml/xslt.pxi":425
  *         self._context = _XSLTContext(None, extensions, self._error_log, regexp, True)
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -202063,7 +202154,7 @@ static void __pyx_pf_4lxml_5etree_4XSLT_4__dealloc__(struct __pyx_obj_4lxml_5etr
   __Pyx_RefNannyFinishContext();
 }
 
-/* "src/lxml/xslt.pxi":433
+/* "src/lxml/xslt.pxi":434
  * 
  *     @property
  *     def error_log(self):             # <<<<<<<<<<<<<<
@@ -202093,7 +202184,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_9error_log___get__(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "src/lxml/xslt.pxi":435
+  /* "src/lxml/xslt.pxi":436
  *     def error_log(self):
  *         """The log of errors and warnings of an XSLT execution."""
  *         return self._error_log.copy()             # <<<<<<<<<<<<<<
@@ -202101,13 +202192,13 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_9error_log___get__(struct __pyx_obj
  *     @staticmethod
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_self->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 435, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_self->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 436, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":433
+  /* "src/lxml/xslt.pxi":434
  * 
  *     @property
  *     def error_log(self):             # <<<<<<<<<<<<<<
@@ -202126,7 +202217,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_9error_log___get__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":438
+/* "src/lxml/xslt.pxi":439
  * 
  *     @staticmethod
  *     def strparam(strval):             # <<<<<<<<<<<<<<
@@ -202165,7 +202256,7 @@ static PyObject *__pyx_pw_4lxml_5etree_4XSLT_7strparam(CYTHON_UNUSED PyObject *_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strparam") < 0)) __PYX_ERR(4, 438, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strparam") < 0)) __PYX_ERR(4, 439, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -202176,7 +202267,7 @@ static PyObject *__pyx_pw_4lxml_5etree_4XSLT_7strparam(CYTHON_UNUSED PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("strparam", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 438, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("strparam", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 439, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.XSLT.strparam", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -202198,7 +202289,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_6strparam(PyObject *__pyx_v_strval)
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("strparam", 0);
 
-  /* "src/lxml/xslt.pxi":449
+  /* "src/lxml/xslt.pxi":450
  *         Escaped string parameters can be reused without restriction.
  *         """
  *         return _XSLTQuotedStringParam(strval)             # <<<<<<<<<<<<<<
@@ -202206,13 +202297,13 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_6strparam(PyObject *__pyx_v_strval)
  *     @staticmethod
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree__XSLTQuotedStringParam), __pyx_v_strval); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 449, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4lxml_5etree__XSLTQuotedStringParam), __pyx_v_strval); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 450, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":438
+  /* "src/lxml/xslt.pxi":439
  * 
  *     @staticmethod
  *     def strparam(strval):             # <<<<<<<<<<<<<<
@@ -202231,7 +202322,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_6strparam(PyObject *__pyx_v_strval)
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":452
+/* "src/lxml/xslt.pxi":453
  * 
  *     @staticmethod
  *     def set_global_max_depth(int max_depth):             # <<<<<<<<<<<<<<
@@ -202270,18 +202361,18 @@ static PyObject *__pyx_pw_4lxml_5etree_4XSLT_9set_global_max_depth(CYTHON_UNUSED
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_global_max_depth") < 0)) __PYX_ERR(4, 452, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_global_max_depth") < 0)) __PYX_ERR(4, 453, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_max_depth = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_max_depth == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 452, __pyx_L3_error)
+    __pyx_v_max_depth = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_max_depth == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 453, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_global_max_depth", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 452, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_global_max_depth", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 453, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.XSLT.set_global_max_depth", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -202304,7 +202395,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_8set_global_max_depth(int __pyx_v_m
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_global_max_depth", 0);
 
-  /* "src/lxml/xslt.pxi":467
+  /* "src/lxml/xslt.pxi":468
  *         libxslt does not support it at a per-stylesheet level.
  *         """
  *         if max_depth < 0:             # <<<<<<<<<<<<<<
@@ -202314,20 +202405,20 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_8set_global_max_depth(int __pyx_v_m
   __pyx_t_1 = ((__pyx_v_max_depth < 0) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/xslt.pxi":468
+    /* "src/lxml/xslt.pxi":469
  *         """
  *         if max_depth < 0:
  *             raise ValueError("cannot set a maximum stylesheet traversal depth < 0")             # <<<<<<<<<<<<<<
  *         xslt.xsltMaxDepth = max_depth
  * 
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__101, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 468, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__101, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 469, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(4, 468, __pyx_L1_error)
+    __PYX_ERR(4, 469, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":467
+    /* "src/lxml/xslt.pxi":468
  *         libxslt does not support it at a per-stylesheet level.
  *         """
  *         if max_depth < 0:             # <<<<<<<<<<<<<<
@@ -202336,7 +202427,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_8set_global_max_depth(int __pyx_v_m
  */
   }
 
-  /* "src/lxml/xslt.pxi":469
+  /* "src/lxml/xslt.pxi":470
  *         if max_depth < 0:
  *             raise ValueError("cannot set a maximum stylesheet traversal depth < 0")
  *         xslt.xsltMaxDepth = max_depth             # <<<<<<<<<<<<<<
@@ -202345,7 +202436,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_8set_global_max_depth(int __pyx_v_m
  */
   xsltMaxDepth = __pyx_v_max_depth;
 
-  /* "src/lxml/xslt.pxi":452
+  /* "src/lxml/xslt.pxi":453
  * 
  *     @staticmethod
  *     def set_global_max_depth(int max_depth):             # <<<<<<<<<<<<<<
@@ -202366,7 +202457,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_8set_global_max_depth(int __pyx_v_m
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":471
+/* "src/lxml/xslt.pxi":472
  *         xslt.xsltMaxDepth = max_depth
  * 
  *     def apply(self, _input, *, profile_run=False, **kw):             # <<<<<<<<<<<<<<
@@ -202415,7 +202506,7 @@ static PyObject *__pyx_pw_4lxml_5etree_4XSLT_11apply(PyObject *__pyx_v_self, PyO
         if (value) { values[index] = value; kw_args--; }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "apply") < 0)) __PYX_ERR(4, 471, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "apply") < 0)) __PYX_ERR(4, 472, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -202427,7 +202518,7 @@ static PyObject *__pyx_pw_4lxml_5etree_4XSLT_11apply(PyObject *__pyx_v_self, PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("apply", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 471, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("apply", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 472, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
   __Pyx_AddTraceback("lxml.etree.XSLT.apply", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -202453,7 +202544,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_10apply(struct __pyx_obj_4lxml_5etr
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("apply", 0);
 
-  /* "src/lxml/xslt.pxi":475
+  /* "src/lxml/xslt.pxi":476
  * 
  *         :deprecated: call the object, not this method."""
  *         return self(_input, profile_run=profile_run, **kw)             # <<<<<<<<<<<<<<
@@ -202461,18 +202552,18 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_10apply(struct __pyx_obj_4lxml_5etr
  *     def tostring(self, _ElementTree result_tree):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 475, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 476, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v__input);
   __Pyx_GIVEREF(__pyx_v__input);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__input);
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 475, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 476, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_profile_run, __pyx_v_profile_run) < 0) __PYX_ERR(4, 475, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_profile_run, __pyx_v_profile_run) < 0) __PYX_ERR(4, 476, __pyx_L1_error)
   __pyx_t_2 = __pyx_t_3;
   __pyx_t_3 = 0;
-  if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_v_kw) < 0) __PYX_ERR(4, 475, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 475, __pyx_L1_error)
+  if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_v_kw) < 0) __PYX_ERR(4, 476, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 476, __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;
@@ -202480,7 +202571,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_10apply(struct __pyx_obj_4lxml_5etr
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":471
+  /* "src/lxml/xslt.pxi":472
  *         xslt.xsltMaxDepth = max_depth
  * 
  *     def apply(self, _input, *, profile_run=False, **kw):             # <<<<<<<<<<<<<<
@@ -202501,7 +202592,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_10apply(struct __pyx_obj_4lxml_5etr
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":477
+/* "src/lxml/xslt.pxi":478
  *         return self(_input, profile_run=profile_run, **kw)
  * 
  *     def tostring(self, _ElementTree result_tree):             # <<<<<<<<<<<<<<
@@ -202520,7 +202611,7 @@ static PyObject *__pyx_pw_4lxml_5etree_4XSLT_13tostring(PyObject *__pyx_v_self,
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("tostring (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result_tree), __pyx_ptype_4lxml_5etree__ElementTree, 1, "result_tree", 0))) __PYX_ERR(4, 477, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result_tree), __pyx_ptype_4lxml_5etree__ElementTree, 1, "result_tree", 0))) __PYX_ERR(4, 478, __pyx_L1_error)
   __pyx_r = __pyx_pf_4lxml_5etree_4XSLT_12tostring(((struct __pyx_obj_4lxml_5etree_XSLT *)__pyx_v_self), ((struct LxmlElementTree *)__pyx_v_result_tree));
 
   /* function exit code */
@@ -202541,7 +202632,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_12tostring(CYTHON_UNUSED struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("tostring", 0);
 
-  /* "src/lxml/xslt.pxi":484
+  /* "src/lxml/xslt.pxi":485
  *         :deprecated: use str(result_tree) instead.
  *         """
  *         return str(result_tree)             # <<<<<<<<<<<<<<
@@ -202549,13 +202640,13 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_12tostring(CYTHON_UNUSED struct __p
  *     def __deepcopy__(self, memo):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyString_Type)), ((PyObject *)__pyx_v_result_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 484, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyString_Type)), ((PyObject *)__pyx_v_result_tree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 485, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":477
+  /* "src/lxml/xslt.pxi":478
  *         return self(_input, profile_run=profile_run, **kw)
  * 
  *     def tostring(self, _ElementTree result_tree):             # <<<<<<<<<<<<<<
@@ -202574,7 +202665,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_12tostring(CYTHON_UNUSED struct __p
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":486
+/* "src/lxml/xslt.pxi":487
  *         return str(result_tree)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
@@ -202607,7 +202698,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_14__deepcopy__(struct __pyx_obj_4lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__deepcopy__", 0);
 
-  /* "src/lxml/xslt.pxi":487
+  /* "src/lxml/xslt.pxi":488
  * 
  *     def __deepcopy__(self, memo):
  *         return self.__copy__()             # <<<<<<<<<<<<<<
@@ -202615,7 +202706,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_14__deepcopy__(struct __pyx_obj_4lx
  *     def __copy__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_copy_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 487, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_copy_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 488, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -202629,14 +202720,14 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_14__deepcopy__(struct __pyx_obj_4lx
   }
   __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(4, 487, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 488, __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/xslt.pxi":486
+  /* "src/lxml/xslt.pxi":487
  *         return str(result_tree)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
@@ -202657,7 +202748,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_14__deepcopy__(struct __pyx_obj_4lx
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":489
+/* "src/lxml/xslt.pxi":490
  *         return self.__copy__()
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
@@ -202688,7 +202779,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_16__copy__(struct __pyx_obj_4lxml_5
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__copy__", 0);
 
-  /* "src/lxml/xslt.pxi":490
+  /* "src/lxml/xslt.pxi":491
  * 
  *     def __copy__(self):
  *         return _copyXSLT(self)             # <<<<<<<<<<<<<<
@@ -202696,13 +202787,13 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_16__copy__(struct __pyx_obj_4lxml_5
  *     def __call__(self, _input, *, profile_run=False, **kw):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__copyXSLT(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 490, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__copyXSLT(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 491, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":489
+  /* "src/lxml/xslt.pxi":490
  *         return self.__copy__()
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
@@ -202721,7 +202812,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_16__copy__(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":492
+/* "src/lxml/xslt.pxi":493
  *         return _copyXSLT(self)
  * 
  *     def __call__(self, _input, *, profile_run=False, **kw):             # <<<<<<<<<<<<<<
@@ -202772,7 +202863,7 @@ static PyObject *__pyx_pw_4lxml_5etree_4XSLT_19__call__(PyObject *__pyx_v_self,
         if (value) { values[index] = value; kw_args--; }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "__call__") < 0)) __PYX_ERR(4, 492, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, pos_args, "__call__") < 0)) __PYX_ERR(4, 493, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -202784,7 +202875,7 @@ static PyObject *__pyx_pw_4lxml_5etree_4XSLT_19__call__(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__call__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 492, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__call__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 493, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
   __Pyx_AddTraceback("lxml.etree.XSLT.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -202842,7 +202933,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__call__", 0);
 
-  /* "src/lxml/xslt.pxi":501
+  /* "src/lxml/xslt.pxi":502
  *         xslt_profile that holds an XML tree with profiling data.
  *         """
  *         cdef _XSLTContext context = None             # <<<<<<<<<<<<<<
@@ -202852,7 +202943,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
   __Pyx_INCREF(Py_None);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__XSLTContext *)Py_None);
 
-  /* "src/lxml/xslt.pxi":506
+  /* "src/lxml/xslt.pxi":507
  *         cdef _Element root_node
  *         cdef _Document result_doc
  *         cdef _Document profile_doc = None             # <<<<<<<<<<<<<<
@@ -202862,7 +202953,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
   __Pyx_INCREF(Py_None);
   __pyx_v_profile_doc = ((struct LxmlDocument *)Py_None);
 
-  /* "src/lxml/xslt.pxi":509
+  /* "src/lxml/xslt.pxi":510
  *         cdef xmlDoc* c_profile_doc
  *         cdef xslt.xsltTransformContext* transform_ctxt
  *         cdef xmlDoc* c_result = NULL             # <<<<<<<<<<<<<<
@@ -202871,7 +202962,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   __pyx_v_c_result = NULL;
 
-  /* "src/lxml/xslt.pxi":512
+  /* "src/lxml/xslt.pxi":513
  *         cdef xmlDoc* c_doc
  *         cdef tree.xmlDict* c_dict
  *         cdef const_char** params = NULL             # <<<<<<<<<<<<<<
@@ -202880,7 +202971,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   __pyx_v_params = NULL;
 
-  /* "src/lxml/xslt.pxi":514
+  /* "src/lxml/xslt.pxi":515
  *         cdef const_char** params = NULL
  * 
  *         assert self._c_style is not NULL, "XSLT stylesheet not initialised"             # <<<<<<<<<<<<<<
@@ -202888,49 +202979,49 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  *         root_node = _rootNodeOrRaise(_input)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_style != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XSLT_stylesheet_not_initialised);
-      __PYX_ERR(4, 514, __pyx_L1_error)
+      __PYX_ERR(4, 515, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/xslt.pxi":515
+  /* "src/lxml/xslt.pxi":516
  * 
  *         assert self._c_style is not NULL, "XSLT stylesheet not initialised"
  *         input_doc = _documentOrRaise(_input)             # <<<<<<<<<<<<<<
  *         root_node = _rootNodeOrRaise(_input)
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentOrRaise(__pyx_v__input)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 515, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentOrRaise(__pyx_v__input)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 516, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_input_doc = ((struct LxmlDocument *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":516
+  /* "src/lxml/xslt.pxi":517
  *         assert self._c_style is not NULL, "XSLT stylesheet not initialised"
  *         input_doc = _documentOrRaise(_input)
  *         root_node = _rootNodeOrRaise(_input)             # <<<<<<<<<<<<<<
  * 
  *         c_doc = _fakeRootDoc(input_doc._c_doc, root_node._c_node)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__rootNodeOrRaise(__pyx_v__input)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 516, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__rootNodeOrRaise(__pyx_v__input)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 517, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_root_node = ((struct LxmlElement *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":518
+  /* "src/lxml/xslt.pxi":519
  *         root_node = _rootNodeOrRaise(_input)
  * 
  *         c_doc = _fakeRootDoc(input_doc._c_doc, root_node._c_node)             # <<<<<<<<<<<<<<
  * 
  *         transform_ctxt = xslt.xsltNewTransformContext(self._c_style, c_doc)
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__fakeRootDoc(__pyx_v_input_doc->_c_doc, __pyx_v_root_node->_c_node); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(4, 518, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__fakeRootDoc(__pyx_v_input_doc->_c_doc, __pyx_v_root_node->_c_node); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(4, 519, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_2;
 
-  /* "src/lxml/xslt.pxi":520
+  /* "src/lxml/xslt.pxi":521
  *         c_doc = _fakeRootDoc(input_doc._c_doc, root_node._c_node)
  * 
  *         transform_ctxt = xslt.xsltNewTransformContext(self._c_style, c_doc)             # <<<<<<<<<<<<<<
@@ -202939,7 +203030,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   __pyx_v_transform_ctxt = xsltNewTransformContext(__pyx_v_self->_c_style, __pyx_v_c_doc);
 
-  /* "src/lxml/xslt.pxi":521
+  /* "src/lxml/xslt.pxi":522
  * 
  *         transform_ctxt = xslt.xsltNewTransformContext(self._c_style, c_doc)
  *         if transform_ctxt is NULL:             # <<<<<<<<<<<<<<
@@ -202949,7 +203040,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
   __pyx_t_3 = ((__pyx_v_transform_ctxt == NULL) != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "src/lxml/xslt.pxi":522
+    /* "src/lxml/xslt.pxi":523
  *         transform_ctxt = xslt.xsltNewTransformContext(self._c_style, c_doc)
  *         if transform_ctxt is NULL:
  *             _destroyFakeDoc(input_doc._c_doc, c_doc)             # <<<<<<<<<<<<<<
@@ -202958,16 +203049,16 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     __pyx_f_4lxml_5etree__destroyFakeDoc(__pyx_v_input_doc->_c_doc, __pyx_v_c_doc);
 
-    /* "src/lxml/xslt.pxi":523
+    /* "src/lxml/xslt.pxi":524
  *         if transform_ctxt is NULL:
  *             _destroyFakeDoc(input_doc._c_doc, c_doc)
  *             raise MemoryError()             # <<<<<<<<<<<<<<
  * 
  *         # using the stylesheet dict is safer than using a possibly
  */
-    PyErr_NoMemory(); __PYX_ERR(4, 523, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(4, 524, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":521
+    /* "src/lxml/xslt.pxi":522
  * 
  *         transform_ctxt = xslt.xsltNewTransformContext(self._c_style, c_doc)
  *         if transform_ctxt is NULL:             # <<<<<<<<<<<<<<
@@ -202976,7 +203067,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   }
 
-  /* "src/lxml/xslt.pxi":529
+  /* "src/lxml/xslt.pxi":530
  *         # non-input tag/attr names will come from the stylesheet
  *         # anyway.
  *         if transform_ctxt.dict is not NULL:             # <<<<<<<<<<<<<<
@@ -202986,7 +203077,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
   __pyx_t_3 = ((__pyx_v_transform_ctxt->dict != NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "src/lxml/xslt.pxi":530
+    /* "src/lxml/xslt.pxi":531
  *         # anyway.
  *         if transform_ctxt.dict is not NULL:
  *             xmlparser.xmlDictFree(transform_ctxt.dict)             # <<<<<<<<<<<<<<
@@ -202995,7 +203086,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     xmlDictFree(__pyx_v_transform_ctxt->dict);
 
-    /* "src/lxml/xslt.pxi":529
+    /* "src/lxml/xslt.pxi":530
  *         # non-input tag/attr names will come from the stylesheet
  *         # anyway.
  *         if transform_ctxt.dict is not NULL:             # <<<<<<<<<<<<<<
@@ -203004,17 +203095,17 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   }
 
-  /* "src/lxml/xslt.pxi":531
+  /* "src/lxml/xslt.pxi":532
  *         if transform_ctxt.dict is not NULL:
  *             xmlparser.xmlDictFree(transform_ctxt.dict)
  *         if kw:             # <<<<<<<<<<<<<<
  *             # parameter values are stored in the dict
  *             # => avoid unnecessarily cluttering the global dict
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_kw); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(4, 531, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_kw); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(4, 532, __pyx_L1_error)
   if (__pyx_t_3) {
 
-    /* "src/lxml/xslt.pxi":534
+    /* "src/lxml/xslt.pxi":535
  *             # parameter values are stored in the dict
  *             # => avoid unnecessarily cluttering the global dict
  *             transform_ctxt.dict = xmlparser.xmlDictCreateSub(self._c_style.doc.dict)             # <<<<<<<<<<<<<<
@@ -203023,7 +203114,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     __pyx_v_transform_ctxt->dict = xmlDictCreateSub(__pyx_v_self->_c_style->doc->dict);
 
-    /* "src/lxml/xslt.pxi":535
+    /* "src/lxml/xslt.pxi":536
  *             # => avoid unnecessarily cluttering the global dict
  *             transform_ctxt.dict = xmlparser.xmlDictCreateSub(self._c_style.doc.dict)
  *             if transform_ctxt.dict is NULL:             # <<<<<<<<<<<<<<
@@ -203033,7 +203124,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     __pyx_t_3 = ((__pyx_v_transform_ctxt->dict == NULL) != 0);
     if (unlikely(__pyx_t_3)) {
 
-      /* "src/lxml/xslt.pxi":536
+      /* "src/lxml/xslt.pxi":537
  *             transform_ctxt.dict = xmlparser.xmlDictCreateSub(self._c_style.doc.dict)
  *             if transform_ctxt.dict is NULL:
  *                 xslt.xsltFreeTransformContext(transform_ctxt)             # <<<<<<<<<<<<<<
@@ -203042,16 +203133,16 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
       xsltFreeTransformContext(__pyx_v_transform_ctxt);
 
-      /* "src/lxml/xslt.pxi":537
+      /* "src/lxml/xslt.pxi":538
  *             if transform_ctxt.dict is NULL:
  *                 xslt.xsltFreeTransformContext(transform_ctxt)
  *                 raise MemoryError()             # <<<<<<<<<<<<<<
  *         else:
  *             transform_ctxt.dict = self._c_style.doc.dict
  */
-      PyErr_NoMemory(); __PYX_ERR(4, 537, __pyx_L1_error)
+      PyErr_NoMemory(); __PYX_ERR(4, 538, __pyx_L1_error)
 
-      /* "src/lxml/xslt.pxi":535
+      /* "src/lxml/xslt.pxi":536
  *             # => avoid unnecessarily cluttering the global dict
  *             transform_ctxt.dict = xmlparser.xmlDictCreateSub(self._c_style.doc.dict)
  *             if transform_ctxt.dict is NULL:             # <<<<<<<<<<<<<<
@@ -203060,7 +203151,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     }
 
-    /* "src/lxml/xslt.pxi":531
+    /* "src/lxml/xslt.pxi":532
  *         if transform_ctxt.dict is not NULL:
  *             xmlparser.xmlDictFree(transform_ctxt.dict)
  *         if kw:             # <<<<<<<<<<<<<<
@@ -203070,7 +203161,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     goto __pyx_L5;
   }
 
-  /* "src/lxml/xslt.pxi":539
+  /* "src/lxml/xslt.pxi":540
  *                 raise MemoryError()
  *         else:
  *             transform_ctxt.dict = self._c_style.doc.dict             # <<<<<<<<<<<<<<
@@ -203081,7 +203172,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     __pyx_t_4 = __pyx_v_self->_c_style->doc->dict;
     __pyx_v_transform_ctxt->dict = __pyx_t_4;
 
-    /* "src/lxml/xslt.pxi":540
+    /* "src/lxml/xslt.pxi":541
  *         else:
  *             transform_ctxt.dict = self._c_style.doc.dict
  *             xmlparser.xmlDictReference(transform_ctxt.dict)             # <<<<<<<<<<<<<<
@@ -203092,7 +203183,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
   }
   __pyx_L5:;
 
-  /* "src/lxml/xslt.pxi":542
+  /* "src/lxml/xslt.pxi":543
  *             xmlparser.xmlDictReference(transform_ctxt.dict)
  * 
  *         xslt.xsltSetCtxtParseOptions(             # <<<<<<<<<<<<<<
@@ -203101,17 +203192,17 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   xsltSetCtxtParseOptions(__pyx_v_transform_ctxt, __pyx_v_input_doc->_parser->_parse_options);
 
-  /* "src/lxml/xslt.pxi":545
+  /* "src/lxml/xslt.pxi":546
  *             transform_ctxt, input_doc._parser._parse_options)
  * 
  *         if profile_run:             # <<<<<<<<<<<<<<
  *             transform_ctxt.profile = 1
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_profile_run); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(4, 545, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_profile_run); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(4, 546, __pyx_L1_error)
   if (__pyx_t_3) {
 
-    /* "src/lxml/xslt.pxi":546
+    /* "src/lxml/xslt.pxi":547
  * 
  *         if profile_run:
  *             transform_ctxt.profile = 1             # <<<<<<<<<<<<<<
@@ -203120,7 +203211,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     __pyx_v_transform_ctxt->profile = 1;
 
-    /* "src/lxml/xslt.pxi":545
+    /* "src/lxml/xslt.pxi":546
  *             transform_ctxt, input_doc._parser._parse_options)
  * 
  *         if profile_run:             # <<<<<<<<<<<<<<
@@ -203129,7 +203220,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   }
 
-  /* "src/lxml/xslt.pxi":548
+  /* "src/lxml/xslt.pxi":549
  *             transform_ctxt.profile = 1
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -203138,43 +203229,43 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   /*try:*/ {
 
-    /* "src/lxml/xslt.pxi":549
+    /* "src/lxml/xslt.pxi":550
  * 
  *         try:
  *             context = self._context._copy()             # <<<<<<<<<<<<<<
  *             context.register_context(transform_ctxt, input_doc)
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_12_XSLTContext__copy(((struct __pyx_obj_4lxml_5etree__BaseContext *)__pyx_v_self->_context))); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 549, __pyx_L9_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_12_XSLTContext__copy(((struct __pyx_obj_4lxml_5etree__BaseContext *)__pyx_v_self->_context))); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 550, __pyx_L9_error)
     __Pyx_GOTREF(__pyx_t_1);
-    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__XSLTContext))))) __PYX_ERR(4, 549, __pyx_L9_error)
+    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__XSLTContext))))) __PYX_ERR(4, 550, __pyx_L9_error)
     __Pyx_DECREF_SET(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__XSLTContext *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "src/lxml/xslt.pxi":550
+    /* "src/lxml/xslt.pxi":551
  *         try:
  *             context = self._context._copy()
  *             context.register_context(transform_ctxt, input_doc)             # <<<<<<<<<<<<<<
  * 
  *             resolver_context = self._xslt_resolver_context._copy()
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree_12_XSLTContext_register_context(__pyx_v_context, __pyx_v_transform_ctxt, __pyx_v_input_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 550, __pyx_L9_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree_12_XSLTContext_register_context(__pyx_v_context, __pyx_v_transform_ctxt, __pyx_v_input_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 551, __pyx_L9_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "src/lxml/xslt.pxi":552
+    /* "src/lxml/xslt.pxi":553
  *             context.register_context(transform_ctxt, input_doc)
  * 
  *             resolver_context = self._xslt_resolver_context._copy()             # <<<<<<<<<<<<<<
  *             transform_ctxt._private = <python.PyObject*>resolver_context
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_20_XSLTResolverContext__copy(__pyx_v_self->_xslt_resolver_context)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 552, __pyx_L9_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_20_XSLTResolverContext__copy(__pyx_v_self->_xslt_resolver_context)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 553, __pyx_L9_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_v_resolver_context = ((struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "src/lxml/xslt.pxi":553
+    /* "src/lxml/xslt.pxi":554
  * 
  *             resolver_context = self._xslt_resolver_context._copy()
  *             transform_ctxt._private = <python.PyObject*>resolver_context             # <<<<<<<<<<<<<<
@@ -203183,18 +203274,18 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     __pyx_v_transform_ctxt->_private = ((PyObject *)__pyx_v_resolver_context);
 
-    /* "src/lxml/xslt.pxi":555
+    /* "src/lxml/xslt.pxi":556
  *             transform_ctxt._private = <python.PyObject*>resolver_context
  * 
  *             _convert_xslt_parameters(transform_ctxt, kw, &params)             # <<<<<<<<<<<<<<
  *             c_result = self._run_transform(
  *                 c_doc, params, context, transform_ctxt)
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__convert_xslt_parameters(__pyx_v_transform_ctxt, __pyx_v_kw, (&__pyx_v_params)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 555, __pyx_L9_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree__convert_xslt_parameters(__pyx_v_transform_ctxt, __pyx_v_kw, (&__pyx_v_params)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 556, __pyx_L9_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "src/lxml/xslt.pxi":556
+    /* "src/lxml/xslt.pxi":557
  * 
  *             _convert_xslt_parameters(transform_ctxt, kw, &params)
  *             c_result = self._run_transform(             # <<<<<<<<<<<<<<
@@ -203203,7 +203294,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     __pyx_v_c_result = ((struct __pyx_vtabstruct_4lxml_5etree_XSLT *)__pyx_v_self->__pyx_vtab)->_run_transform(__pyx_v_self, __pyx_v_c_doc, __pyx_v_params, __pyx_v_context, __pyx_v_transform_ctxt);
 
-    /* "src/lxml/xslt.pxi":558
+    /* "src/lxml/xslt.pxi":559
  *             c_result = self._run_transform(
  *                 c_doc, params, context, transform_ctxt)
  *             if params is not NULL:             # <<<<<<<<<<<<<<
@@ -203213,7 +203304,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     __pyx_t_3 = ((__pyx_v_params != NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "src/lxml/xslt.pxi":560
+      /* "src/lxml/xslt.pxi":561
  *             if params is not NULL:
  *                 # deallocate space for parameters
  *                 python.lxml_free(params)             # <<<<<<<<<<<<<<
@@ -203222,7 +203313,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
       lxml_free(__pyx_v_params);
 
-      /* "src/lxml/xslt.pxi":558
+      /* "src/lxml/xslt.pxi":559
  *             c_result = self._run_transform(
  *                 c_doc, params, context, transform_ctxt)
  *             if params is not NULL:             # <<<<<<<<<<<<<<
@@ -203231,7 +203322,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     }
 
-    /* "src/lxml/xslt.pxi":562
+    /* "src/lxml/xslt.pxi":563
  *                 python.lxml_free(params)
  * 
  *             if transform_ctxt.state != xslt.XSLT_STATE_OK:             # <<<<<<<<<<<<<<
@@ -203241,7 +203332,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     __pyx_t_3 = ((__pyx_v_transform_ctxt->state != XSLT_STATE_OK) != 0);
     if (__pyx_t_3) {
 
-      /* "src/lxml/xslt.pxi":563
+      /* "src/lxml/xslt.pxi":564
  * 
  *             if transform_ctxt.state != xslt.XSLT_STATE_OK:
  *                 if c_result is not NULL:             # <<<<<<<<<<<<<<
@@ -203251,7 +203342,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __pyx_t_3 = ((__pyx_v_c_result != NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "src/lxml/xslt.pxi":564
+        /* "src/lxml/xslt.pxi":565
  *             if transform_ctxt.state != xslt.XSLT_STATE_OK:
  *                 if c_result is not NULL:
  *                     tree.xmlFreeDoc(c_result)             # <<<<<<<<<<<<<<
@@ -203260,7 +203351,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
         xmlFreeDoc(__pyx_v_c_result);
 
-        /* "src/lxml/xslt.pxi":565
+        /* "src/lxml/xslt.pxi":566
  *                 if c_result is not NULL:
  *                     tree.xmlFreeDoc(c_result)
  *                     c_result = NULL             # <<<<<<<<<<<<<<
@@ -203269,7 +203360,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
         __pyx_v_c_result = NULL;
 
-        /* "src/lxml/xslt.pxi":563
+        /* "src/lxml/xslt.pxi":564
  * 
  *             if transform_ctxt.state != xslt.XSLT_STATE_OK:
  *                 if c_result is not NULL:             # <<<<<<<<<<<<<<
@@ -203278,7 +203369,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
       }
 
-      /* "src/lxml/xslt.pxi":562
+      /* "src/lxml/xslt.pxi":563
  *                 python.lxml_free(params)
  * 
  *             if transform_ctxt.state != xslt.XSLT_STATE_OK:             # <<<<<<<<<<<<<<
@@ -203287,7 +203378,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     }
 
-    /* "src/lxml/xslt.pxi":567
+    /* "src/lxml/xslt.pxi":568
  *                     c_result = NULL
  * 
  *             if transform_ctxt.profile:             # <<<<<<<<<<<<<<
@@ -203297,7 +203388,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     __pyx_t_3 = (__pyx_v_transform_ctxt->profile != 0);
     if (__pyx_t_3) {
 
-      /* "src/lxml/xslt.pxi":568
+      /* "src/lxml/xslt.pxi":569
  * 
  *             if transform_ctxt.profile:
  *                 c_profile_doc = xslt.xsltGetProfileInformation(transform_ctxt)             # <<<<<<<<<<<<<<
@@ -203306,7 +203397,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
       __pyx_v_c_profile_doc = xsltGetProfileInformation(__pyx_v_transform_ctxt);
 
-      /* "src/lxml/xslt.pxi":569
+      /* "src/lxml/xslt.pxi":570
  *             if transform_ctxt.profile:
  *                 c_profile_doc = xslt.xsltGetProfileInformation(transform_ctxt)
  *                 if c_profile_doc is not NULL:             # <<<<<<<<<<<<<<
@@ -203316,7 +203407,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __pyx_t_3 = ((__pyx_v_c_profile_doc != NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "src/lxml/xslt.pxi":571
+        /* "src/lxml/xslt.pxi":572
  *                 if c_profile_doc is not NULL:
  *                     profile_doc = _documentFactory(
  *                         c_profile_doc, input_doc._parser)             # <<<<<<<<<<<<<<
@@ -203326,20 +203417,20 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
         __pyx_t_1 = ((PyObject *)__pyx_v_input_doc->_parser);
         __Pyx_INCREF(__pyx_t_1);
 
-        /* "src/lxml/xslt.pxi":570
+        /* "src/lxml/xslt.pxi":571
  *                 c_profile_doc = xslt.xsltGetProfileInformation(transform_ctxt)
  *                 if c_profile_doc is not NULL:
  *                     profile_doc = _documentFactory(             # <<<<<<<<<<<<<<
  *                         c_profile_doc, input_doc._parser)
  *         finally:
  */
-        __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_profile_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_1))); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 570, __pyx_L9_error)
+        __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_profile_doc, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_1))); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 571, __pyx_L9_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF_SET(__pyx_v_profile_doc, ((struct LxmlDocument *)__pyx_t_5));
         __pyx_t_5 = 0;
 
-        /* "src/lxml/xslt.pxi":569
+        /* "src/lxml/xslt.pxi":570
  *             if transform_ctxt.profile:
  *                 c_profile_doc = xslt.xsltGetProfileInformation(transform_ctxt)
  *                 if c_profile_doc is not NULL:             # <<<<<<<<<<<<<<
@@ -203348,7 +203439,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
       }
 
-      /* "src/lxml/xslt.pxi":567
+      /* "src/lxml/xslt.pxi":568
  *                     c_result = NULL
  * 
  *             if transform_ctxt.profile:             # <<<<<<<<<<<<<<
@@ -203358,7 +203449,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     }
   }
 
-  /* "src/lxml/xslt.pxi":573
+  /* "src/lxml/xslt.pxi":574
  *                         c_profile_doc, input_doc._parser)
  *         finally:
  *             if context is not None:             # <<<<<<<<<<<<<<
@@ -203371,18 +203462,18 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __pyx_t_6 = (__pyx_t_3 != 0);
       if (__pyx_t_6) {
 
-        /* "src/lxml/xslt.pxi":574
+        /* "src/lxml/xslt.pxi":575
  *         finally:
  *             if context is not None:
  *                 context.free_context()             # <<<<<<<<<<<<<<
  *             _destroyFakeDoc(input_doc._c_doc, c_doc)
  * 
  */
-        __pyx_t_5 = __pyx_f_4lxml_5etree_12_XSLTContext_free_context(__pyx_v_context); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 574, __pyx_L1_error)
+        __pyx_t_5 = __pyx_f_4lxml_5etree_12_XSLTContext_free_context(__pyx_v_context); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 575, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-        /* "src/lxml/xslt.pxi":573
+        /* "src/lxml/xslt.pxi":574
  *                         c_profile_doc, input_doc._parser)
  *         finally:
  *             if context is not None:             # <<<<<<<<<<<<<<
@@ -203391,7 +203482,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
       }
 
-      /* "src/lxml/xslt.pxi":575
+      /* "src/lxml/xslt.pxi":576
  *             if context is not None:
  *                 context.free_context()
  *             _destroyFakeDoc(input_doc._c_doc, c_doc)             # <<<<<<<<<<<<<<
@@ -203419,7 +203510,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __pyx_t_7 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
       {
 
-        /* "src/lxml/xslt.pxi":573
+        /* "src/lxml/xslt.pxi":574
  *                         c_profile_doc, input_doc._parser)
  *         finally:
  *             if context is not None:             # <<<<<<<<<<<<<<
@@ -203430,18 +203521,18 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
         __pyx_t_3 = (__pyx_t_6 != 0);
         if (__pyx_t_3) {
 
-          /* "src/lxml/xslt.pxi":574
+          /* "src/lxml/xslt.pxi":575
  *         finally:
  *             if context is not None:
  *                 context.free_context()             # <<<<<<<<<<<<<<
  *             _destroyFakeDoc(input_doc._c_doc, c_doc)
  * 
  */
-          __pyx_t_5 = __pyx_f_4lxml_5etree_12_XSLTContext_free_context(__pyx_v_context); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 574, __pyx_L18_error)
+          __pyx_t_5 = __pyx_f_4lxml_5etree_12_XSLTContext_free_context(__pyx_v_context); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 575, __pyx_L18_error)
           __Pyx_GOTREF(__pyx_t_5);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-          /* "src/lxml/xslt.pxi":573
+          /* "src/lxml/xslt.pxi":574
  *                         c_profile_doc, input_doc._parser)
  *         finally:
  *             if context is not None:             # <<<<<<<<<<<<<<
@@ -203450,7 +203541,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
         }
 
-        /* "src/lxml/xslt.pxi":575
+        /* "src/lxml/xslt.pxi":576
  *             if context is not None:
  *                 context.free_context()
  *             _destroyFakeDoc(input_doc._c_doc, c_doc)             # <<<<<<<<<<<<<<
@@ -203488,7 +203579,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     __pyx_L10:;
   }
 
-  /* "src/lxml/xslt.pxi":577
+  /* "src/lxml/xslt.pxi":578
  *             _destroyFakeDoc(input_doc._c_doc, c_doc)
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -203497,7 +203588,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   /*try:*/ {
 
-    /* "src/lxml/xslt.pxi":578
+    /* "src/lxml/xslt.pxi":579
  * 
  *         try:
  *             if resolver_context is not None and resolver_context._has_raised():             # <<<<<<<<<<<<<<
@@ -203511,13 +203602,13 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __pyx_t_3 = __pyx_t_16;
       goto __pyx_L24_bool_binop_done;
     }
-    __pyx_t_16 = ((struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *)__pyx_v_resolver_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._has_raised(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_resolver_context)); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(4, 578, __pyx_L21_error)
+    __pyx_t_16 = ((struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *)__pyx_v_resolver_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._has_raised(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_resolver_context)); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(4, 579, __pyx_L21_error)
     __pyx_t_6 = (__pyx_t_16 != 0);
     __pyx_t_3 = __pyx_t_6;
     __pyx_L24_bool_binop_done:;
     if (__pyx_t_3) {
 
-      /* "src/lxml/xslt.pxi":579
+      /* "src/lxml/xslt.pxi":580
  *         try:
  *             if resolver_context is not None and resolver_context._has_raised():
  *                 if c_result is not NULL:             # <<<<<<<<<<<<<<
@@ -203527,7 +203618,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __pyx_t_3 = ((__pyx_v_c_result != NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "src/lxml/xslt.pxi":580
+        /* "src/lxml/xslt.pxi":581
  *             if resolver_context is not None and resolver_context._has_raised():
  *                 if c_result is not NULL:
  *                     tree.xmlFreeDoc(c_result)             # <<<<<<<<<<<<<<
@@ -203536,7 +203627,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
         xmlFreeDoc(__pyx_v_c_result);
 
-        /* "src/lxml/xslt.pxi":581
+        /* "src/lxml/xslt.pxi":582
  *                 if c_result is not NULL:
  *                     tree.xmlFreeDoc(c_result)
  *                     c_result = NULL             # <<<<<<<<<<<<<<
@@ -203545,7 +203636,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
         __pyx_v_c_result = NULL;
 
-        /* "src/lxml/xslt.pxi":579
+        /* "src/lxml/xslt.pxi":580
  *         try:
  *             if resolver_context is not None and resolver_context._has_raised():
  *                 if c_result is not NULL:             # <<<<<<<<<<<<<<
@@ -203554,16 +203645,16 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
       }
 
-      /* "src/lxml/xslt.pxi":582
+      /* "src/lxml/xslt.pxi":583
  *                     tree.xmlFreeDoc(c_result)
  *                     c_result = NULL
  *                 resolver_context._raise_if_stored()             # <<<<<<<<<<<<<<
  * 
  *             if context._exc._has_raised():
  */
-      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *)__pyx_v_resolver_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._raise_if_stored(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_resolver_context)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(4, 582, __pyx_L21_error)
+      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *)__pyx_v_resolver_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._raise_if_stored(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_resolver_context)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(4, 583, __pyx_L21_error)
 
-      /* "src/lxml/xslt.pxi":578
+      /* "src/lxml/xslt.pxi":579
  * 
  *         try:
  *             if resolver_context is not None and resolver_context._has_raised():             # <<<<<<<<<<<<<<
@@ -203572,18 +203663,18 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     }
 
-    /* "src/lxml/xslt.pxi":584
+    /* "src/lxml/xslt.pxi":585
  *                 resolver_context._raise_if_stored()
  * 
  *             if context._exc._has_raised():             # <<<<<<<<<<<<<<
  *                 if c_result is not NULL:
  *                     tree.xmlFreeDoc(c_result)
  */
-    __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_context->__pyx_base._exc->__pyx_vtab)->_has_raised(__pyx_v_context->__pyx_base._exc); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(4, 584, __pyx_L21_error)
+    __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_context->__pyx_base._exc->__pyx_vtab)->_has_raised(__pyx_v_context->__pyx_base._exc); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(4, 585, __pyx_L21_error)
     __pyx_t_6 = (__pyx_t_3 != 0);
     if (__pyx_t_6) {
 
-      /* "src/lxml/xslt.pxi":585
+      /* "src/lxml/xslt.pxi":586
  * 
  *             if context._exc._has_raised():
  *                 if c_result is not NULL:             # <<<<<<<<<<<<<<
@@ -203593,7 +203684,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __pyx_t_6 = ((__pyx_v_c_result != NULL) != 0);
       if (__pyx_t_6) {
 
-        /* "src/lxml/xslt.pxi":586
+        /* "src/lxml/xslt.pxi":587
  *             if context._exc._has_raised():
  *                 if c_result is not NULL:
  *                     tree.xmlFreeDoc(c_result)             # <<<<<<<<<<<<<<
@@ -203602,7 +203693,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
         xmlFreeDoc(__pyx_v_c_result);
 
-        /* "src/lxml/xslt.pxi":587
+        /* "src/lxml/xslt.pxi":588
  *                 if c_result is not NULL:
  *                     tree.xmlFreeDoc(c_result)
  *                     c_result = NULL             # <<<<<<<<<<<<<<
@@ -203611,7 +203702,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
         __pyx_v_c_result = NULL;
 
-        /* "src/lxml/xslt.pxi":585
+        /* "src/lxml/xslt.pxi":586
  * 
  *             if context._exc._has_raised():
  *                 if c_result is not NULL:             # <<<<<<<<<<<<<<
@@ -203620,16 +203711,16 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
       }
 
-      /* "src/lxml/xslt.pxi":588
+      /* "src/lxml/xslt.pxi":589
  *                     tree.xmlFreeDoc(c_result)
  *                     c_result = NULL
  *                 context._exc._raise_if_stored()             # <<<<<<<<<<<<<<
  * 
  *             if c_result is NULL:
  */
-      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_context->__pyx_base._exc->__pyx_vtab)->_raise_if_stored(__pyx_v_context->__pyx_base._exc); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(4, 588, __pyx_L21_error)
+      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_context->__pyx_base._exc->__pyx_vtab)->_raise_if_stored(__pyx_v_context->__pyx_base._exc); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(4, 589, __pyx_L21_error)
 
-      /* "src/lxml/xslt.pxi":584
+      /* "src/lxml/xslt.pxi":585
  *                 resolver_context._raise_if_stored()
  * 
  *             if context._exc._has_raised():             # <<<<<<<<<<<<<<
@@ -203638,7 +203729,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
     }
 
-    /* "src/lxml/xslt.pxi":590
+    /* "src/lxml/xslt.pxi":591
  *                 context._exc._raise_if_stored()
  * 
  *             if c_result is NULL:             # <<<<<<<<<<<<<<
@@ -203648,7 +203739,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     __pyx_t_6 = ((__pyx_v_c_result == NULL) != 0);
     if (__pyx_t_6) {
 
-      /* "src/lxml/xslt.pxi":592
+      /* "src/lxml/xslt.pxi":593
  *             if c_result is NULL:
  *                 # last error seems to be the most accurate here
  *                 error = self._error_log.last_error             # <<<<<<<<<<<<<<
@@ -203660,7 +203751,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __pyx_v_error = __pyx_t_5;
       __pyx_t_5 = 0;
 
-      /* "src/lxml/xslt.pxi":593
+      /* "src/lxml/xslt.pxi":594
  *                 # last error seems to be the most accurate here
  *                 error = self._error_log.last_error
  *                 if error is not None and error.message:             # <<<<<<<<<<<<<<
@@ -203674,43 +203765,43 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
         __pyx_t_6 = __pyx_t_16;
         goto __pyx_L31_bool_binop_done;
       }
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_message); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 593, __pyx_L21_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_message); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 594, __pyx_L21_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(4, 593, __pyx_L21_error)
+      __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(4, 594, __pyx_L21_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_6 = __pyx_t_16;
       __pyx_L31_bool_binop_done:;
       if (__pyx_t_6) {
 
-        /* "src/lxml/xslt.pxi":594
+        /* "src/lxml/xslt.pxi":595
  *                 error = self._error_log.last_error
  *                 if error is not None and error.message:
  *                     if error.line > 0:             # <<<<<<<<<<<<<<
  *                         message = f"{error.message}, line {error.line}"
  *                     else:
  */
-        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_line_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 594, __pyx_L21_error)
+        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_line_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 595, __pyx_L21_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 594, __pyx_L21_error)
+        __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 595, __pyx_L21_error)
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(4, 594, __pyx_L21_error)
+        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(4, 595, __pyx_L21_error)
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         if (__pyx_t_6) {
 
-          /* "src/lxml/xslt.pxi":595
+          /* "src/lxml/xslt.pxi":596
  *                 if error is not None and error.message:
  *                     if error.line > 0:
  *                         message = f"{error.message}, line {error.line}"             # <<<<<<<<<<<<<<
  *                     else:
  *                         message = error.message
  */
-          __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 595, __pyx_L21_error)
+          __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 596, __pyx_L21_error)
           __Pyx_GOTREF(__pyx_t_1);
           __pyx_t_17 = 0;
           __pyx_t_18 = 127;
-          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_message); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 595, __pyx_L21_error)
+          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_message); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 596, __pyx_L21_error)
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_19 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(4, 595, __pyx_L21_error)
+          __pyx_t_19 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(4, 596, __pyx_L21_error)
           __Pyx_GOTREF(__pyx_t_19);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __pyx_t_18 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19) > __pyx_t_18) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19) : __pyx_t_18;
@@ -203722,9 +203813,9 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
           __pyx_t_17 += 7;
           __Pyx_GIVEREF(__pyx_kp_u_line);
           PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u_line);
-          __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_line_2); if (unlikely(!__pyx_t_19)) __PYX_ERR(4, 595, __pyx_L21_error)
+          __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_line_2); if (unlikely(!__pyx_t_19)) __PYX_ERR(4, 596, __pyx_L21_error)
           __Pyx_GOTREF(__pyx_t_19);
-          __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_19, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 595, __pyx_L21_error)
+          __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_19, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 596, __pyx_L21_error)
           __Pyx_GOTREF(__pyx_t_5);
           __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
           __pyx_t_18 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_18) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_18;
@@ -203732,13 +203823,13 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
           __Pyx_GIVEREF(__pyx_t_5);
           PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_5);
           __pyx_t_5 = 0;
-          __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_17, __pyx_t_18); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 595, __pyx_L21_error)
+          __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_17, __pyx_t_18); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 596, __pyx_L21_error)
           __Pyx_GOTREF(__pyx_t_5);
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __pyx_v_message = __pyx_t_5;
           __pyx_t_5 = 0;
 
-          /* "src/lxml/xslt.pxi":594
+          /* "src/lxml/xslt.pxi":595
  *                 error = self._error_log.last_error
  *                 if error is not None and error.message:
  *                     if error.line > 0:             # <<<<<<<<<<<<<<
@@ -203748,7 +203839,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
           goto __pyx_L33;
         }
 
-        /* "src/lxml/xslt.pxi":597
+        /* "src/lxml/xslt.pxi":598
  *                         message = f"{error.message}, line {error.line}"
  *                     else:
  *                         message = error.message             # <<<<<<<<<<<<<<
@@ -203756,14 +203847,14 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  *                     message = f"Error applying stylesheet, line {error.line}"
  */
         /*else*/ {
-          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_message); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 597, __pyx_L21_error)
+          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_message); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 598, __pyx_L21_error)
           __Pyx_GOTREF(__pyx_t_5);
           __pyx_v_message = __pyx_t_5;
           __pyx_t_5 = 0;
         }
         __pyx_L33:;
 
-        /* "src/lxml/xslt.pxi":593
+        /* "src/lxml/xslt.pxi":594
  *                 # last error seems to be the most accurate here
  *                 error = self._error_log.last_error
  *                 if error is not None and error.message:             # <<<<<<<<<<<<<<
@@ -203773,7 +203864,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
         goto __pyx_L30;
       }
 
-      /* "src/lxml/xslt.pxi":598
+      /* "src/lxml/xslt.pxi":599
  *                     else:
  *                         message = error.message
  *                 elif error is not None and error.line > 0:             # <<<<<<<<<<<<<<
@@ -203787,35 +203878,35 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
         __pyx_t_6 = __pyx_t_3;
         goto __pyx_L34_bool_binop_done;
       }
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_line_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 598, __pyx_L21_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_line_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 599, __pyx_L21_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 598, __pyx_L21_error)
+      __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 599, __pyx_L21_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(4, 598, __pyx_L21_error)
+      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(4, 599, __pyx_L21_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_6 = __pyx_t_3;
       __pyx_L34_bool_binop_done:;
       if (__pyx_t_6) {
 
-        /* "src/lxml/xslt.pxi":599
+        /* "src/lxml/xslt.pxi":600
  *                         message = error.message
  *                 elif error is not None and error.line > 0:
  *                     message = f"Error applying stylesheet, line {error.line}"             # <<<<<<<<<<<<<<
  *                 else:
  *                     message = u"Error applying stylesheet"
  */
-        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_line_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 599, __pyx_L21_error)
+        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_line_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 600, __pyx_L21_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(4, 599, __pyx_L21_error)
+        __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 600, __pyx_L21_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-        __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Error_applying_stylesheet_line, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 599, __pyx_L21_error)
+        __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Error_applying_stylesheet_line, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 600, __pyx_L21_error)
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_v_message = __pyx_t_1;
         __pyx_t_1 = 0;
 
-        /* "src/lxml/xslt.pxi":598
+        /* "src/lxml/xslt.pxi":599
  *                     else:
  *                         message = error.message
  *                 elif error is not None and error.line > 0:             # <<<<<<<<<<<<<<
@@ -203825,7 +203916,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
         goto __pyx_L30;
       }
 
-      /* "src/lxml/xslt.pxi":601
+      /* "src/lxml/xslt.pxi":602
  *                     message = f"Error applying stylesheet, line {error.line}"
  *                 else:
  *                     message = u"Error applying stylesheet"             # <<<<<<<<<<<<<<
@@ -203838,14 +203929,14 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       }
       __pyx_L30:;
 
-      /* "src/lxml/xslt.pxi":602
+      /* "src/lxml/xslt.pxi":603
  *                 else:
  *                     message = u"Error applying stylesheet"
  *                 raise XSLTApplyError(message, self._error_log)             # <<<<<<<<<<<<<<
  *         finally:
  *             if resolver_context is not None:
  */
-      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 602, __pyx_L21_error)
+      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 603, __pyx_L21_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_v_message);
       __Pyx_GIVEREF(__pyx_v_message);
@@ -203853,14 +203944,14 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __Pyx_INCREF(((PyObject *)__pyx_v_self->_error_log));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_error_log));
       PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self->_error_log));
-      __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XSLTApplyError), __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 602, __pyx_L21_error)
+      __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XSLTApplyError), __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 603, __pyx_L21_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __PYX_ERR(4, 602, __pyx_L21_error)
+      __PYX_ERR(4, 603, __pyx_L21_error)
 
-      /* "src/lxml/xslt.pxi":590
+      /* "src/lxml/xslt.pxi":591
  *                 context._exc._raise_if_stored()
  * 
  *             if c_result is NULL:             # <<<<<<<<<<<<<<
@@ -203870,7 +203961,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     }
   }
 
-  /* "src/lxml/xslt.pxi":604
+  /* "src/lxml/xslt.pxi":605
  *                 raise XSLTApplyError(message, self._error_log)
  *         finally:
  *             if resolver_context is not None:             # <<<<<<<<<<<<<<
@@ -203883,16 +203974,16 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __pyx_t_3 = (__pyx_t_6 != 0);
       if (__pyx_t_3) {
 
-        /* "src/lxml/xslt.pxi":605
+        /* "src/lxml/xslt.pxi":606
  *         finally:
  *             if resolver_context is not None:
  *                 resolver_context.clear()             # <<<<<<<<<<<<<<
  * 
  *         result_doc = _documentFactory(c_result, input_doc._parser)
  */
-        __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *)__pyx_v_resolver_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.clear(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_resolver_context)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(4, 605, __pyx_L1_error)
+        __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *)__pyx_v_resolver_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.clear(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_resolver_context)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(4, 606, __pyx_L1_error)
 
-        /* "src/lxml/xslt.pxi":604
+        /* "src/lxml/xslt.pxi":605
  *                 raise XSLTApplyError(message, self._error_log)
  *         finally:
  *             if resolver_context is not None:             # <<<<<<<<<<<<<<
@@ -203924,16 +204015,16 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
         __pyx_t_6 = (__pyx_t_3 != 0);
         if (__pyx_t_6) {
 
-          /* "src/lxml/xslt.pxi":605
+          /* "src/lxml/xslt.pxi":606
  *         finally:
  *             if resolver_context is not None:
  *                 resolver_context.clear()             # <<<<<<<<<<<<<<
  * 
  *         result_doc = _documentFactory(c_result, input_doc._parser)
  */
-          __pyx_t_21 = ((struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *)__pyx_v_resolver_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.clear(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_resolver_context)); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(4, 605, __pyx_L38_error)
+          __pyx_t_21 = ((struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *)__pyx_v_resolver_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.clear(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_resolver_context)); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(4, 606, __pyx_L38_error)
 
-          /* "src/lxml/xslt.pxi":604
+          /* "src/lxml/xslt.pxi":605
  *                 raise XSLTApplyError(message, self._error_log)
  *         finally:
  *             if resolver_context is not None:             # <<<<<<<<<<<<<<
@@ -203971,7 +204062,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     __pyx_L22:;
   }
 
-  /* "src/lxml/xslt.pxi":607
+  /* "src/lxml/xslt.pxi":608
  *                 resolver_context.clear()
  * 
  *         result_doc = _documentFactory(c_result, input_doc._parser)             # <<<<<<<<<<<<<<
@@ -203980,13 +204071,13 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   __pyx_t_5 = ((PyObject *)__pyx_v_input_doc->_parser);
   __Pyx_INCREF(__pyx_t_5);
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_result, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_5))); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 607, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_result, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_5))); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 608, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_result_doc = ((struct LxmlDocument *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":609
+  /* "src/lxml/xslt.pxi":610
  *         result_doc = _documentFactory(c_result, input_doc._parser)
  * 
  *         c_dict = c_result.dict             # <<<<<<<<<<<<<<
@@ -203996,7 +204087,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
   __pyx_t_4 = __pyx_v_c_result->dict;
   __pyx_v_c_dict = __pyx_t_4;
 
-  /* "src/lxml/xslt.pxi":610
+  /* "src/lxml/xslt.pxi":611
  * 
  *         c_dict = c_result.dict
  *         xmlparser.xmlDictReference(c_dict)             # <<<<<<<<<<<<<<
@@ -204005,7 +204096,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   (void)(xmlDictReference(__pyx_v_c_dict));
 
-  /* "src/lxml/xslt.pxi":611
+  /* "src/lxml/xslt.pxi":612
  *         c_dict = c_result.dict
  *         xmlparser.xmlDictReference(c_dict)
  *         __GLOBAL_PARSER_CONTEXT.initThreadDictRef(&c_result.dict)             # <<<<<<<<<<<<<<
@@ -204014,7 +204105,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initThreadDictRef(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, (&__pyx_v_c_result->dict));
 
-  /* "src/lxml/xslt.pxi":612
+  /* "src/lxml/xslt.pxi":613
  *         xmlparser.xmlDictReference(c_dict)
  *         __GLOBAL_PARSER_CONTEXT.initThreadDictRef(&c_result.dict)
  *         if c_dict is not c_result.dict or \             # <<<<<<<<<<<<<<
@@ -204028,7 +204119,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     goto __pyx_L41_bool_binop_done;
   }
 
-  /* "src/lxml/xslt.pxi":613
+  /* "src/lxml/xslt.pxi":614
  *         __GLOBAL_PARSER_CONTEXT.initThreadDictRef(&c_result.dict)
  *         if c_dict is not c_result.dict or \
  *                 self._c_style.doc.dict is not c_result.dict or \             # <<<<<<<<<<<<<<
@@ -204042,7 +204133,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
     goto __pyx_L41_bool_binop_done;
   }
 
-  /* "src/lxml/xslt.pxi":614
+  /* "src/lxml/xslt.pxi":615
  *         if c_dict is not c_result.dict or \
  *                 self._c_style.doc.dict is not c_result.dict or \
  *                 input_doc._c_doc.dict is not c_result.dict:             # <<<<<<<<<<<<<<
@@ -204053,7 +204144,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
   __pyx_t_6 = __pyx_t_3;
   __pyx_L41_bool_binop_done:;
 
-  /* "src/lxml/xslt.pxi":612
+  /* "src/lxml/xslt.pxi":613
  *         xmlparser.xmlDictReference(c_dict)
  *         __GLOBAL_PARSER_CONTEXT.initThreadDictRef(&c_result.dict)
  *         if c_dict is not c_result.dict or \             # <<<<<<<<<<<<<<
@@ -204062,7 +204153,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   if (__pyx_t_6) {
 
-    /* "src/lxml/xslt.pxi":615
+    /* "src/lxml/xslt.pxi":616
  *                 self._c_style.doc.dict is not c_result.dict or \
  *                 input_doc._c_doc.dict is not c_result.dict:
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -204077,7 +204168,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
         #endif
         /*try:*/ {
 
-          /* "src/lxml/xslt.pxi":616
+          /* "src/lxml/xslt.pxi":617
  *                 input_doc._c_doc.dict is not c_result.dict:
  *             with nogil:
  *                 if c_dict is not c_result.dict:             # <<<<<<<<<<<<<<
@@ -204087,7 +204178,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
           __pyx_t_6 = ((__pyx_v_c_dict != __pyx_v_c_result->dict) != 0);
           if (__pyx_t_6) {
 
-            /* "src/lxml/xslt.pxi":617
+            /* "src/lxml/xslt.pxi":618
  *             with nogil:
  *                 if c_dict is not c_result.dict:
  *                     fixThreadDictNames(<xmlNode*>c_result,             # <<<<<<<<<<<<<<
@@ -204096,7 +204187,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
             __pyx_f_4lxml_5etree_fixThreadDictNames(((xmlNode *)__pyx_v_c_result), __pyx_v_c_dict, __pyx_v_c_result->dict);
 
-            /* "src/lxml/xslt.pxi":616
+            /* "src/lxml/xslt.pxi":617
  *                 input_doc._c_doc.dict is not c_result.dict:
  *             with nogil:
  *                 if c_dict is not c_result.dict:             # <<<<<<<<<<<<<<
@@ -204105,7 +204196,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
           }
 
-          /* "src/lxml/xslt.pxi":619
+          /* "src/lxml/xslt.pxi":620
  *                     fixThreadDictNames(<xmlNode*>c_result,
  *                                        c_dict, c_result.dict)
  *                 if self._c_style.doc.dict is not c_result.dict:             # <<<<<<<<<<<<<<
@@ -204115,7 +204206,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
           __pyx_t_6 = ((__pyx_v_self->_c_style->doc->dict != __pyx_v_c_result->dict) != 0);
           if (__pyx_t_6) {
 
-            /* "src/lxml/xslt.pxi":620
+            /* "src/lxml/xslt.pxi":621
  *                                        c_dict, c_result.dict)
  *                 if self._c_style.doc.dict is not c_result.dict:
  *                     fixThreadDictNames(<xmlNode*>c_result,             # <<<<<<<<<<<<<<
@@ -204124,7 +204215,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
             __pyx_f_4lxml_5etree_fixThreadDictNames(((xmlNode *)__pyx_v_c_result), __pyx_v_self->_c_style->doc->dict, __pyx_v_c_result->dict);
 
-            /* "src/lxml/xslt.pxi":619
+            /* "src/lxml/xslt.pxi":620
  *                     fixThreadDictNames(<xmlNode*>c_result,
  *                                        c_dict, c_result.dict)
  *                 if self._c_style.doc.dict is not c_result.dict:             # <<<<<<<<<<<<<<
@@ -204133,7 +204224,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
           }
 
-          /* "src/lxml/xslt.pxi":622
+          /* "src/lxml/xslt.pxi":623
  *                     fixThreadDictNames(<xmlNode*>c_result,
  *                                        self._c_style.doc.dict, c_result.dict)
  *                 if input_doc._c_doc.dict is not c_result.dict:             # <<<<<<<<<<<<<<
@@ -204143,7 +204234,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
           __pyx_t_6 = ((__pyx_v_input_doc->_c_doc->dict != __pyx_v_c_result->dict) != 0);
           if (__pyx_t_6) {
 
-            /* "src/lxml/xslt.pxi":623
+            /* "src/lxml/xslt.pxi":624
  *                                        self._c_style.doc.dict, c_result.dict)
  *                 if input_doc._c_doc.dict is not c_result.dict:
  *                     fixThreadDictNames(<xmlNode*>c_result,             # <<<<<<<<<<<<<<
@@ -204152,7 +204243,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
             __pyx_f_4lxml_5etree_fixThreadDictNames(((xmlNode *)__pyx_v_c_result), __pyx_v_input_doc->_c_doc->dict, __pyx_v_c_result->dict);
 
-            /* "src/lxml/xslt.pxi":622
+            /* "src/lxml/xslt.pxi":623
  *                     fixThreadDictNames(<xmlNode*>c_result,
  *                                        self._c_style.doc.dict, c_result.dict)
  *                 if input_doc._c_doc.dict is not c_result.dict:             # <<<<<<<<<<<<<<
@@ -204162,7 +204253,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
           }
         }
 
-        /* "src/lxml/xslt.pxi":615
+        /* "src/lxml/xslt.pxi":616
  *                 self._c_style.doc.dict is not c_result.dict or \
  *                 input_doc._c_doc.dict is not c_result.dict:
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -204181,7 +204272,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
         }
     }
 
-    /* "src/lxml/xslt.pxi":612
+    /* "src/lxml/xslt.pxi":613
  *         xmlparser.xmlDictReference(c_dict)
  *         __GLOBAL_PARSER_CONTEXT.initThreadDictRef(&c_result.dict)
  *         if c_dict is not c_result.dict or \             # <<<<<<<<<<<<<<
@@ -204190,7 +204281,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   }
 
-  /* "src/lxml/xslt.pxi":625
+  /* "src/lxml/xslt.pxi":626
  *                     fixThreadDictNames(<xmlNode*>c_result,
  *                                        input_doc._c_doc.dict, c_result.dict)
  *         xmlparser.xmlDictFree(c_dict)             # <<<<<<<<<<<<<<
@@ -204199,7 +204290,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  */
   xmlDictFree(__pyx_v_c_dict);
 
-  /* "src/lxml/xslt.pxi":627
+  /* "src/lxml/xslt.pxi":628
  *         xmlparser.xmlDictFree(c_dict)
  * 
  *         return _xsltResultTreeFactory(result_doc, self, profile_doc)             # <<<<<<<<<<<<<<
@@ -204207,13 +204298,13 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
  *     cdef xmlDoc* _run_transform(self, xmlDoc* c_input_doc,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__xsltResultTreeFactory(__pyx_v_result_doc, __pyx_v_self, __pyx_v_profile_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 627, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__xsltResultTreeFactory(__pyx_v_result_doc, __pyx_v_self, __pyx_v_profile_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 628, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":492
+  /* "src/lxml/xslt.pxi":493
  *         return _copyXSLT(self)
  * 
  *     def __call__(self, _input, *, profile_run=False, **kw):             # <<<<<<<<<<<<<<
@@ -204242,7 +204333,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":629
+/* "src/lxml/xslt.pxi":630
  *         return _xsltResultTreeFactory(result_doc, self, profile_doc)
  * 
  *     cdef xmlDoc* _run_transform(self, xmlDoc* c_input_doc,             # <<<<<<<<<<<<<<
@@ -204267,7 +204358,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_run_transform", 0);
 
-  /* "src/lxml/xslt.pxi":633
+  /* "src/lxml/xslt.pxi":634
  *                                 xslt.xsltTransformContext* transform_ctxt):
  *         cdef xmlDoc* c_result
  *         xslt.xsltSetTransformErrorFunc(transform_ctxt, <void*>self._error_log,             # <<<<<<<<<<<<<<
@@ -204276,7 +204367,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
  */
   xsltSetTransformErrorFunc(__pyx_v_transform_ctxt, ((void *)__pyx_v_self->_error_log), ((xmlGenericErrorFunc)__pyx_f_4lxml_5etree__receiveXSLTError));
 
-  /* "src/lxml/xslt.pxi":635
+  /* "src/lxml/xslt.pxi":636
  *         xslt.xsltSetTransformErrorFunc(transform_ctxt, <void*>self._error_log,
  *                                        <xmlerror.xmlGenericErrorFunc>_receiveXSLTError)
  *         if self._access_control is not None:             # <<<<<<<<<<<<<<
@@ -204287,7 +204378,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":636
+    /* "src/lxml/xslt.pxi":637
  *                                        <xmlerror.xmlGenericErrorFunc>_receiveXSLTError)
  *         if self._access_control is not None:
  *             self._access_control._register_in_context(transform_ctxt)             # <<<<<<<<<<<<<<
@@ -204296,7 +204387,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
  */
     __pyx_f_4lxml_5etree_17XSLTAccessControl__register_in_context(__pyx_v_self->_access_control, __pyx_v_transform_ctxt);
 
-    /* "src/lxml/xslt.pxi":635
+    /* "src/lxml/xslt.pxi":636
  *         xslt.xsltSetTransformErrorFunc(transform_ctxt, <void*>self._error_log,
  *                                        <xmlerror.xmlGenericErrorFunc>_receiveXSLTError)
  *         if self._access_control is not None:             # <<<<<<<<<<<<<<
@@ -204305,7 +204396,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
  */
   }
 
-  /* "src/lxml/xslt.pxi":637
+  /* "src/lxml/xslt.pxi":638
  *         if self._access_control is not None:
  *             self._access_control._register_in_context(transform_ctxt)
  *         with self._error_log, nogil:             # <<<<<<<<<<<<<<
@@ -204313,9 +204404,9 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
  *             c_result = xslt.xsltApplyStylesheetUser(
  */
   /*with:*/ {
-    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_self->_error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 637, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(((PyObject *)__pyx_v_self->_error_log), __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 638, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_self->_error_log); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 637, __pyx_L4_error)
+    __pyx_t_4 = __pyx_f_4lxml_5etree_9_ErrorLog___enter__(__pyx_v_self->_error_log); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 638, __pyx_L4_error)
     /*try:*/ {
       {
         (void)__pyx_t_5; (void)__pyx_t_6; (void)__pyx_t_7; /* mark used */
@@ -204328,7 +204419,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
               #endif
               /*try:*/ {
 
-                /* "src/lxml/xslt.pxi":638
+                /* "src/lxml/xslt.pxi":639
  *             self._access_control._register_in_context(transform_ctxt)
  *         with self._error_log, nogil:
  *             orig_loader = _register_document_loader()             # <<<<<<<<<<<<<<
@@ -204337,7 +204428,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
  */
                 __pyx_v_orig_loader = __pyx_f_4lxml_5etree__register_document_loader();
 
-                /* "src/lxml/xslt.pxi":639
+                /* "src/lxml/xslt.pxi":640
  *         with self._error_log, nogil:
  *             orig_loader = _register_document_loader()
  *             c_result = xslt.xsltApplyStylesheetUser(             # <<<<<<<<<<<<<<
@@ -204346,7 +204437,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
  */
                 __pyx_v_c_result = xsltApplyStylesheetUser(__pyx_v_self->_c_style, __pyx_v_c_input_doc, __pyx_v_params, NULL, NULL, __pyx_v_transform_ctxt);
 
-                /* "src/lxml/xslt.pxi":641
+                /* "src/lxml/xslt.pxi":642
  *             c_result = xslt.xsltApplyStylesheetUser(
  *                 self._c_style, c_input_doc, params, NULL, NULL, transform_ctxt)
  *             _reset_document_loader(orig_loader)             # <<<<<<<<<<<<<<
@@ -204356,7 +204447,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
                 __pyx_f_4lxml_5etree__reset_document_loader(__pyx_v_orig_loader);
               }
 
-              /* "src/lxml/xslt.pxi":637
+              /* "src/lxml/xslt.pxi":638
  *         if self._access_control is not None:
  *             self._access_control._register_in_context(transform_ctxt)
  *         with self._error_log, nogil:             # <<<<<<<<<<<<<<
@@ -204382,7 +204473,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
         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(4, 637, __pyx_L1_error)
+          if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 638, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         }
@@ -204397,7 +204488,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
     __pyx_L17:;
   }
 
-  /* "src/lxml/xslt.pxi":642
+  /* "src/lxml/xslt.pxi":643
  *                 self._c_style, c_input_doc, params, NULL, NULL, transform_ctxt)
  *             _reset_document_loader(orig_loader)
  *         return c_result             # <<<<<<<<<<<<<<
@@ -204407,7 +204498,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
   __pyx_r = __pyx_v_c_result;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":629
+  /* "src/lxml/xslt.pxi":630
  *         return _xsltResultTreeFactory(result_doc, self, profile_doc)
  * 
  *     cdef xmlDoc* _run_transform(self, xmlDoc* c_input_doc,             # <<<<<<<<<<<<<<
@@ -204424,7 +204515,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_4XSLT__run_transform(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":645
+/* "src/lxml/xslt.pxi":646
  * 
  * 
  * cdef _convert_xslt_parameters(xslt.xsltTransformContext* transform_ctxt,             # <<<<<<<<<<<<<<
@@ -204462,7 +204553,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_convert_xslt_parameters", 0);
 
-  /* "src/lxml/xslt.pxi":649
+  /* "src/lxml/xslt.pxi":650
  *     cdef Py_ssize_t i, parameter_count
  *     cdef const_char** params
  *     cdef tree.xmlDict* c_dict = transform_ctxt.dict             # <<<<<<<<<<<<<<
@@ -204472,7 +204563,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
   __pyx_t_1 = __pyx_v_transform_ctxt->dict;
   __pyx_v_c_dict = __pyx_t_1;
 
-  /* "src/lxml/xslt.pxi":650
+  /* "src/lxml/xslt.pxi":651
  *     cdef const_char** params
  *     cdef tree.xmlDict* c_dict = transform_ctxt.dict
  *     params_ptr[0] = NULL             # <<<<<<<<<<<<<<
@@ -204481,7 +204572,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
   (__pyx_v_params_ptr[0]) = NULL;
 
-  /* "src/lxml/xslt.pxi":651
+  /* "src/lxml/xslt.pxi":652
  *     cdef tree.xmlDict* c_dict = transform_ctxt.dict
  *     params_ptr[0] = NULL
  *     parameter_count = len(parameters)             # <<<<<<<<<<<<<<
@@ -204490,12 +204581,12 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
   if (unlikely(__pyx_v_parameters == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(4, 651, __pyx_L1_error)
+    __PYX_ERR(4, 652, __pyx_L1_error)
   }
-  __pyx_t_2 = PyDict_Size(__pyx_v_parameters); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(4, 651, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Size(__pyx_v_parameters); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(4, 652, __pyx_L1_error)
   __pyx_v_parameter_count = __pyx_t_2;
 
-  /* "src/lxml/xslt.pxi":652
+  /* "src/lxml/xslt.pxi":653
  *     params_ptr[0] = NULL
  *     parameter_count = len(parameters)
  *     if parameter_count == 0:             # <<<<<<<<<<<<<<
@@ -204505,7 +204596,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
   __pyx_t_3 = ((__pyx_v_parameter_count == 0) != 0);
   if (__pyx_t_3) {
 
-    /* "src/lxml/xslt.pxi":653
+    /* "src/lxml/xslt.pxi":654
  *     parameter_count = len(parameters)
  *     if parameter_count == 0:
  *         return             # <<<<<<<<<<<<<<
@@ -204516,7 +204607,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/xslt.pxi":652
+    /* "src/lxml/xslt.pxi":653
  *     params_ptr[0] = NULL
  *     parameter_count = len(parameters)
  *     if parameter_count == 0:             # <<<<<<<<<<<<<<
@@ -204525,7 +204616,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
   }
 
-  /* "src/lxml/xslt.pxi":657
+  /* "src/lxml/xslt.pxi":658
  *     # * 2 as we want an entry for both key and value,
  *     # and + 1 as array is NULL terminated
  *     params = <const_char**>python.lxml_malloc(parameter_count * 2 + 1, sizeof(const_char*))             # <<<<<<<<<<<<<<
@@ -204534,7 +204625,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
   __pyx_v_params = ((const char **)lxml_malloc(((__pyx_v_parameter_count * 2) + 1), (sizeof(const char *))));
 
-  /* "src/lxml/xslt.pxi":658
+  /* "src/lxml/xslt.pxi":659
  *     # and + 1 as array is NULL terminated
  *     params = <const_char**>python.lxml_malloc(parameter_count * 2 + 1, sizeof(const_char*))
  *     if not params:             # <<<<<<<<<<<<<<
@@ -204544,16 +204635,16 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
   __pyx_t_3 = ((!(__pyx_v_params != 0)) != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "src/lxml/xslt.pxi":659
+    /* "src/lxml/xslt.pxi":660
  *     params = <const_char**>python.lxml_malloc(parameter_count * 2 + 1, sizeof(const_char*))
  *     if not params:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     try:
  *         i = 0
  */
-    PyErr_NoMemory(); __PYX_ERR(4, 659, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(4, 660, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":658
+    /* "src/lxml/xslt.pxi":659
  *     # and + 1 as array is NULL terminated
  *     params = <const_char**>python.lxml_malloc(parameter_count * 2 + 1, sizeof(const_char*))
  *     if not params:             # <<<<<<<<<<<<<<
@@ -204562,7 +204653,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
   }
 
-  /* "src/lxml/xslt.pxi":660
+  /* "src/lxml/xslt.pxi":661
  *     if not params:
  *         raise MemoryError()
  *     try:             # <<<<<<<<<<<<<<
@@ -204578,7 +204669,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "src/lxml/xslt.pxi":661
+      /* "src/lxml/xslt.pxi":662
  *         raise MemoryError()
  *     try:
  *         i = 0             # <<<<<<<<<<<<<<
@@ -204587,7 +204678,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
       __pyx_v_i = 0;
 
-      /* "src/lxml/xslt.pxi":662
+      /* "src/lxml/xslt.pxi":663
  *     try:
  *         i = 0
  *         for key, value in parameters.iteritems():             # <<<<<<<<<<<<<<
@@ -204597,9 +204688,9 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
       __pyx_t_2 = 0;
       if (unlikely(__pyx_v_parameters == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "iteritems");
-        __PYX_ERR(4, 662, __pyx_L5_error)
+        __PYX_ERR(4, 663, __pyx_L5_error)
       }
-      __pyx_t_10 = __Pyx_dict_iterator(__pyx_v_parameters, 1, __pyx_n_s_iteritems, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(4, 662, __pyx_L5_error)
+      __pyx_t_10 = __Pyx_dict_iterator(__pyx_v_parameters, 1, __pyx_n_s_iteritems, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(4, 663, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_XDECREF(__pyx_t_7);
       __pyx_t_7 = __pyx_t_10;
@@ -204607,7 +204698,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
       while (1) {
         __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_7, __pyx_t_8, &__pyx_t_2, &__pyx_t_10, &__pyx_t_11, NULL, __pyx_t_9);
         if (unlikely(__pyx_t_12 == 0)) break;
-        if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(4, 662, __pyx_L5_error)
+        if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(4, 663, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_10);
@@ -204615,19 +204706,19 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
         __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11);
         __pyx_t_11 = 0;
 
-        /* "src/lxml/xslt.pxi":663
+        /* "src/lxml/xslt.pxi":664
  *         i = 0
  *         for key, value in parameters.iteritems():
  *             k = _utf8(key)             # <<<<<<<<<<<<<<
  *             if isinstance(value, _XSLTQuotedStringParam):
  *                 v = (<_XSLTQuotedStringParam>value).strval
  */
-        __pyx_t_11 = __pyx_f_4lxml_5etree__utf8(__pyx_v_key); if (unlikely(!__pyx_t_11)) __PYX_ERR(4, 663, __pyx_L5_error)
+        __pyx_t_11 = __pyx_f_4lxml_5etree__utf8(__pyx_v_key); if (unlikely(!__pyx_t_11)) __PYX_ERR(4, 664, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_XDECREF_SET(__pyx_v_k, ((PyObject*)__pyx_t_11));
         __pyx_t_11 = 0;
 
-        /* "src/lxml/xslt.pxi":664
+        /* "src/lxml/xslt.pxi":665
  *         for key, value in parameters.iteritems():
  *             k = _utf8(key)
  *             if isinstance(value, _XSLTQuotedStringParam):             # <<<<<<<<<<<<<<
@@ -204638,7 +204729,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
         __pyx_t_13 = (__pyx_t_3 != 0);
         if (__pyx_t_13) {
 
-          /* "src/lxml/xslt.pxi":665
+          /* "src/lxml/xslt.pxi":666
  *             k = _utf8(key)
  *             if isinstance(value, _XSLTQuotedStringParam):
  *                 v = (<_XSLTQuotedStringParam>value).strval             # <<<<<<<<<<<<<<
@@ -204650,7 +204741,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
           __Pyx_XDECREF_SET(__pyx_v_v, ((PyObject*)__pyx_t_11));
           __pyx_t_11 = 0;
 
-          /* "src/lxml/xslt.pxi":666
+          /* "src/lxml/xslt.pxi":667
  *             if isinstance(value, _XSLTQuotedStringParam):
  *                 v = (<_XSLTQuotedStringParam>value).strval
  *                 xslt.xsltQuoteOneUserParam(             # <<<<<<<<<<<<<<
@@ -204659,7 +204750,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
           (void)(xsltQuoteOneUserParam(__pyx_v_transform_ctxt, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_k), (const xmlChar*)PyBytes_AS_STRING(__pyx_v_v)));
 
-          /* "src/lxml/xslt.pxi":664
+          /* "src/lxml/xslt.pxi":665
  *         for key, value in parameters.iteritems():
  *             k = _utf8(key)
  *             if isinstance(value, _XSLTQuotedStringParam):             # <<<<<<<<<<<<<<
@@ -204669,7 +204760,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
           goto __pyx_L13;
         }
 
-        /* "src/lxml/xslt.pxi":669
+        /* "src/lxml/xslt.pxi":670
  *                     transform_ctxt, _xcstr(k), _xcstr(v))
  *             else:
  *                 if isinstance(value, XPath):             # <<<<<<<<<<<<<<
@@ -204681,7 +204772,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
           __pyx_t_3 = (__pyx_t_13 != 0);
           if (__pyx_t_3) {
 
-            /* "src/lxml/xslt.pxi":670
+            /* "src/lxml/xslt.pxi":671
  *             else:
  *                 if isinstance(value, XPath):
  *                     v = (<XPath>value)._path             # <<<<<<<<<<<<<<
@@ -204693,7 +204784,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
             __Pyx_XDECREF_SET(__pyx_v_v, ((PyObject*)__pyx_t_11));
             __pyx_t_11 = 0;
 
-            /* "src/lxml/xslt.pxi":669
+            /* "src/lxml/xslt.pxi":670
  *                     transform_ctxt, _xcstr(k), _xcstr(v))
  *             else:
  *                 if isinstance(value, XPath):             # <<<<<<<<<<<<<<
@@ -204703,7 +204794,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
             goto __pyx_L14;
           }
 
-          /* "src/lxml/xslt.pxi":672
+          /* "src/lxml/xslt.pxi":673
  *                     v = (<XPath>value)._path
  *                 else:
  *                     v = _utf8(value)             # <<<<<<<<<<<<<<
@@ -204711,14 +204802,14 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  *                 i += 1
  */
           /*else*/ {
-            __pyx_t_11 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_11)) __PYX_ERR(4, 672, __pyx_L5_error)
+            __pyx_t_11 = __pyx_f_4lxml_5etree__utf8(__pyx_v_value); if (unlikely(!__pyx_t_11)) __PYX_ERR(4, 673, __pyx_L5_error)
             __Pyx_GOTREF(__pyx_t_11);
             __Pyx_XDECREF_SET(__pyx_v_v, ((PyObject*)__pyx_t_11));
             __pyx_t_11 = 0;
           }
           __pyx_L14:;
 
-          /* "src/lxml/xslt.pxi":673
+          /* "src/lxml/xslt.pxi":674
  *                 else:
  *                     v = _utf8(value)
  *                 params[i] = <const_char*>tree.xmlDictLookup(c_dict, _xcstr(k), len(k))             # <<<<<<<<<<<<<<
@@ -204727,12 +204818,12 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
           if (unlikely(__pyx_v_k == Py_None)) {
             PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-            __PYX_ERR(4, 673, __pyx_L5_error)
+            __PYX_ERR(4, 674, __pyx_L5_error)
           }
-          __pyx_t_14 = PyBytes_GET_SIZE(__pyx_v_k); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(4, 673, __pyx_L5_error)
+          __pyx_t_14 = PyBytes_GET_SIZE(__pyx_v_k); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(4, 674, __pyx_L5_error)
           (__pyx_v_params[__pyx_v_i]) = ((const char *)xmlDictLookup(__pyx_v_c_dict, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_k), __pyx_t_14));
 
-          /* "src/lxml/xslt.pxi":674
+          /* "src/lxml/xslt.pxi":675
  *                     v = _utf8(value)
  *                 params[i] = <const_char*>tree.xmlDictLookup(c_dict, _xcstr(k), len(k))
  *                 i += 1             # <<<<<<<<<<<<<<
@@ -204741,7 +204832,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
           __pyx_v_i = (__pyx_v_i + 1);
 
-          /* "src/lxml/xslt.pxi":675
+          /* "src/lxml/xslt.pxi":676
  *                 params[i] = <const_char*>tree.xmlDictLookup(c_dict, _xcstr(k), len(k))
  *                 i += 1
  *                 params[i] = <const_char*>tree.xmlDictLookup(c_dict, _xcstr(v), len(v))             # <<<<<<<<<<<<<<
@@ -204750,12 +204841,12 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
           if (unlikely(__pyx_v_v == Py_None)) {
             PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-            __PYX_ERR(4, 675, __pyx_L5_error)
+            __PYX_ERR(4, 676, __pyx_L5_error)
           }
-          __pyx_t_14 = PyBytes_GET_SIZE(__pyx_v_v); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(4, 675, __pyx_L5_error)
+          __pyx_t_14 = PyBytes_GET_SIZE(__pyx_v_v); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(4, 676, __pyx_L5_error)
           (__pyx_v_params[__pyx_v_i]) = ((const char *)xmlDictLookup(__pyx_v_c_dict, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_v), __pyx_t_14));
 
-          /* "src/lxml/xslt.pxi":676
+          /* "src/lxml/xslt.pxi":677
  *                 i += 1
  *                 params[i] = <const_char*>tree.xmlDictLookup(c_dict, _xcstr(v), len(v))
  *                 i += 1             # <<<<<<<<<<<<<<
@@ -204768,7 +204859,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "src/lxml/xslt.pxi":660
+      /* "src/lxml/xslt.pxi":661
  *     if not params:
  *         raise MemoryError()
  *     try:             # <<<<<<<<<<<<<<
@@ -204785,7 +204876,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
     __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "src/lxml/xslt.pxi":677
+    /* "src/lxml/xslt.pxi":678
  *                 params[i] = <const_char*>tree.xmlDictLookup(c_dict, _xcstr(v), len(v))
  *                 i += 1
  *     except:             # <<<<<<<<<<<<<<
@@ -204794,12 +204885,12 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
     /*except:*/ {
       __Pyx_AddTraceback("lxml.etree._convert_xslt_parameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_11, &__pyx_t_10) < 0) __PYX_ERR(4, 677, __pyx_L7_except_error)
+      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_11, &__pyx_t_10) < 0) __PYX_ERR(4, 678, __pyx_L7_except_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_GOTREF(__pyx_t_10);
 
-      /* "src/lxml/xslt.pxi":678
+      /* "src/lxml/xslt.pxi":679
  *                 i += 1
  *     except:
  *         python.lxml_free(params)             # <<<<<<<<<<<<<<
@@ -204808,7 +204899,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
       lxml_free(__pyx_v_params);
 
-      /* "src/lxml/xslt.pxi":679
+      /* "src/lxml/xslt.pxi":680
  *     except:
  *         python.lxml_free(params)
  *         raise             # <<<<<<<<<<<<<<
@@ -204820,11 +204911,11 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
       __Pyx_XGIVEREF(__pyx_t_10);
       __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_11, __pyx_t_10);
       __pyx_t_7 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; 
-      __PYX_ERR(4, 679, __pyx_L7_except_error)
+      __PYX_ERR(4, 680, __pyx_L7_except_error)
     }
     __pyx_L7_except_error:;
 
-    /* "src/lxml/xslt.pxi":660
+    /* "src/lxml/xslt.pxi":661
  *     if not params:
  *         raise MemoryError()
  *     try:             # <<<<<<<<<<<<<<
@@ -204839,7 +204930,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
     __pyx_L10_try_end:;
   }
 
-  /* "src/lxml/xslt.pxi":680
+  /* "src/lxml/xslt.pxi":681
  *         python.lxml_free(params)
  *         raise
  *     params[i] = NULL             # <<<<<<<<<<<<<<
@@ -204848,7 +204939,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
   (__pyx_v_params[__pyx_v_i]) = NULL;
 
-  /* "src/lxml/xslt.pxi":681
+  /* "src/lxml/xslt.pxi":682
  *         raise
  *     params[i] = NULL
  *     params_ptr[0] = params             # <<<<<<<<<<<<<<
@@ -204857,7 +204948,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
  */
   (__pyx_v_params_ptr[0]) = __pyx_v_params;
 
-  /* "src/lxml/xslt.pxi":645
+  /* "src/lxml/xslt.pxi":646
  * 
  * 
  * cdef _convert_xslt_parameters(xslt.xsltTransformContext* transform_ctxt,             # <<<<<<<<<<<<<<
@@ -204884,7 +204975,7 @@ static PyObject *__pyx_f_4lxml_5etree__convert_xslt_parameters(xsltTransformCont
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":683
+/* "src/lxml/xslt.pxi":684
  *     params_ptr[0] = params
  * 
  * cdef XSLT _copyXSLT(XSLT stylesheet):             # <<<<<<<<<<<<<<
@@ -204905,7 +204996,7 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copyXSLT", 0);
 
-  /* "src/lxml/xslt.pxi":686
+  /* "src/lxml/xslt.pxi":687
  *     cdef XSLT new_xslt
  *     cdef xmlDoc* c_doc
  *     assert stylesheet._c_style is not NULL, "XSLT stylesheet not initialised"             # <<<<<<<<<<<<<<
@@ -204913,27 +205004,27 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
  *     new_xslt._access_control = stylesheet._access_control
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_stylesheet->_c_style != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XSLT_stylesheet_not_initialised);
-      __PYX_ERR(4, 686, __pyx_L1_error)
+      __PYX_ERR(4, 687, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "src/lxml/xslt.pxi":687
+  /* "src/lxml/xslt.pxi":688
  *     cdef xmlDoc* c_doc
  *     assert stylesheet._c_style is not NULL, "XSLT stylesheet not initialised"
  *     new_xslt = XSLT.__new__(XSLT)             # <<<<<<<<<<<<<<
  *     new_xslt._access_control = stylesheet._access_control
  *     new_xslt._error_log = _ErrorLog()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_tp_new_4lxml_5etree_XSLT(((PyTypeObject *)__pyx_ptype_4lxml_5etree_XSLT), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 687, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_tp_new_4lxml_5etree_XSLT(((PyTypeObject *)__pyx_ptype_4lxml_5etree_XSLT), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 688, __pyx_L1_error)
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_new_xslt = ((struct __pyx_obj_4lxml_5etree_XSLT *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":688
+  /* "src/lxml/xslt.pxi":689
  *     assert stylesheet._c_style is not NULL, "XSLT stylesheet not initialised"
  *     new_xslt = XSLT.__new__(XSLT)
  *     new_xslt._access_control = stylesheet._access_control             # <<<<<<<<<<<<<<
@@ -204948,14 +205039,14 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
   __pyx_v_new_xslt->_access_control = ((struct __pyx_obj_4lxml_5etree_XSLTAccessControl *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":689
+  /* "src/lxml/xslt.pxi":690
  *     new_xslt = XSLT.__new__(XSLT)
  *     new_xslt._access_control = stylesheet._access_control
  *     new_xslt._error_log = _ErrorLog()             # <<<<<<<<<<<<<<
  *     new_xslt._context = stylesheet._context._copy()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 689, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 690, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_new_xslt->_error_log);
@@ -204963,30 +205054,30 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
   __pyx_v_new_xslt->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":690
+  /* "src/lxml/xslt.pxi":691
  *     new_xslt._access_control = stylesheet._access_control
  *     new_xslt._error_log = _ErrorLog()
  *     new_xslt._context = stylesheet._context._copy()             # <<<<<<<<<<<<<<
  * 
  *     new_xslt._xslt_resolver_context = stylesheet._xslt_resolver_context._copy()
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_12_XSLTContext__copy(((struct __pyx_obj_4lxml_5etree__BaseContext *)__pyx_v_stylesheet->_context))); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 690, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_12_XSLTContext__copy(((struct __pyx_obj_4lxml_5etree__BaseContext *)__pyx_v_stylesheet->_context))); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 691, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__XSLTContext))))) __PYX_ERR(4, 690, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__XSLTContext))))) __PYX_ERR(4, 691, __pyx_L1_error)
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_new_xslt->_context);
   __Pyx_DECREF(((PyObject *)__pyx_v_new_xslt->_context));
   __pyx_v_new_xslt->_context = ((struct __pyx_obj_4lxml_5etree__XSLTContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":692
+  /* "src/lxml/xslt.pxi":693
  *     new_xslt._context = stylesheet._context._copy()
  * 
  *     new_xslt._xslt_resolver_context = stylesheet._xslt_resolver_context._copy()             # <<<<<<<<<<<<<<
  *     new_xslt._xslt_resolver_context._c_style_doc = _copyDoc(
  *         stylesheet._xslt_resolver_context._c_style_doc, 1)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_20_XSLTResolverContext__copy(__pyx_v_stylesheet->_xslt_resolver_context)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 692, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_20_XSLTResolverContext__copy(__pyx_v_stylesheet->_xslt_resolver_context)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 693, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_new_xslt->_xslt_resolver_context);
@@ -204994,27 +205085,27 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
   __pyx_v_new_xslt->_xslt_resolver_context = ((struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":693
+  /* "src/lxml/xslt.pxi":694
  * 
  *     new_xslt._xslt_resolver_context = stylesheet._xslt_resolver_context._copy()
  *     new_xslt._xslt_resolver_context._c_style_doc = _copyDoc(             # <<<<<<<<<<<<<<
  *         stylesheet._xslt_resolver_context._c_style_doc, 1)
  * 
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__copyDoc(__pyx_v_stylesheet->_xslt_resolver_context->_c_style_doc, 1); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(4, 693, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__copyDoc(__pyx_v_stylesheet->_xslt_resolver_context->_c_style_doc, 1); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(4, 694, __pyx_L1_error)
   __pyx_v_new_xslt->_xslt_resolver_context->_c_style_doc = __pyx_t_2;
 
-  /* "src/lxml/xslt.pxi":696
+  /* "src/lxml/xslt.pxi":697
  *         stylesheet._xslt_resolver_context._c_style_doc, 1)
  * 
  *     c_doc = _copyDoc(stylesheet._c_style.doc, 1)             # <<<<<<<<<<<<<<
  *     new_xslt._c_style = xslt.xsltParseStylesheetDoc(c_doc)
  *     if new_xslt._c_style is NULL:
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__copyDoc(__pyx_v_stylesheet->_c_style->doc, 1); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(4, 696, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree__copyDoc(__pyx_v_stylesheet->_c_style->doc, 1); if (unlikely(__pyx_t_2 == ((xmlDoc *)NULL))) __PYX_ERR(4, 697, __pyx_L1_error)
   __pyx_v_c_doc = __pyx_t_2;
 
-  /* "src/lxml/xslt.pxi":697
+  /* "src/lxml/xslt.pxi":698
  * 
  *     c_doc = _copyDoc(stylesheet._c_style.doc, 1)
  *     new_xslt._c_style = xslt.xsltParseStylesheetDoc(c_doc)             # <<<<<<<<<<<<<<
@@ -205023,7 +205114,7 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
  */
   __pyx_v_new_xslt->_c_style = xsltParseStylesheetDoc(__pyx_v_c_doc);
 
-  /* "src/lxml/xslt.pxi":698
+  /* "src/lxml/xslt.pxi":699
  *     c_doc = _copyDoc(stylesheet._c_style.doc, 1)
  *     new_xslt._c_style = xslt.xsltParseStylesheetDoc(c_doc)
  *     if new_xslt._c_style is NULL:             # <<<<<<<<<<<<<<
@@ -205033,7 +205124,7 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
   __pyx_t_3 = ((__pyx_v_new_xslt->_c_style == NULL) != 0);
   if (unlikely(__pyx_t_3)) {
 
-    /* "src/lxml/xslt.pxi":699
+    /* "src/lxml/xslt.pxi":700
  *     new_xslt._c_style = xslt.xsltParseStylesheetDoc(c_doc)
  *     if new_xslt._c_style is NULL:
  *         tree.xmlFreeDoc(c_doc)             # <<<<<<<<<<<<<<
@@ -205042,16 +205133,16 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
  */
     xmlFreeDoc(__pyx_v_c_doc);
 
-    /* "src/lxml/xslt.pxi":700
+    /* "src/lxml/xslt.pxi":701
  *     if new_xslt._c_style is NULL:
  *         tree.xmlFreeDoc(c_doc)
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  * 
  *     return new_xslt
  */
-    PyErr_NoMemory(); __PYX_ERR(4, 700, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(4, 701, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":698
+    /* "src/lxml/xslt.pxi":699
  *     c_doc = _copyDoc(stylesheet._c_style.doc, 1)
  *     new_xslt._c_style = xslt.xsltParseStylesheetDoc(c_doc)
  *     if new_xslt._c_style is NULL:             # <<<<<<<<<<<<<<
@@ -205060,7 +205151,7 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
  */
   }
 
-  /* "src/lxml/xslt.pxi":702
+  /* "src/lxml/xslt.pxi":703
  *         raise MemoryError()
  * 
  *     return new_xslt             # <<<<<<<<<<<<<<
@@ -205072,7 +205163,7 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
   __pyx_r = __pyx_v_new_xslt;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":683
+  /* "src/lxml/xslt.pxi":684
  *     params_ptr[0] = params
  * 
  * cdef XSLT _copyXSLT(XSLT stylesheet):             # <<<<<<<<<<<<<<
@@ -205092,7 +205183,7 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":717
+/* "src/lxml/xslt.pxi":718
  *     cdef Py_ssize_t _buffer_refcnt
  * 
  *     def write_output(self, file, *, compression=0):             # <<<<<<<<<<<<<<
@@ -205138,7 +205229,7 @@ static PyObject *__pyx_pw_4lxml_5etree_15_XSLTResultTree_1write_output(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, "write_output") < 0)) __PYX_ERR(4, 717, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_output") < 0)) __PYX_ERR(4, 718, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -205150,7 +205241,7 @@ static PyObject *__pyx_pw_4lxml_5etree_15_XSLTResultTree_1write_output(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_output", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 717, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_output", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 718, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._XSLTResultTree.write_output", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -205185,7 +205276,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write_output", 0);
 
-  /* "src/lxml/xslt.pxi":725
+  /* "src/lxml/xslt.pxi":726
  *         the result as defined by the ``<xsl:output>`` tag.
  *         """
  *         cdef _FilelikeWriter writer = None             # <<<<<<<<<<<<<<
@@ -205195,7 +205286,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   __Pyx_INCREF(Py_None);
   __pyx_v_writer = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)Py_None);
 
-  /* "src/lxml/xslt.pxi":728
+  /* "src/lxml/xslt.pxi":729
  *         cdef _Document doc
  *         cdef int r, rclose, c_compression
  *         cdef const_xmlChar* c_encoding = NULL             # <<<<<<<<<<<<<<
@@ -205204,7 +205295,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
  */
   __pyx_v_c_encoding = NULL;
 
-  /* "src/lxml/xslt.pxi":731
+  /* "src/lxml/xslt.pxi":732
  *         cdef tree.xmlOutputBuffer* c_buffer
  * 
  *         if self._context_node is not None:             # <<<<<<<<<<<<<<
@@ -205215,7 +205306,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":732
+    /* "src/lxml/xslt.pxi":733
  * 
  *         if self._context_node is not None:
  *             doc = self._context_node._doc             # <<<<<<<<<<<<<<
@@ -205227,7 +205318,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "src/lxml/xslt.pxi":731
+    /* "src/lxml/xslt.pxi":732
  *         cdef tree.xmlOutputBuffer* c_buffer
  * 
  *         if self._context_node is not None:             # <<<<<<<<<<<<<<
@@ -205237,7 +205328,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
     goto __pyx_L3;
   }
 
-  /* "src/lxml/xslt.pxi":734
+  /* "src/lxml/xslt.pxi":735
  *             doc = self._context_node._doc
  *         else:
  *             doc = None             # <<<<<<<<<<<<<<
@@ -205250,7 +205341,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   }
   __pyx_L3:;
 
-  /* "src/lxml/xslt.pxi":735
+  /* "src/lxml/xslt.pxi":736
  *         else:
  *             doc = None
  *         if doc is None:             # <<<<<<<<<<<<<<
@@ -205261,7 +205352,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":736
+    /* "src/lxml/xslt.pxi":737
  *             doc = None
  *         if doc is None:
  *             doc = self._doc             # <<<<<<<<<<<<<<
@@ -205273,7 +205364,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
     __Pyx_DECREF_SET(__pyx_v_doc, ((struct LxmlDocument *)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "src/lxml/xslt.pxi":737
+    /* "src/lxml/xslt.pxi":738
  *         if doc is None:
  *             doc = self._doc
  *             if doc is None:             # <<<<<<<<<<<<<<
@@ -205284,14 +205375,14 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (unlikely(__pyx_t_2)) {
 
-      /* "src/lxml/xslt.pxi":738
+      /* "src/lxml/xslt.pxi":739
  *             doc = self._doc
  *             if doc is None:
  *                 raise XSLTSaveError("No document to serialise")             # <<<<<<<<<<<<<<
  *         c_compression = compression or 0
  *         xslt.LXML_GET_XSLT_ENCODING(c_encoding, self._xslt._c_style)
  */
-      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_XSLTSaveError); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 738, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_XSLTSaveError); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 739, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = NULL;
       if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -205305,14 +205396,14 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
       }
       __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_kp_s_No_document_to_serialise) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_s_No_document_to_serialise);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 738, __pyx_L1_error)
+      if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 739, __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(4, 738, __pyx_L1_error)
+      __PYX_ERR(4, 739, __pyx_L1_error)
 
-      /* "src/lxml/xslt.pxi":737
+      /* "src/lxml/xslt.pxi":738
  *         if doc is None:
  *             doc = self._doc
  *             if doc is None:             # <<<<<<<<<<<<<<
@@ -205321,7 +205412,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
  */
     }
 
-    /* "src/lxml/xslt.pxi":735
+    /* "src/lxml/xslt.pxi":736
  *         else:
  *             doc = None
  *         if doc is None:             # <<<<<<<<<<<<<<
@@ -205330,17 +205421,17 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
  */
   }
 
-  /* "src/lxml/xslt.pxi":739
+  /* "src/lxml/xslt.pxi":740
  *             if doc is None:
  *                 raise XSLTSaveError("No document to serialise")
  *         c_compression = compression or 0             # <<<<<<<<<<<<<<
  *         xslt.LXML_GET_XSLT_ENCODING(c_encoding, self._xslt._c_style)
  *         writer = _create_output_buffer(file, <const_char*>c_encoding, compression, &c_buffer, close=False)
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_compression); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 739, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_compression); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 740, __pyx_L1_error)
   if (!__pyx_t_2) {
   } else {
-    __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 739, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 740, __pyx_L1_error)
     __pyx_t_6 = __pyx_t_7;
     goto __pyx_L6_bool_binop_done;
   }
@@ -205348,7 +205439,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   __pyx_L6_bool_binop_done:;
   __pyx_v_c_compression = __pyx_t_6;
 
-  /* "src/lxml/xslt.pxi":740
+  /* "src/lxml/xslt.pxi":741
  *                 raise XSLTSaveError("No document to serialise")
  *         c_compression = compression or 0
  *         xslt.LXML_GET_XSLT_ENCODING(c_encoding, self._xslt._c_style)             # <<<<<<<<<<<<<<
@@ -205357,20 +205448,20 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
  */
   LXML_GET_XSLT_ENCODING(__pyx_v_c_encoding, __pyx_v_self->_xslt->_c_style);
 
-  /* "src/lxml/xslt.pxi":741
+  /* "src/lxml/xslt.pxi":742
  *         c_compression = compression or 0
  *         xslt.LXML_GET_XSLT_ENCODING(c_encoding, self._xslt._c_style)
  *         writer = _create_output_buffer(file, <const_char*>c_encoding, compression, &c_buffer, close=False)             # <<<<<<<<<<<<<<
  *         if writer is None:
  *             with nogil:
  */
-  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 741, __pyx_L1_error)
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__create_output_buffer(__pyx_v_file, ((const char *)__pyx_v_c_encoding), __pyx_t_6, (&__pyx_v_c_buffer), 0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 741, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_compression); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 742, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__create_output_buffer(__pyx_v_file, ((const char *)__pyx_v_c_encoding), __pyx_t_6, (&__pyx_v_c_buffer), 0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 742, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_writer, ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)__pyx_t_3));
   __pyx_t_3 = 0;
 
-  /* "src/lxml/xslt.pxi":742
+  /* "src/lxml/xslt.pxi":743
  *         xslt.LXML_GET_XSLT_ENCODING(c_encoding, self._xslt._c_style)
  *         writer = _create_output_buffer(file, <const_char*>c_encoding, compression, &c_buffer, close=False)
  *         if writer is None:             # <<<<<<<<<<<<<<
@@ -205381,7 +205472,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":743
+    /* "src/lxml/xslt.pxi":744
  *         writer = _create_output_buffer(file, <const_char*>c_encoding, compression, &c_buffer, close=False)
  *         if writer is None:
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -205396,7 +205487,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
         #endif
         /*try:*/ {
 
-          /* "src/lxml/xslt.pxi":744
+          /* "src/lxml/xslt.pxi":745
  *         if writer is None:
  *             with nogil:
  *                 r = xslt.xsltSaveResultTo(c_buffer, doc._c_doc, self._xslt._c_style)             # <<<<<<<<<<<<<<
@@ -205405,7 +205496,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
  */
           __pyx_v_r = xsltSaveResultTo(__pyx_v_c_buffer, __pyx_v_doc->_c_doc, __pyx_v_self->_xslt->_c_style);
 
-          /* "src/lxml/xslt.pxi":745
+          /* "src/lxml/xslt.pxi":746
  *             with nogil:
  *                 r = xslt.xsltSaveResultTo(c_buffer, doc._c_doc, self._xslt._c_style)
  *                 rclose = tree.xmlOutputBufferClose(c_buffer)             # <<<<<<<<<<<<<<
@@ -205415,7 +205506,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
           __pyx_v_rclose = xmlOutputBufferClose(__pyx_v_c_buffer);
         }
 
-        /* "src/lxml/xslt.pxi":743
+        /* "src/lxml/xslt.pxi":744
  *         writer = _create_output_buffer(file, <const_char*>c_encoding, compression, &c_buffer, close=False)
  *         if writer is None:
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -205434,7 +205525,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
         }
     }
 
-    /* "src/lxml/xslt.pxi":742
+    /* "src/lxml/xslt.pxi":743
  *         xslt.LXML_GET_XSLT_ENCODING(c_encoding, self._xslt._c_style)
  *         writer = _create_output_buffer(file, <const_char*>c_encoding, compression, &c_buffer, close=False)
  *         if writer is None:             # <<<<<<<<<<<<<<
@@ -205444,7 +205535,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
     goto __pyx_L8;
   }
 
-  /* "src/lxml/xslt.pxi":747
+  /* "src/lxml/xslt.pxi":748
  *                 rclose = tree.xmlOutputBufferClose(c_buffer)
  *         else:
  *             r = xslt.xsltSaveResultTo(c_buffer, doc._c_doc, self._xslt._c_style)             # <<<<<<<<<<<<<<
@@ -205454,7 +205545,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   /*else*/ {
     __pyx_v_r = xsltSaveResultTo(__pyx_v_c_buffer, __pyx_v_doc->_c_doc, __pyx_v_self->_xslt->_c_style);
 
-    /* "src/lxml/xslt.pxi":748
+    /* "src/lxml/xslt.pxi":749
  *         else:
  *             r = xslt.xsltSaveResultTo(c_buffer, doc._c_doc, self._xslt._c_style)
  *             rclose = tree.xmlOutputBufferClose(c_buffer)             # <<<<<<<<<<<<<<
@@ -205465,7 +205556,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   }
   __pyx_L8:;
 
-  /* "src/lxml/xslt.pxi":749
+  /* "src/lxml/xslt.pxi":750
  *             r = xslt.xsltSaveResultTo(c_buffer, doc._c_doc, self._xslt._c_style)
  *             rclose = tree.xmlOutputBufferClose(c_buffer)
  *         if writer is not None:             # <<<<<<<<<<<<<<
@@ -205476,16 +205567,16 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":750
+    /* "src/lxml/xslt.pxi":751
  *             rclose = tree.xmlOutputBufferClose(c_buffer)
  *         if writer is not None:
  *             writer._exc_context._raise_if_stored()             # <<<<<<<<<<<<<<
  *         if r < 0 or rclose == -1:
  *             python.PyErr_SetFromErrno(IOError)  # raises IOError
  */
-    __pyx_t_6 = ((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_6 == ((int)-1))) __PYX_ERR(4, 750, __pyx_L1_error)
+    __pyx_t_6 = ((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_6 == ((int)-1))) __PYX_ERR(4, 751, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":749
+    /* "src/lxml/xslt.pxi":750
  *             r = xslt.xsltSaveResultTo(c_buffer, doc._c_doc, self._xslt._c_style)
  *             rclose = tree.xmlOutputBufferClose(c_buffer)
  *         if writer is not None:             # <<<<<<<<<<<<<<
@@ -205494,7 +205585,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
  */
   }
 
-  /* "src/lxml/xslt.pxi":751
+  /* "src/lxml/xslt.pxi":752
  *         if writer is not None:
  *             writer._exc_context._raise_if_stored()
  *         if r < 0 or rclose == -1:             # <<<<<<<<<<<<<<
@@ -205512,18 +205603,18 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   __pyx_L14_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":752
+    /* "src/lxml/xslt.pxi":753
  *             writer._exc_context._raise_if_stored()
  *         if r < 0 or rclose == -1:
  *             python.PyErr_SetFromErrno(IOError)  # raises IOError             # <<<<<<<<<<<<<<
  * 
  *     cdef _saveToStringAndSize(self, xmlChar** s, int* l):
  */
-    __pyx_t_3 = PyErr_SetFromErrno(__pyx_builtin_IOError); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 752, __pyx_L1_error)
+    __pyx_t_3 = PyErr_SetFromErrno(__pyx_builtin_IOError); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 753, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "src/lxml/xslt.pxi":751
+    /* "src/lxml/xslt.pxi":752
  *         if writer is not None:
  *             writer._exc_context._raise_if_stored()
  *         if r < 0 or rclose == -1:             # <<<<<<<<<<<<<<
@@ -205532,7 +205623,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
  */
   }
 
-  /* "src/lxml/xslt.pxi":717
+  /* "src/lxml/xslt.pxi":718
  *     cdef Py_ssize_t _buffer_refcnt
  * 
  *     def write_output(self, file, *, compression=0):             # <<<<<<<<<<<<<<
@@ -205557,7 +205648,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_write_output(struct __p
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":754
+/* "src/lxml/xslt.pxi":755
  *             python.PyErr_SetFromErrno(IOError)  # raises IOError
  * 
  *     cdef _saveToStringAndSize(self, xmlChar** s, int* l):             # <<<<<<<<<<<<<<
@@ -205578,7 +205669,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_saveToStringAndSize", 0);
 
-  /* "src/lxml/xslt.pxi":757
+  /* "src/lxml/xslt.pxi":758
  *         cdef _Document doc
  *         cdef int r
  *         if self._context_node is not None:             # <<<<<<<<<<<<<<
@@ -205589,7 +205680,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":758
+    /* "src/lxml/xslt.pxi":759
  *         cdef int r
  *         if self._context_node is not None:
  *             doc = self._context_node._doc             # <<<<<<<<<<<<<<
@@ -205601,7 +205692,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "src/lxml/xslt.pxi":757
+    /* "src/lxml/xslt.pxi":758
  *         cdef _Document doc
  *         cdef int r
  *         if self._context_node is not None:             # <<<<<<<<<<<<<<
@@ -205611,7 +205702,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
     goto __pyx_L3;
   }
 
-  /* "src/lxml/xslt.pxi":760
+  /* "src/lxml/xslt.pxi":761
  *             doc = self._context_node._doc
  *         else:
  *             doc = None             # <<<<<<<<<<<<<<
@@ -205624,7 +205715,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
   }
   __pyx_L3:;
 
-  /* "src/lxml/xslt.pxi":761
+  /* "src/lxml/xslt.pxi":762
  *         else:
  *             doc = None
  *         if doc is None:             # <<<<<<<<<<<<<<
@@ -205635,7 +205726,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":762
+    /* "src/lxml/xslt.pxi":763
  *             doc = None
  *         if doc is None:
  *             doc = self._doc             # <<<<<<<<<<<<<<
@@ -205647,7 +205738,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
     __Pyx_DECREF_SET(__pyx_v_doc, ((struct LxmlDocument *)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "src/lxml/xslt.pxi":763
+    /* "src/lxml/xslt.pxi":764
  *         if doc is None:
  *             doc = self._doc
  *             if doc is None:             # <<<<<<<<<<<<<<
@@ -205658,7 +205749,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/xslt.pxi":764
+      /* "src/lxml/xslt.pxi":765
  *             doc = self._doc
  *             if doc is None:
  *                 s[0] = NULL             # <<<<<<<<<<<<<<
@@ -205667,7 +205758,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
  */
       (__pyx_v_s[0]) = NULL;
 
-      /* "src/lxml/xslt.pxi":765
+      /* "src/lxml/xslt.pxi":766
  *             if doc is None:
  *                 s[0] = NULL
  *                 return             # <<<<<<<<<<<<<<
@@ -205678,7 +205769,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
       __pyx_r = Py_None; __Pyx_INCREF(Py_None);
       goto __pyx_L0;
 
-      /* "src/lxml/xslt.pxi":763
+      /* "src/lxml/xslt.pxi":764
  *         if doc is None:
  *             doc = self._doc
  *             if doc is None:             # <<<<<<<<<<<<<<
@@ -205687,7 +205778,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
  */
     }
 
-    /* "src/lxml/xslt.pxi":761
+    /* "src/lxml/xslt.pxi":762
  *         else:
  *             doc = None
  *         if doc is None:             # <<<<<<<<<<<<<<
@@ -205696,7 +205787,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
  */
   }
 
-  /* "src/lxml/xslt.pxi":766
+  /* "src/lxml/xslt.pxi":767
  *                 s[0] = NULL
  *                 return
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -205711,7 +205802,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
       #endif
       /*try:*/ {
 
-        /* "src/lxml/xslt.pxi":767
+        /* "src/lxml/xslt.pxi":768
  *                 return
  *         with nogil:
  *             r = xslt.xsltSaveResultToString(s, l, doc._c_doc,             # <<<<<<<<<<<<<<
@@ -205721,7 +205812,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
         __pyx_v_r = xsltSaveResultToString(__pyx_v_s, __pyx_v_l, __pyx_v_doc->_c_doc, __pyx_v_self->_xslt->_c_style);
       }
 
-      /* "src/lxml/xslt.pxi":766
+      /* "src/lxml/xslt.pxi":767
  *                 s[0] = NULL
  *                 return
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -205740,7 +205831,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
       }
   }
 
-  /* "src/lxml/xslt.pxi":769
+  /* "src/lxml/xslt.pxi":770
  *             r = xslt.xsltSaveResultToString(s, l, doc._c_doc,
  *                                             self._xslt._c_style)
  *         if r == -1:             # <<<<<<<<<<<<<<
@@ -205750,16 +205841,16 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
   __pyx_t_2 = ((__pyx_v_r == -1L) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/xslt.pxi":770
+    /* "src/lxml/xslt.pxi":771
  *                                             self._xslt._c_style)
  *         if r == -1:
  *             raise MemoryError()             # <<<<<<<<<<<<<<
  * 
  *     def __str__(self):
  */
-    PyErr_NoMemory(); __PYX_ERR(4, 770, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(4, 771, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":769
+    /* "src/lxml/xslt.pxi":770
  *             r = xslt.xsltSaveResultToString(s, l, doc._c_doc,
  *                                             self._xslt._c_style)
  *         if r == -1:             # <<<<<<<<<<<<<<
@@ -205768,7 +205859,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
  */
   }
 
-  /* "src/lxml/xslt.pxi":754
+  /* "src/lxml/xslt.pxi":755
  *             python.PyErr_SetFromErrno(IOError)  # raises IOError
  * 
  *     cdef _saveToStringAndSize(self, xmlChar** s, int* l):             # <<<<<<<<<<<<<<
@@ -205790,7 +205881,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(str
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":772
+/* "src/lxml/xslt.pxi":773
  *             raise MemoryError()
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -205835,7 +205926,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__str__", 0);
 
-  /* "src/lxml/xslt.pxi":773
+  /* "src/lxml/xslt.pxi":774
  * 
  *     def __str__(self):
  *         cdef xmlChar* s = NULL             # <<<<<<<<<<<<<<
@@ -205844,7 +205935,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
  */
   __pyx_v_s = NULL;
 
-  /* "src/lxml/xslt.pxi":774
+  /* "src/lxml/xslt.pxi":775
  *     def __str__(self):
  *         cdef xmlChar* s = NULL
  *         cdef int l = 0             # <<<<<<<<<<<<<<
@@ -205853,7 +205944,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
  */
   __pyx_v_l = 0;
 
-  /* "src/lxml/xslt.pxi":775
+  /* "src/lxml/xslt.pxi":776
  *         cdef xmlChar* s = NULL
  *         cdef int l = 0
  *         if not python.IS_PYTHON2:             # <<<<<<<<<<<<<<
@@ -205863,7 +205954,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
   __pyx_t_1 = ((!(IS_PYTHON2 != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":776
+    /* "src/lxml/xslt.pxi":777
  *         cdef int l = 0
  *         if not python.IS_PYTHON2:
  *             return self.__unicode__()             # <<<<<<<<<<<<<<
@@ -205871,7 +205962,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
  *         if s is NULL:
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_unicode_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 776, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_unicode_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 777, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -205885,14 +205976,14 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
     }
     __pyx_t_2 = (__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_2)) __PYX_ERR(4, 776, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 777, __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;
     goto __pyx_L0;
 
-    /* "src/lxml/xslt.pxi":775
+    /* "src/lxml/xslt.pxi":776
  *         cdef xmlChar* s = NULL
  *         cdef int l = 0
  *         if not python.IS_PYTHON2:             # <<<<<<<<<<<<<<
@@ -205901,18 +205992,18 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
  */
   }
 
-  /* "src/lxml/xslt.pxi":777
+  /* "src/lxml/xslt.pxi":778
  *         if not python.IS_PYTHON2:
  *             return self.__unicode__()
  *         self._saveToStringAndSize(&s, &l)             # <<<<<<<<<<<<<<
  *         if s is NULL:
  *             return ''
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(__pyx_v_self, (&__pyx_v_s), (&__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 777, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(__pyx_v_self, (&__pyx_v_s), (&__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 778, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/xslt.pxi":778
+  /* "src/lxml/xslt.pxi":779
  *             return self.__unicode__()
  *         self._saveToStringAndSize(&s, &l)
  *         if s is NULL:             # <<<<<<<<<<<<<<
@@ -205922,7 +206013,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_s == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":779
+    /* "src/lxml/xslt.pxi":780
  *         self._saveToStringAndSize(&s, &l)
  *         if s is NULL:
  *             return ''             # <<<<<<<<<<<<<<
@@ -205934,7 +206025,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
     __pyx_r = __pyx_kp_s__12;
     goto __pyx_L0;
 
-    /* "src/lxml/xslt.pxi":778
+    /* "src/lxml/xslt.pxi":779
  *             return self.__unicode__()
  *         self._saveToStringAndSize(&s, &l)
  *         if s is NULL:             # <<<<<<<<<<<<<<
@@ -205943,7 +206034,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
  */
   }
 
-  /* "src/lxml/xslt.pxi":781
+  /* "src/lxml/xslt.pxi":782
  *             return ''
  *         # we must not use 'funicode()' here as this is not always UTF-8
  *         try:             # <<<<<<<<<<<<<<
@@ -205952,14 +206043,14 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
  */
   /*try:*/ {
 
-    /* "src/lxml/xslt.pxi":782
+    /* "src/lxml/xslt.pxi":783
  *         # we must not use 'funicode()' here as this is not always UTF-8
  *         try:
  *             result = <bytes>s[:l]             # <<<<<<<<<<<<<<
  *         finally:
  *             tree.xmlFree(s)
  */
-    __pyx_t_2 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_s) + 0, __pyx_v_l - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 782, __pyx_L6_error)
+    __pyx_t_2 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_s) + 0, __pyx_v_l - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 783, __pyx_L6_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = __pyx_t_2;
     __Pyx_INCREF(__pyx_t_3);
@@ -205968,7 +206059,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
     __pyx_t_3 = 0;
   }
 
-  /* "src/lxml/xslt.pxi":784
+  /* "src/lxml/xslt.pxi":785
  *             result = <bytes>s[:l]
  *         finally:
  *             tree.xmlFree(s)             # <<<<<<<<<<<<<<
@@ -206017,7 +206108,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
     __pyx_L7:;
   }
 
-  /* "src/lxml/xslt.pxi":785
+  /* "src/lxml/xslt.pxi":786
  *         finally:
  *             tree.xmlFree(s)
  *         return result             # <<<<<<<<<<<<<<
@@ -206029,7 +206120,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":772
+  /* "src/lxml/xslt.pxi":773
  *             raise MemoryError()
  * 
  *     def __str__(self):             # <<<<<<<<<<<<<<
@@ -206051,7 +206142,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":787
+/* "src/lxml/xslt.pxi":788
  *         return result
  * 
  *     def __unicode__(self):             # <<<<<<<<<<<<<<
@@ -206097,7 +206188,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__unicode__", 0);
 
-  /* "src/lxml/xslt.pxi":789
+  /* "src/lxml/xslt.pxi":790
  *     def __unicode__(self):
  *         cdef xmlChar* encoding
  *         cdef xmlChar* s = NULL             # <<<<<<<<<<<<<<
@@ -206106,7 +206197,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
  */
   __pyx_v_s = NULL;
 
-  /* "src/lxml/xslt.pxi":790
+  /* "src/lxml/xslt.pxi":791
  *         cdef xmlChar* encoding
  *         cdef xmlChar* s = NULL
  *         cdef int l = 0             # <<<<<<<<<<<<<<
@@ -206115,18 +206206,18 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
  */
   __pyx_v_l = 0;
 
-  /* "src/lxml/xslt.pxi":791
+  /* "src/lxml/xslt.pxi":792
  *         cdef xmlChar* s = NULL
  *         cdef int l = 0
  *         self._saveToStringAndSize(&s, &l)             # <<<<<<<<<<<<<<
  *         if s is NULL:
  *             return u''
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(__pyx_v_self, (&__pyx_v_s), (&__pyx_v_l)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 791, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(__pyx_v_self, (&__pyx_v_s), (&__pyx_v_l)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/lxml/xslt.pxi":792
+  /* "src/lxml/xslt.pxi":793
  *         cdef int l = 0
  *         self._saveToStringAndSize(&s, &l)
  *         if s is NULL:             # <<<<<<<<<<<<<<
@@ -206136,7 +206227,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
   __pyx_t_2 = ((__pyx_v_s == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":793
+    /* "src/lxml/xslt.pxi":794
  *         self._saveToStringAndSize(&s, &l)
  *         if s is NULL:
  *             return u''             # <<<<<<<<<<<<<<
@@ -206148,7 +206239,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
     __pyx_r = __pyx_kp_u__12;
     goto __pyx_L0;
 
-    /* "src/lxml/xslt.pxi":792
+    /* "src/lxml/xslt.pxi":793
  *         cdef int l = 0
  *         self._saveToStringAndSize(&s, &l)
  *         if s is NULL:             # <<<<<<<<<<<<<<
@@ -206157,7 +206248,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
  */
   }
 
-  /* "src/lxml/xslt.pxi":794
+  /* "src/lxml/xslt.pxi":795
  *         if s is NULL:
  *             return u''
  *         encoding = self._xslt._c_style.encoding             # <<<<<<<<<<<<<<
@@ -206167,7 +206258,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
   __pyx_t_3 = __pyx_v_self->_xslt->_c_style->encoding;
   __pyx_v_encoding = __pyx_t_3;
 
-  /* "src/lxml/xslt.pxi":795
+  /* "src/lxml/xslt.pxi":796
  *             return u''
  *         encoding = self._xslt._c_style.encoding
  *         try:             # <<<<<<<<<<<<<<
@@ -206176,7 +206267,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
  */
   /*try:*/ {
 
-    /* "src/lxml/xslt.pxi":796
+    /* "src/lxml/xslt.pxi":797
  *         encoding = self._xslt._c_style.encoding
  *         try:
  *             if encoding is NULL:             # <<<<<<<<<<<<<<
@@ -206186,19 +206277,19 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
     __pyx_t_2 = ((__pyx_v_encoding == NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/xslt.pxi":797
+      /* "src/lxml/xslt.pxi":798
  *         try:
  *             if encoding is NULL:
  *                 result = s[:l].decode('UTF-8')             # <<<<<<<<<<<<<<
  *             else:
  *                 result = s[:l].decode(encoding)
  */
-      __pyx_t_1 = __Pyx_decode_c_string(((char const *)__pyx_v_s), 0, __pyx_v_l, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 797, __pyx_L5_error)
+      __pyx_t_1 = __Pyx_decode_c_string(((char const *)__pyx_v_s), 0, __pyx_v_l, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 798, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_v_result = __pyx_t_1;
       __pyx_t_1 = 0;
 
-      /* "src/lxml/xslt.pxi":796
+      /* "src/lxml/xslt.pxi":797
  *         encoding = self._xslt._c_style.encoding
  *         try:
  *             if encoding is NULL:             # <<<<<<<<<<<<<<
@@ -206208,7 +206299,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
       goto __pyx_L7;
     }
 
-    /* "src/lxml/xslt.pxi":799
+    /* "src/lxml/xslt.pxi":800
  *                 result = s[:l].decode('UTF-8')
  *             else:
  *                 result = s[:l].decode(encoding)             # <<<<<<<<<<<<<<
@@ -206216,7 +206307,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
  *             tree.xmlFree(s)
  */
     /*else*/ {
-      __pyx_t_1 = __Pyx_decode_c_string(((char const *)__pyx_v_s), 0, __pyx_v_l, ((char const *)__pyx_v_encoding), NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 799, __pyx_L5_error)
+      __pyx_t_1 = __Pyx_decode_c_string(((char const *)__pyx_v_s), 0, __pyx_v_l, ((char const *)__pyx_v_encoding), NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 800, __pyx_L5_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_v_result = __pyx_t_1;
       __pyx_t_1 = 0;
@@ -206224,7 +206315,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
     __pyx_L7:;
   }
 
-  /* "src/lxml/xslt.pxi":801
+  /* "src/lxml/xslt.pxi":802
  *                 result = s[:l].decode(encoding)
  *         finally:
  *             tree.xmlFree(s)             # <<<<<<<<<<<<<<
@@ -206271,7 +206362,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
     __pyx_L6:;
   }
 
-  /* "src/lxml/xslt.pxi":802
+  /* "src/lxml/xslt.pxi":803
  *         finally:
  *             tree.xmlFree(s)
  *         return _stripEncodingDeclaration(result)             # <<<<<<<<<<<<<<
@@ -206279,13 +206370,13 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
  *     def __getbuffer__(self, Py_buffer* buffer, int flags):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__stripEncodingDeclaration(__pyx_v_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 802, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__stripEncodingDeclaration(__pyx_v_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 803, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":787
+  /* "src/lxml/xslt.pxi":788
  *         return result
  * 
  *     def __unicode__(self):             # <<<<<<<<<<<<<<
@@ -206305,7 +206396,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_4__unicode__(struct __p
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":804
+/* "src/lxml/xslt.pxi":805
  *         return _stripEncodingDeclaration(result)
  * 
  *     def __getbuffer__(self, Py_buffer* buffer, int flags):             # <<<<<<<<<<<<<<
@@ -206346,7 +206437,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
   __pyx_v_buffer->obj = Py_None; __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(__pyx_v_buffer->obj);
 
-  /* "src/lxml/xslt.pxi":805
+  /* "src/lxml/xslt.pxi":806
  * 
  *     def __getbuffer__(self, Py_buffer* buffer, int flags):
  *         cdef int l = 0             # <<<<<<<<<<<<<<
@@ -206355,7 +206446,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
   __pyx_v_l = 0;
 
-  /* "src/lxml/xslt.pxi":806
+  /* "src/lxml/xslt.pxi":807
  *     def __getbuffer__(self, Py_buffer* buffer, int flags):
  *         cdef int l = 0
  *         if buffer is NULL:             # <<<<<<<<<<<<<<
@@ -206365,7 +206456,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_buffer == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":807
+    /* "src/lxml/xslt.pxi":808
  *         cdef int l = 0
  *         if buffer is NULL:
  *             return             # <<<<<<<<<<<<<<
@@ -206375,7 +206466,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/xslt.pxi":806
+    /* "src/lxml/xslt.pxi":807
  *     def __getbuffer__(self, Py_buffer* buffer, int flags):
  *         cdef int l = 0
  *         if buffer is NULL:             # <<<<<<<<<<<<<<
@@ -206384,7 +206475,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
   }
 
-  /* "src/lxml/xslt.pxi":808
+  /* "src/lxml/xslt.pxi":809
  *         if buffer is NULL:
  *             return
  *         if self._buffer is NULL or flags & python.PyBUF_WRITABLE:             # <<<<<<<<<<<<<<
@@ -206402,18 +206493,18 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
   __pyx_L5_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":809
+    /* "src/lxml/xslt.pxi":810
  *             return
  *         if self._buffer is NULL or flags & python.PyBUF_WRITABLE:
  *             self._saveToStringAndSize(<xmlChar**>&buffer.buf, &l)             # <<<<<<<<<<<<<<
  *             buffer.len = l
  *             if self._buffer is NULL and not flags & python.PyBUF_WRITABLE:
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(__pyx_v_self, ((xmlChar **)(&__pyx_v_buffer->buf)), (&__pyx_v_l)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 809, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(__pyx_v_self, ((xmlChar **)(&__pyx_v_buffer->buf)), (&__pyx_v_l)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 810, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "src/lxml/xslt.pxi":810
+    /* "src/lxml/xslt.pxi":811
  *         if self._buffer is NULL or flags & python.PyBUF_WRITABLE:
  *             self._saveToStringAndSize(<xmlChar**>&buffer.buf, &l)
  *             buffer.len = l             # <<<<<<<<<<<<<<
@@ -206422,7 +206513,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
     __pyx_v_buffer->len = __pyx_v_l;
 
-    /* "src/lxml/xslt.pxi":811
+    /* "src/lxml/xslt.pxi":812
  *             self._saveToStringAndSize(<xmlChar**>&buffer.buf, &l)
  *             buffer.len = l
  *             if self._buffer is NULL and not flags & python.PyBUF_WRITABLE:             # <<<<<<<<<<<<<<
@@ -206440,7 +206531,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
     __pyx_L8_bool_binop_done:;
     if (__pyx_t_1) {
 
-      /* "src/lxml/xslt.pxi":812
+      /* "src/lxml/xslt.pxi":813
  *             buffer.len = l
  *             if self._buffer is NULL and not flags & python.PyBUF_WRITABLE:
  *                 self._buffer = <xmlChar*>buffer.buf             # <<<<<<<<<<<<<<
@@ -206449,7 +206540,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
       __pyx_v_self->_buffer = ((xmlChar *)__pyx_v_buffer->buf);
 
-      /* "src/lxml/xslt.pxi":813
+      /* "src/lxml/xslt.pxi":814
  *             if self._buffer is NULL and not flags & python.PyBUF_WRITABLE:
  *                 self._buffer = <xmlChar*>buffer.buf
  *                 self._buffer_len = l             # <<<<<<<<<<<<<<
@@ -206458,7 +206549,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
       __pyx_v_self->_buffer_len = __pyx_v_l;
 
-      /* "src/lxml/xslt.pxi":814
+      /* "src/lxml/xslt.pxi":815
  *                 self._buffer = <xmlChar*>buffer.buf
  *                 self._buffer_len = l
  *                 self._buffer_refcnt = 1             # <<<<<<<<<<<<<<
@@ -206467,7 +206558,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
       __pyx_v_self->_buffer_refcnt = 1;
 
-      /* "src/lxml/xslt.pxi":811
+      /* "src/lxml/xslt.pxi":812
  *             self._saveToStringAndSize(<xmlChar**>&buffer.buf, &l)
  *             buffer.len = l
  *             if self._buffer is NULL and not flags & python.PyBUF_WRITABLE:             # <<<<<<<<<<<<<<
@@ -206476,7 +206567,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
     }
 
-    /* "src/lxml/xslt.pxi":808
+    /* "src/lxml/xslt.pxi":809
  *         if buffer is NULL:
  *             return
  *         if self._buffer is NULL or flags & python.PyBUF_WRITABLE:             # <<<<<<<<<<<<<<
@@ -206486,7 +206577,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
     goto __pyx_L4;
   }
 
-  /* "src/lxml/xslt.pxi":816
+  /* "src/lxml/xslt.pxi":817
  *                 self._buffer_refcnt = 1
  *         else:
  *             buffer.buf = self._buffer             # <<<<<<<<<<<<<<
@@ -206497,7 +206588,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
     __pyx_t_4 = __pyx_v_self->_buffer;
     __pyx_v_buffer->buf = __pyx_t_4;
 
-    /* "src/lxml/xslt.pxi":817
+    /* "src/lxml/xslt.pxi":818
  *         else:
  *             buffer.buf = self._buffer
  *             buffer.len = self._buffer_len             # <<<<<<<<<<<<<<
@@ -206507,7 +206598,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
     __pyx_t_5 = __pyx_v_self->_buffer_len;
     __pyx_v_buffer->len = __pyx_t_5;
 
-    /* "src/lxml/xslt.pxi":818
+    /* "src/lxml/xslt.pxi":819
  *             buffer.buf = self._buffer
  *             buffer.len = self._buffer_len
  *             self._buffer_refcnt += 1             # <<<<<<<<<<<<<<
@@ -206518,7 +206609,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
   }
   __pyx_L4:;
 
-  /* "src/lxml/xslt.pxi":819
+  /* "src/lxml/xslt.pxi":820
  *             buffer.len = self._buffer_len
  *             self._buffer_refcnt += 1
  *         if flags & python.PyBUF_WRITABLE:             # <<<<<<<<<<<<<<
@@ -206528,7 +206619,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":820
+    /* "src/lxml/xslt.pxi":821
  *             self._buffer_refcnt += 1
  *         if flags & python.PyBUF_WRITABLE:
  *             buffer.readonly = 0             # <<<<<<<<<<<<<<
@@ -206537,7 +206628,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
     __pyx_v_buffer->readonly = 0;
 
-    /* "src/lxml/xslt.pxi":819
+    /* "src/lxml/xslt.pxi":820
  *             buffer.len = self._buffer_len
  *             self._buffer_refcnt += 1
  *         if flags & python.PyBUF_WRITABLE:             # <<<<<<<<<<<<<<
@@ -206547,7 +206638,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
     goto __pyx_L10;
   }
 
-  /* "src/lxml/xslt.pxi":822
+  /* "src/lxml/xslt.pxi":823
  *             buffer.readonly = 0
  *         else:
  *             buffer.readonly = 1             # <<<<<<<<<<<<<<
@@ -206559,7 +206650,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
   }
   __pyx_L10:;
 
-  /* "src/lxml/xslt.pxi":823
+  /* "src/lxml/xslt.pxi":824
  *         else:
  *             buffer.readonly = 1
  *         if flags & python.PyBUF_FORMAT:             # <<<<<<<<<<<<<<
@@ -206569,7 +206660,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":824
+    /* "src/lxml/xslt.pxi":825
  *             buffer.readonly = 1
  *         if flags & python.PyBUF_FORMAT:
  *             buffer.format = "B"             # <<<<<<<<<<<<<<
@@ -206578,7 +206669,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
     __pyx_v_buffer->format = ((char *)"B");
 
-    /* "src/lxml/xslt.pxi":823
+    /* "src/lxml/xslt.pxi":824
  *         else:
  *             buffer.readonly = 1
  *         if flags & python.PyBUF_FORMAT:             # <<<<<<<<<<<<<<
@@ -206588,7 +206679,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
     goto __pyx_L11;
   }
 
-  /* "src/lxml/xslt.pxi":826
+  /* "src/lxml/xslt.pxi":827
  *             buffer.format = "B"
  *         else:
  *             buffer.format = NULL             # <<<<<<<<<<<<<<
@@ -206600,7 +206691,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
   }
   __pyx_L11:;
 
-  /* "src/lxml/xslt.pxi":827
+  /* "src/lxml/xslt.pxi":828
  *         else:
  *             buffer.format = NULL
  *         buffer.ndim = 0             # <<<<<<<<<<<<<<
@@ -206609,7 +206700,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
   __pyx_v_buffer->ndim = 0;
 
-  /* "src/lxml/xslt.pxi":828
+  /* "src/lxml/xslt.pxi":829
  *             buffer.format = NULL
  *         buffer.ndim = 0
  *         buffer.shape = NULL             # <<<<<<<<<<<<<<
@@ -206618,7 +206709,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
   __pyx_v_buffer->shape = NULL;
 
-  /* "src/lxml/xslt.pxi":829
+  /* "src/lxml/xslt.pxi":830
  *         buffer.ndim = 0
  *         buffer.shape = NULL
  *         buffer.strides = NULL             # <<<<<<<<<<<<<<
@@ -206627,7 +206718,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
   __pyx_v_buffer->strides = NULL;
 
-  /* "src/lxml/xslt.pxi":830
+  /* "src/lxml/xslt.pxi":831
  *         buffer.shape = NULL
  *         buffer.strides = NULL
  *         buffer.suboffsets = NULL             # <<<<<<<<<<<<<<
@@ -206636,7 +206727,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
   __pyx_v_buffer->suboffsets = NULL;
 
-  /* "src/lxml/xslt.pxi":831
+  /* "src/lxml/xslt.pxi":832
  *         buffer.strides = NULL
  *         buffer.suboffsets = NULL
  *         buffer.itemsize = 1             # <<<<<<<<<<<<<<
@@ -206645,7 +206736,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
   __pyx_v_buffer->itemsize = 1;
 
-  /* "src/lxml/xslt.pxi":832
+  /* "src/lxml/xslt.pxi":833
  *         buffer.suboffsets = NULL
  *         buffer.itemsize = 1
  *         buffer.internal = NULL             # <<<<<<<<<<<<<<
@@ -206654,7 +206745,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
   __pyx_v_buffer->internal = NULL;
 
-  /* "src/lxml/xslt.pxi":833
+  /* "src/lxml/xslt.pxi":834
  *         buffer.itemsize = 1
  *         buffer.internal = NULL
  *         if buffer.obj is not self: # set by Cython?             # <<<<<<<<<<<<<<
@@ -206665,7 +206756,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":834
+    /* "src/lxml/xslt.pxi":835
  *         buffer.internal = NULL
  *         if buffer.obj is not self: # set by Cython?
  *             buffer.obj = self             # <<<<<<<<<<<<<<
@@ -206678,7 +206769,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
     __Pyx_DECREF(__pyx_v_buffer->obj);
     __pyx_v_buffer->obj = ((PyObject *)__pyx_v_self);
 
-    /* "src/lxml/xslt.pxi":833
+    /* "src/lxml/xslt.pxi":834
  *         buffer.itemsize = 1
  *         buffer.internal = NULL
  *         if buffer.obj is not self: # set by Cython?             # <<<<<<<<<<<<<<
@@ -206687,7 +206778,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
  */
   }
 
-  /* "src/lxml/xslt.pxi":804
+  /* "src/lxml/xslt.pxi":805
  *         return _stripEncodingDeclaration(result)
  * 
  *     def __getbuffer__(self, Py_buffer* buffer, int flags):             # <<<<<<<<<<<<<<
@@ -206717,7 +206808,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_6__getbuffer__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":836
+/* "src/lxml/xslt.pxi":837
  *             buffer.obj = self
  * 
  *     def __releasebuffer__(self, Py_buffer* buffer):             # <<<<<<<<<<<<<<
@@ -206741,7 +206832,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__releasebuffer__", 0);
 
-  /* "src/lxml/xslt.pxi":837
+  /* "src/lxml/xslt.pxi":838
  * 
  *     def __releasebuffer__(self, Py_buffer* buffer):
  *         if buffer is NULL:             # <<<<<<<<<<<<<<
@@ -206751,7 +206842,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
   __pyx_t_1 = ((__pyx_v_buffer == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":838
+    /* "src/lxml/xslt.pxi":839
  *     def __releasebuffer__(self, Py_buffer* buffer):
  *         if buffer is NULL:
  *             return             # <<<<<<<<<<<<<<
@@ -206760,7 +206851,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
  */
     goto __pyx_L0;
 
-    /* "src/lxml/xslt.pxi":837
+    /* "src/lxml/xslt.pxi":838
  * 
  *     def __releasebuffer__(self, Py_buffer* buffer):
  *         if buffer is NULL:             # <<<<<<<<<<<<<<
@@ -206769,7 +206860,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
  */
   }
 
-  /* "src/lxml/xslt.pxi":839
+  /* "src/lxml/xslt.pxi":840
  *         if buffer is NULL:
  *             return
  *         if <xmlChar*>buffer.buf is self._buffer:             # <<<<<<<<<<<<<<
@@ -206779,7 +206870,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
   __pyx_t_1 = ((((xmlChar *)__pyx_v_buffer->buf) == __pyx_v_self->_buffer) != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":840
+    /* "src/lxml/xslt.pxi":841
  *             return
  *         if <xmlChar*>buffer.buf is self._buffer:
  *             self._buffer_refcnt -= 1             # <<<<<<<<<<<<<<
@@ -206788,7 +206879,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
  */
     __pyx_v_self->_buffer_refcnt = (__pyx_v_self->_buffer_refcnt - 1);
 
-    /* "src/lxml/xslt.pxi":841
+    /* "src/lxml/xslt.pxi":842
  *         if <xmlChar*>buffer.buf is self._buffer:
  *             self._buffer_refcnt -= 1
  *             if self._buffer_refcnt == 0:             # <<<<<<<<<<<<<<
@@ -206798,7 +206889,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
     __pyx_t_1 = ((__pyx_v_self->_buffer_refcnt == 0) != 0);
     if (__pyx_t_1) {
 
-      /* "src/lxml/xslt.pxi":842
+      /* "src/lxml/xslt.pxi":843
  *             self._buffer_refcnt -= 1
  *             if self._buffer_refcnt == 0:
  *                 tree.xmlFree(<char*>self._buffer)             # <<<<<<<<<<<<<<
@@ -206807,7 +206898,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
  */
       xmlFree(((char *)__pyx_v_self->_buffer));
 
-      /* "src/lxml/xslt.pxi":843
+      /* "src/lxml/xslt.pxi":844
  *             if self._buffer_refcnt == 0:
  *                 tree.xmlFree(<char*>self._buffer)
  *                 self._buffer = NULL             # <<<<<<<<<<<<<<
@@ -206816,7 +206907,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
  */
       __pyx_v_self->_buffer = NULL;
 
-      /* "src/lxml/xslt.pxi":841
+      /* "src/lxml/xslt.pxi":842
  *         if <xmlChar*>buffer.buf is self._buffer:
  *             self._buffer_refcnt -= 1
  *             if self._buffer_refcnt == 0:             # <<<<<<<<<<<<<<
@@ -206825,7 +206916,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
  */
     }
 
-    /* "src/lxml/xslt.pxi":839
+    /* "src/lxml/xslt.pxi":840
  *         if buffer is NULL:
  *             return
  *         if <xmlChar*>buffer.buf is self._buffer:             # <<<<<<<<<<<<<<
@@ -206835,7 +206926,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
     goto __pyx_L4;
   }
 
-  /* "src/lxml/xslt.pxi":845
+  /* "src/lxml/xslt.pxi":846
  *                 self._buffer = NULL
  *         else:
  *             tree.xmlFree(<char*>buffer.buf)             # <<<<<<<<<<<<<<
@@ -206847,7 +206938,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
   }
   __pyx_L4:;
 
-  /* "src/lxml/xslt.pxi":846
+  /* "src/lxml/xslt.pxi":847
  *         else:
  *             tree.xmlFree(<char*>buffer.buf)
  *         buffer.buf = NULL             # <<<<<<<<<<<<<<
@@ -206856,7 +206947,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
  */
   __pyx_v_buffer->buf = NULL;
 
-  /* "src/lxml/xslt.pxi":836
+  /* "src/lxml/xslt.pxi":837
  *             buffer.obj = self
  * 
  *     def __releasebuffer__(self, Py_buffer* buffer):             # <<<<<<<<<<<<<<
@@ -206869,7 +206960,7 @@ static void __pyx_pf_4lxml_5etree_15_XSLTResultTree_8__releasebuffer__(struct __
   __Pyx_RefNannyFinishContext();
 }
 
-/* "src/lxml/xslt.pxi":851
+/* "src/lxml/xslt.pxi":852
  *         """Return an ElementTree with profiling data for the stylesheet run.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -206904,7 +206995,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "src/lxml/xslt.pxi":853
+  /* "src/lxml/xslt.pxi":854
  *         def __get__(self):
  *             cdef object root
  *             if self._profile is None:             # <<<<<<<<<<<<<<
@@ -206915,7 +207006,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":854
+    /* "src/lxml/xslt.pxi":855
  *             cdef object root
  *             if self._profile is None:
  *                 return None             # <<<<<<<<<<<<<<
@@ -206926,7 +207017,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/xslt.pxi":853
+    /* "src/lxml/xslt.pxi":854
  *         def __get__(self):
  *             cdef object root
  *             if self._profile is None:             # <<<<<<<<<<<<<<
@@ -206935,19 +207026,19 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
  */
   }
 
-  /* "src/lxml/xslt.pxi":855
+  /* "src/lxml/xslt.pxi":856
  *             if self._profile is None:
  *                 return None
  *             root = self._profile.getroot()             # <<<<<<<<<<<<<<
  *             if root is None:
  *                 return None
  */
-  __pyx_t_3 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_self->_profile); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 855, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree_9_Document_getroot(__pyx_v_self->_profile); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 856, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_root = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "src/lxml/xslt.pxi":856
+  /* "src/lxml/xslt.pxi":857
  *                 return None
  *             root = self._profile.getroot()
  *             if root is None:             # <<<<<<<<<<<<<<
@@ -206958,7 +207049,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "src/lxml/xslt.pxi":857
+    /* "src/lxml/xslt.pxi":858
  *             root = self._profile.getroot()
  *             if root is None:
  *                 return None             # <<<<<<<<<<<<<<
@@ -206969,7 +207060,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/lxml/xslt.pxi":856
+    /* "src/lxml/xslt.pxi":857
  *                 return None
  *             root = self._profile.getroot()
  *             if root is None:             # <<<<<<<<<<<<<<
@@ -206978,7 +207069,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
  */
   }
 
-  /* "src/lxml/xslt.pxi":858
+  /* "src/lxml/xslt.pxi":859
  *             if root is None:
  *                 return None
  *             return ElementTree(root)             # <<<<<<<<<<<<<<
@@ -206986,7 +207077,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
  *         def __del__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ElementTree); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 858, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ElementTree); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 859, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -207000,14 +207091,14 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
   }
   __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_root) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_root);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 858, __pyx_L1_error)
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 859, __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/xslt.pxi":851
+  /* "src/lxml/xslt.pxi":852
  *         """Return an ElementTree with profiling data for the stylesheet run.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -207029,7 +207120,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":860
+/* "src/lxml/xslt.pxi":861
  *             return ElementTree(root)
  * 
  *         def __del__(self):             # <<<<<<<<<<<<<<
@@ -207055,7 +207146,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile_2__del__(struc
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "src/lxml/xslt.pxi":861
+  /* "src/lxml/xslt.pxi":862
  * 
  *         def __del__(self):
  *             self._profile = None             # <<<<<<<<<<<<<<
@@ -207068,7 +207159,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile_2__del__(struc
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_profile));
   __pyx_v_self->_profile = ((struct LxmlDocument *)Py_None);
 
-  /* "src/lxml/xslt.pxi":860
+  /* "src/lxml/xslt.pxi":861
  *             return ElementTree(root)
  * 
  *         def __del__(self):             # <<<<<<<<<<<<<<
@@ -207082,7 +207173,7 @@ static int __pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile_2__del__(struc
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":863
+/* "src/lxml/xslt.pxi":864
  *             self._profile = None
  * 
  * cdef _xsltResultTreeFactory(_Document doc, XSLT xslt, _Document profile):             # <<<<<<<<<<<<<<
@@ -207101,14 +207192,14 @@ static PyObject *__pyx_f_4lxml_5etree__xsltResultTreeFactory(struct LxmlDocument
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_xsltResultTreeFactory", 0);
 
-  /* "src/lxml/xslt.pxi":865
+  /* "src/lxml/xslt.pxi":866
  * cdef _xsltResultTreeFactory(_Document doc, XSLT xslt, _Document profile):
  *     cdef _XSLTResultTree result
  *     result = <_XSLTResultTree>_newElementTree(doc, None, _XSLTResultTree)             # <<<<<<<<<<<<<<
  *     result._xslt = xslt
  *     result._profile = profile
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__newElementTree(__pyx_v_doc, ((struct LxmlElement *)Py_None), ((PyObject *)__pyx_ptype_4lxml_5etree__XSLTResultTree))); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 865, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__newElementTree(__pyx_v_doc, ((struct LxmlElement *)Py_None), ((PyObject *)__pyx_ptype_4lxml_5etree__XSLTResultTree))); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 866, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -207116,7 +207207,7 @@ static PyObject *__pyx_f_4lxml_5etree__xsltResultTreeFactory(struct LxmlDocument
   __pyx_v_result = ((struct __pyx_obj_4lxml_5etree__XSLTResultTree *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "src/lxml/xslt.pxi":866
+  /* "src/lxml/xslt.pxi":867
  *     cdef _XSLTResultTree result
  *     result = <_XSLTResultTree>_newElementTree(doc, None, _XSLTResultTree)
  *     result._xslt = xslt             # <<<<<<<<<<<<<<
@@ -207129,7 +207220,7 @@ static PyObject *__pyx_f_4lxml_5etree__xsltResultTreeFactory(struct LxmlDocument
   __Pyx_DECREF(((PyObject *)__pyx_v_result->_xslt));
   __pyx_v_result->_xslt = __pyx_v_xslt;
 
-  /* "src/lxml/xslt.pxi":867
+  /* "src/lxml/xslt.pxi":868
  *     result = <_XSLTResultTree>_newElementTree(doc, None, _XSLTResultTree)
  *     result._xslt = xslt
  *     result._profile = profile             # <<<<<<<<<<<<<<
@@ -207142,7 +207233,7 @@ static PyObject *__pyx_f_4lxml_5etree__xsltResultTreeFactory(struct LxmlDocument
   __Pyx_DECREF(((PyObject *)__pyx_v_result->_profile));
   __pyx_v_result->_profile = __pyx_v_profile;
 
-  /* "src/lxml/xslt.pxi":868
+  /* "src/lxml/xslt.pxi":869
  *     result._xslt = xslt
  *     result._profile = profile
  *     return result             # <<<<<<<<<<<<<<
@@ -207154,7 +207245,7 @@ static PyObject *__pyx_f_4lxml_5etree__xsltResultTreeFactory(struct LxmlDocument
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":863
+  /* "src/lxml/xslt.pxi":864
  *             self._profile = None
  * 
  * cdef _xsltResultTreeFactory(_Document doc, XSLT xslt, _Document profile):             # <<<<<<<<<<<<<<
@@ -207175,7 +207266,7 @@ static PyObject *__pyx_f_4lxml_5etree__xsltResultTreeFactory(struct LxmlDocument
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":886
+/* "src/lxml/xslt.pxi":887
  * cdef XPath __findStylesheetByID = None
  * 
  * cdef _findStylesheetByID(_Document doc, id):             # <<<<<<<<<<<<<<
@@ -207196,7 +207287,7 @@ static PyObject *__pyx_f_4lxml_5etree__findStylesheetByID(struct LxmlDocument *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_findStylesheetByID", 0);
 
-  /* "src/lxml/xslt.pxi":888
+  /* "src/lxml/xslt.pxi":889
  * cdef _findStylesheetByID(_Document doc, id):
  *     global __findStylesheetByID
  *     if __findStylesheetByID is None:             # <<<<<<<<<<<<<<
@@ -207207,29 +207298,29 @@ static PyObject *__pyx_f_4lxml_5etree__findStylesheetByID(struct LxmlDocument *_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":891
+    /* "src/lxml/xslt.pxi":892
  *         __findStylesheetByID = XPath(
  *             u"//xsl:stylesheet[@xml:id = $id]",
  *             namespaces={u"xsl" : u"http://www.w3.org/1999/XSL/Transform"})             # <<<<<<<<<<<<<<
  *     return __findStylesheetByID(doc, id=id)
  * 
  */
-    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 891, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 892, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 891, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 892, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_xsl, __pyx_kp_u_http_www_w3_org_1999_XSL_Transfo) < 0) __PYX_ERR(4, 891, __pyx_L1_error)
-    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_namespaces, __pyx_t_4) < 0) __PYX_ERR(4, 891, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_xsl, __pyx_kp_u_http_www_w3_org_1999_XSL_Transfo) < 0) __PYX_ERR(4, 892, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_namespaces, __pyx_t_4) < 0) __PYX_ERR(4, 892, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/xslt.pxi":889
+    /* "src/lxml/xslt.pxi":890
  *     global __findStylesheetByID
  *     if __findStylesheetByID is None:
  *         __findStylesheetByID = XPath(             # <<<<<<<<<<<<<<
  *             u"//xsl:stylesheet[@xml:id = $id]",
  *             namespaces={u"xsl" : u"http://www.w3.org/1999/XSL/Transform"})
  */
-    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XPath), __pyx_tuple__102, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 889, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XPath), __pyx_tuple__102, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 890, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree___findStylesheetByID));
@@ -207237,7 +207328,7 @@ static PyObject *__pyx_f_4lxml_5etree__findStylesheetByID(struct LxmlDocument *_
     __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "src/lxml/xslt.pxi":888
+    /* "src/lxml/xslt.pxi":889
  * cdef _findStylesheetByID(_Document doc, id):
  *     global __findStylesheetByID
  *     if __findStylesheetByID is None:             # <<<<<<<<<<<<<<
@@ -207246,7 +207337,7 @@ static PyObject *__pyx_f_4lxml_5etree__findStylesheetByID(struct LxmlDocument *_
  */
   }
 
-  /* "src/lxml/xslt.pxi":892
+  /* "src/lxml/xslt.pxi":893
  *             u"//xsl:stylesheet[@xml:id = $id]",
  *             namespaces={u"xsl" : u"http://www.w3.org/1999/XSL/Transform"})
  *     return __findStylesheetByID(doc, id=id)             # <<<<<<<<<<<<<<
@@ -207254,15 +207345,15 @@ static PyObject *__pyx_f_4lxml_5etree__findStylesheetByID(struct LxmlDocument *_
  * cdef class _XSLTProcessingInstruction(PIBase):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 892, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 893, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_doc));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_doc));
   PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_doc));
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 892, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 893, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_id, __pyx_v_id) < 0) __PYX_ERR(4, 892, __pyx_L1_error)
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_4lxml_5etree___findStylesheetByID), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 892, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_id, __pyx_v_id) < 0) __PYX_ERR(4, 893, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_4lxml_5etree___findStylesheetByID), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 893, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -207270,7 +207361,7 @@ static PyObject *__pyx_f_4lxml_5etree__findStylesheetByID(struct LxmlDocument *_
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":886
+  /* "src/lxml/xslt.pxi":887
  * cdef XPath __findStylesheetByID = None
  * 
  * cdef _findStylesheetByID(_Document doc, id):             # <<<<<<<<<<<<<<
@@ -207291,7 +207382,7 @@ static PyObject *__pyx_f_4lxml_5etree__findStylesheetByID(struct LxmlDocument *_
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":895
+/* "src/lxml/xslt.pxi":896
  * 
  * cdef class _XSLTProcessingInstruction(PIBase):
  *     def parseXSL(self, parser=None):             # <<<<<<<<<<<<<<
@@ -207333,7 +207424,7 @@ static PyObject *__pyx_pw_4lxml_5etree_26_XSLTProcessingInstruction_1parseXSL(Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "parseXSL") < 0)) __PYX_ERR(4, 895, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "parseXSL") < 0)) __PYX_ERR(4, 896, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -207347,7 +207438,7 @@ static PyObject *__pyx_pw_4lxml_5etree_26_XSLTProcessingInstruction_1parseXSL(Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("parseXSL", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 895, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("parseXSL", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 896, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._XSLTProcessingInstruction.parseXSL", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -207392,16 +207483,16 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("parseXSL", 0);
 
-  /* "src/lxml/xslt.pxi":911
+  /* "src/lxml/xslt.pxi":912
  *         cdef const_xmlChar* c_href
  *         cdef xmlAttr* c_attr
  *         _assertValidNode(self)             # <<<<<<<<<<<<<<
  *         if self._c_node.content is NULL:
  *             raise ValueError, u"PI lacks content"
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(4, 911, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree__assertValidNode(((struct LxmlElement *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(4, 912, __pyx_L1_error)
 
-  /* "src/lxml/xslt.pxi":912
+  /* "src/lxml/xslt.pxi":913
  *         cdef xmlAttr* c_attr
  *         _assertValidNode(self)
  *         if self._c_node.content is NULL:             # <<<<<<<<<<<<<<
@@ -207411,7 +207502,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
   __pyx_t_2 = ((__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node->content == NULL) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/xslt.pxi":913
+    /* "src/lxml/xslt.pxi":914
  *         _assertValidNode(self)
  *         if self._c_node.content is NULL:
  *             raise ValueError, u"PI lacks content"             # <<<<<<<<<<<<<<
@@ -207419,9 +207510,9 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  *         if len(hrefs) != 1:
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_PI_lacks_content, 0, 0);
-    __PYX_ERR(4, 913, __pyx_L1_error)
+    __PYX_ERR(4, 914, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":912
+    /* "src/lxml/xslt.pxi":913
  *         cdef xmlAttr* c_attr
  *         _assertValidNode(self)
  *         if self._c_node.content is NULL:             # <<<<<<<<<<<<<<
@@ -207430,7 +207521,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   }
 
-  /* "src/lxml/xslt.pxi":914
+  /* "src/lxml/xslt.pxi":915
  *         if self._c_node.content is NULL:
  *             raise ValueError, u"PI lacks content"
  *         hrefs = _FIND_PI_HREF(u' ' + (<unsigned char*>self._c_node.content).decode('UTF-8'))             # <<<<<<<<<<<<<<
@@ -207438,9 +207529,9 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  *             raise ValueError, u"malformed PI attributes"
  */
   __pyx_t_4 = ((unsigned char *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node->content);
-  __pyx_t_5 = __Pyx_decode_c_string(((char const *)__pyx_t_4), 0, strlen(((char const *)__pyx_t_4)), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 914, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_decode_c_string(((char const *)__pyx_t_4), 0, strlen(((char const *)__pyx_t_4)), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 915, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_kp_u__11, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 914, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_kp_u__11, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 915, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_INCREF(__pyx_v_4lxml_5etree__FIND_PI_HREF);
@@ -207457,24 +207548,24 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
   __pyx_t_3 = (__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_3)) __PYX_ERR(4, 914, __pyx_L1_error)
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 915, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_hrefs = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "src/lxml/xslt.pxi":915
+  /* "src/lxml/xslt.pxi":916
  *             raise ValueError, u"PI lacks content"
  *         hrefs = _FIND_PI_HREF(u' ' + (<unsigned char*>self._c_node.content).decode('UTF-8'))
  *         if len(hrefs) != 1:             # <<<<<<<<<<<<<<
  *             raise ValueError, u"malformed PI attributes"
  *         hrefs = hrefs[0]
  */
-  __pyx_t_8 = PyObject_Length(__pyx_v_hrefs); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(4, 915, __pyx_L1_error)
+  __pyx_t_8 = PyObject_Length(__pyx_v_hrefs); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(4, 916, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_8 != 1) != 0);
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/xslt.pxi":916
+    /* "src/lxml/xslt.pxi":917
  *         hrefs = _FIND_PI_HREF(u' ' + (<unsigned char*>self._c_node.content).decode('UTF-8'))
  *         if len(hrefs) != 1:
  *             raise ValueError, u"malformed PI attributes"             # <<<<<<<<<<<<<<
@@ -207482,9 +207573,9 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  *         href_utf = utf8(hrefs[0] or hrefs[1])
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_malformed_PI_attributes, 0, 0);
-    __PYX_ERR(4, 916, __pyx_L1_error)
+    __PYX_ERR(4, 917, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":915
+    /* "src/lxml/xslt.pxi":916
  *             raise ValueError, u"PI lacks content"
  *         hrefs = _FIND_PI_HREF(u' ' + (<unsigned char*>self._c_node.content).decode('UTF-8'))
  *         if len(hrefs) != 1:             # <<<<<<<<<<<<<<
@@ -207493,28 +207584,28 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   }
 
-  /* "src/lxml/xslt.pxi":917
+  /* "src/lxml/xslt.pxi":918
  *         if len(hrefs) != 1:
  *             raise ValueError, u"malformed PI attributes"
  *         hrefs = hrefs[0]             # <<<<<<<<<<<<<<
  *         href_utf = utf8(hrefs[0] or hrefs[1])
  *         c_href = _xcstr(href_utf)
  */
-  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_hrefs, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 917, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_hrefs, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 918, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_hrefs, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "src/lxml/xslt.pxi":918
+  /* "src/lxml/xslt.pxi":919
  *             raise ValueError, u"malformed PI attributes"
  *         hrefs = hrefs[0]
  *         href_utf = utf8(hrefs[0] or hrefs[1])             # <<<<<<<<<<<<<<
  *         c_href = _xcstr(href_utf)
  * 
  */
-  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_hrefs, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 918, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_hrefs, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 919, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 918, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 919, __pyx_L1_error)
   if (!__pyx_t_2) {
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
@@ -207523,19 +207614,19 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L5_bool_binop_done;
   }
-  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_hrefs, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 918, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_hrefs, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 919, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_t_5);
   __pyx_t_3 = __pyx_t_5;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_L5_bool_binop_done:;
-  __pyx_t_5 = utf8(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 918, __pyx_L1_error)
+  __pyx_t_5 = utf8(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 919, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_href_utf = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "src/lxml/xslt.pxi":919
+  /* "src/lxml/xslt.pxi":920
  *         hrefs = hrefs[0]
  *         href_utf = utf8(hrefs[0] or hrefs[1])
  *         c_href = _xcstr(href_utf)             # <<<<<<<<<<<<<<
@@ -207544,7 +207635,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   __pyx_v_c_href = (const xmlChar*)PyBytes_AS_STRING(__pyx_v_href_utf);
 
-  /* "src/lxml/xslt.pxi":921
+  /* "src/lxml/xslt.pxi":922
  *         c_href = _xcstr(href_utf)
  * 
  *         if c_href[0] != c'#':             # <<<<<<<<<<<<<<
@@ -207554,7 +207645,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
   __pyx_t_2 = (((__pyx_v_c_href[0]) != '#') != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":923
+    /* "src/lxml/xslt.pxi":924
  *         if c_href[0] != c'#':
  *             # normal URL, try to parse from it
  *             c_href = tree.xmlBuildURI(             # <<<<<<<<<<<<<<
@@ -207563,7 +207654,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
     __pyx_v_c_href = xmlBuildURI(__pyx_v_c_href, xmlNodeGetBase(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node->doc, __pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node));
 
-    /* "src/lxml/xslt.pxi":926
+    /* "src/lxml/xslt.pxi":927
  *                 c_href,
  *                 tree.xmlNodeGetBase(self._c_node.doc, self._c_node))
  *             if c_href is not NULL:             # <<<<<<<<<<<<<<
@@ -207573,7 +207664,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
     __pyx_t_2 = ((__pyx_v_c_href != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "src/lxml/xslt.pxi":927
+      /* "src/lxml/xslt.pxi":928
  *                 tree.xmlNodeGetBase(self._c_node.doc, self._c_node))
  *             if c_href is not NULL:
  *                 try:             # <<<<<<<<<<<<<<
@@ -207582,20 +207673,20 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
       /*try:*/ {
 
-        /* "src/lxml/xslt.pxi":928
+        /* "src/lxml/xslt.pxi":929
  *             if c_href is not NULL:
  *                 try:
  *                     href_utf = <unsigned char*>c_href             # <<<<<<<<<<<<<<
  *                 finally:
  *                     tree.xmlFree(<char*>c_href)
  */
-        __pyx_t_5 = __Pyx_PyBytes_FromCString(((unsigned char *)__pyx_v_c_href)); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 928, __pyx_L10_error)
+        __pyx_t_5 = __Pyx_PyBytes_FromCString(((unsigned char *)__pyx_v_c_href)); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 929, __pyx_L10_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF_SET(__pyx_v_href_utf, ((PyObject*)__pyx_t_5));
         __pyx_t_5 = 0;
       }
 
-      /* "src/lxml/xslt.pxi":930
+      /* "src/lxml/xslt.pxi":931
  *                     href_utf = <unsigned char*>c_href
  *                 finally:
  *                     tree.xmlFree(<char*>c_href)             # <<<<<<<<<<<<<<
@@ -207645,7 +207736,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
         __pyx_L11:;
       }
 
-      /* "src/lxml/xslt.pxi":926
+      /* "src/lxml/xslt.pxi":927
  *                 c_href,
  *                 tree.xmlNodeGetBase(self._c_node.doc, self._c_node))
  *             if c_href is not NULL:             # <<<<<<<<<<<<<<
@@ -207654,20 +207745,20 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
     }
 
-    /* "src/lxml/xslt.pxi":931
+    /* "src/lxml/xslt.pxi":932
  *                 finally:
  *                     tree.xmlFree(<char*>c_href)
  *             result_doc = _parseDocumentFromURL(href_utf, parser)             # <<<<<<<<<<<<<<
  *             return _elementTreeFactory(result_doc, None)
  * 
  */
-    if (!(likely(((__pyx_v_parser) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_parser, __pyx_ptype_4lxml_5etree__BaseParser))))) __PYX_ERR(4, 931, __pyx_L1_error)
-    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocumentFromURL(__pyx_v_href_utf, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser))); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 931, __pyx_L1_error)
+    if (!(likely(((__pyx_v_parser) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_parser, __pyx_ptype_4lxml_5etree__BaseParser))))) __PYX_ERR(4, 932, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocumentFromURL(__pyx_v_href_utf, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser))); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 932, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_v_result_doc = ((struct LxmlDocument *)__pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "src/lxml/xslt.pxi":932
+    /* "src/lxml/xslt.pxi":933
  *                     tree.xmlFree(<char*>c_href)
  *             result_doc = _parseDocumentFromURL(href_utf, parser)
  *             return _elementTreeFactory(result_doc, None)             # <<<<<<<<<<<<<<
@@ -207675,13 +207766,13 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  *         # ID reference to embedded stylesheet
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(__pyx_v_result_doc, ((struct LxmlElement *)Py_None))); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 932, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(__pyx_v_result_doc, ((struct LxmlElement *)Py_None))); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 933, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_r = __pyx_t_5;
     __pyx_t_5 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/xslt.pxi":921
+    /* "src/lxml/xslt.pxi":922
  *         c_href = _xcstr(href_utf)
  * 
  *         if c_href[0] != c'#':             # <<<<<<<<<<<<<<
@@ -207690,7 +207781,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   }
 
-  /* "src/lxml/xslt.pxi":936
+  /* "src/lxml/xslt.pxi":937
  *         # ID reference to embedded stylesheet
  *         # try XML:ID lookup
  *         _assertValidDoc(self._doc)             # <<<<<<<<<<<<<<
@@ -207699,10 +207790,10 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   __pyx_t_5 = ((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._doc);
   __Pyx_INCREF(__pyx_t_5);
-  __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidDoc(((struct LxmlDocument *)__pyx_t_5)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(4, 936, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidDoc(((struct LxmlDocument *)__pyx_t_5)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(4, 937, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "src/lxml/xslt.pxi":937
+  /* "src/lxml/xslt.pxi":938
  *         # try XML:ID lookup
  *         _assertValidDoc(self._doc)
  *         c_href += 1 # skip leading '#'             # <<<<<<<<<<<<<<
@@ -207711,7 +207802,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   __pyx_v_c_href = (__pyx_v_c_href + 1);
 
-  /* "src/lxml/xslt.pxi":938
+  /* "src/lxml/xslt.pxi":939
  *         _assertValidDoc(self._doc)
  *         c_href += 1 # skip leading '#'
  *         c_attr = tree.xmlGetID(self._c_node.doc, c_href)             # <<<<<<<<<<<<<<
@@ -207720,7 +207811,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   __pyx_v_c_attr = xmlGetID(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node->doc, __pyx_v_c_href);
 
-  /* "src/lxml/xslt.pxi":939
+  /* "src/lxml/xslt.pxi":940
  *         c_href += 1 # skip leading '#'
  *         c_attr = tree.xmlGetID(self._c_node.doc, c_href)
  *         if c_attr is not NULL and c_attr.doc is self._c_node.doc:             # <<<<<<<<<<<<<<
@@ -207738,7 +207829,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
   __pyx_L15_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":940
+    /* "src/lxml/xslt.pxi":941
  *         c_attr = tree.xmlGetID(self._c_node.doc, c_href)
  *         if c_attr is not NULL and c_attr.doc is self._c_node.doc:
  *             result_node = _elementFactory(self._doc, c_attr.parent)             # <<<<<<<<<<<<<<
@@ -207747,13 +207838,13 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
     __pyx_t_5 = ((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._doc);
     __Pyx_INCREF(__pyx_t_5);
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_attr->parent)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 940, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_5), __pyx_v_c_attr->parent)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 941, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_v_result_node = ((struct LxmlElement *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "src/lxml/xslt.pxi":941
+    /* "src/lxml/xslt.pxi":942
  *         if c_attr is not NULL and c_attr.doc is self._c_node.doc:
  *             result_node = _elementFactory(self._doc, c_attr.parent)
  *             return _elementTreeFactory(result_node._doc, result_node)             # <<<<<<<<<<<<<<
@@ -207763,14 +207854,14 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
     __Pyx_XDECREF(__pyx_r);
     __pyx_t_3 = ((PyObject *)__pyx_v_result_node->_doc);
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(((struct LxmlDocument *)__pyx_t_3), __pyx_v_result_node)); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 941, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(((struct LxmlDocument *)__pyx_t_3), __pyx_v_result_node)); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 942, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = __pyx_t_5;
     __pyx_t_5 = 0;
     goto __pyx_L0;
 
-    /* "src/lxml/xslt.pxi":939
+    /* "src/lxml/xslt.pxi":940
  *         c_href += 1 # skip leading '#'
  *         c_attr = tree.xmlGetID(self._c_node.doc, c_href)
  *         if c_attr is not NULL and c_attr.doc is self._c_node.doc:             # <<<<<<<<<<<<<<
@@ -207779,7 +207870,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   }
 
-  /* "src/lxml/xslt.pxi":944
+  /* "src/lxml/xslt.pxi":945
  * 
  *         # try XPath search
  *         root = _findStylesheetByID(self._doc, funicode(c_href))             # <<<<<<<<<<<<<<
@@ -207788,27 +207879,27 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   __pyx_t_5 = ((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._doc);
   __Pyx_INCREF(__pyx_t_5);
-  __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_href); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 944, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_href); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 945, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_6 = __pyx_f_4lxml_5etree__findStylesheetByID(((struct LxmlDocument *)__pyx_t_5), __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 944, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_4lxml_5etree__findStylesheetByID(((struct LxmlDocument *)__pyx_t_5), __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 945, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_root = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "src/lxml/xslt.pxi":945
+  /* "src/lxml/xslt.pxi":946
  *         # try XPath search
  *         root = _findStylesheetByID(self._doc, funicode(c_href))
  *         if not root:             # <<<<<<<<<<<<<<
  *             raise ValueError, u"reference to non-existing embedded stylesheet"
  *         elif len(root) > 1:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_root); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 945, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_root); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 946, __pyx_L1_error)
   __pyx_t_17 = ((!__pyx_t_2) != 0);
   if (unlikely(__pyx_t_17)) {
 
-    /* "src/lxml/xslt.pxi":946
+    /* "src/lxml/xslt.pxi":947
  *         root = _findStylesheetByID(self._doc, funicode(c_href))
  *         if not root:
  *             raise ValueError, u"reference to non-existing embedded stylesheet"             # <<<<<<<<<<<<<<
@@ -207816,9 +207907,9 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  *             raise ValueError, u"ambiguous reference to embedded stylesheet"
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_reference_to_non_existing_embedd, 0, 0);
-    __PYX_ERR(4, 946, __pyx_L1_error)
+    __PYX_ERR(4, 947, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":945
+    /* "src/lxml/xslt.pxi":946
  *         # try XPath search
  *         root = _findStylesheetByID(self._doc, funicode(c_href))
  *         if not root:             # <<<<<<<<<<<<<<
@@ -207827,18 +207918,18 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   }
 
-  /* "src/lxml/xslt.pxi":947
+  /* "src/lxml/xslt.pxi":948
  *         if not root:
  *             raise ValueError, u"reference to non-existing embedded stylesheet"
  *         elif len(root) > 1:             # <<<<<<<<<<<<<<
  *             raise ValueError, u"ambiguous reference to embedded stylesheet"
  *         result_node = root[0]
  */
-  __pyx_t_8 = PyObject_Length(__pyx_v_root); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(4, 947, __pyx_L1_error)
+  __pyx_t_8 = PyObject_Length(__pyx_v_root); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(4, 948, __pyx_L1_error)
   __pyx_t_17 = ((__pyx_t_8 > 1) != 0);
   if (unlikely(__pyx_t_17)) {
 
-    /* "src/lxml/xslt.pxi":948
+    /* "src/lxml/xslt.pxi":949
  *             raise ValueError, u"reference to non-existing embedded stylesheet"
  *         elif len(root) > 1:
  *             raise ValueError, u"ambiguous reference to embedded stylesheet"             # <<<<<<<<<<<<<<
@@ -207846,9 +207937,9 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  *         return _elementTreeFactory(result_node._doc, result_node)
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_ambiguous_reference_to_embedded, 0, 0);
-    __PYX_ERR(4, 948, __pyx_L1_error)
+    __PYX_ERR(4, 949, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":947
+    /* "src/lxml/xslt.pxi":948
  *         if not root:
  *             raise ValueError, u"reference to non-existing embedded stylesheet"
  *         elif len(root) > 1:             # <<<<<<<<<<<<<<
@@ -207857,20 +207948,20 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
  */
   }
 
-  /* "src/lxml/xslt.pxi":949
+  /* "src/lxml/xslt.pxi":950
  *         elif len(root) > 1:
  *             raise ValueError, u"ambiguous reference to embedded stylesheet"
  *         result_node = root[0]             # <<<<<<<<<<<<<<
  *         return _elementTreeFactory(result_node._doc, result_node)
  * 
  */
-  __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_root, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 949, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_root, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 950, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(4, 949, __pyx_L1_error)
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_4lxml_5etree__Element))))) __PYX_ERR(4, 950, __pyx_L1_error)
   __pyx_v_result_node = ((struct LxmlElement *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "src/lxml/xslt.pxi":950
+  /* "src/lxml/xslt.pxi":951
  *             raise ValueError, u"ambiguous reference to embedded stylesheet"
  *         result_node = root[0]
  *         return _elementTreeFactory(result_node._doc, result_node)             # <<<<<<<<<<<<<<
@@ -207880,14 +207971,14 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_6 = ((PyObject *)__pyx_v_result_node->_doc);
   __Pyx_INCREF(__pyx_t_6);
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(((struct LxmlDocument *)__pyx_t_6), __pyx_v_result_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 950, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__elementTreeFactory(((struct LxmlDocument *)__pyx_t_6), __pyx_v_result_node)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 951, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "src/lxml/xslt.pxi":895
+  /* "src/lxml/xslt.pxi":896
  * 
  * cdef class _XSLTProcessingInstruction(PIBase):
  *     def parseXSL(self, parser=None):             # <<<<<<<<<<<<<<
@@ -207914,7 +208005,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
   return __pyx_r;
 }
 
-/* "src/lxml/xslt.pxi":952
+/* "src/lxml/xslt.pxi":953
  *         return _elementTreeFactory(result_node._doc, result_node)
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
@@ -207958,11 +208049,11 @@ static PyObject *__pyx_pw_4lxml_5etree_26_XSLTProcessingInstruction_3set(PyObjec
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); __PYX_ERR(4, 952, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, 1); __PYX_ERR(4, 953, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) __PYX_ERR(4, 952, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set") < 0)) __PYX_ERR(4, 953, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -207975,7 +208066,7 @@ static PyObject *__pyx_pw_4lxml_5etree_26_XSLTProcessingInstruction_3set(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 952, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 953, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._XSLTProcessingInstruction.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -208008,17 +208099,17 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set", 0);
 
-  /* "src/lxml/xslt.pxi":958
+  /* "src/lxml/xslt.pxi":959
  *         the processing instruction.
  *         """
  *         if key != u"href":             # <<<<<<<<<<<<<<
  *             raise AttributeError, \
  *                 u"only setting the 'href' attribute is supported on XSLT-PIs"
  */
-  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_key, __pyx_n_u_href, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(4, 958, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_key, __pyx_n_u_href, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(4, 959, __pyx_L1_error)
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/lxml/xslt.pxi":959
+    /* "src/lxml/xslt.pxi":960
  *         """
  *         if key != u"href":
  *             raise AttributeError, \             # <<<<<<<<<<<<<<
@@ -208026,9 +208117,9 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
  *         if value is None:
  */
     __Pyx_Raise(__pyx_builtin_AttributeError, __pyx_kp_u_only_setting_the_href_attribute, 0, 0);
-    __PYX_ERR(4, 959, __pyx_L1_error)
+    __PYX_ERR(4, 960, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":958
+    /* "src/lxml/xslt.pxi":959
  *         the processing instruction.
  *         """
  *         if key != u"href":             # <<<<<<<<<<<<<<
@@ -208037,7 +208128,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
  */
   }
 
-  /* "src/lxml/xslt.pxi":961
+  /* "src/lxml/xslt.pxi":962
  *             raise AttributeError, \
  *                 u"only setting the 'href' attribute is supported on XSLT-PIs"
  *         if value is None:             # <<<<<<<<<<<<<<
@@ -208048,7 +208139,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":962
+    /* "src/lxml/xslt.pxi":963
  *                 u"only setting the 'href' attribute is supported on XSLT-PIs"
  *         if value is None:
  *             attrib = u""             # <<<<<<<<<<<<<<
@@ -208058,7 +208149,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
     __Pyx_INCREF(__pyx_kp_u__12);
     __pyx_v_attrib = __pyx_kp_u__12;
 
-    /* "src/lxml/xslt.pxi":961
+    /* "src/lxml/xslt.pxi":962
  *             raise AttributeError, \
  *                 u"only setting the 'href' attribute is supported on XSLT-PIs"
  *         if value is None:             # <<<<<<<<<<<<<<
@@ -208068,27 +208159,27 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
     goto __pyx_L4;
   }
 
-  /* "src/lxml/xslt.pxi":963
+  /* "src/lxml/xslt.pxi":964
  *         if value is None:
  *             attrib = u""
  *         elif u'"' in value or u'>' in value:             # <<<<<<<<<<<<<<
  *             raise ValueError, u"Invalid URL, must not contain '\"' or '>'"
  *         else:
  */
-  __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__23, __pyx_v_value, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(4, 963, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__23, __pyx_v_value, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(4, 964, __pyx_L1_error)
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (!__pyx_t_3) {
   } else {
     __pyx_t_2 = __pyx_t_3;
     goto __pyx_L5_bool_binop_done;
   }
-  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__26, __pyx_v_value, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(4, 963, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__26, __pyx_v_value, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(4, 964, __pyx_L1_error)
   __pyx_t_1 = (__pyx_t_3 != 0);
   __pyx_t_2 = __pyx_t_1;
   __pyx_L5_bool_binop_done:;
   if (unlikely(__pyx_t_2)) {
 
-    /* "src/lxml/xslt.pxi":964
+    /* "src/lxml/xslt.pxi":965
  *             attrib = u""
  *         elif u'"' in value or u'>' in value:
  *             raise ValueError, u"Invalid URL, must not contain '\"' or '>'"             # <<<<<<<<<<<<<<
@@ -208096,9 +208187,9 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
  *             attrib = f' href="{value}"'
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_Invalid_URL_must_not_contain_or, 0, 0);
-    __PYX_ERR(4, 964, __pyx_L1_error)
+    __PYX_ERR(4, 965, __pyx_L1_error)
 
-    /* "src/lxml/xslt.pxi":963
+    /* "src/lxml/xslt.pxi":964
  *         if value is None:
  *             attrib = u""
  *         elif u'"' in value or u'>' in value:             # <<<<<<<<<<<<<<
@@ -208107,7 +208198,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
  */
   }
 
-  /* "src/lxml/xslt.pxi":966
+  /* "src/lxml/xslt.pxi":967
  *             raise ValueError, u"Invalid URL, must not contain '\"' or '>'"
  *         else:
  *             attrib = f' href="{value}"'             # <<<<<<<<<<<<<<
@@ -208115,7 +208206,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
  *         if _FIND_PI_HREF(text):
  */
   /*else*/ {
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 966, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 967, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = 0;
     __pyx_t_6 = 127;
@@ -208123,7 +208214,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
     __pyx_t_5 += 7;
     __Pyx_GIVEREF(__pyx_kp_u_href_2);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_href_2);
-    __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 966, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 967, __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);
@@ -208134,7 +208225,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
     __pyx_t_5 += 1;
     __Pyx_GIVEREF(__pyx_kp_u__23);
     PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__23);
-    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 966, __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(4, 967, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_attrib = ((PyObject*)__pyx_t_7);
@@ -208142,22 +208233,22 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
   }
   __pyx_L4:;
 
-  /* "src/lxml/xslt.pxi":967
+  /* "src/lxml/xslt.pxi":968
  *         else:
  *             attrib = f' href="{value}"'
  *         text = u' ' + self.text             # <<<<<<<<<<<<<<
  *         if _FIND_PI_HREF(text):
  *             self.text = _REPLACE_PI_HREF(attrib, text)
  */
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 967, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 968, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_4 = PyNumber_Add(__pyx_kp_u__11, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 967, __pyx_L1_error)
+  __pyx_t_4 = PyNumber_Add(__pyx_kp_u__11, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 968, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __pyx_v_text = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "src/lxml/xslt.pxi":968
+  /* "src/lxml/xslt.pxi":969
  *             attrib = f' href="{value}"'
  *         text = u' ' + self.text
  *         if _FIND_PI_HREF(text):             # <<<<<<<<<<<<<<
@@ -208177,14 +208268,14 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
   }
   __pyx_t_4 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_v_text) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_text);
   __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
-  if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 968, __pyx_L1_error)
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 969, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 968, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 969, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (__pyx_t_2) {
 
-    /* "src/lxml/xslt.pxi":969
+    /* "src/lxml/xslt.pxi":970
  *         text = u' ' + self.text
  *         if _FIND_PI_HREF(text):
  *             self.text = _REPLACE_PI_HREF(attrib, text)             # <<<<<<<<<<<<<<
@@ -208207,7 +208298,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
     #if CYTHON_FAST_PYCALL
     if (PyFunction_Check(__pyx_t_7)) {
       PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_attrib, __pyx_v_text};
-      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 969, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 970, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_GOTREF(__pyx_t_4);
     } else
@@ -208215,13 +208306,13 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
     #if CYTHON_FAST_PYCCALL
     if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
       PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_attrib, __pyx_v_text};
-      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 969, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 970, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_GOTREF(__pyx_t_4);
     } else
     #endif
     {
-      __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(4, 969, __pyx_L1_error)
+      __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(4, 970, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       if (__pyx_t_8) {
         __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -208232,15 +208323,15 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
       __Pyx_INCREF(__pyx_v_text);
       __Pyx_GIVEREF(__pyx_v_text);
       PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_v_text);
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 969, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 970, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text, __pyx_t_4) < 0) __PYX_ERR(4, 969, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text, __pyx_t_4) < 0) __PYX_ERR(4, 970, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/lxml/xslt.pxi":968
+    /* "src/lxml/xslt.pxi":969
  *             attrib = f' href="{value}"'
  *         text = u' ' + self.text
  *         if _FIND_PI_HREF(text):             # <<<<<<<<<<<<<<
@@ -208250,20 +208341,20 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
     goto __pyx_L7;
   }
 
-  /* "src/lxml/xslt.pxi":971
+  /* "src/lxml/xslt.pxi":972
  *             self.text = _REPLACE_PI_HREF(attrib, text)
  *         else:
  *             self.text = text + attrib             # <<<<<<<<<<<<<<
  */
   /*else*/ {
-    __pyx_t_4 = PyNumber_Add(__pyx_v_text, __pyx_v_attrib); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 971, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_Add(__pyx_v_text, __pyx_v_attrib); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 972, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text, __pyx_t_4) < 0) __PYX_ERR(4, 971, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text, __pyx_t_4) < 0) __PYX_ERR(4, 972, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __pyx_L7:;
 
-  /* "src/lxml/xslt.pxi":952
+  /* "src/lxml/xslt.pxi":953
  *         return _elementTreeFactory(result_node._doc, result_node)
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
@@ -208552,7 +208643,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13XSLTExtension_2apply_templates(struct _
  *         #assert c_context_node.doc is context._xsltContext.node.doc, \
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_context->_xsltCtxt != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XSLT_context_not_initialised);
       __PYX_ERR(19, 47, __pyx_L1_error)
@@ -208965,7 +209056,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13XSLTExtension_4process_children(struct
  *         # output_parent node is used for adding results instead of
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_context->_xsltCtxt != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XSLT_context_not_initialised);
       __PYX_ERR(19, 99, __pyx_L1_error)
@@ -210796,7 +210887,7 @@ static void __pyx_f_4lxml_5etree__callExtensionElement(xsltTransformContext *__p
   #endif
 }
 
-/* "lxml/etree.pyx":3622
+/* "lxml/etree.pyx":3625
  *     u"Base class for XML validators."
  *     cdef _ErrorLog _error_log
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -210829,14 +210920,14 @@ static int __pyx_pf_4lxml_5etree_10_Validator___cinit__(struct __pyx_obj_4lxml_5
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "lxml/etree.pyx":3623
+  /* "lxml/etree.pyx":3626
  *     cdef _ErrorLog _error_log
  *     def __cinit__(self):
  *         self._error_log = _ErrorLog()             # <<<<<<<<<<<<<<
  * 
  *     def validate(self, etree):
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3623, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3626, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_error_log);
@@ -210844,7 +210935,7 @@ static int __pyx_pf_4lxml_5etree_10_Validator___cinit__(struct __pyx_obj_4lxml_5
   __pyx_v_self->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3622
+  /* "lxml/etree.pyx":3625
  *     u"Base class for XML validators."
  *     cdef _ErrorLog _error_log
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -210864,7 +210955,7 @@ static int __pyx_pf_4lxml_5etree_10_Validator___cinit__(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3625
+/* "lxml/etree.pyx":3628
  *         self._error_log = _ErrorLog()
  * 
  *     def validate(self, etree):             # <<<<<<<<<<<<<<
@@ -210898,7 +210989,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_2validate(struct __pyx_obj_4
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("validate", 0);
 
-  /* "lxml/etree.pyx":3632
+  /* "lxml/etree.pyx":3635
  *         Returns true if document is valid, false if not.
  *         """
  *         return self(etree)             # <<<<<<<<<<<<<<
@@ -210919,14 +211010,14 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_2validate(struct __pyx_obj_4
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_etree) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_etree);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3632, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3635, __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/etree.pyx":3625
+  /* "lxml/etree.pyx":3628
  *         self._error_log = _ErrorLog()
  * 
  *     def validate(self, etree):             # <<<<<<<<<<<<<<
@@ -210947,7 +211038,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_2validate(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3634
+/* "lxml/etree.pyx":3637
  *         return self(etree)
  * 
  *     def assertValid(self, etree):             # <<<<<<<<<<<<<<
@@ -210983,7 +211074,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_4assertValid(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("assertValid", 0);
 
-  /* "lxml/etree.pyx":3639
+  /* "lxml/etree.pyx":3642
  *         Raises `DocumentInvalid` if the document does not comply with the schema.
  *         """
  *         if not self(etree):             # <<<<<<<<<<<<<<
@@ -211003,32 +211094,32 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_4assertValid(struct __pyx_ob
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_etree) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_etree);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3639, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3642, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 3639, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 3642, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_5 = ((!__pyx_t_4) != 0);
   if (unlikely(__pyx_t_5)) {
 
-    /* "lxml/etree.pyx":3640
+    /* "lxml/etree.pyx":3643
  *         """
  *         if not self(etree):
  *             raise DocumentInvalid(self._error_log._buildExceptionMessage(             # <<<<<<<<<<<<<<
  *                     u"Document does not comply with schema"),
  *                                   self._error_log)
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), __pyx_kp_u_Document_does_not_comply_with_sc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3640, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), __pyx_kp_u_Document_does_not_comply_with_sc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3643, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
 
-    /* "lxml/etree.pyx":3642
+    /* "lxml/etree.pyx":3645
  *             raise DocumentInvalid(self._error_log._buildExceptionMessage(
  *                     u"Document does not comply with schema"),
  *                                   self._error_log)             # <<<<<<<<<<<<<<
  * 
  *     def assert_(self, etree):
  */
-    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3640, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3643, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -211037,21 +211128,21 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_4assertValid(struct __pyx_ob
     PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self->_error_log));
     __pyx_t_1 = 0;
 
-    /* "lxml/etree.pyx":3640
+    /* "lxml/etree.pyx":3643
  *         """
  *         if not self(etree):
  *             raise DocumentInvalid(self._error_log._buildExceptionMessage(             # <<<<<<<<<<<<<<
  *                     u"Document does not comply with schema"),
  *                                   self._error_log)
  */
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_DocumentInvalid), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3640, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_DocumentInvalid), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3643, __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(0, 3640, __pyx_L1_error)
+    __PYX_ERR(0, 3643, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":3639
+    /* "lxml/etree.pyx":3642
  *         Raises `DocumentInvalid` if the document does not comply with the schema.
  *         """
  *         if not self(etree):             # <<<<<<<<<<<<<<
@@ -211060,7 +211151,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_4assertValid(struct __pyx_ob
  */
   }
 
-  /* "lxml/etree.pyx":3634
+  /* "lxml/etree.pyx":3637
  *         return self(etree)
  * 
  *     def assertValid(self, etree):             # <<<<<<<<<<<<<<
@@ -211083,7 +211174,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_4assertValid(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3644
+/* "lxml/etree.pyx":3647
  *                                   self._error_log)
  * 
  *     def assert_(self, etree):             # <<<<<<<<<<<<<<
@@ -211119,7 +211210,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_6assert_(struct __pyx_obj_4l
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("assert_", 0);
 
-  /* "lxml/etree.pyx":3649
+  /* "lxml/etree.pyx":3652
  *         Raises `AssertionError` if the document does not comply with the schema.
  *         """
  *         if not self(etree):             # <<<<<<<<<<<<<<
@@ -211139,28 +211230,28 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_6assert_(struct __pyx_obj_4l
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_etree) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_etree);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3649, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3652, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 3649, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 3652, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_5 = ((!__pyx_t_4) != 0);
   if (unlikely(__pyx_t_5)) {
 
-    /* "lxml/etree.pyx":3650
+    /* "lxml/etree.pyx":3653
  *         """
  *         if not self(etree):
  *             raise AssertionError, self._error_log._buildExceptionMessage(             # <<<<<<<<<<<<<<
  *                 u"Document does not comply with schema")
  * 
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), __pyx_kp_u_Document_does_not_comply_with_sc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3650, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), __pyx_kp_u_Document_does_not_comply_with_sc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3653, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_Raise(__pyx_builtin_AssertionError, __pyx_t_1, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(0, 3650, __pyx_L1_error)
+    __PYX_ERR(0, 3653, __pyx_L1_error)
 
-    /* "lxml/etree.pyx":3649
+    /* "lxml/etree.pyx":3652
  *         Raises `AssertionError` if the document does not comply with the schema.
  *         """
  *         if not self(etree):             # <<<<<<<<<<<<<<
@@ -211169,7 +211260,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_6assert_(struct __pyx_obj_4l
  */
   }
 
-  /* "lxml/etree.pyx":3644
+  /* "lxml/etree.pyx":3647
  *                                   self._error_log)
  * 
  *     def assert_(self, etree):             # <<<<<<<<<<<<<<
@@ -211192,7 +211283,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_6assert_(struct __pyx_obj_4l
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3653
+/* "lxml/etree.pyx":3656
  *                 u"Document does not comply with schema")
  * 
  *     cpdef _append_log_message(self, int domain, int type, int level, int line,             # <<<<<<<<<<<<<<
@@ -211227,17 +211318,17 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__append_log_message(struct __
     if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
       PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
       #endif
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_append_log_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3653, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_append_log_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3656, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_4lxml_5etree_10_Validator_9_append_log_message)) {
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_domain); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3653, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_domain); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3656, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3653, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3656, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_level); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3653, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_level); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3656, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3653, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3656, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_INCREF(__pyx_t_1);
         __pyx_t_7 = __pyx_t_1; __pyx_t_8 = NULL;
@@ -211255,7 +211346,7 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__append_log_message(struct __
         #if CYTHON_FAST_PYCALL
         if (PyFunction_Check(__pyx_t_7)) {
           PyObject *__pyx_temp[7] = {__pyx_t_8, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_v_message, __pyx_v_filename};
-          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3653, __pyx_L1_error)
+          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3656, __pyx_L1_error)
           __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -211267,7 +211358,7 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__append_log_message(struct __
         #if CYTHON_FAST_PYCCALL
         if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
           PyObject *__pyx_temp[7] = {__pyx_t_8, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_v_message, __pyx_v_filename};
-          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3653, __pyx_L1_error)
+          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3656, __pyx_L1_error)
           __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -211277,7 +211368,7 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__append_log_message(struct __
         } else
         #endif
         {
-          __pyx_t_10 = PyTuple_New(6+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3653, __pyx_L1_error)
+          __pyx_t_10 = PyTuple_New(6+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3656, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_10);
           if (__pyx_t_8) {
             __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -211300,7 +211391,7 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__append_log_message(struct __
           __pyx_t_4 = 0;
           __pyx_t_5 = 0;
           __pyx_t_6 = 0;
-          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3653, __pyx_L1_error)
+          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3656, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         }
@@ -211323,7 +211414,7 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__append_log_message(struct __
     #endif
   }
 
-  /* "lxml/etree.pyx":3655
+  /* "lxml/etree.pyx":3658
  *     cpdef _append_log_message(self, int domain, int type, int level, int line,
  *                               message, filename):
  *         self._error_log._receiveGeneric(domain, type, level, line, message,             # <<<<<<<<<<<<<<
@@ -211332,7 +211423,7 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__append_log_message(struct __
  */
   __pyx_f_4lxml_5etree_13_BaseErrorLog__receiveGeneric(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), __pyx_v_domain, __pyx_v_type, __pyx_v_level, __pyx_v_line, __pyx_v_message, __pyx_v_filename);
 
-  /* "lxml/etree.pyx":3653
+  /* "lxml/etree.pyx":3656
  *                 u"Document does not comply with schema")
  * 
  *     cpdef _append_log_message(self, int domain, int type, int level, int line,             # <<<<<<<<<<<<<<
@@ -211408,35 +211499,35 @@ static PyObject *__pyx_pw_4lxml_5etree_10_Validator_9_append_log_message(PyObjec
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_type)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, 1); __PYX_ERR(0, 3653, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, 1); __PYX_ERR(0, 3656, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, 2); __PYX_ERR(0, 3653, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, 2); __PYX_ERR(0, 3656, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_line_2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, 3); __PYX_ERR(0, 3653, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, 3); __PYX_ERR(0, 3656, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_message)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, 4); __PYX_ERR(0, 3653, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, 4); __PYX_ERR(0, 3656, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_filename)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, 5); __PYX_ERR(0, 3653, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, 5); __PYX_ERR(0, 3656, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_append_log_message") < 0)) __PYX_ERR(0, 3653, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_append_log_message") < 0)) __PYX_ERR(0, 3656, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -211448,16 +211539,16 @@ static PyObject *__pyx_pw_4lxml_5etree_10_Validator_9_append_log_message(PyObjec
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
     }
-    __pyx_v_domain = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_domain == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3653, __pyx_L3_error)
-    __pyx_v_type = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3653, __pyx_L3_error)
-    __pyx_v_level = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_level == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3653, __pyx_L3_error)
-    __pyx_v_line = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_line == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3653, __pyx_L3_error)
+    __pyx_v_domain = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_domain == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3656, __pyx_L3_error)
+    __pyx_v_type = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3656, __pyx_L3_error)
+    __pyx_v_level = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_level == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3656, __pyx_L3_error)
+    __pyx_v_line = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_line == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3656, __pyx_L3_error)
     __pyx_v_message = values[4];
     __pyx_v_filename = values[5];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3653, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("_append_log_message", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3656, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._Validator._append_log_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -211479,7 +211570,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_8_append_log_message(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_append_log_message", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_10_Validator__append_log_message(__pyx_v_self, __pyx_v_domain, __pyx_v_type, __pyx_v_level, __pyx_v_line, __pyx_v_message, __pyx_v_filename, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3653, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_10_Validator__append_log_message(__pyx_v_self, __pyx_v_domain, __pyx_v_type, __pyx_v_level, __pyx_v_line, __pyx_v_message, __pyx_v_filename, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3656, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -211496,7 +211587,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_8_append_log_message(struct
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3658
+/* "lxml/etree.pyx":3661
  *                                         filename)
  * 
  *     cpdef _clear_error_log(self):             # <<<<<<<<<<<<<<
@@ -211525,7 +211616,7 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__clear_error_log(struct __pyx
     if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
       PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
       #endif
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_clear_error_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3658, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_clear_error_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3661, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_4lxml_5etree_10_Validator_11_clear_error_log)) {
         __Pyx_XDECREF(__pyx_r);
@@ -211542,7 +211633,7 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__clear_error_log(struct __pyx
         }
         __pyx_t_2 = (__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_2)) __PYX_ERR(0, 3658, __pyx_L1_error)
+        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3661, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_r = __pyx_t_2;
@@ -211563,18 +211654,18 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__clear_error_log(struct __pyx
     #endif
   }
 
-  /* "lxml/etree.pyx":3659
+  /* "lxml/etree.pyx":3662
  * 
  *     cpdef _clear_error_log(self):
  *         self._error_log.clear()             # <<<<<<<<<<<<<<
  * 
  *     @property
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_self->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->clear(__pyx_v_self->_error_log, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3659, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_self->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->clear(__pyx_v_self->_error_log, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3662, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3658
+  /* "lxml/etree.pyx":3661
  *                                         filename)
  * 
  *     cpdef _clear_error_log(self):             # <<<<<<<<<<<<<<
@@ -211621,7 +211712,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_10_clear_error_log(struct __
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_clear_error_log", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree_10_Validator__clear_error_log(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3658, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_4lxml_5etree_10_Validator__clear_error_log(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3661, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -211638,7 +211729,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_10_clear_error_log(struct __
   return __pyx_r;
 }
 
-/* "lxml/etree.pyx":3662
+/* "lxml/etree.pyx":3665
  * 
  *     @property
  *     def error_log(self):             # <<<<<<<<<<<<<<
@@ -211669,7 +211760,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_9error_log___get__(struct __
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "lxml/etree.pyx":3664
+  /* "lxml/etree.pyx":3667
  *     def error_log(self):
  *         """The log of validation errors and warnings."""
  *         assert self._error_log is not None, "XPath evaluator not initialised"             # <<<<<<<<<<<<<<
@@ -211677,16 +211768,16 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_9error_log___get__(struct __
  * 
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_1 = (((PyObject *)__pyx_v_self->_error_log) != Py_None);
     if (unlikely(!(__pyx_t_1 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_XPath_evaluator_not_initialised);
-      __PYX_ERR(0, 3664, __pyx_L1_error)
+      __PYX_ERR(0, 3667, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "lxml/etree.pyx":3665
+  /* "lxml/etree.pyx":3668
  *         """The log of validation errors and warnings."""
  *         assert self._error_log is not None, "XPath evaluator not initialised"
  *         return self._error_log.copy()             # <<<<<<<<<<<<<<
@@ -211694,13 +211785,13 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_9error_log___get__(struct __
  * include "dtd.pxi"        # DTD
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_self->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3665, __pyx_L1_error)
+  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_self->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_self->_error_log), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3668, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "lxml/etree.pyx":3662
+  /* "lxml/etree.pyx":3665
  * 
  *     @property
  *     def error_log(self):             # <<<<<<<<<<<<<<
@@ -211745,7 +211836,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__assertValidDTDNode(PyObject *__py
  * 
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_c_node != NULL) != 0))) {
       __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, __pyx_v_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 18, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
@@ -216732,7 +216823,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  *         root_node = _rootNodeOrRaise(etree)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_dtd != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_DTD_not_initialised);
       __PYX_ERR(20, 368, __pyx_L1_error)
@@ -219226,7 +219317,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7RelaxNG_6__call__(struct __pyx_obj_4lxml
  *         root_node = _rootNodeOrRaise(etree)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_schema != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_RelaxNG_instance_not_initialised);
       __PYX_ERR(21, 122, __pyx_L1_error)
@@ -220630,7 +220721,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9XMLSchema_6__call__(struct __pyx_obj_4lx
  *         root_node = _rootNodeOrRaise(etree)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_schema != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Schema_instance_not_initialised);
       __PYX_ERR(22, 114, __pyx_L1_error)
@@ -221261,7 +221352,7 @@ static struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *__pyx_f_4lx
  *             self._add_default_attributes)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_1 = (((PyObject *)__pyx_v_self->_schema) != Py_None);
     if (unlikely(!(__pyx_t_1 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_ParserSchemaValidationContext_n);
@@ -222600,7 +222691,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10Schematron_6__call__(struct __pyx_obj_4
  *         root_node = _rootNodeOrRaise(etree)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     if (unlikely(!((__pyx_v_self->_c_schema != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Schematron_instance_not_initiali);
       __PYX_ERR(23, 140, __pyx_L1_error)
@@ -226450,7 +226541,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_Error(PyTypeObject *t, PyObject *a, P
 
 static void __pyx_tp_dealloc_4lxml_5etree_Error(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -226537,7 +226628,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_Error = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -226619,7 +226710,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_LxmlError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -226701,7 +226792,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_C14NError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -226811,7 +226902,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__TempStore = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -226835,7 +226926,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__ExceptionContext(PyTypeObject *t, CY
 static void __pyx_tp_dealloc_4lxml_5etree__ExceptionContext(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__ExceptionContext *p = (struct __pyx_obj_4lxml_5etree__ExceptionContext *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -226926,7 +227017,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ExceptionContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -227102,7 +227193,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__LogEntry = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -227127,7 +227218,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__BaseErrorLog(PyTypeObject *t, CYTHON
 static void __pyx_tp_dealloc_4lxml_5etree__BaseErrorLog(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__BaseErrorLog *p = (struct __pyx_obj_4lxml_5etree__BaseErrorLog *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -227236,7 +227327,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__BaseErrorLog = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -227255,7 +227346,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__ListErrorLog(PyTypeObject *t, PyObje
 static void __pyx_tp_dealloc_4lxml_5etree__ListErrorLog(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__ListErrorLog *p = (struct __pyx_obj_4lxml_5etree__ListErrorLog *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -227448,7 +227539,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ListErrorLog = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -227554,7 +227645,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ErrorLogContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -227577,7 +227668,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__ErrorLog(PyTypeObject *t, PyObject *
 static void __pyx_tp_dealloc_4lxml_5etree__ErrorLog(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__ErrorLog *p = (struct __pyx_obj_4lxml_5etree__ErrorLog *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -227680,7 +227771,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ErrorLog = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -227774,7 +227865,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DomainErrorLog = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -227868,7 +227959,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__RotatingErrorLog = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -227889,7 +227980,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_PyErrorLog(PyTypeObject *t, PyObject
 static void __pyx_tp_dealloc_4lxml_5etree_PyErrorLog(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_PyErrorLog *p = (struct __pyx_obj_4lxml_5etree_PyErrorLog *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -228011,7 +228102,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_PyErrorLog = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -228145,7 +228236,7 @@ DL_EXPORT(PyTypeObject) LxmlDocumentType = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -228173,7 +228264,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_DocInfo(PyTypeObject *t, PyObject *a,
 static void __pyx_tp_dealloc_4lxml_5etree_DocInfo(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_DocInfo *p = (struct __pyx_obj_4lxml_5etree_DocInfo *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -228353,7 +228444,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_DocInfo = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -228376,7 +228467,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__Element(PyTypeObject *t, CYTHON_UNUS
 static void __pyx_tp_dealloc_4lxml_5etree__Element(PyObject *o) {
   struct LxmlElement *p = (struct LxmlElement *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -228705,7 +228796,7 @@ DL_EXPORT(PyTypeObject) LxmlElementType = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -228873,7 +228964,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___ContentOnlyElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -228972,7 +229063,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__Comment = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -229092,7 +229183,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ProcessingInstruction = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -229211,7 +229302,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__Entity = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -229235,7 +229326,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_QName(PyTypeObject *t, CYTHON_UNUSED
 static void __pyx_tp_dealloc_4lxml_5etree_QName(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_QName *p = (struct __pyx_obj_4lxml_5etree_QName *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -229335,7 +229426,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_QName = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -229360,7 +229451,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__ElementTree(PyTypeObject *t, CYTHON_
 static void __pyx_tp_dealloc_4lxml_5etree__ElementTree(PyObject *o) {
   struct LxmlElementTree *p = (struct LxmlElementTree *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -229494,7 +229585,7 @@ DL_EXPORT(PyTypeObject) LxmlElementTreeType = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -229730,7 +229821,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__Attrib = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -229841,7 +229932,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__AttribIterator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -229865,7 +229956,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__ElementTagMatcher(PyTypeObject *t, C
 static void __pyx_tp_dealloc_4lxml_5etree__ElementTagMatcher(PyObject *o) {
   struct LxmlElementTagMatcher *p = (struct LxmlElementTagMatcher *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -229956,7 +230047,7 @@ DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -229975,7 +230066,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__ElementIterator(PyTypeObject *t, PyO
 static void __pyx_tp_dealloc_4lxml_5etree__ElementIterator(PyObject *o) {
   struct LxmlElementIterator *p = (struct LxmlElementIterator *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -230076,7 +230167,7 @@ DL_EXPORT(PyTypeObject) LxmlElementIteratorType = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -230204,7 +230295,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__MultiTagMatcher = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -230229,7 +230320,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__ElementMatchIterator(PyTypeObject *t
 static void __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__ElementMatchIterator *p = (struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -230332,7 +230423,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ElementMatchIterator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -230430,7 +230521,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementChildIterator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -230528,7 +230619,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_SiblingsIterator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -230626,7 +230717,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_AncestorsIterator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -230656,7 +230747,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_ElementDepthFirstIterator(PyTypeObjec
 static void __pyx_tp_dealloc_4lxml_5etree_ElementDepthFirstIterator(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *p = (struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -230764,7 +230855,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementDepthFirstIterator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -230791,7 +230882,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_ElementTextIterator(PyTypeObject *t,
 static void __pyx_tp_dealloc_4lxml_5etree_ElementTextIterator(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_ElementTextIterator *p = (struct __pyx_obj_4lxml_5etree_ElementTextIterator *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -230894,7 +230985,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementTextIterator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -230920,7 +231011,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_CDATA(PyTypeObject *t, PyObject *a, P
 static void __pyx_tp_dealloc_4lxml_5etree_CDATA(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_CDATA *p = (struct __pyx_obj_4lxml_5etree_CDATA *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -230999,7 +231090,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_CDATA = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -231028,7 +231119,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyProxy(PyTypeObject *t, CYTHO
 static void __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *p = (struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -231245,7 +231336,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyProxy = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -231344,7 +231435,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyPIProxy = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -231458,7 +231549,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyEntityProxy = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -231575,7 +231666,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyElementProxy = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -231593,7 +231684,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__OpaqueNodeWrapper(PyTypeObject *t, C
 
 static void __pyx_tp_dealloc_4lxml_5etree__OpaqueNodeWrapper(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -231671,7 +231762,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__OpaqueNodeWrapper = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -231762,7 +231853,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__OpaqueDocumentWrapper = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -231871,7 +231962,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyProxy = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -231980,7 +232071,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -232089,7 +232180,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -232203,7 +232294,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__AppendOnlyElementProxy = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -232293,7 +232384,7 @@ DL_EXPORT(PyTypeObject) LxmlElementBaseType = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -232387,7 +232478,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_CommentBase = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -232481,7 +232572,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_PIBase = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -232575,7 +232666,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_EntityBase = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -232593,7 +232684,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_ElementClassLookup(PyTypeObject *t, C
 
 static void __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -232667,7 +232758,7 @@ DL_EXPORT(PyTypeObject) LxmlElementClassLookupType = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -232690,16 +232781,13 @@ static PyObject *__pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(PyTypeObje
 static void __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup(PyObject *o) {
   struct LxmlFallbackElementClassLookup *p = (struct LxmlFallbackElementClassLookup *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
   Py_CLEAR(p->fallback);
-  #if CYTHON_USE_TYPE_SLOTS
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
+  if (PyType_IS_GC(__pyx_ptype_4lxml_5etree_ElementClassLookup)) PyObject_GC_Track(o);
   __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup(o);
 }
 
@@ -232801,7 +232889,7 @@ DL_EXPORT(PyTypeObject) LxmlFallbackElementClassLookupType = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -232825,7 +232913,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_ElementDefaultClassLookup(PyTypeObjec
 static void __pyx_tp_dealloc_4lxml_5etree_ElementDefaultClassLookup(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -232834,10 +232922,7 @@ static void __pyx_tp_dealloc_4lxml_5etree_ElementDefaultClassLookup(PyObject *o)
   Py_CLEAR(p->comment_class);
   Py_CLEAR(p->pi_class);
   Py_CLEAR(p->entity_class);
-  #if CYTHON_USE_TYPE_SLOTS
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
+  if (PyType_IS_GC(__pyx_ptype_4lxml_5etree_ElementClassLookup)) PyObject_GC_Track(o);
   __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup(o);
 }
 
@@ -232965,7 +233050,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementDefaultClassLookup = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -232989,7 +233074,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_AttributeBasedElementClassLookup(PyTy
 static void __pyx_tp_dealloc_4lxml_5etree_AttributeBasedElementClassLookup(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *p = (struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -233092,7 +233177,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_AttributeBasedElementClassLookup = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -233186,7 +233271,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ParserBasedElementClassLookup = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -233281,7 +233366,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_CustomElementClassLookup = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -233376,7 +233461,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_PythonElementClassLookup = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -233458,7 +233543,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_LxmlRegistryError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -233540,7 +233625,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_NamespaceRegistryError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -233570,7 +233655,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__NamespaceRegistry(PyTypeObject *t, P
 static void __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__NamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__NamespaceRegistry *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -233713,7 +233798,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__NamespaceRegistry = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -233830,7 +233915,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ClassNamespaceRegistry = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -233853,7 +233938,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_ElementNamespaceClassLookup(PyTypeObj
 static void __pyx_tp_dealloc_4lxml_5etree_ElementNamespaceClassLookup(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -233952,7 +234037,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementNamespaceClassLookup = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -234069,7 +234154,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__FunctionNamespaceRegistry = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -234209,7 +234294,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathFunctionNamespaceRegistry = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -234329,7 +234414,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__InputDocument = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -234347,7 +234432,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_Resolver(PyTypeObject *t, CYTHON_UNUS
 
 static void __pyx_tp_dealloc_4lxml_5etree_Resolver(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -234430,7 +234515,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_Resolver = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -234554,7 +234639,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ResolverRegistry = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -234574,7 +234659,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__ResolverContext(PyTypeObject *t, PyO
 static void __pyx_tp_dealloc_4lxml_5etree__ResolverContext(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__ResolverContext *p = (struct __pyx_obj_4lxml_5etree__ResolverContext *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -234673,7 +234758,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ResolverContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -234755,7 +234840,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ParserError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -234883,7 +234968,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserDictionaryContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -235021,7 +235106,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__FileReaderContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -235046,7 +235131,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__ParserContext(PyTypeObject *t, PyObj
 static void __pyx_tp_dealloc_4lxml_5etree__ParserContext(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__ParserContext *p = (struct __pyx_obj_4lxml_5etree__ParserContext *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -235153,7 +235238,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -235185,7 +235270,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__BaseParser(PyTypeObject *t, CYTHON_U
 static void __pyx_tp_dealloc_4lxml_5etree__BaseParser(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__BaseParser *p = (struct __pyx_obj_4lxml_5etree__BaseParser *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -235344,7 +235429,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__BaseParser = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -235443,7 +235528,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__FeedParser = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -235529,7 +235614,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLParser = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -235616,7 +235701,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLPullParser = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -235702,7 +235787,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ETCompatXMLParser = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -235788,7 +235873,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_HTMLParser = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -235875,7 +235960,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_HTMLPullParser = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -235901,7 +235986,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__SaxParserTarget(PyTypeObject *t, CYT
 
 static void __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -235979,7 +236064,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__SaxParserTarget = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -236008,7 +236093,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__SaxParserContext(PyTypeObject *t, Py
 static void __pyx_tp_dealloc_4lxml_5etree__SaxParserContext(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__SaxParserContext *p = (struct __pyx_obj_4lxml_5etree__SaxParserContext *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -236123,7 +236208,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__SaxParserContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -236238,7 +236323,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParseEventsIterator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -236264,7 +236349,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_TreeBuilder(PyTypeObject *t, PyObject
 static void __pyx_tp_dealloc_4lxml_5etree_TreeBuilder(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_TreeBuilder *p = (struct __pyx_obj_4lxml_5etree_TreeBuilder *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -236277,10 +236362,7 @@ static void __pyx_tp_dealloc_4lxml_5etree_TreeBuilder(PyObject *o) {
   Py_CLEAR(p->_element_stack);
   Py_CLEAR(p->_element_stack_pop);
   Py_CLEAR(p->_last);
-  #if CYTHON_USE_TYPE_SLOTS
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
+  if (PyType_IS_GC(__pyx_ptype_4lxml_5etree__SaxParserTarget)) PyObject_GC_Track(o);
   __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget(o);
 }
 
@@ -236406,7 +236488,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_TreeBuilder = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -236444,10 +236526,7 @@ static void __pyx_tp_dealloc_4lxml_5etree__PythonSaxParserTarget(PyObject *o) {
   Py_CLEAR(p->_target_doctype);
   Py_CLEAR(p->_target_pi);
   Py_CLEAR(p->_target_comment);
-  #if CYTHON_USE_TYPE_SLOTS
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
+  if (PyType_IS_GC(__pyx_ptype_4lxml_5etree__SaxParserTarget)) PyObject_GC_Track(o);
   __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget(o);
 }
 
@@ -236567,7 +236646,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__PythonSaxParserTarget = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -236668,7 +236747,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__TargetParserContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -236750,7 +236829,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_SerialisationError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -236882,7 +236961,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__FilelikeWriter = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -236916,7 +236995,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_C14NWriterTarget(PyTypeObject *t, CYT
 static void __pyx_tp_dealloc_4lxml_5etree_C14NWriterTarget(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_C14NWriterTarget *p = (struct __pyx_obj_4lxml_5etree_C14NWriterTarget *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -237069,7 +237148,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_C14NWriterTarget = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -237094,7 +237173,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_xmlfile(PyTypeObject *t, CYTHON_UNUSE
 static void __pyx_tp_dealloc_4lxml_5etree_xmlfile(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_xmlfile *p = (struct __pyx_obj_4lxml_5etree_xmlfile *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -237204,7 +237283,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_xmlfile = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -237286,7 +237365,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_htmlfile = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -237422,7 +237501,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__IncrementalFileWriter = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -237538,7 +237617,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__AsyncDataWriter = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -237671,7 +237750,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__AsyncIncrementalFileWriter = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -237791,7 +237870,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__AsyncFileWriterElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -237925,7 +238004,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__FileWriterElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -238055,7 +238134,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__MethodChanger = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -238085,7 +238164,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_iterparse(PyTypeObject *t, CYTHON_UNU
 static void __pyx_tp_dealloc_4lxml_5etree_iterparse(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_iterparse *p = (struct __pyx_obj_4lxml_5etree_iterparse *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -238239,7 +238318,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_iterparse = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -238267,7 +238346,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_iterwalk(PyTypeObject *t, CYTHON_UNUS
 static void __pyx_tp_dealloc_4lxml_5etree_iterwalk(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_iterwalk *p = (struct __pyx_obj_4lxml_5etree_iterwalk *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -238386,7 +238465,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_iterwalk = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -238416,7 +238495,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__IDDict(PyTypeObject *t, PyObject *a,
 static void __pyx_tp_dealloc_4lxml_5etree__IDDict(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__IDDict *p = (struct __pyx_obj_4lxml_5etree__IDDict *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -238556,7 +238635,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__IDDict = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -238638,7 +238717,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XIncludeError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -238660,7 +238739,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_XInclude(PyTypeObject *t, CYTHON_UNUS
 static void __pyx_tp_dealloc_4lxml_5etree_XInclude(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_XInclude *p = (struct __pyx_obj_4lxml_5etree_XInclude *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -238764,7 +238843,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XInclude = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -238846,7 +238925,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -238928,7 +239007,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathEvalError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -239010,7 +239089,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathFunctionError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -239092,7 +239171,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathResultError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -239209,7 +239288,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ExsltRegExp = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -239247,7 +239326,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__BaseContext(PyTypeObject *t, CYTHON_
 static void __pyx_tp_dealloc_4lxml_5etree__BaseContext(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__BaseContext *p = (struct __pyx_obj_4lxml_5etree__BaseContext *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -239406,7 +239485,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__BaseContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -239426,10 +239505,7 @@ static void __pyx_tp_dealloc_4lxml_5etree__ElementUnicodeResult(PyObject *o) {
   PyObject_GC_UnTrack(o);
   Py_CLEAR(p->_parent);
   Py_CLEAR(p->attrname);
-  #if CYTHON_USE_TYPE_SLOTS
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
+  if (PyType_IS_GC((&PyUnicode_Type))) PyObject_GC_Track(o);
   (&PyUnicode_Type)->tp_dealloc(o);
 }
 
@@ -239550,7 +239626,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ElementUnicodeResult = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -239662,7 +239738,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -239691,7 +239767,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__XPathEvaluatorBase(PyTypeObject *t,
 static void __pyx_tp_dealloc_4lxml_5etree__XPathEvaluatorBase(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *p = (struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -239809,7 +239885,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathEvaluatorBase = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -239828,7 +239904,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_XPathElementEvaluator(PyTypeObject *t
 static void __pyx_tp_dealloc_4lxml_5etree_XPathElementEvaluator(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *p = (struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -239928,7 +240004,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathElementEvaluator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -240014,7 +240090,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathDocumentEvaluator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -240037,7 +240113,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_XPath(PyTypeObject *t, PyObject *a, P
 static void __pyx_tp_dealloc_4lxml_5etree_XPath(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_XPath *p = (struct __pyx_obj_4lxml_5etree_XPath *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -240135,7 +240211,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPath = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -240229,7 +240305,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ETXPath = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -240311,7 +240387,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -240393,7 +240469,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTParseError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -240475,7 +240551,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTApplyError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -240557,7 +240633,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTExtensionError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -240665,7 +240741,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTResolverContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -240691,7 +240767,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_XSLTAccessControl(PyTypeObject *t, CY
 
 static void __pyx_tp_dealloc_4lxml_5etree_XSLTAccessControl(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -240786,7 +240862,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTAccessControl = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -240908,7 +240984,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -241017,7 +241093,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTQuotedStringParam = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -241048,7 +241124,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_XSLT(PyTypeObject *t, CYTHON_UNUSED P
 static void __pyx_tp_dealloc_4lxml_5etree_XSLT(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_XSLT *p = (struct __pyx_obj_4lxml_5etree_XSLT *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -241136,7 +241212,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLT = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "XSLT(self, xslt_input, extensions=None, regexp=True, access_control=None)\n\n    Turn an XSL document into an XSLT object.\n\n    Calling this object on a tree or Element will execute the XSLT::\n\n        transform = etree.XSLT(xsl_tree)\n        result = transform(xml_tree)\n\n    Keyword arguments of the constructor:\n\n    - extensions: a dict mapping ``(namespace, name)`` pairs to\n      extension functions or extension elements\n    - regexp: enable exslt regular expression support in XPath\n      (default: True)\n    - access_control: access restrictions for network or file\n      system (see `XSLTAccessControl`)\n\n    Keyword arguments of the XSLT call:\n\n    - profile_run: enable XSLT profiling (default: False)\n\n    Other keyword arguments of the call are passed to the stylesheet\n    as parameters.\n    ", /*tp_doc*/
+  "XSLT(self, xslt_input, extensions=None, regexp=True, access_control=None)\n\n    Turn an XSL document into an XSLT object.\n\n    Calling this object on a tree or Element will execute the XSLT::\n\n        transform = etree.XSLT(xsl_tree)\n        result = transform(xml_tree)\n\n    Keyword arguments of the constructor:\n\n    - extensions: a dict mapping ``(namespace, name)`` pairs to\n      extension functions or extension elements\n    - regexp: enable exslt regular expression support in XPath\n      (default: True)\n    - access_control: access restrictions for network or file\n      system (see `XSLTAccessControl`)\n\n    Keyword arguments of the XSLT call:\n\n    - profile_run: enable XSLT profiling and make the profile available\n      as XML document in ``result.xslt_profile`` (default: False)\n\n    Other keyword arguments of the call are passed to the stylesheet\n    as parameters.\n    ", /*tp_doc*/
   __pyx_tp_traverse_4lxml_5etree_XSLT, /*tp_traverse*/
   0, /*tp_clear*/
   0, /*tp_richcompare*/
@@ -241172,7 +241248,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLT = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -241328,7 +241404,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTResultTree = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -241428,7 +241504,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTProcessingInstruction = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -241450,7 +241526,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_XSLTExtension(PyTypeObject *t, CYTHON
 
 static void __pyx_tp_dealloc_4lxml_5etree_XSLTExtension(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -241531,7 +241607,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTExtension = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -241613,7 +241689,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_DocumentInvalid = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -241641,7 +241717,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__Validator(PyTypeObject *t, CYTHON_UN
 static void __pyx_tp_dealloc_4lxml_5etree__Validator(PyObject *o) {
   struct __pyx_obj_4lxml_5etree__Validator *p = (struct __pyx_obj_4lxml_5etree__Validator *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -241748,7 +241824,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__Validator = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -241830,7 +241906,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_DTDError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -241912,7 +241988,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_DTDParseError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -241994,7 +242070,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_DTDValidateError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -242145,7 +242221,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDElementContentDecl = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -242303,7 +242379,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDAttributeDecl = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -242451,7 +242527,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDElementDecl = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -242597,7 +242673,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDEntityDecl = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -242614,7 +242690,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_DTD(PyTypeObject *t, PyObject *a, PyO
 
 static void __pyx_tp_dealloc_4lxml_5etree_DTD(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -242725,7 +242801,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_DTD = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -242807,7 +242883,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_RelaxNGError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -242889,7 +242965,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_RelaxNGParseError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -242971,7 +243047,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_RelaxNGValidateError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -242992,7 +243068,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_RelaxNG(PyTypeObject *t, PyObject *a,
 
 static void __pyx_tp_dealloc_4lxml_5etree_RelaxNG(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -243081,7 +243157,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_RelaxNG = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -243163,7 +243239,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLSchemaError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -243245,7 +243321,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLSchemaParseError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -243327,7 +243403,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLSchemaValidateError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -243350,7 +243426,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_XMLSchema(PyTypeObject *t, PyObject *
 static void __pyx_tp_dealloc_4lxml_5etree_XMLSchema(PyObject *o) {
   struct __pyx_obj_4lxml_5etree_XMLSchema *p = (struct __pyx_obj_4lxml_5etree_XMLSchema *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -243456,7 +243532,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLSchema = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -243578,7 +243654,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserSchemaValidationContext = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -243660,7 +243736,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_SchematronError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -243742,7 +243818,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_SchematronParseError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -243824,7 +243900,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_SchematronValidateError = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -243845,7 +243921,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree_Schematron(PyTypeObject *t, PyObject
 
 static void __pyx_tp_dealloc_4lxml_5etree_Schematron(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -243933,7 +244009,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_Schematron = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -244025,7 +244101,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__MemDebug = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -244162,7 +244238,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct___open_utf8_file
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -244283,7 +244359,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_1__iter_namespace
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -244392,7 +244468,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_2___aenter__ = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -244521,7 +244597,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_3___aexit__ = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -244631,7 +244707,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_4_flush = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -244753,7 +244829,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_5_write_declarati
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -244867,7 +244943,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_6_write_doctype =
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -244993,7 +245069,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_7_write = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -245103,7 +245179,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_8__close = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -245213,7 +245289,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_9___aenter__ = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -245327,7 +245403,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_10___aexit__ = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -245436,7 +245512,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_11___aenter__ = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -245549,7 +245625,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_12___aexit__ = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -245658,7 +245734,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_13_itervalues = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -245771,7 +245847,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_14_iterattributes
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -245884,7 +245960,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_15_iterelements =
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -245997,7 +246073,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_16_iterentities =
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -246602,7 +246678,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_XMLSyntaxError, __pyx_k_XMLSyntaxError, sizeof(__pyx_k_XMLSyntaxError), 0, 0, 1, 1},
   {&__pyx_n_s_XMLTreeBuilder, __pyx_k_XMLTreeBuilder, sizeof(__pyx_k_XMLTreeBuilder), 0, 0, 1, 1},
   {&__pyx_kp_s_XML_declaration_already_written, __pyx_k_XML_declaration_already_written, sizeof(__pyx_k_XML_declaration_already_written), 0, 0, 1, 0},
-  {&__pyx_kp_u_XML_line_3208, __pyx_k_XML_line_3208, sizeof(__pyx_k_XML_line_3208), 0, 1, 0, 0},
+  {&__pyx_kp_u_XML_line_3211, __pyx_k_XML_line_3211, sizeof(__pyx_k_XML_line_3211), 0, 1, 0, 0},
   {&__pyx_kp_u_XML_text_parser_None_base_url_No, __pyx_k_XML_text_parser_None_base_url_No, sizeof(__pyx_k_XML_text_parser_None_base_url_No), 0, 1, 0, 0},
   {&__pyx_n_u_XPATH_LOCATIONSET, __pyx_k_XPATH_LOCATIONSET, sizeof(__pyx_k_XPATH_LOCATIONSET), 0, 1, 0, 1},
   {&__pyx_n_u_XPATH_POINT, __pyx_k_XPATH_POINT, sizeof(__pyx_k_XPATH_POINT), 0, 1, 0, 1},
@@ -247280,6 +247356,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_recover, __pyx_k_recover, sizeof(__pyx_k_recover), 0, 0, 1, 1},
   {&__pyx_kp_u_reference_to_non_existing_embedd, __pyx_k_reference_to_non_existing_embedd, sizeof(__pyx_k_reference_to_non_existing_embedd), 0, 1, 0, 0},
   {&__pyx_n_s_regexp, __pyx_k_regexp, sizeof(__pyx_k_regexp), 0, 0, 1, 1},
+  {&__pyx_n_s_register, __pyx_k_register, sizeof(__pyx_k_register), 0, 0, 1, 1},
   {&__pyx_n_s_register_namespace, __pyx_k_register_namespace, sizeof(__pyx_k_register_namespace), 0, 0, 1, 1},
   {&__pyx_n_s_register_namespaces, __pyx_k_register_namespaces, sizeof(__pyx_k_register_namespaces), 0, 0, 1, 1},
   {&__pyx_n_s_registry, __pyx_k_registry, sizeof(__pyx_k_registry), 0, 0, 1, 1},
@@ -247522,16 +247599,16 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(0, 92, __pyx_L1_error)
-  __pyx_builtin_SyntaxError = __Pyx_GetBuiltinName(__pyx_n_s_SyntaxError); if (!__pyx_builtin_SyntaxError) __PYX_ERR(0, 230, __pyx_L1_error)
+  __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(0, 93, __pyx_L1_error)
+  __pyx_builtin_SyntaxError = __Pyx_GetBuiltinName(__pyx_n_s_SyntaxError); if (!__pyx_builtin_SyntaxError) __PYX_ERR(0, 231, __pyx_L1_error)
   __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) __PYX_ERR(1, 1586, __pyx_L1_error)
   __pyx_builtin_property = __Pyx_GetBuiltinName(__pyx_n_s_property); if (!__pyx_builtin_property) __PYX_ERR(2, 18, __pyx_L1_error)
   __pyx_builtin_AssertionError = __Pyx_GetBuiltinName(__pyx_n_s_AssertionError); if (!__pyx_builtin_AssertionError) __PYX_ERR(3, 3, __pyx_L1_error)
-  __pyx_builtin_staticmethod = __Pyx_GetBuiltinName(__pyx_n_s_staticmethod); if (!__pyx_builtin_staticmethod) __PYX_ERR(4, 437, __pyx_L1_error)
-  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(0, 97, __pyx_L1_error)
-  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 197, __pyx_L1_error)
-  __pyx_builtin_super = __Pyx_GetBuiltinName(__pyx_n_s_super); if (!__pyx_builtin_super) __PYX_ERR(0, 220, __pyx_L1_error)
-  __pyx_builtin_BaseException = __Pyx_GetBuiltinName(__pyx_n_s_BaseException); if (!__pyx_builtin_BaseException) __PYX_ERR(0, 313, __pyx_L1_error)
+  __pyx_builtin_staticmethod = __Pyx_GetBuiltinName(__pyx_n_s_staticmethod); if (!__pyx_builtin_staticmethod) __PYX_ERR(4, 438, __pyx_L1_error)
+  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(0, 98, __pyx_L1_error)
+  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 198, __pyx_L1_error)
+  __pyx_builtin_super = __Pyx_GetBuiltinName(__pyx_n_s_super); if (!__pyx_builtin_super) __PYX_ERR(0, 221, __pyx_L1_error)
+  __pyx_builtin_BaseException = __Pyx_GetBuiltinName(__pyx_n_s_BaseException); if (!__pyx_builtin_BaseException) __PYX_ERR(0, 314, __pyx_L1_error)
   __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(5, 238, __pyx_L1_error)
   __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 19, __pyx_L1_error)
   __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 41, __pyx_L1_error)
@@ -247544,15 +247621,15 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_UnicodeEncodeError = __Pyx_GetBuiltinName(__pyx_n_s_UnicodeEncodeError); if (!__pyx_builtin_UnicodeEncodeError) __PYX_ERR(1, 1618, __pyx_L1_error)
   __pyx_builtin_UnicodeDecodeError = __Pyx_GetBuiltinName(__pyx_n_s_UnicodeDecodeError); if (!__pyx_builtin_UnicodeDecodeError) __PYX_ERR(1, 1636, __pyx_L1_error)
   __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(6, 315, __pyx_L1_error)
-  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 762, __pyx_L1_error)
-  __pyx_builtin_FutureWarning = __Pyx_GetBuiltinName(__pyx_n_s_FutureWarning); if (!__pyx_builtin_FutureWarning) __PYX_ERR(0, 1195, __pyx_L1_error)
-  __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_n_s_NotImplemented); if (!__pyx_builtin_NotImplemented) __PYX_ERR(0, 1867, __pyx_L1_error)
-  __pyx_builtin_DeprecationWarning = __Pyx_GetBuiltinName(__pyx_n_s_DeprecationWarning); if (!__pyx_builtin_DeprecationWarning) __PYX_ERR(0, 2071, __pyx_L1_error)
-  __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_n_s_StopIteration); if (!__pyx_builtin_StopIteration) __PYX_ERR(0, 2587, __pyx_L1_error)
+  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 763, __pyx_L1_error)
+  __pyx_builtin_FutureWarning = __Pyx_GetBuiltinName(__pyx_n_s_FutureWarning); if (!__pyx_builtin_FutureWarning) __PYX_ERR(0, 1196, __pyx_L1_error)
+  __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_n_s_NotImplemented); if (!__pyx_builtin_NotImplemented) __PYX_ERR(0, 1868, __pyx_L1_error)
+  __pyx_builtin_DeprecationWarning = __Pyx_GetBuiltinName(__pyx_n_s_DeprecationWarning); if (!__pyx_builtin_DeprecationWarning) __PYX_ERR(0, 2072, __pyx_L1_error)
+  __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_n_s_StopIteration); if (!__pyx_builtin_StopIteration) __PYX_ERR(0, 2590, __pyx_L1_error)
   __pyx_builtin_ReferenceError = __Pyx_GetBuiltinName(__pyx_n_s_ReferenceError); if (!__pyx_builtin_ReferenceError) __PYX_ERR(7, 18, __pyx_L1_error)
   __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(8, 52, __pyx_L1_error)
-  __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_IOError = __Pyx_GetBuiltinName(__pyx_n_s_IOError); if (!__pyx_builtin_IOError) __PYX_ERR(2, 655, __pyx_L1_error)
+  __pyx_builtin_LookupError = __Pyx_GetBuiltinName(__pyx_n_s_LookupError); if (!__pyx_builtin_LookupError) __PYX_ERR(2, 840, __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, 1161, __pyx_L1_error)
   __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(10, 632, __pyx_L1_error)
@@ -247565,72 +247642,72 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "lxml/etree.pyx":197
+  /* "lxml/etree.pyx":198
  *     prefix_utf, uri_utf = _utf8(prefix), _utf8(uri)
  *     if _check_internal_prefix(prefix_utf):
  *         raise ValueError("Prefix format reserved for internal use")             # <<<<<<<<<<<<<<
  *     _tagValidOrRaise(prefix_utf)
  *     _uriValidOrRaise(uri_utf)
  */
-  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Prefix_format_reserved_for_inter); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 197, __pyx_L1_error)
+  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Prefix_format_reserved_for_inter); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple_);
   __Pyx_GIVEREF(__pyx_tuple_);
 
-  /* "lxml/etree.pyx":202
+  /* "lxml/etree.pyx":203
  *     if (uri_utf == b"http://www.w3.org/XML/1998/namespace" and prefix_utf != b'xml'
  *             or prefix_utf == b'xml' and uri_utf != b"http://www.w3.org/XML/1998/namespace"):
  *         raise ValueError("Cannot change the 'xml' prefix of the XML namespace")             # <<<<<<<<<<<<<<
  *     for k, v in list(_DEFAULT_NAMESPACE_PREFIXES.items()):
  *         if k == uri_utf or v == prefix_utf:
  */
-  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_Cannot_change_the_xml_prefix_of); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 202, __pyx_L1_error)
+  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_Cannot_change_the_xml_prefix_of); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 203, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__2);
   __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "lxml/etree.pyx":241
+  /* "lxml/etree.pyx":242
  * cdef __unpackDottedVersion(version):
  *     version_list = []
  *     l = (version.decode("ascii").replace(u'-', u'.').split(u'.') + [0]*4)[:4]             # <<<<<<<<<<<<<<
  *     for item in l:
  *         try:
  */
-  __pyx_tuple__5 = PyTuple_Pack(2, __pyx_kp_u__3, __pyx_kp_u__4); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_tuple__5 = PyTuple_Pack(2, __pyx_kp_u__3, __pyx_kp_u__4); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__5);
   __Pyx_GIVEREF(__pyx_tuple__5);
-  __pyx_slice__6 = PySlice_New(Py_None, __pyx_int_4, Py_None); if (unlikely(!__pyx_slice__6)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_slice__6 = PySlice_New(Py_None, __pyx_int_4, Py_None); if (unlikely(!__pyx_slice__6)) __PYX_ERR(0, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__6);
   __Pyx_GIVEREF(__pyx_slice__6);
 
-  /* "lxml/etree.pyx":247
+  /* "lxml/etree.pyx":248
  *         except ValueError:
  *             if item.startswith(u'dev'):
  *                 count = item[3:]             # <<<<<<<<<<<<<<
  *                 item = -300
  *             elif item.startswith(u'alpha'):
  */
-  __pyx_slice__7 = PySlice_New(__pyx_int_3, Py_None, Py_None); if (unlikely(!__pyx_slice__7)) __PYX_ERR(0, 247, __pyx_L1_error)
+  __pyx_slice__7 = PySlice_New(__pyx_int_3, Py_None, Py_None); if (unlikely(!__pyx_slice__7)) __PYX_ERR(0, 248, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__7);
   __Pyx_GIVEREF(__pyx_slice__7);
 
-  /* "lxml/etree.pyx":250
+  /* "lxml/etree.pyx":251
  *                 item = -300
  *             elif item.startswith(u'alpha'):
  *                 count = item[5:]             # <<<<<<<<<<<<<<
  *                 item = -200
  *             elif item.startswith(u'beta'):
  */
-  __pyx_slice__8 = PySlice_New(__pyx_int_5, Py_None, Py_None); if (unlikely(!__pyx_slice__8)) __PYX_ERR(0, 250, __pyx_L1_error)
+  __pyx_slice__8 = PySlice_New(__pyx_int_5, Py_None, Py_None); if (unlikely(!__pyx_slice__8)) __PYX_ERR(0, 251, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__8);
   __Pyx_GIVEREF(__pyx_slice__8);
 
-  /* "lxml/etree.pyx":253
+  /* "lxml/etree.pyx":254
  *                 item = -200
  *             elif item.startswith(u'beta'):
  *                 count = item[4:]             # <<<<<<<<<<<<<<
  *                 item = -100
  *             else:
  */
-  __pyx_slice__9 = PySlice_New(__pyx_int_4, Py_None, Py_None); if (unlikely(!__pyx_slice__9)) __PYX_ERR(0, 253, __pyx_L1_error)
+  __pyx_slice__9 = PySlice_New(__pyx_int_4, Py_None, Py_None); if (unlikely(!__pyx_slice__9)) __PYX_ERR(0, 254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__9);
   __Pyx_GIVEREF(__pyx_slice__9);
 
@@ -247700,146 +247777,146 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple__20);
   __Pyx_GIVEREF(__pyx_tuple__20);
 
-  /* "lxml/etree.pyx":612
+  /* "lxml/etree.pyx":613
  *                 # enclosed in single quotes or quotes.
  *                 if b"'" in bvalue and b'"' in bvalue:
  *                     raise ValueError(             # <<<<<<<<<<<<<<
  *                         'System URL may not contain both single (\') and double quotes (").')
  *                 c_value = tree.xmlStrdup(_xcstr(bvalue))
  */
-  __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_System_URL_may_not_contain_both); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 612, __pyx_L1_error)
+  __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_System_URL_may_not_contain_both); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 613, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__24);
   __Pyx_GIVEREF(__pyx_tuple__24);
 
-  /* "lxml/etree.pyx":1192
+  /* "lxml/etree.pyx":1193
  *         #u"__nonzero__(self)" # currently fails in Py3.1
  *         import warnings
  *         warnings.warn(             # <<<<<<<<<<<<<<
  *             u"The behavior of this method will change in future versions. "
  *             u"Use specific 'len(elem)' or 'elem is not None' test instead.",
  */
-  __pyx_tuple__28 = PyTuple_Pack(2, __pyx_kp_u_The_behavior_of_this_method_will, __pyx_builtin_FutureWarning); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 1192, __pyx_L1_error)
+  __pyx_tuple__28 = PyTuple_Pack(2, __pyx_kp_u_The_behavior_of_this_method_will, __pyx_builtin_FutureWarning); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 1193, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__28);
   __Pyx_GIVEREF(__pyx_tuple__28);
 
-  /* "lxml/etree.pyx":2028
+  /* "lxml/etree.pyx":2029
  *         if method in ('c14n', 'c14n2'):
  *             if encoding is not None:
  *                 raise ValueError("Cannot specify encoding with C14N")             # <<<<<<<<<<<<<<
  *             if xml_declaration:
  *                 raise ValueError("Cannot enable XML declaration in C14N")
  */
-  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_Cannot_specify_encoding_with_C14); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 2028, __pyx_L1_error)
+  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_Cannot_specify_encoding_with_C14); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 2029, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__33);
   __Pyx_GIVEREF(__pyx_tuple__33);
 
-  /* "lxml/etree.pyx":2030
+  /* "lxml/etree.pyx":2031
  *                 raise ValueError("Cannot specify encoding with C14N")
  *             if xml_declaration:
  *                 raise ValueError("Cannot enable XML declaration in C14N")             # <<<<<<<<<<<<<<
  * 
  *             if method == 'c14n':
  */
-  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_Cannot_enable_XML_declaration_in); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 2030, __pyx_L1_error)
+  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_Cannot_enable_XML_declaration_in); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 2031, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__34);
   __Pyx_GIVEREF(__pyx_tuple__34);
 
-  /* "lxml/etree.pyx":2036
+  /* "lxml/etree.pyx":2037
  *                                 compression, inclusive_ns_prefixes)
  *             else:  # c14n2
  *                 with _open_utf8_file(file, compression=compression) as f:             # <<<<<<<<<<<<<<
  *                     target = C14NWriterTarget(
  *                         f.write, with_comments=with_comments, strip_text=strip_text)
  */
-  __pyx_tuple__35 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 2036, __pyx_L1_error)
+  __pyx_tuple__35 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 2037, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__35);
   __Pyx_GIVEREF(__pyx_tuple__35);
 
-  /* "lxml/etree.pyx":2043
+  /* "lxml/etree.pyx":2044
  * 
  *         if not with_comments:
  *             raise ValueError("Can only discard comments in C14N serialisation")             # <<<<<<<<<<<<<<
  *         # suppress decl. in default case (purely for ElementTree compatibility)
  *         if xml_declaration is not None:
  */
-  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s_Can_only_discard_comments_in_C14); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 2043, __pyx_L1_error)
+  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s_Can_only_discard_comments_in_C14); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 2044, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__36);
   __Pyx_GIVEREF(__pyx_tuple__36);
 
-  /* "lxml/etree.pyx":2069
+  /* "lxml/etree.pyx":2070
  *         if docstring is not None and doctype is None:
  *             import warnings
  *             warnings.warn(             # <<<<<<<<<<<<<<
  *                 "The 'docstring' option is deprecated. Use 'doctype' instead.",
  *                 DeprecationWarning)
  */
-  __pyx_tuple__37 = PyTuple_Pack(2, __pyx_kp_s_The_docstring_option_is_deprecat, __pyx_builtin_DeprecationWarning); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 2069, __pyx_L1_error)
+  __pyx_tuple__37 = PyTuple_Pack(2, __pyx_kp_s_The_docstring_option_is_deprecat, __pyx_builtin_DeprecationWarning); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 2070, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__37);
   __Pyx_GIVEREF(__pyx_tuple__37);
 
-  /* "lxml/etree.pyx":2235
+  /* "lxml/etree.pyx":2236
  *         root = self.getroot()
  *         if _isString(path):
  *             if path[:1] == "/":             # <<<<<<<<<<<<<<
  *                 path = "." + path
  *         return root.find(path, namespaces)
  */
-  __pyx_slice__41 = PySlice_New(Py_None, __pyx_int_1, Py_None); if (unlikely(!__pyx_slice__41)) __PYX_ERR(0, 2235, __pyx_L1_error)
+  __pyx_slice__41 = PySlice_New(Py_None, __pyx_int_1, Py_None); if (unlikely(!__pyx_slice__41)) __PYX_ERR(0, 2236, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__41);
   __Pyx_GIVEREF(__pyx_slice__41);
 
-  /* "lxml/etree.pyx":2987
+  /* "lxml/etree.pyx":2990
  *         _assertValidNode(element)
  *         if with_tail:
  *             events = (u"start", u"comment", u"pi", u"end")             # <<<<<<<<<<<<<<
  *         else:
  *             events = (u"start", u"comment", u"pi")
  */
-  __pyx_tuple__44 = PyTuple_Pack(4, __pyx_n_u_start, __pyx_n_u_comment, __pyx_n_u_pi, __pyx_n_u_end); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 2987, __pyx_L1_error)
+  __pyx_tuple__44 = PyTuple_Pack(4, __pyx_n_u_start, __pyx_n_u_comment, __pyx_n_u_pi, __pyx_n_u_end); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 2990, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__44);
   __Pyx_GIVEREF(__pyx_tuple__44);
 
-  /* "lxml/etree.pyx":2989
+  /* "lxml/etree.pyx":2992
  *             events = (u"start", u"comment", u"pi", u"end")
  *         else:
  *             events = (u"start", u"comment", u"pi")             # <<<<<<<<<<<<<<
  *         self._start_element = element
  *         self._events = iterwalk(element, events=events, tag=tag)
  */
-  __pyx_tuple__45 = PyTuple_Pack(3, __pyx_n_u_start, __pyx_n_u_comment, __pyx_n_u_pi); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 2989, __pyx_L1_error)
+  __pyx_tuple__45 = PyTuple_Pack(3, __pyx_n_u_start, __pyx_n_u_comment, __pyx_n_u_pi); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 2992, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__45);
   __Pyx_GIVEREF(__pyx_tuple__45);
 
-  /* "lxml/etree.pyx":3058
+  /* "lxml/etree.pyx":3061
  *         text = _utf8(text)
  *         if b'--' in text or text.endswith(b'-'):
  *             raise ValueError("Comment may not contain '--' or end with '-'")             # <<<<<<<<<<<<<<
  * 
  *     c_doc = _newXMLDoc()
  */
-  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_s_Comment_may_not_contain_or_end_w); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 3058, __pyx_L1_error)
+  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_s_Comment_may_not_contain_or_end_w); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 3061, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__47);
   __Pyx_GIVEREF(__pyx_tuple__47);
 
-  /* "lxml/etree.pyx":3271
+  /* "lxml/etree.pyx":3274
  *     cdef _Document doc
  *     if isinstance(strings, (bytes, unicode)):
  *         raise ValueError("passing a single string into fromstringlist() is not"             # <<<<<<<<<<<<<<
  *                          " efficient, use fromstring() instead")
  *     if parser is None:
  */
-  __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_passing_a_single_string_into_fro); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 3271, __pyx_L1_error)
+  __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_passing_a_single_string_into_fro); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 3274, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__50);
   __Pyx_GIVEREF(__pyx_tuple__50);
 
-  /* "lxml/etree.pyx":3429
+  /* "lxml/etree.pyx":3432
  *         raise ValueError("Can only discard comments in C14N serialisation")
  *     if strip_text:
  *         raise ValueError("Can only strip text in C14N 2.0 serialisation")             # <<<<<<<<<<<<<<
  *     if encoding is unicode or (encoding is not None and encoding.lower() == 'unicode'):
  *         if xml_declaration:
  */
-  __pyx_tuple__52 = PyTuple_Pack(1, __pyx_kp_s_Can_only_strip_text_in_C14N_2_0); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 3429, __pyx_L1_error)
+  __pyx_tuple__52 = PyTuple_Pack(1, __pyx_kp_s_Can_only_strip_text_in_C14N_2_0); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 3432, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__52);
   __Pyx_GIVEREF(__pyx_tuple__52);
 
@@ -247865,25 +247942,25 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_slice__54);
   __Pyx_GIVEREF(__pyx_slice__54);
 
-  /* "src/lxml/parser.pxi":1582
+  /* "src/lxml/parser.pxi":1585
  *         XMLParser.__init__(self, **kwargs)
  *         if events is None:
  *             events = ('end',)             # <<<<<<<<<<<<<<
  *         self._setBaseURL(base_url)
  *         self._collectEvents(events, tag)
  */
-  __pyx_tuple__57 = PyTuple_Pack(1, __pyx_n_s_end); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(2, 1582, __pyx_L1_error)
+  __pyx_tuple__57 = PyTuple_Pack(1, __pyx_n_s_end); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(2, 1585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__57);
   __Pyx_GIVEREF(__pyx_tuple__57);
 
-  /* "src/lxml/parser.pxi":1908
+  /* "src/lxml/parser.pxi":1911
  *     if isinstance(text, unicode):
  *         if _hasEncodingDeclaration(text):
  *             raise ValueError(             # <<<<<<<<<<<<<<
  *                 u"Unicode strings with encoding declaration are not supported. "
  *                 u"Please use bytes input or XML fragments without declaration.")
  */
-  __pyx_tuple__58 = PyTuple_Pack(1, __pyx_kp_u_Unicode_strings_with_encoding_de); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(2, 1908, __pyx_L1_error)
+  __pyx_tuple__58 = PyTuple_Pack(1, __pyx_kp_u_Unicode_strings_with_encoding_de); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(2, 1911, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__58);
   __Pyx_GIVEREF(__pyx_tuple__58);
 
@@ -248066,25 +248143,25 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_slice__98);
   __Pyx_GIVEREF(__pyx_slice__98);
 
-  /* "src/lxml/xslt.pxi":468
+  /* "src/lxml/xslt.pxi":469
  *         """
  *         if max_depth < 0:
  *             raise ValueError("cannot set a maximum stylesheet traversal depth < 0")             # <<<<<<<<<<<<<<
  *         xslt.xsltMaxDepth = max_depth
  * 
  */
-  __pyx_tuple__101 = PyTuple_Pack(1, __pyx_kp_s_cannot_set_a_maximum_stylesheet); if (unlikely(!__pyx_tuple__101)) __PYX_ERR(4, 468, __pyx_L1_error)
+  __pyx_tuple__101 = PyTuple_Pack(1, __pyx_kp_s_cannot_set_a_maximum_stylesheet); if (unlikely(!__pyx_tuple__101)) __PYX_ERR(4, 469, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__101);
   __Pyx_GIVEREF(__pyx_tuple__101);
 
-  /* "src/lxml/xslt.pxi":889
+  /* "src/lxml/xslt.pxi":890
  *     global __findStylesheetByID
  *     if __findStylesheetByID is None:
  *         __findStylesheetByID = XPath(             # <<<<<<<<<<<<<<
  *             u"//xsl:stylesheet[@xml:id = $id]",
  *             namespaces={u"xsl" : u"http://www.w3.org/1999/XSL/Transform"})
  */
-  __pyx_tuple__102 = PyTuple_Pack(1, __pyx_kp_u_xsl_stylesheet_xml_id_id); if (unlikely(!__pyx_tuple__102)) __PYX_ERR(4, 889, __pyx_L1_error)
+  __pyx_tuple__102 = PyTuple_Pack(1, __pyx_kp_u_xsl_stylesheet_xml_id_id); if (unlikely(!__pyx_tuple__102)) __PYX_ERR(4, 890, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__102);
   __Pyx_GIVEREF(__pyx_tuple__102);
 
@@ -248121,120 +248198,120 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_slice__109);
   __Pyx_GIVEREF(__pyx_slice__109);
 
-  /* "lxml/etree.pyx":96
+  /* "lxml/etree.pyx":97
  * 
  * class _ImmutableMapping(MutableMapping):
  *     def __getitem__(self, key):             # <<<<<<<<<<<<<<
  *         raise KeyError, key
  * 
  */
-  __pyx_tuple__110 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_key); if (unlikely(!__pyx_tuple__110)) __PYX_ERR(0, 96, __pyx_L1_error)
+  __pyx_tuple__110 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_key); if (unlikely(!__pyx_tuple__110)) __PYX_ERR(0, 97, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__110);
   __Pyx_GIVEREF(__pyx_tuple__110);
-  __pyx_codeobj__111 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__110, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getitem, 96, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__111)) __PYX_ERR(0, 96, __pyx_L1_error)
+  __pyx_codeobj__111 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__110, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getitem, 97, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__111)) __PYX_ERR(0, 97, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":99
+  /* "lxml/etree.pyx":100
  *         raise KeyError, key
  * 
  *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
  *         raise KeyError, key
  * 
  */
-  __pyx_tuple__112 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_value); if (unlikely(!__pyx_tuple__112)) __PYX_ERR(0, 99, __pyx_L1_error)
+  __pyx_tuple__112 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_value); if (unlikely(!__pyx_tuple__112)) __PYX_ERR(0, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__112);
   __Pyx_GIVEREF(__pyx_tuple__112);
-  __pyx_codeobj__113 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__112, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_setitem, 99, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__113)) __PYX_ERR(0, 99, __pyx_L1_error)
+  __pyx_codeobj__113 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__112, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_setitem, 100, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__113)) __PYX_ERR(0, 100, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":102
+  /* "lxml/etree.pyx":103
  *         raise KeyError, key
  * 
  *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
  *         raise KeyError, key
  * 
  */
-  __pyx_tuple__114 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_key); if (unlikely(!__pyx_tuple__114)) __PYX_ERR(0, 102, __pyx_L1_error)
+  __pyx_tuple__114 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_key); if (unlikely(!__pyx_tuple__114)) __PYX_ERR(0, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__114);
   __Pyx_GIVEREF(__pyx_tuple__114);
-  __pyx_codeobj__115 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__114, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_delitem, 102, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__115)) __PYX_ERR(0, 102, __pyx_L1_error)
+  __pyx_codeobj__115 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__114, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_delitem, 103, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__115)) __PYX_ERR(0, 103, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":105
+  /* "lxml/etree.pyx":106
  *         raise KeyError, key
  * 
  *     def __contains__(self, key):             # <<<<<<<<<<<<<<
  *         return False
  * 
  */
-  __pyx_tuple__116 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_key); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __pyx_tuple__116 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_key); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(0, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__116);
   __Pyx_GIVEREF(__pyx_tuple__116);
-  __pyx_codeobj__117 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__116, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_contains, 105, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__117)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __pyx_codeobj__117 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__116, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_contains, 106, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__117)) __PYX_ERR(0, 106, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":108
+  /* "lxml/etree.pyx":109
  *         return False
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
  *         return 0
  * 
  */
-  __pyx_tuple__118 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__118)) __PYX_ERR(0, 108, __pyx_L1_error)
+  __pyx_tuple__118 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__118)) __PYX_ERR(0, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__118);
   __Pyx_GIVEREF(__pyx_tuple__118);
-  __pyx_codeobj__119 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__118, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_len, 108, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__119)) __PYX_ERR(0, 108, __pyx_L1_error)
+  __pyx_codeobj__119 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__118, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_len, 109, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__119)) __PYX_ERR(0, 109, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":111
+  /* "lxml/etree.pyx":112
  *         return 0
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
  *         return ITER_EMPTY
  *     iterkeys = itervalues = iteritems = __iter__
  */
-  __pyx_tuple__120 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__120)) __PYX_ERR(0, 111, __pyx_L1_error)
+  __pyx_tuple__120 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__120)) __PYX_ERR(0, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__120);
   __Pyx_GIVEREF(__pyx_tuple__120);
-  __pyx_codeobj__121 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__120, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iter_2, 111, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__121)) __PYX_ERR(0, 111, __pyx_L1_error)
+  __pyx_codeobj__121 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__120, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iter_2, 112, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__121)) __PYX_ERR(0, 112, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":154
+  /* "lxml/etree.pyx":155
  * 
  * # filename encoding
  * cdef bytes _FILENAME_ENCODING = (sys.getfilesystemencoding() or sys.getdefaultencoding() or 'ascii').encode("UTF-8")             # <<<<<<<<<<<<<<
  * cdef char* _C_FILENAME_ENCODING = _cstr(_FILENAME_ENCODING)
  * 
  */
-  __pyx_tuple__122 = PyTuple_Pack(1, __pyx_kp_s_UTF_8); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(0, 154, __pyx_L1_error)
+  __pyx_tuple__122 = PyTuple_Pack(1, __pyx_kp_s_UTF_8); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(0, 155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__122);
   __Pyx_GIVEREF(__pyx_tuple__122);
 
-  /* "lxml/etree.pyx":187
+  /* "lxml/etree.pyx":188
  * _update_default_namespace_prefixes_items()
  * 
  * cdef object _check_internal_prefix = re.compile(b"ns\d+$").match             # <<<<<<<<<<<<<<
  * 
  * def register_namespace(prefix, uri):
  */
-  __pyx_tuple__123 = PyTuple_Pack(1, __pyx_kp_b_ns_d_2); if (unlikely(!__pyx_tuple__123)) __PYX_ERR(0, 187, __pyx_L1_error)
+  __pyx_tuple__123 = PyTuple_Pack(1, __pyx_kp_b_ns_d_2); if (unlikely(!__pyx_tuple__123)) __PYX_ERR(0, 188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__123);
   __Pyx_GIVEREF(__pyx_tuple__123);
 
-  /* "lxml/etree.pyx":189
+  /* "lxml/etree.pyx":190
  * cdef object _check_internal_prefix = re.compile(b"ns\d+$").match
  * 
  * def register_namespace(prefix, uri):             # <<<<<<<<<<<<<<
  *     u"""Registers a namespace prefix that newly created Elements in that
  *     namespace will use.  The registry is global, and any existing
  */
-  __pyx_tuple__124 = PyTuple_Pack(6, __pyx_n_s_prefix, __pyx_n_s_uri, __pyx_n_s_prefix_utf, __pyx_n_s_uri_utf, __pyx_n_s_k, __pyx_n_s_v); if (unlikely(!__pyx_tuple__124)) __PYX_ERR(0, 189, __pyx_L1_error)
+  __pyx_tuple__124 = PyTuple_Pack(6, __pyx_n_s_prefix, __pyx_n_s_uri, __pyx_n_s_prefix_utf, __pyx_n_s_uri_utf, __pyx_n_s_k, __pyx_n_s_v); if (unlikely(!__pyx_tuple__124)) __PYX_ERR(0, 190, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__124);
   __Pyx_GIVEREF(__pyx_tuple__124);
-  __pyx_codeobj__125 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 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_etree_pyx, __pyx_n_s_register_namespace, 189, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__125)) __PYX_ERR(0, 189, __pyx_L1_error)
+  __pyx_codeobj__125 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 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_etree_pyx, __pyx_n_s_register_namespace, 190, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__125)) __PYX_ERR(0, 190, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":272
+  /* "lxml/etree.pyx":273
  * try:
  *     _LIBXML_VERSION_INT = int(
  *         re.match(u'[0-9]+', (<unsigned char*>tree.xmlParserVersion).decode("ascii")).group(0))             # <<<<<<<<<<<<<<
  * except Exception:
  *     print u"Unknown libxml2 version: %s" % (<unsigned char*>tree.xmlParserVersion).decode("latin1")
  */
-  __pyx_tuple__126 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__126)) __PYX_ERR(0, 272, __pyx_L1_error)
+  __pyx_tuple__126 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__126)) __PYX_ERR(0, 273, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__126);
   __Pyx_GIVEREF(__pyx_tuple__126);
 
@@ -248531,1214 +248608,1214 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple__171);
   __Pyx_GIVEREF(__pyx_tuple__171);
 
-  /* "lxml/etree.pyx":523
+  /* "lxml/etree.pyx":524
  * 
  * 
  * cdef object _find_invalid_public_id_characters = re.compile(             # <<<<<<<<<<<<<<
  *     ur"[^\x20\x0D\x0Aa-zA-Z0-9'()+,./:=?;!*#@$_%-]+").search
  * 
  */
-  __pyx_tuple__172 = PyTuple_Pack(1, __pyx_kp_u_x20_x0D_x0Aa_zA_Z0_9); if (unlikely(!__pyx_tuple__172)) __PYX_ERR(0, 523, __pyx_L1_error)
+  __pyx_tuple__172 = PyTuple_Pack(1, __pyx_kp_u_x20_x0D_x0Aa_zA_Z0_9); if (unlikely(!__pyx_tuple__172)) __PYX_ERR(0, 524, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__172);
   __Pyx_GIVEREF(__pyx_tuple__172);
 
-  /* "lxml/etree.pyx":557
+  /* "lxml/etree.pyx":558
  *         return  tree.xmlCreateIntSubset(c_doc, c_name, NULL, NULL)
  * 
  *     def clear(self):             # <<<<<<<<<<<<<<
  *         u"""Removes DOCTYPE and internal subset from the document."""
  *         cdef xmlDoc* c_doc = self._doc._c_doc
  */
-  __pyx_tuple__173 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_c_doc, __pyx_n_s_c_dtd); if (unlikely(!__pyx_tuple__173)) __PYX_ERR(0, 557, __pyx_L1_error)
+  __pyx_tuple__173 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_c_doc, __pyx_n_s_c_dtd); if (unlikely(!__pyx_tuple__173)) __PYX_ERR(0, 558, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__173);
   __Pyx_GIVEREF(__pyx_tuple__173);
-  __pyx_codeobj__174 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__173, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_clear, 557, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__174)) __PYX_ERR(0, 557, __pyx_L1_error)
+  __pyx_codeobj__174 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__173, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_clear, 558, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__174)) __PYX_ERR(0, 558, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":714
+  /* "lxml/etree.pyx":715
  *     cdef object _tag
  * 
  *     def _init(self):             # <<<<<<<<<<<<<<
  *         u"""_init(self)
  * 
  */
-  __pyx_tuple__175 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__175)) __PYX_ERR(0, 714, __pyx_L1_error)
+  __pyx_tuple__175 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__175)) __PYX_ERR(0, 715, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__175);
   __Pyx_GIVEREF(__pyx_tuple__175);
-  __pyx_codeobj__176 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__175, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_init_2, 714, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__176)) __PYX_ERR(0, 714, __pyx_L1_error)
+  __pyx_codeobj__176 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__175, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_init_2, 715, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__176)) __PYX_ERR(0, 715, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":802
+  /* "lxml/etree.pyx":803
  *             _removeNode(self._doc, c_node)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
  *         u"__deepcopy__(self, memo)"
  *         return self.__copy__()
  */
-  __pyx_tuple__177 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_memo); if (unlikely(!__pyx_tuple__177)) __PYX_ERR(0, 802, __pyx_L1_error)
+  __pyx_tuple__177 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_memo); if (unlikely(!__pyx_tuple__177)) __PYX_ERR(0, 803, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__177);
   __Pyx_GIVEREF(__pyx_tuple__177);
-  __pyx_codeobj__178 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__177, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_deepcopy, 802, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__178)) __PYX_ERR(0, 802, __pyx_L1_error)
+  __pyx_codeobj__178 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__177, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_deepcopy, 803, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__178)) __PYX_ERR(0, 803, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":806
+  /* "lxml/etree.pyx":807
  *         return self.__copy__()
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
  *         u"__copy__(self)"
  *         cdef xmlDoc* c_doc
  */
-  __pyx_tuple__179 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_c_doc, __pyx_n_s_c_node, __pyx_n_s_new_doc, __pyx_n_s_root); if (unlikely(!__pyx_tuple__179)) __PYX_ERR(0, 806, __pyx_L1_error)
+  __pyx_tuple__179 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_c_doc, __pyx_n_s_c_node, __pyx_n_s_new_doc, __pyx_n_s_root); if (unlikely(!__pyx_tuple__179)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__179);
   __Pyx_GIVEREF(__pyx_tuple__179);
-  __pyx_codeobj__180 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__179, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_copy_2, 806, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__180)) __PYX_ERR(0, 806, __pyx_L1_error)
+  __pyx_codeobj__180 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__179, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_copy_2, 807, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__180)) __PYX_ERR(0, 807, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":825
+  /* "lxml/etree.pyx":826
  *         return _elementFactory(new_doc, c_node)
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
  *         u"""set(self, key, value)
  * 
  */
-  __pyx_tuple__181 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_value); if (unlikely(!__pyx_tuple__181)) __PYX_ERR(0, 825, __pyx_L1_error)
+  __pyx_tuple__181 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_value); if (unlikely(!__pyx_tuple__181)) __PYX_ERR(0, 826, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__181);
   __Pyx_GIVEREF(__pyx_tuple__181);
-  __pyx_codeobj__182 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__181, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_set, 825, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__182)) __PYX_ERR(0, 825, __pyx_L1_error)
+  __pyx_codeobj__182 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__181, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_set, 826, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__182)) __PYX_ERR(0, 826, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":835
+  /* "lxml/etree.pyx":836
  *         _setAttributeValue(self, key, value)
  * 
  *     def append(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""append(self, element)
  * 
  */
-  __pyx_tuple__183 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_element); if (unlikely(!__pyx_tuple__183)) __PYX_ERR(0, 835, __pyx_L1_error)
+  __pyx_tuple__183 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_element); if (unlikely(!__pyx_tuple__183)) __PYX_ERR(0, 836, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__183);
   __Pyx_GIVEREF(__pyx_tuple__183);
-  __pyx_codeobj__184 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__183, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_append, 835, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__184)) __PYX_ERR(0, 835, __pyx_L1_error)
+  __pyx_codeobj__184 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__183, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_append, 836, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__184)) __PYX_ERR(0, 836, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":844
+  /* "lxml/etree.pyx":845
  *         _appendChild(self, element)
  * 
  *     def addnext(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""addnext(self, element)
  * 
  */
-  __pyx_tuple__185 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_element); if (unlikely(!__pyx_tuple__185)) __PYX_ERR(0, 844, __pyx_L1_error)
+  __pyx_tuple__185 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_element); if (unlikely(!__pyx_tuple__185)) __PYX_ERR(0, 845, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__185);
   __Pyx_GIVEREF(__pyx_tuple__185);
-  __pyx_codeobj__186 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__185, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_addnext, 844, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__186)) __PYX_ERR(0, 844, __pyx_L1_error)
+  __pyx_codeobj__186 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__185, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_addnext, 845, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__186)) __PYX_ERR(0, 845, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":863
+  /* "lxml/etree.pyx":864
  *         _appendSibling(self, element)
  * 
  *     def addprevious(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""addprevious(self, element)
  * 
  */
-  __pyx_tuple__187 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_element); if (unlikely(!__pyx_tuple__187)) __PYX_ERR(0, 863, __pyx_L1_error)
+  __pyx_tuple__187 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_element); if (unlikely(!__pyx_tuple__187)) __PYX_ERR(0, 864, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__187);
   __Pyx_GIVEREF(__pyx_tuple__187);
-  __pyx_codeobj__188 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__187, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_addprevious, 863, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__188)) __PYX_ERR(0, 863, __pyx_L1_error)
+  __pyx_codeobj__188 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__187, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_addprevious, 864, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__188)) __PYX_ERR(0, 864, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":882
+  /* "lxml/etree.pyx":883
  *         _prependSibling(self, element)
  * 
  *     def extend(self, elements):             # <<<<<<<<<<<<<<
  *         u"""extend(self, elements)
  * 
  */
-  __pyx_tuple__189 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_elements, __pyx_n_s_element); if (unlikely(!__pyx_tuple__189)) __PYX_ERR(0, 882, __pyx_L1_error)
+  __pyx_tuple__189 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_elements, __pyx_n_s_element); if (unlikely(!__pyx_tuple__189)) __PYX_ERR(0, 883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__189);
   __Pyx_GIVEREF(__pyx_tuple__189);
-  __pyx_codeobj__190 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__189, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_extend, 882, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__190)) __PYX_ERR(0, 882, __pyx_L1_error)
+  __pyx_codeobj__190 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__189, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_extend, 883, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__190)) __PYX_ERR(0, 883, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":895
+  /* "lxml/etree.pyx":896
  *             _appendChild(self, element)
  * 
  *     def clear(self, bint keep_tail=False):             # <<<<<<<<<<<<<<
  *         u"""clear(self, keep_tail=False)
  * 
  */
-  __pyx_tuple__191 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_keep_tail, __pyx_n_s_c_attr, __pyx_n_s_c_attr_next, __pyx_n_s_c_node, __pyx_n_s_c_node_next); if (unlikely(!__pyx_tuple__191)) __PYX_ERR(0, 895, __pyx_L1_error)
+  __pyx_tuple__191 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_keep_tail, __pyx_n_s_c_attr, __pyx_n_s_c_attr_next, __pyx_n_s_c_node, __pyx_n_s_c_node_next); if (unlikely(!__pyx_tuple__191)) __PYX_ERR(0, 896, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__191);
   __Pyx_GIVEREF(__pyx_tuple__191);
-  __pyx_codeobj__192 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__191, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_clear, 895, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__192)) __PYX_ERR(0, 895, __pyx_L1_error)
+  __pyx_codeobj__192 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__191, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_clear, 896, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__192)) __PYX_ERR(0, 896, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":927
+  /* "lxml/etree.pyx":928
  *             c_node = c_node_next
  * 
  *     def insert(self, index: int, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""insert(self, index, element)
  * 
  */
-  __pyx_tuple__193 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_index, __pyx_n_s_element, __pyx_n_s_c_node, __pyx_n_s_c_next, __pyx_n_s_c_source_doc); if (unlikely(!__pyx_tuple__193)) __PYX_ERR(0, 927, __pyx_L1_error)
+  __pyx_tuple__193 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_index, __pyx_n_s_element, __pyx_n_s_c_node, __pyx_n_s_c_next, __pyx_n_s_c_source_doc); if (unlikely(!__pyx_tuple__193)) __PYX_ERR(0, 928, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__193);
   __Pyx_GIVEREF(__pyx_tuple__193);
-  __pyx_codeobj__194 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__193, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_insert, 927, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__194)) __PYX_ERR(0, 927, __pyx_L1_error)
+  __pyx_codeobj__194 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__193, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_insert, 928, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__194)) __PYX_ERR(0, 928, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":947
+  /* "lxml/etree.pyx":948
  *         moveNodeToDocument(self._doc, c_source_doc, element._c_node)
  * 
  *     def remove(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""remove(self, element)
  * 
  */
-  __pyx_tuple__195 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_element, __pyx_n_s_c_node, __pyx_n_s_c_next); if (unlikely(!__pyx_tuple__195)) __PYX_ERR(0, 947, __pyx_L1_error)
+  __pyx_tuple__195 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_element, __pyx_n_s_c_node, __pyx_n_s_c_next); if (unlikely(!__pyx_tuple__195)) __PYX_ERR(0, 948, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__195);
   __Pyx_GIVEREF(__pyx_tuple__195);
-  __pyx_codeobj__196 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__195, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_remove, 947, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__196)) __PYX_ERR(0, 947, __pyx_L1_error)
+  __pyx_codeobj__196 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__195, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_remove, 948, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__196)) __PYX_ERR(0, 948, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":967
+  /* "lxml/etree.pyx":968
  *         moveNodeToDocument(self._doc, c_node.doc, c_node)
  * 
  *     def replace(self, _Element old_element not None,             # <<<<<<<<<<<<<<
  *                 _Element new_element not None):
  *         u"""replace(self, old_element, new_element)
  */
-  __pyx_tuple__197 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_old_element, __pyx_n_s_new_element, __pyx_n_s_c_old_node, __pyx_n_s_c_old_next, __pyx_n_s_c_new_node, __pyx_n_s_c_new_next, __pyx_n_s_c_source_doc); if (unlikely(!__pyx_tuple__197)) __PYX_ERR(0, 967, __pyx_L1_error)
+  __pyx_tuple__197 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_old_element, __pyx_n_s_new_element, __pyx_n_s_c_old_node, __pyx_n_s_c_old_next, __pyx_n_s_c_new_node, __pyx_n_s_c_new_next, __pyx_n_s_c_source_doc); if (unlikely(!__pyx_tuple__197)) __PYX_ERR(0, 968, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__197);
   __Pyx_GIVEREF(__pyx_tuple__197);
-  __pyx_codeobj__198 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__197, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_replace, 967, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__198)) __PYX_ERR(0, 967, __pyx_L1_error)
+  __pyx_codeobj__198 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__197, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_replace, 968, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__198)) __PYX_ERR(0, 968, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1214
+  /* "lxml/etree.pyx":1215
  *         return ElementChildIterator(self)
  * 
  *     def __reversed__(self):             # <<<<<<<<<<<<<<
  *         u"__reversed__(self)"
  *         return ElementChildIterator(self, reversed=True)
  */
-  __pyx_tuple__199 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__199)) __PYX_ERR(0, 1214, __pyx_L1_error)
+  __pyx_tuple__199 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__199)) __PYX_ERR(0, 1215, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__199);
   __Pyx_GIVEREF(__pyx_tuple__199);
-  __pyx_codeobj__200 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__199, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_reversed_2, 1214, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__200)) __PYX_ERR(0, 1214, __pyx_L1_error)
+  __pyx_codeobj__200 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__199, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_reversed_2, 1215, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__200)) __PYX_ERR(0, 1215, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1218
+  /* "lxml/etree.pyx":1219
  *         return ElementChildIterator(self, reversed=True)
  * 
  *     def index(self, _Element child not None, start: int = None, stop: int = None):             # <<<<<<<<<<<<<<
  *         u"""index(self, child, start=None, stop=None)
  * 
  */
-  __pyx_tuple__201 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_child, __pyx_n_s_start, __pyx_n_s_stop, __pyx_n_s_k, __pyx_n_s_l, __pyx_n_s_c_start, __pyx_n_s_c_stop, __pyx_n_s_c_child, __pyx_n_s_c_start_node); if (unlikely(!__pyx_tuple__201)) __PYX_ERR(0, 1218, __pyx_L1_error)
+  __pyx_tuple__201 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_child, __pyx_n_s_start, __pyx_n_s_stop, __pyx_n_s_k, __pyx_n_s_l, __pyx_n_s_c_start, __pyx_n_s_c_stop, __pyx_n_s_c_child, __pyx_n_s_c_start_node); if (unlikely(!__pyx_tuple__201)) __PYX_ERR(0, 1219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__201);
   __Pyx_GIVEREF(__pyx_tuple__201);
-  __pyx_codeobj__202 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__201, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_index, 1218, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__202)) __PYX_ERR(0, 1218, __pyx_L1_error)
+  __pyx_codeobj__202 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__201, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_index, 1219, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__202)) __PYX_ERR(0, 1219, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1305
+  /* "lxml/etree.pyx":1306
  *             raise ValueError, u"list.index(x): x not in list"
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
  *         u"""get(self, key, default=None)
  * 
  */
-  __pyx_tuple__203 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_default); if (unlikely(!__pyx_tuple__203)) __PYX_ERR(0, 1305, __pyx_L1_error)
+  __pyx_tuple__203 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_default); if (unlikely(!__pyx_tuple__203)) __PYX_ERR(0, 1306, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__203);
   __Pyx_GIVEREF(__pyx_tuple__203);
-  __pyx_codeobj__204 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__203, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_get, 1305, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__204)) __PYX_ERR(0, 1305, __pyx_L1_error)
+  __pyx_codeobj__204 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__203, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_get, 1306, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__204)) __PYX_ERR(0, 1306, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1313
+  /* "lxml/etree.pyx":1314
  *         return _getAttributeValue(self, key, default)
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
  *         u"""keys(self)
  * 
  */
-  __pyx_tuple__205 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__205)) __PYX_ERR(0, 1313, __pyx_L1_error)
+  __pyx_tuple__205 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__205)) __PYX_ERR(0, 1314, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__205);
   __Pyx_GIVEREF(__pyx_tuple__205);
-  __pyx_codeobj__206 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__205, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_keys, 1313, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__206)) __PYX_ERR(0, 1313, __pyx_L1_error)
+  __pyx_codeobj__206 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__205, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_keys, 1314, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__206)) __PYX_ERR(0, 1314, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1322
+  /* "lxml/etree.pyx":1323
  *         return _collectAttributes(self._c_node, 1)
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
  *         u"""values(self)
  * 
  */
-  __pyx_tuple__207 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__207)) __PYX_ERR(0, 1322, __pyx_L1_error)
+  __pyx_tuple__207 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__207)) __PYX_ERR(0, 1323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__207);
   __Pyx_GIVEREF(__pyx_tuple__207);
-  __pyx_codeobj__208 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__207, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_values, 1322, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__208)) __PYX_ERR(0, 1322, __pyx_L1_error)
+  __pyx_codeobj__208 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__207, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_values, 1323, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__208)) __PYX_ERR(0, 1323, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1331
+  /* "lxml/etree.pyx":1332
  *         return _collectAttributes(self._c_node, 2)
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
  *         u"""items(self)
  * 
  */
-  __pyx_tuple__209 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__209)) __PYX_ERR(0, 1331, __pyx_L1_error)
+  __pyx_tuple__209 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__209)) __PYX_ERR(0, 1332, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__209);
   __Pyx_GIVEREF(__pyx_tuple__209);
-  __pyx_codeobj__210 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__209, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_items, 1331, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__210)) __PYX_ERR(0, 1331, __pyx_L1_error)
+  __pyx_codeobj__210 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__209, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_items, 1332, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__210)) __PYX_ERR(0, 1332, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1340
+  /* "lxml/etree.pyx":1341
  *         return _collectAttributes(self._c_node, 3)
  * 
  *     def getchildren(self):             # <<<<<<<<<<<<<<
  *         u"""getchildren(self)
  * 
  */
-  __pyx_tuple__211 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__211)) __PYX_ERR(0, 1340, __pyx_L1_error)
+  __pyx_tuple__211 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__211)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__211);
   __Pyx_GIVEREF(__pyx_tuple__211);
-  __pyx_codeobj__212 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__211, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getchildren, 1340, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__212)) __PYX_ERR(0, 1340, __pyx_L1_error)
+  __pyx_codeobj__212 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__211, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getchildren, 1341, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__212)) __PYX_ERR(0, 1341, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1353
+  /* "lxml/etree.pyx":1354
  *         return _collectChildren(self)
  * 
  *     def getparent(self):             # <<<<<<<<<<<<<<
  *         u"""getparent(self)
  * 
  */
-  __pyx_tuple__213 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_c_node); if (unlikely(!__pyx_tuple__213)) __PYX_ERR(0, 1353, __pyx_L1_error)
+  __pyx_tuple__213 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_c_node); if (unlikely(!__pyx_tuple__213)) __PYX_ERR(0, 1354, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__213);
   __Pyx_GIVEREF(__pyx_tuple__213);
-  __pyx_codeobj__214 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__213, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getparent, 1353, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__214)) __PYX_ERR(0, 1353, __pyx_L1_error)
+  __pyx_codeobj__214 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__213, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getparent, 1354, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__214)) __PYX_ERR(0, 1354, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1365
+  /* "lxml/etree.pyx":1366
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def getnext(self):             # <<<<<<<<<<<<<<
  *         u"""getnext(self)
  * 
  */
-  __pyx_tuple__215 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_c_node); if (unlikely(!__pyx_tuple__215)) __PYX_ERR(0, 1365, __pyx_L1_error)
+  __pyx_tuple__215 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_c_node); if (unlikely(!__pyx_tuple__215)) __PYX_ERR(0, 1366, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__215);
   __Pyx_GIVEREF(__pyx_tuple__215);
-  __pyx_codeobj__216 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__215, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getnext, 1365, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__216)) __PYX_ERR(0, 1365, __pyx_L1_error)
+  __pyx_codeobj__216 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__215, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getnext, 1366, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__216)) __PYX_ERR(0, 1366, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1377
+  /* "lxml/etree.pyx":1378
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def getprevious(self):             # <<<<<<<<<<<<<<
  *         u"""getprevious(self)
  * 
  */
-  __pyx_tuple__217 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_c_node); if (unlikely(!__pyx_tuple__217)) __PYX_ERR(0, 1377, __pyx_L1_error)
+  __pyx_tuple__217 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_c_node); if (unlikely(!__pyx_tuple__217)) __PYX_ERR(0, 1378, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__217);
   __Pyx_GIVEREF(__pyx_tuple__217);
-  __pyx_codeobj__218 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__217, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getprevious, 1377, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__218)) __PYX_ERR(0, 1377, __pyx_L1_error)
+  __pyx_codeobj__218 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__217, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getprevious, 1378, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__218)) __PYX_ERR(0, 1378, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1389
+  /* "lxml/etree.pyx":1390
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def itersiblings(self, tag=None, *tags, preceding=False):             # <<<<<<<<<<<<<<
  *         u"""itersiblings(self, tag=None, *tags, preceding=False)
  * 
  */
-  __pyx_tuple__219 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_preceding, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__219)) __PYX_ERR(0, 1389, __pyx_L1_error)
+  __pyx_tuple__219 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_preceding, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__219)) __PYX_ERR(0, 1390, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__219);
   __Pyx_GIVEREF(__pyx_tuple__219);
-  __pyx_codeobj__220 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__219, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_itersiblings, 1389, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__220)) __PYX_ERR(0, 1389, __pyx_L1_error)
+  __pyx_codeobj__220 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__219, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_itersiblings, 1390, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__220)) __PYX_ERR(0, 1390, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1412
+  /* "lxml/etree.pyx":1413
  *         return SiblingsIterator(self, tags, preceding=preceding)
  * 
  *     def iterancestors(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""iterancestors(self, tag=None, *tags)
  * 
  */
-  __pyx_tuple__221 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__221)) __PYX_ERR(0, 1412, __pyx_L1_error)
+  __pyx_tuple__221 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__221)) __PYX_ERR(0, 1413, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__221);
   __Pyx_GIVEREF(__pyx_tuple__221);
-  __pyx_codeobj__222 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__221, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterancestors, 1412, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__222)) __PYX_ERR(0, 1412, __pyx_L1_error)
+  __pyx_codeobj__222 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__221, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterancestors, 1413, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__222)) __PYX_ERR(0, 1413, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1426
+  /* "lxml/etree.pyx":1427
  *         return AncestorsIterator(self, tags)
  * 
  *     def iterdescendants(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""iterdescendants(self, tag=None, *tags)
  * 
  */
-  __pyx_tuple__223 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__223)) __PYX_ERR(0, 1426, __pyx_L1_error)
+  __pyx_tuple__223 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__223)) __PYX_ERR(0, 1427, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__223);
   __Pyx_GIVEREF(__pyx_tuple__223);
-  __pyx_codeobj__224 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__223, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterdescendants, 1426, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__224)) __PYX_ERR(0, 1426, __pyx_L1_error)
+  __pyx_codeobj__224 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__223, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterdescendants, 1427, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__224)) __PYX_ERR(0, 1427, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1441
+  /* "lxml/etree.pyx":1442
  *         return ElementDepthFirstIterator(self, tags, inclusive=False)
  * 
  *     def iterchildren(self, tag=None, *tags, reversed=False):             # <<<<<<<<<<<<<<
  *         u"""iterchildren(self, tag=None, *tags, reversed=False)
  * 
  */
-  __pyx_tuple__225 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_reversed, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__225)) __PYX_ERR(0, 1441, __pyx_L1_error)
+  __pyx_tuple__225 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_reversed, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__225)) __PYX_ERR(0, 1442, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__225);
   __Pyx_GIVEREF(__pyx_tuple__225);
-  __pyx_codeobj__226 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__225, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterchildren, 1441, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__226)) __PYX_ERR(0, 1441, __pyx_L1_error)
+  __pyx_codeobj__226 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__225, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterchildren, 1442, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__226)) __PYX_ERR(0, 1442, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1456
+  /* "lxml/etree.pyx":1457
  *         return ElementChildIterator(self, tags, reversed=reversed)
  * 
  *     def getroottree(self):             # <<<<<<<<<<<<<<
  *         u"""getroottree(self)
  * 
  */
-  __pyx_tuple__227 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__227)) __PYX_ERR(0, 1456, __pyx_L1_error)
+  __pyx_tuple__227 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__227)) __PYX_ERR(0, 1457, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__227);
   __Pyx_GIVEREF(__pyx_tuple__227);
-  __pyx_codeobj__228 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__227, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getroottree, 1456, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__228)) __PYX_ERR(0, 1456, __pyx_L1_error)
+  __pyx_codeobj__228 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__227, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getroottree, 1457, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__228)) __PYX_ERR(0, 1457, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1468
+  /* "lxml/etree.pyx":1469
  *         return _elementTreeFactory(self._doc, None)
  * 
  *     def getiterator(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""getiterator(self, tag=None, *tags)
  * 
  */
-  __pyx_tuple__229 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__229)) __PYX_ERR(0, 1468, __pyx_L1_error)
+  __pyx_tuple__229 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__229)) __PYX_ERR(0, 1469, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__229);
   __Pyx_GIVEREF(__pyx_tuple__229);
-  __pyx_codeobj__230 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__229, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getiterator, 1468, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__230)) __PYX_ERR(0, 1468, __pyx_L1_error)
+  __pyx_codeobj__230 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__229, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getiterator, 1469, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__230)) __PYX_ERR(0, 1469, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1490
+  /* "lxml/etree.pyx":1491
  *         return ElementDepthFirstIterator(self, tags)
  * 
  *     def iter(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""iter(self, tag=None, *tags)
  * 
  */
-  __pyx_tuple__231 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__231)) __PYX_ERR(0, 1490, __pyx_L1_error)
+  __pyx_tuple__231 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__231)) __PYX_ERR(0, 1491, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__231);
   __Pyx_GIVEREF(__pyx_tuple__231);
-  __pyx_codeobj__232 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__231, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iter, 1490, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__232)) __PYX_ERR(0, 1490, __pyx_L1_error)
+  __pyx_codeobj__232 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__231, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iter, 1491, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__232)) __PYX_ERR(0, 1491, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1514
+  /* "lxml/etree.pyx":1515
  *         return ElementDepthFirstIterator(self, tags)
  * 
  *     def itertext(self, tag=None, *tags, with_tail=True):             # <<<<<<<<<<<<<<
  *         u"""itertext(self, tag=None, *tags, with_tail=True)
  * 
  */
-  __pyx_tuple__233 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_with_tail, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__233)) __PYX_ERR(0, 1514, __pyx_L1_error)
+  __pyx_tuple__233 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_with_tail, __pyx_n_s_tags); if (unlikely(!__pyx_tuple__233)) __PYX_ERR(0, 1515, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__233);
   __Pyx_GIVEREF(__pyx_tuple__233);
-  __pyx_codeobj__234 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__233, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_itertext, 1514, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__234)) __PYX_ERR(0, 1514, __pyx_L1_error)
+  __pyx_codeobj__234 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__233, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_itertext, 1515, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__234)) __PYX_ERR(0, 1515, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1529
+  /* "lxml/etree.pyx":1530
  *         return ElementTextIterator(self, tags, with_tail=with_tail)
  * 
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
  *         u"""makeelement(self, _tag, attrib=None, nsmap=None, **_extra)
  * 
  */
-  __pyx_tuple__235 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__235)) __PYX_ERR(0, 1529, __pyx_L1_error)
+  __pyx_tuple__235 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__235)) __PYX_ERR(0, 1530, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__235);
   __Pyx_GIVEREF(__pyx_tuple__235);
-  __pyx_codeobj__236 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__235, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_makeelement, 1529, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__236)) __PYX_ERR(0, 1529, __pyx_L1_error)
+  __pyx_codeobj__236 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__235, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_makeelement, 1530, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__236)) __PYX_ERR(0, 1530, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1538
+  /* "lxml/etree.pyx":1539
  *                             attrib, nsmap, _extra)
  * 
  *     def find(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""find(self, path, namespaces=None)
  * 
  */
-  __pyx_tuple__237 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces); if (unlikely(!__pyx_tuple__237)) __PYX_ERR(0, 1538, __pyx_L1_error)
+  __pyx_tuple__237 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces); if (unlikely(!__pyx_tuple__237)) __PYX_ERR(0, 1539, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__237);
   __Pyx_GIVEREF(__pyx_tuple__237);
-  __pyx_codeobj__238 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__237, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_find, 1538, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__238)) __PYX_ERR(0, 1538, __pyx_L1_error)
+  __pyx_codeobj__238 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__237, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_find, 1539, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__238)) __PYX_ERR(0, 1539, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1551
+  /* "lxml/etree.pyx":1552
  *         return _elementpath.find(self, path, namespaces)
  * 
  *     def findtext(self, path, default=None, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""findtext(self, path, default=None, namespaces=None)
  * 
  */
-  __pyx_tuple__239 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_default, __pyx_n_s_namespaces); if (unlikely(!__pyx_tuple__239)) __PYX_ERR(0, 1551, __pyx_L1_error)
+  __pyx_tuple__239 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_default, __pyx_n_s_namespaces); if (unlikely(!__pyx_tuple__239)) __PYX_ERR(0, 1552, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__239);
   __Pyx_GIVEREF(__pyx_tuple__239);
-  __pyx_codeobj__240 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__239, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_findtext, 1551, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__240)) __PYX_ERR(0, 1551, __pyx_L1_error)
+  __pyx_codeobj__240 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__239, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_findtext, 1552, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__240)) __PYX_ERR(0, 1552, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1564
+  /* "lxml/etree.pyx":1565
  *         return _elementpath.findtext(self, path, default, namespaces)
  * 
  *     def findall(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""findall(self, path, namespaces=None)
  * 
  */
-  __pyx_tuple__241 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces); if (unlikely(!__pyx_tuple__241)) __PYX_ERR(0, 1564, __pyx_L1_error)
+  __pyx_tuple__241 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces); if (unlikely(!__pyx_tuple__241)) __PYX_ERR(0, 1565, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__241);
   __Pyx_GIVEREF(__pyx_tuple__241);
-  __pyx_codeobj__242 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__241, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_findall, 1564, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__242)) __PYX_ERR(0, 1564, __pyx_L1_error)
+  __pyx_codeobj__242 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__241, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_findall, 1565, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__242)) __PYX_ERR(0, 1565, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1577
+  /* "lxml/etree.pyx":1578
  *         return _elementpath.findall(self, path, namespaces)
  * 
  *     def iterfind(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""iterfind(self, path, namespaces=None)
  * 
  */
-  __pyx_tuple__243 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces); if (unlikely(!__pyx_tuple__243)) __PYX_ERR(0, 1577, __pyx_L1_error)
+  __pyx_tuple__243 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces); if (unlikely(!__pyx_tuple__243)) __PYX_ERR(0, 1578, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__243);
   __Pyx_GIVEREF(__pyx_tuple__243);
-  __pyx_codeobj__244 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__243, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterfind, 1577, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__244)) __PYX_ERR(0, 1577, __pyx_L1_error)
+  __pyx_codeobj__244 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__243, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterfind, 1578, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__244)) __PYX_ERR(0, 1578, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1590
+  /* "lxml/etree.pyx":1591
  *         return _elementpath.iterfind(self, path, namespaces)
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,             # <<<<<<<<<<<<<<
  *               smart_strings=True, **_variables):
  *         u"""xpath(self, _path, namespaces=None, extensions=None, smart_strings=True, **_variables)
  */
-  __pyx_tuple__245 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_path_2, __pyx_n_s_namespaces, __pyx_n_s_extensions, __pyx_n_s_smart_strings, __pyx_n_s_variables_2, __pyx_n_s_evaluator); if (unlikely(!__pyx_tuple__245)) __PYX_ERR(0, 1590, __pyx_L1_error)
+  __pyx_tuple__245 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_path_2, __pyx_n_s_namespaces, __pyx_n_s_extensions, __pyx_n_s_smart_strings, __pyx_n_s_variables_2, __pyx_n_s_evaluator); if (unlikely(!__pyx_tuple__245)) __PYX_ERR(0, 1591, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__245);
   __Pyx_GIVEREF(__pyx_tuple__245);
-  __pyx_codeobj__246 = (PyObject*)__Pyx_PyCode_New(2, 3, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__245, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_xpath, 1590, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__246)) __PYX_ERR(0, 1590, __pyx_L1_error)
+  __pyx_codeobj__246 = (PyObject*)__Pyx_PyCode_New(2, 3, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__245, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_xpath, 1591, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__246)) __PYX_ERR(0, 1591, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1601
+  /* "lxml/etree.pyx":1602
  *         return evaluator(_path, **_variables)
  * 
  *     def cssselect(self, expr, *, translator='xml'):             # <<<<<<<<<<<<<<
  *         """
  *         Run the CSS expression on this element and its children,
  */
-  __pyx_tuple__247 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_expr, __pyx_n_s_translator, __pyx_n_s_CSSSelector); if (unlikely(!__pyx_tuple__247)) __PYX_ERR(0, 1601, __pyx_L1_error)
+  __pyx_tuple__247 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_expr, __pyx_n_s_translator, __pyx_n_s_CSSSelector); if (unlikely(!__pyx_tuple__247)) __PYX_ERR(0, 1602, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__247);
   __Pyx_GIVEREF(__pyx_tuple__247);
-  __pyx_codeobj__248 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__247, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_cssselect, 1601, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__248)) __PYX_ERR(0, 1601, __pyx_L1_error)
+  __pyx_codeobj__248 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__247, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_cssselect, 1602, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__248)) __PYX_ERR(0, 1602, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1651
+  /* "lxml/etree.pyx":1652
  *         raise TypeError, u"this element does not have children or attributes"
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
  *         u"set(self, key, value)"
  *         self._raiseImmutable()
  */
-  __pyx_tuple__249 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_value); if (unlikely(!__pyx_tuple__249)) __PYX_ERR(0, 1651, __pyx_L1_error)
+  __pyx_tuple__249 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_value); if (unlikely(!__pyx_tuple__249)) __PYX_ERR(0, 1652, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__249);
   __Pyx_GIVEREF(__pyx_tuple__249);
-  __pyx_codeobj__250 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__249, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_set, 1651, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__250)) __PYX_ERR(0, 1651, __pyx_L1_error)
+  __pyx_codeobj__250 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__249, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_set, 1652, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__250)) __PYX_ERR(0, 1652, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1655
+  /* "lxml/etree.pyx":1656
  *         self._raiseImmutable()
  * 
  *     def append(self, value):             # <<<<<<<<<<<<<<
  *         u"append(self, value)"
  *         self._raiseImmutable()
  */
-  __pyx_tuple__251 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_value); if (unlikely(!__pyx_tuple__251)) __PYX_ERR(0, 1655, __pyx_L1_error)
+  __pyx_tuple__251 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_value); if (unlikely(!__pyx_tuple__251)) __PYX_ERR(0, 1656, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__251);
   __Pyx_GIVEREF(__pyx_tuple__251);
-  __pyx_codeobj__252 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__251, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_append, 1655, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__252)) __PYX_ERR(0, 1655, __pyx_L1_error)
+  __pyx_codeobj__252 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__251, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_append, 1656, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__252)) __PYX_ERR(0, 1656, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1659
+  /* "lxml/etree.pyx":1660
  *         self._raiseImmutable()
  * 
  *     def insert(self, index, value):             # <<<<<<<<<<<<<<
  *         u"insert(self, index, value)"
  *         self._raiseImmutable()
  */
-  __pyx_tuple__253 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_index, __pyx_n_s_value); if (unlikely(!__pyx_tuple__253)) __PYX_ERR(0, 1659, __pyx_L1_error)
+  __pyx_tuple__253 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_index, __pyx_n_s_value); if (unlikely(!__pyx_tuple__253)) __PYX_ERR(0, 1660, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__253);
   __Pyx_GIVEREF(__pyx_tuple__253);
-  __pyx_codeobj__254 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__253, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_insert, 1659, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__254)) __PYX_ERR(0, 1659, __pyx_L1_error)
+  __pyx_codeobj__254 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__253, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_insert, 1660, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__254)) __PYX_ERR(0, 1660, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1698
+  /* "lxml/etree.pyx":1699
  *         return 0
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
  *         u"get(self, key, default=None)"
  *         return None
  */
-  __pyx_tuple__255 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_default); if (unlikely(!__pyx_tuple__255)) __PYX_ERR(0, 1698, __pyx_L1_error)
+  __pyx_tuple__255 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_default); if (unlikely(!__pyx_tuple__255)) __PYX_ERR(0, 1699, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__255);
   __Pyx_GIVEREF(__pyx_tuple__255);
-  __pyx_codeobj__256 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__255, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_get, 1698, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__256)) __PYX_ERR(0, 1698, __pyx_L1_error)
+  __pyx_codeobj__256 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__255, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_get, 1699, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__256)) __PYX_ERR(0, 1699, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1702
+  /* "lxml/etree.pyx":1703
  *         return None
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
  *         u"keys(self)"
  *         return []
  */
-  __pyx_tuple__257 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__257)) __PYX_ERR(0, 1702, __pyx_L1_error)
+  __pyx_tuple__257 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__257)) __PYX_ERR(0, 1703, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__257);
   __Pyx_GIVEREF(__pyx_tuple__257);
-  __pyx_codeobj__258 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__257, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_keys, 1702, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__258)) __PYX_ERR(0, 1702, __pyx_L1_error)
+  __pyx_codeobj__258 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__257, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_keys, 1703, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__258)) __PYX_ERR(0, 1703, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1706
+  /* "lxml/etree.pyx":1707
  *         return []
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
  *         u"items(self)"
  *         return []
  */
-  __pyx_tuple__259 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__259)) __PYX_ERR(0, 1706, __pyx_L1_error)
+  __pyx_tuple__259 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__259)) __PYX_ERR(0, 1707, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__259);
   __Pyx_GIVEREF(__pyx_tuple__259);
-  __pyx_codeobj__260 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__259, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_items, 1706, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__260)) __PYX_ERR(0, 1706, __pyx_L1_error)
+  __pyx_codeobj__260 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__259, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_items, 1707, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__260)) __PYX_ERR(0, 1707, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1710
+  /* "lxml/etree.pyx":1711
  *         return []
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
  *         u"values(self)"
  *         return []
  */
-  __pyx_tuple__261 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__261)) __PYX_ERR(0, 1710, __pyx_L1_error)
+  __pyx_tuple__261 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__261)) __PYX_ERR(0, 1711, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__261);
   __Pyx_GIVEREF(__pyx_tuple__261);
-  __pyx_codeobj__262 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__261, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_values, 1710, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__262)) __PYX_ERR(0, 1710, __pyx_L1_error)
+  __pyx_codeobj__262 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__261, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_values, 1711, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__262)) __PYX_ERR(0, 1711, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1747
+  /* "lxml/etree.pyx":1748
  *             return "<?%s?>" % strrepr(self.target)
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
  *         u"""get(self, key, default=None)
  * 
  */
-  __pyx_tuple__263 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_default); if (unlikely(!__pyx_tuple__263)) __PYX_ERR(0, 1747, __pyx_L1_error)
+  __pyx_tuple__263 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_default); if (unlikely(!__pyx_tuple__263)) __PYX_ERR(0, 1748, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__263);
   __Pyx_GIVEREF(__pyx_tuple__263);
-  __pyx_codeobj__264 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__263, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_get, 1747, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__264)) __PYX_ERR(0, 1747, __pyx_L1_error)
+  __pyx_codeobj__264 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__263, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_get, 1748, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__264)) __PYX_ERR(0, 1748, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1891
+  /* "lxml/etree.pyx":1892
  *         return 0
  * 
  *     def parse(self, source, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *         u"""parse(self, source, parser=None, base_url=None)
  * 
  */
-  __pyx_tuple__265 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_source, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__265)) __PYX_ERR(0, 1891, __pyx_L1_error)
+  __pyx_tuple__265 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_source, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__265)) __PYX_ERR(0, 1892, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__265);
   __Pyx_GIVEREF(__pyx_tuple__265);
-  __pyx_codeobj__266 = (PyObject*)__Pyx_PyCode_New(3, 1, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__265, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_parse, 1891, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__266)) __PYX_ERR(0, 1891, __pyx_L1_error)
+  __pyx_codeobj__266 = (PyObject*)__Pyx_PyCode_New(3, 1, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__265, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_parse, 1892, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__266)) __PYX_ERR(0, 1892, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1907
+  /* "lxml/etree.pyx":1908
  *         return self._context_node
  * 
  *     def _setroot(self, _Element root not None):             # <<<<<<<<<<<<<<
  *         u"""_setroot(self, root)
  * 
  */
-  __pyx_tuple__267 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_root); if (unlikely(!__pyx_tuple__267)) __PYX_ERR(0, 1907, __pyx_L1_error)
+  __pyx_tuple__267 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_root); if (unlikely(!__pyx_tuple__267)) __PYX_ERR(0, 1908, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__267);
   __Pyx_GIVEREF(__pyx_tuple__267);
-  __pyx_codeobj__268 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__267, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_setroot, 1907, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__268)) __PYX_ERR(0, 1907, __pyx_L1_error)
+  __pyx_codeobj__268 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__267, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_setroot, 1908, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__268)) __PYX_ERR(0, 1908, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1918
+  /* "lxml/etree.pyx":1919
  *         self._doc = None
  * 
  *     def getroot(self):             # <<<<<<<<<<<<<<
  *         u"""getroot(self)
  * 
  */
-  __pyx_tuple__269 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__269)) __PYX_ERR(0, 1918, __pyx_L1_error)
+  __pyx_tuple__269 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__269)) __PYX_ERR(0, 1919, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__269);
   __Pyx_GIVEREF(__pyx_tuple__269);
-  __pyx_codeobj__270 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__269, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getroot, 1918, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__270)) __PYX_ERR(0, 1918, __pyx_L1_error)
+  __pyx_codeobj__270 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__269, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getroot, 1919, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__270)) __PYX_ERR(0, 1919, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1925
+  /* "lxml/etree.pyx":1926
  *         return self._context_node
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
  *         return _elementTreeFactory(self._doc, self._context_node)
  * 
  */
-  __pyx_tuple__271 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__271)) __PYX_ERR(0, 1925, __pyx_L1_error)
+  __pyx_tuple__271 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__271)) __PYX_ERR(0, 1926, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__271);
   __Pyx_GIVEREF(__pyx_tuple__271);
-  __pyx_codeobj__272 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__271, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_copy_2, 1925, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__272)) __PYX_ERR(0, 1925, __pyx_L1_error)
+  __pyx_codeobj__272 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__271, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_copy_2, 1926, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__272)) __PYX_ERR(0, 1926, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1928
+  /* "lxml/etree.pyx":1929
  *         return _elementTreeFactory(self._doc, self._context_node)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
  *         cdef _Element root
  *         cdef _Document doc
  */
-  __pyx_tuple__273 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_memo, __pyx_n_s_root, __pyx_n_s_doc_2, __pyx_n_s_c_doc); if (unlikely(!__pyx_tuple__273)) __PYX_ERR(0, 1928, __pyx_L1_error)
+  __pyx_tuple__273 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_memo, __pyx_n_s_root, __pyx_n_s_doc_2, __pyx_n_s_c_doc); if (unlikely(!__pyx_tuple__273)) __PYX_ERR(0, 1929, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__273);
   __Pyx_GIVEREF(__pyx_tuple__273);
-  __pyx_codeobj__274 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__273, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_deepcopy, 1928, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__274)) __PYX_ERR(0, 1928, __pyx_L1_error)
+  __pyx_codeobj__274 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__273, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_deepcopy, 1929, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__274)) __PYX_ERR(0, 1929, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":1968
+  /* "lxml/etree.pyx":1969
  *         return None
  * 
  *     def write(self, file, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
  *               bint pretty_print=False, xml_declaration=None, bint with_tail=True,
  *               standalone=None, doctype=None, compression=0,
  */
-  __pyx_tuple__275 = PyTuple_Pack(20, __pyx_n_s_self, __pyx_n_s_file, __pyx_n_s_encoding, __pyx_n_s_method, __pyx_n_s_pretty_print, __pyx_n_s_xml_declaration, __pyx_n_s_with_tail, __pyx_n_s_standalone, __pyx_n_s_doctype, __pyx_n_s_compression, __pyx_n_s_exclusive, __pyx_n_s_inclusive_ns_prefixes, __pyx_n_s_with_comments, __pyx_n_s_strip_text, __pyx_n_s_docstring, __pyx_n_s_write_declaration, __pyx_n_s_is_standalone, __pyx_n_s_f, __pyx_n_s_target, __pyx_n_s_warnings); if (unlikely(!__pyx_tuple__275)) __PYX_ERR(0, 1968, __pyx_L1_error)
+  __pyx_tuple__275 = PyTuple_Pack(20, __pyx_n_s_self, __pyx_n_s_file, __pyx_n_s_encoding, __pyx_n_s_method, __pyx_n_s_pretty_print, __pyx_n_s_xml_declaration, __pyx_n_s_with_tail, __pyx_n_s_standalone, __pyx_n_s_doctype, __pyx_n_s_compression, __pyx_n_s_exclusive, __pyx_n_s_inclusive_ns_prefixes, __pyx_n_s_with_comments, __pyx_n_s_strip_text, __pyx_n_s_docstring, __pyx_n_s_write_declaration, __pyx_n_s_is_standalone, __pyx_n_s_f, __pyx_n_s_target, __pyx_n_s_warnings); if (unlikely(!__pyx_tuple__275)) __PYX_ERR(0, 1969, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__275);
   __Pyx_GIVEREF(__pyx_tuple__275);
-  __pyx_codeobj__276 = (PyObject*)__Pyx_PyCode_New(2, 13, 20, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__275, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_write, 1968, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__276)) __PYX_ERR(0, 1968, __pyx_L1_error)
+  __pyx_codeobj__276 = (PyObject*)__Pyx_PyCode_New(2, 13, 20, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__275, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_write, 1969, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__276)) __PYX_ERR(0, 1969, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2078
+  /* "lxml/etree.pyx":2079
  *                     is_standalone, compression)
  * 
  *     def getpath(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""getpath(self, element)
  * 
  */
-  __pyx_tuple__277 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_element, __pyx_n_s_doc_2, __pyx_n_s_root, __pyx_n_s_c_doc, __pyx_n_s_c_path, __pyx_n_s_path); if (unlikely(!__pyx_tuple__277)) __PYX_ERR(0, 2078, __pyx_L1_error)
+  __pyx_tuple__277 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_element, __pyx_n_s_doc_2, __pyx_n_s_root, __pyx_n_s_c_doc, __pyx_n_s_c_path, __pyx_n_s_path); if (unlikely(!__pyx_tuple__277)) __PYX_ERR(0, 2079, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__277);
   __Pyx_GIVEREF(__pyx_tuple__277);
-  __pyx_codeobj__278 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__277, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getpath, 2078, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__278)) __PYX_ERR(0, 2078, __pyx_L1_error)
+  __pyx_codeobj__278 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__277, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getpath, 2079, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__278)) __PYX_ERR(0, 2079, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2116
+  /* "lxml/etree.pyx":2117
  *         return path
  * 
  *     def getelementpath(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""getelementpath(self, element)
  * 
  */
-  __pyx_tuple__279 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_element, __pyx_n_s_root, __pyx_n_s_count, __pyx_n_s_path, __pyx_n_s_c_element, __pyx_n_s_c_name, __pyx_n_s_c_href, __pyx_n_s_tag, __pyx_n_s_c_node); if (unlikely(!__pyx_tuple__279)) __PYX_ERR(0, 2116, __pyx_L1_error)
+  __pyx_tuple__279 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_element, __pyx_n_s_root, __pyx_n_s_count, __pyx_n_s_path, __pyx_n_s_c_element, __pyx_n_s_c_name, __pyx_n_s_c_href, __pyx_n_s_tag, __pyx_n_s_c_node); if (unlikely(!__pyx_tuple__279)) __PYX_ERR(0, 2117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__279);
   __Pyx_GIVEREF(__pyx_tuple__279);
-  __pyx_codeobj__280 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__279, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getelementpath, 2116, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__280)) __PYX_ERR(0, 2116, __pyx_L1_error)
+  __pyx_codeobj__280 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__279, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getelementpath, 2117, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__280)) __PYX_ERR(0, 2117, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2180
+  /* "lxml/etree.pyx":2181
  *         return '/'.join(path)
  * 
  *     def getiterator(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""getiterator(self, *tags, tag=None)
  * 
  */
-  __pyx_tuple__281 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags, __pyx_n_s_root); if (unlikely(!__pyx_tuple__281)) __PYX_ERR(0, 2180, __pyx_L1_error)
+  __pyx_tuple__281 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags, __pyx_n_s_root); if (unlikely(!__pyx_tuple__281)) __PYX_ERR(0, 2181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__281);
   __Pyx_GIVEREF(__pyx_tuple__281);
-  __pyx_codeobj__282 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__281, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getiterator, 2180, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__282)) __PYX_ERR(0, 2180, __pyx_L1_error)
+  __pyx_codeobj__282 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__281, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_getiterator, 2181, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__282)) __PYX_ERR(0, 2181, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2204
+  /* "lxml/etree.pyx":2205
  *         return root.getiterator(*tags)
  * 
  *     def iter(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""iter(self, tag=None, *tags)
  * 
  */
-  __pyx_tuple__283 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags, __pyx_n_s_root); if (unlikely(!__pyx_tuple__283)) __PYX_ERR(0, 2204, __pyx_L1_error)
+  __pyx_tuple__283 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_tag, __pyx_n_s_tags, __pyx_n_s_root); if (unlikely(!__pyx_tuple__283)) __PYX_ERR(0, 2205, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__283);
   __Pyx_GIVEREF(__pyx_tuple__283);
-  __pyx_codeobj__284 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__283, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iter, 2204, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__284)) __PYX_ERR(0, 2204, __pyx_L1_error)
+  __pyx_codeobj__284 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__283, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iter, 2205, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__284)) __PYX_ERR(0, 2205, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2222
+  /* "lxml/etree.pyx":2223
  *         return root.iter(*tags)
  * 
  *     def find(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""find(self, path, namespaces=None)
  * 
  */
-  __pyx_tuple__285 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces, __pyx_n_s_root); if (unlikely(!__pyx_tuple__285)) __PYX_ERR(0, 2222, __pyx_L1_error)
+  __pyx_tuple__285 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces, __pyx_n_s_root); if (unlikely(!__pyx_tuple__285)) __PYX_ERR(0, 2223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__285);
   __Pyx_GIVEREF(__pyx_tuple__285);
-  __pyx_codeobj__286 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__285, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_find, 2222, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__286)) __PYX_ERR(0, 2222, __pyx_L1_error)
+  __pyx_codeobj__286 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__285, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_find, 2223, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__286)) __PYX_ERR(0, 2223, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2239
+  /* "lxml/etree.pyx":2240
  *         return root.find(path, namespaces)
  * 
  *     def findtext(self, path, default=None, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""findtext(self, path, default=None, namespaces=None)
  * 
  */
-  __pyx_tuple__287 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_default, __pyx_n_s_namespaces, __pyx_n_s_root); if (unlikely(!__pyx_tuple__287)) __PYX_ERR(0, 2239, __pyx_L1_error)
+  __pyx_tuple__287 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_default, __pyx_n_s_namespaces, __pyx_n_s_root); if (unlikely(!__pyx_tuple__287)) __PYX_ERR(0, 2240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__287);
   __Pyx_GIVEREF(__pyx_tuple__287);
-  __pyx_codeobj__288 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__287, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_findtext, 2239, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__288)) __PYX_ERR(0, 2239, __pyx_L1_error)
+  __pyx_codeobj__288 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__287, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_findtext, 2240, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__288)) __PYX_ERR(0, 2240, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2256
+  /* "lxml/etree.pyx":2257
  *         return root.findtext(path, default, namespaces)
  * 
  *     def findall(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""findall(self, path, namespaces=None)
  * 
  */
-  __pyx_tuple__289 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces, __pyx_n_s_root); if (unlikely(!__pyx_tuple__289)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_tuple__289 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces, __pyx_n_s_root); if (unlikely(!__pyx_tuple__289)) __PYX_ERR(0, 2257, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__289);
   __Pyx_GIVEREF(__pyx_tuple__289);
-  __pyx_codeobj__290 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__289, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_findall, 2256, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__290)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_codeobj__290 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__289, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_findall, 2257, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__290)) __PYX_ERR(0, 2257, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2273
+  /* "lxml/etree.pyx":2274
  *         return root.findall(path, namespaces)
  * 
  *     def iterfind(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""iterfind(self, path, namespaces=None)
  * 
  */
-  __pyx_tuple__291 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces, __pyx_n_s_root); if (unlikely(!__pyx_tuple__291)) __PYX_ERR(0, 2273, __pyx_L1_error)
+  __pyx_tuple__291 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_namespaces, __pyx_n_s_root); if (unlikely(!__pyx_tuple__291)) __PYX_ERR(0, 2274, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__291);
   __Pyx_GIVEREF(__pyx_tuple__291);
-  __pyx_codeobj__292 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__291, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterfind, 2273, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__292)) __PYX_ERR(0, 2273, __pyx_L1_error)
+  __pyx_codeobj__292 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__291, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterfind, 2274, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__292)) __PYX_ERR(0, 2274, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2290
+  /* "lxml/etree.pyx":2291
  *         return root.iterfind(path, namespaces)
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,             # <<<<<<<<<<<<<<
  *               smart_strings=True, **_variables):
  *         u"""xpath(self, _path, namespaces=None, extensions=None, smart_strings=True, **_variables)
  */
-  __pyx_tuple__293 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_path_2, __pyx_n_s_namespaces, __pyx_n_s_extensions, __pyx_n_s_smart_strings, __pyx_n_s_variables_2, __pyx_n_s_evaluator); if (unlikely(!__pyx_tuple__293)) __PYX_ERR(0, 2290, __pyx_L1_error)
+  __pyx_tuple__293 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_path_2, __pyx_n_s_namespaces, __pyx_n_s_extensions, __pyx_n_s_smart_strings, __pyx_n_s_variables_2, __pyx_n_s_evaluator); if (unlikely(!__pyx_tuple__293)) __PYX_ERR(0, 2291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__293);
   __Pyx_GIVEREF(__pyx_tuple__293);
-  __pyx_codeobj__294 = (PyObject*)__Pyx_PyCode_New(2, 3, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__293, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_xpath, 2290, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__294)) __PYX_ERR(0, 2290, __pyx_L1_error)
+  __pyx_codeobj__294 = (PyObject*)__Pyx_PyCode_New(2, 3, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__293, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_xpath, 2291, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__294)) __PYX_ERR(0, 2291, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2315
+  /* "lxml/etree.pyx":2316
  *         return evaluator(_path, **_variables)
  * 
  *     def xslt(self, _xslt, extensions=None, access_control=None, **_kw):             # <<<<<<<<<<<<<<
  *         u"""xslt(self, _xslt, extensions=None, access_control=None, **_kw)
  * 
  */
-  __pyx_tuple__295 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_xslt, __pyx_n_s_extensions, __pyx_n_s_access_control, __pyx_n_s_kw, __pyx_n_s_style); if (unlikely(!__pyx_tuple__295)) __PYX_ERR(0, 2315, __pyx_L1_error)
+  __pyx_tuple__295 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_xslt, __pyx_n_s_extensions, __pyx_n_s_access_control, __pyx_n_s_kw, __pyx_n_s_style); if (unlikely(!__pyx_tuple__295)) __PYX_ERR(0, 2316, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__295);
   __Pyx_GIVEREF(__pyx_tuple__295);
-  __pyx_codeobj__296 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__295, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_xslt_3, 2315, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__296)) __PYX_ERR(0, 2315, __pyx_L1_error)
+  __pyx_codeobj__296 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__295, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_xslt_3, 2316, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__296)) __PYX_ERR(0, 2316, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2334
+  /* "lxml/etree.pyx":2335
  *         return style(self, **_kw)
  * 
  *     def relaxng(self, relaxng):             # <<<<<<<<<<<<<<
  *         u"""relaxng(self, relaxng)
  * 
  */
-  __pyx_tuple__297 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_relaxng, __pyx_n_s_schema); if (unlikely(!__pyx_tuple__297)) __PYX_ERR(0, 2334, __pyx_L1_error)
+  __pyx_tuple__297 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_relaxng, __pyx_n_s_schema); if (unlikely(!__pyx_tuple__297)) __PYX_ERR(0, 2335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__297);
   __Pyx_GIVEREF(__pyx_tuple__297);
-  __pyx_codeobj__298 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__297, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_relaxng, 2334, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__298)) __PYX_ERR(0, 2334, __pyx_L1_error)
+  __pyx_codeobj__298 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__297, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_relaxng, 2335, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__298)) __PYX_ERR(0, 2335, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2352
+  /* "lxml/etree.pyx":2353
  *         return schema.validate(self)
  * 
  *     def xmlschema(self, xmlschema):             # <<<<<<<<<<<<<<
  *         u"""xmlschema(self, xmlschema)
  * 
  */
-  __pyx_tuple__299 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_xmlschema, __pyx_n_s_schema); if (unlikely(!__pyx_tuple__299)) __PYX_ERR(0, 2352, __pyx_L1_error)
+  __pyx_tuple__299 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_xmlschema, __pyx_n_s_schema); if (unlikely(!__pyx_tuple__299)) __PYX_ERR(0, 2353, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__299);
   __Pyx_GIVEREF(__pyx_tuple__299);
-  __pyx_codeobj__300 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__299, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_xmlschema, 2352, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__300)) __PYX_ERR(0, 2352, __pyx_L1_error)
+  __pyx_codeobj__300 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__299, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_xmlschema, 2353, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__300)) __PYX_ERR(0, 2353, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2370
+  /* "lxml/etree.pyx":2371
  *         return schema.validate(self)
  * 
  *     def xinclude(self):             # <<<<<<<<<<<<<<
  *         u"""xinclude(self)
  * 
  */
-  __pyx_tuple__301 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__301)) __PYX_ERR(0, 2370, __pyx_L1_error)
+  __pyx_tuple__301 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__301)) __PYX_ERR(0, 2371, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__301);
   __Pyx_GIVEREF(__pyx_tuple__301);
-  __pyx_codeobj__302 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__301, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_xinclude, 2370, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__302)) __PYX_ERR(0, 2370, __pyx_L1_error)
+  __pyx_codeobj__302 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__301, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_xinclude, 2371, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__302)) __PYX_ERR(0, 2371, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2385
+  /* "lxml/etree.pyx":2386
  *         XInclude()(self._context_node)
  * 
  *     def write_c14n(self, file, *, bint exclusive=False, bint with_comments=True,             # <<<<<<<<<<<<<<
  *                    compression=0, inclusive_ns_prefixes=None):
  *         u"""write_c14n(self, file, exclusive=False, with_comments=True,
  */
-  __pyx_tuple__303 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_file, __pyx_n_s_exclusive, __pyx_n_s_with_comments, __pyx_n_s_compression, __pyx_n_s_inclusive_ns_prefixes); if (unlikely(!__pyx_tuple__303)) __PYX_ERR(0, 2385, __pyx_L1_error)
+  __pyx_tuple__303 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_file, __pyx_n_s_exclusive, __pyx_n_s_with_comments, __pyx_n_s_compression, __pyx_n_s_inclusive_ns_prefixes); if (unlikely(!__pyx_tuple__303)) __PYX_ERR(0, 2386, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__303);
   __Pyx_GIVEREF(__pyx_tuple__303);
-  __pyx_codeobj__304 = (PyObject*)__Pyx_PyCode_New(2, 4, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__303, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_write_c14n, 2385, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__304)) __PYX_ERR(0, 2385, __pyx_L1_error)
+  __pyx_codeobj__304 = (PyObject*)__Pyx_PyCode_New(2, 4, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__303, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_write_c14n, 2386, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__304)) __PYX_ERR(0, 2386, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2452
+  /* "lxml/etree.pyx":2453
  *         _delAttribute(self._element, key)
  * 
  *     def update(self, sequence_or_dict):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         if isinstance(sequence_or_dict, (dict, _Attrib)):
  */
-  __pyx_tuple__305 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_sequence_or_dict, __pyx_n_s_key, __pyx_n_s_value); if (unlikely(!__pyx_tuple__305)) __PYX_ERR(0, 2452, __pyx_L1_error)
+  __pyx_tuple__305 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_sequence_or_dict, __pyx_n_s_key, __pyx_n_s_value); if (unlikely(!__pyx_tuple__305)) __PYX_ERR(0, 2453, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__305);
   __Pyx_GIVEREF(__pyx_tuple__305);
-  __pyx_codeobj__306 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__305, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_update, 2452, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__306)) __PYX_ERR(0, 2452, __pyx_L1_error)
+  __pyx_codeobj__306 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__305, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_update, 2453, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__306)) __PYX_ERR(0, 2453, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2459
+  /* "lxml/etree.pyx":2460
  *             _setAttributeValue(self._element, key, value)
  * 
  *     def pop(self, key, *default):             # <<<<<<<<<<<<<<
  *         if len(default) > 1:
  *             raise TypeError, f"pop expected at most 2 arguments, got {len(default)+1}"
  */
-  __pyx_tuple__307 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_default, __pyx_n_s_result); if (unlikely(!__pyx_tuple__307)) __PYX_ERR(0, 2459, __pyx_L1_error)
+  __pyx_tuple__307 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_default, __pyx_n_s_result); if (unlikely(!__pyx_tuple__307)) __PYX_ERR(0, 2460, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__307);
   __Pyx_GIVEREF(__pyx_tuple__307);
-  __pyx_codeobj__308 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__307, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_pop, 2459, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__308)) __PYX_ERR(0, 2459, __pyx_L1_error)
+  __pyx_codeobj__308 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__307, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_pop, 2460, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__308)) __PYX_ERR(0, 2460, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2472
+  /* "lxml/etree.pyx":2473
  *         return result
  * 
  *     def clear(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         c_attrs = self._element._c_node.properties
  */
-  __pyx_tuple__309 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_c_attrs); if (unlikely(!__pyx_tuple__309)) __PYX_ERR(0, 2472, __pyx_L1_error)
+  __pyx_tuple__309 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_c_attrs); if (unlikely(!__pyx_tuple__309)) __PYX_ERR(0, 2473, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__309);
   __Pyx_GIVEREF(__pyx_tuple__309);
-  __pyx_codeobj__310 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__309, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_clear, 2472, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__310)) __PYX_ERR(0, 2472, __pyx_L1_error)
+  __pyx_codeobj__310 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__309, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_clear, 2473, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__310)) __PYX_ERR(0, 2473, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2484
+  /* "lxml/etree.pyx":2485
  *         return repr(dict( _collectAttributes(self._element._c_node, 3) ))
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return dict(_collectAttributes(self._element._c_node, 3))
  */
-  __pyx_tuple__311 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__311)) __PYX_ERR(0, 2484, __pyx_L1_error)
+  __pyx_tuple__311 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__311)) __PYX_ERR(0, 2485, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__311);
   __Pyx_GIVEREF(__pyx_tuple__311);
-  __pyx_codeobj__312 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__311, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_copy_2, 2484, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__312)) __PYX_ERR(0, 2484, __pyx_L1_error)
+  __pyx_codeobj__312 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__311, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_copy_2, 2485, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__312)) __PYX_ERR(0, 2485, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2488
+  /* "lxml/etree.pyx":2489
  *         return dict(_collectAttributes(self._element._c_node, 3))
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return dict(_collectAttributes(self._element._c_node, 3))
  */
-  __pyx_tuple__313 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_memo); if (unlikely(!__pyx_tuple__313)) __PYX_ERR(0, 2488, __pyx_L1_error)
+  __pyx_tuple__313 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_memo); if (unlikely(!__pyx_tuple__313)) __PYX_ERR(0, 2489, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__313);
   __Pyx_GIVEREF(__pyx_tuple__313);
-  __pyx_codeobj__314 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__313, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_deepcopy, 2488, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__314)) __PYX_ERR(0, 2488, __pyx_L1_error)
+  __pyx_codeobj__314 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__313, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_deepcopy, 2489, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__314)) __PYX_ERR(0, 2489, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2518
+  /* "lxml/etree.pyx":2519
  *         return c
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return _getAttributeValue(self._element, key, default)
  */
-  __pyx_tuple__315 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_default); if (unlikely(!__pyx_tuple__315)) __PYX_ERR(0, 2518, __pyx_L1_error)
+  __pyx_tuple__315 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_default); if (unlikely(!__pyx_tuple__315)) __PYX_ERR(0, 2519, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__315);
   __Pyx_GIVEREF(__pyx_tuple__315);
-  __pyx_codeobj__316 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__315, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_get, 2518, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__316)) __PYX_ERR(0, 2518, __pyx_L1_error)
+  __pyx_codeobj__316 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__315, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_get, 2519, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__316)) __PYX_ERR(0, 2519, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2522
+  /* "lxml/etree.pyx":2523
  *         return _getAttributeValue(self._element, key, default)
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return _collectAttributes(self._element._c_node, 1)
  */
-  __pyx_tuple__317 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__317)) __PYX_ERR(0, 2522, __pyx_L1_error)
+  __pyx_tuple__317 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__317)) __PYX_ERR(0, 2523, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__317);
   __Pyx_GIVEREF(__pyx_tuple__317);
-  __pyx_codeobj__318 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__317, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_keys, 2522, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__318)) __PYX_ERR(0, 2522, __pyx_L1_error)
+  __pyx_codeobj__318 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__317, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_keys, 2523, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__318)) __PYX_ERR(0, 2523, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2530
+  /* "lxml/etree.pyx":2531
  *         return iter(_collectAttributes(self._element._c_node, 1))
  * 
  *     def iterkeys(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return iter(_collectAttributes(self._element._c_node, 1))
  */
-  __pyx_tuple__319 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__319)) __PYX_ERR(0, 2530, __pyx_L1_error)
+  __pyx_tuple__319 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__319)) __PYX_ERR(0, 2531, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__319);
   __Pyx_GIVEREF(__pyx_tuple__319);
-  __pyx_codeobj__320 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__319, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterkeys, 2530, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__320)) __PYX_ERR(0, 2530, __pyx_L1_error)
+  __pyx_codeobj__320 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__319, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iterkeys, 2531, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__320)) __PYX_ERR(0, 2531, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2534
+  /* "lxml/etree.pyx":2535
  *         return iter(_collectAttributes(self._element._c_node, 1))
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return _collectAttributes(self._element._c_node, 2)
  */
-  __pyx_tuple__321 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__321)) __PYX_ERR(0, 2534, __pyx_L1_error)
+  __pyx_tuple__321 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__321)) __PYX_ERR(0, 2535, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__321);
   __Pyx_GIVEREF(__pyx_tuple__321);
-  __pyx_codeobj__322 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__321, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_values, 2534, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__322)) __PYX_ERR(0, 2534, __pyx_L1_error)
+  __pyx_codeobj__322 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__321, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_values, 2535, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__322)) __PYX_ERR(0, 2535, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2538
+  /* "lxml/etree.pyx":2539
  *         return _collectAttributes(self._element._c_node, 2)
  * 
  *     def itervalues(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return iter(_collectAttributes(self._element._c_node, 2))
  */
-  __pyx_tuple__323 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__323)) __PYX_ERR(0, 2538, __pyx_L1_error)
+  __pyx_tuple__323 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__323)) __PYX_ERR(0, 2539, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__323);
   __Pyx_GIVEREF(__pyx_tuple__323);
-  __pyx_codeobj__324 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__323, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_itervalues, 2538, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__324)) __PYX_ERR(0, 2538, __pyx_L1_error)
+  __pyx_codeobj__324 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__323, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_itervalues, 2539, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__324)) __PYX_ERR(0, 2539, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2542
+  /* "lxml/etree.pyx":2543
  *         return iter(_collectAttributes(self._element._c_node, 2))
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return _collectAttributes(self._element._c_node, 3)
  */
-  __pyx_tuple__325 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__325)) __PYX_ERR(0, 2542, __pyx_L1_error)
+  __pyx_tuple__325 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__325)) __PYX_ERR(0, 2543, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__325);
   __Pyx_GIVEREF(__pyx_tuple__325);
-  __pyx_codeobj__326 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__325, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_items, 2542, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__326)) __PYX_ERR(0, 2542, __pyx_L1_error)
+  __pyx_codeobj__326 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__325, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_items, 2543, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__326)) __PYX_ERR(0, 2543, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2546
+  /* "lxml/etree.pyx":2547
  *         return _collectAttributes(self._element._c_node, 3)
  * 
  *     def iteritems(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return iter(_collectAttributes(self._element._c_node, 3))
  */
-  __pyx_tuple__327 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__327)) __PYX_ERR(0, 2546, __pyx_L1_error)
+  __pyx_tuple__327 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__327)) __PYX_ERR(0, 2547, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__327);
   __Pyx_GIVEREF(__pyx_tuple__327);
-  __pyx_codeobj__328 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__327, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iteritems, 2546, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__328)) __PYX_ERR(0, 2546, __pyx_L1_error)
+  __pyx_codeobj__328 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__327, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iteritems, 2547, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__328)) __PYX_ERR(0, 2547, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":2550
+  /* "lxml/etree.pyx":2551
  *         return iter(_collectAttributes(self._element._c_node, 3))
  * 
  *     def has_key(self, key):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return key in self
  */
-  __pyx_tuple__329 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_key); if (unlikely(!__pyx_tuple__329)) __PYX_ERR(0, 2550, __pyx_L1_error)
+  __pyx_tuple__329 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_key); if (unlikely(!__pyx_tuple__329)) __PYX_ERR(0, 2551, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__329);
   __Pyx_GIVEREF(__pyx_tuple__329);
-  __pyx_codeobj__330 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__329, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_has_key, 2550, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__330)) __PYX_ERR(0, 2550, __pyx_L1_error)
+  __pyx_codeobj__330 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__329, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_has_key, 2551, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__330)) __PYX_ERR(0, 2551, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3029
+  /* "lxml/etree.pyx":3032
  * # module-level API for ElementTree
  * 
  * def Element(_tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
  *     u"""Element(_tag, attrib=None, nsmap=None, **_extra)
  * 
  */
-  __pyx_tuple__331 = PyTuple_Pack(4, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__331)) __PYX_ERR(0, 3029, __pyx_L1_error)
+  __pyx_tuple__331 = PyTuple_Pack(4, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__331)) __PYX_ERR(0, 3032, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__331);
   __Pyx_GIVEREF(__pyx_tuple__331);
-  __pyx_codeobj__332 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__331, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_Element, 3029, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__332)) __PYX_ERR(0, 3029, __pyx_L1_error)
-  __pyx_tuple__333 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__333)) __PYX_ERR(0, 3029, __pyx_L1_error)
+  __pyx_codeobj__332 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__331, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_Element, 3032, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__332)) __PYX_ERR(0, 3032, __pyx_L1_error)
+  __pyx_tuple__333 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__333)) __PYX_ERR(0, 3032, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__333);
   __Pyx_GIVEREF(__pyx_tuple__333);
 
-  /* "lxml/etree.pyx":3043
+  /* "lxml/etree.pyx":3046
  * 
  * 
  * def Comment(text=None):             # <<<<<<<<<<<<<<
  *     u"""Comment(text=None)
  * 
  */
-  __pyx_tuple__334 = PyTuple_Pack(4, __pyx_n_s_text, __pyx_n_s_doc_2, __pyx_n_s_c_node, __pyx_n_s_c_doc); if (unlikely(!__pyx_tuple__334)) __PYX_ERR(0, 3043, __pyx_L1_error)
+  __pyx_tuple__334 = PyTuple_Pack(4, __pyx_n_s_text, __pyx_n_s_doc_2, __pyx_n_s_c_node, __pyx_n_s_c_doc); if (unlikely(!__pyx_tuple__334)) __PYX_ERR(0, 3046, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__334);
   __Pyx_GIVEREF(__pyx_tuple__334);
-  __pyx_codeobj__335 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__334, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_Comment, 3043, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__335)) __PYX_ERR(0, 3043, __pyx_L1_error)
-  __pyx_tuple__336 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__336)) __PYX_ERR(0, 3043, __pyx_L1_error)
+  __pyx_codeobj__335 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__334, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_Comment, 3046, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__335)) __PYX_ERR(0, 3046, __pyx_L1_error)
+  __pyx_tuple__336 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__336)) __PYX_ERR(0, 3046, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__336);
   __Pyx_GIVEREF(__pyx_tuple__336);
 
-  /* "lxml/etree.pyx":3067
+  /* "lxml/etree.pyx":3070
  * 
  * 
  * def ProcessingInstruction(target, text=None):             # <<<<<<<<<<<<<<
  *     u"""ProcessingInstruction(target, text=None)
  * 
  */
-  __pyx_tuple__337 = PyTuple_Pack(5, __pyx_n_s_target, __pyx_n_s_text, __pyx_n_s_doc_2, __pyx_n_s_c_node, __pyx_n_s_c_doc); if (unlikely(!__pyx_tuple__337)) __PYX_ERR(0, 3067, __pyx_L1_error)
+  __pyx_tuple__337 = PyTuple_Pack(5, __pyx_n_s_target, __pyx_n_s_text, __pyx_n_s_doc_2, __pyx_n_s_c_node, __pyx_n_s_c_doc); if (unlikely(!__pyx_tuple__337)) __PYX_ERR(0, 3070, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__337);
   __Pyx_GIVEREF(__pyx_tuple__337);
-  __pyx_codeobj__338 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__337, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_ProcessingInstruction, 3067, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__338)) __PYX_ERR(0, 3067, __pyx_L1_error)
-  __pyx_tuple__339 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__339)) __PYX_ERR(0, 3067, __pyx_L1_error)
+  __pyx_codeobj__338 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__337, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_ProcessingInstruction, 3070, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__338)) __PYX_ERR(0, 3070, __pyx_L1_error)
+  __pyx_tuple__339 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__339)) __PYX_ERR(0, 3070, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__339);
   __Pyx_GIVEREF(__pyx_tuple__339);
 
-  /* "lxml/etree.pyx":3120
+  /* "lxml/etree.pyx":3123
  * 
  * 
  * def Entity(name):             # <<<<<<<<<<<<<<
  *     u"""Entity(name)
  * 
  */
-  __pyx_tuple__340 = PyTuple_Pack(6, __pyx_n_s_name_2, __pyx_n_s_doc_2, __pyx_n_s_c_node, __pyx_n_s_c_doc, __pyx_n_s_name_utf, __pyx_n_s_c_name); if (unlikely(!__pyx_tuple__340)) __PYX_ERR(0, 3120, __pyx_L1_error)
+  __pyx_tuple__340 = PyTuple_Pack(6, __pyx_n_s_name_2, __pyx_n_s_doc_2, __pyx_n_s_c_node, __pyx_n_s_c_doc, __pyx_n_s_name_utf, __pyx_n_s_c_name); if (unlikely(!__pyx_tuple__340)) __PYX_ERR(0, 3123, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__340);
   __Pyx_GIVEREF(__pyx_tuple__340);
-  __pyx_codeobj__341 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__340, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_Entity, 3120, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__341)) __PYX_ERR(0, 3120, __pyx_L1_error)
+  __pyx_codeobj__341 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__340, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_Entity, 3123, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__341)) __PYX_ERR(0, 3123, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3146
+  /* "lxml/etree.pyx":3149
  * 
  * 
  * def SubElement(_Element _parent not None, _tag,             # <<<<<<<<<<<<<<
  *                attrib=None, nsmap=None, **_extra):
  *     u"""SubElement(_parent, _tag, attrib=None, nsmap=None, **_extra)
  */
-  __pyx_tuple__342 = PyTuple_Pack(5, __pyx_n_s_parent, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__342)) __PYX_ERR(0, 3146, __pyx_L1_error)
+  __pyx_tuple__342 = PyTuple_Pack(5, __pyx_n_s_parent, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__342)) __PYX_ERR(0, 3149, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__342);
   __Pyx_GIVEREF(__pyx_tuple__342);
-  __pyx_codeobj__343 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__342, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_SubElement, 3146, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__343)) __PYX_ERR(0, 3146, __pyx_L1_error)
-  __pyx_tuple__344 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__344)) __PYX_ERR(0, 3146, __pyx_L1_error)
+  __pyx_codeobj__343 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__342, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_SubElement, 3149, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__343)) __PYX_ERR(0, 3149, __pyx_L1_error)
+  __pyx_tuple__344 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__344)) __PYX_ERR(0, 3149, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__344);
   __Pyx_GIVEREF(__pyx_tuple__344);
 
-  /* "lxml/etree.pyx":3156
+  /* "lxml/etree.pyx":3159
  * 
  * 
  * def ElementTree(_Element element=None, *, file=None, _BaseParser parser=None):             # <<<<<<<<<<<<<<
  *     u"""ElementTree(element=None, file=None, parser=None)
  * 
  */
-  __pyx_tuple__345 = PyTuple_Pack(10, __pyx_n_s_element, __pyx_n_s_file, __pyx_n_s_parser, __pyx_n_s_c_next, __pyx_n_s_c_node, __pyx_n_s_c_node_copy, __pyx_n_s_c_doc, __pyx_n_s_etree, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__345)) __PYX_ERR(0, 3156, __pyx_L1_error)
+  __pyx_tuple__345 = PyTuple_Pack(10, __pyx_n_s_element, __pyx_n_s_file, __pyx_n_s_parser, __pyx_n_s_c_next, __pyx_n_s_c_node, __pyx_n_s_c_node_copy, __pyx_n_s_c_doc, __pyx_n_s_etree, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__345)) __PYX_ERR(0, 3159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__345);
   __Pyx_GIVEREF(__pyx_tuple__345);
-  __pyx_codeobj__346 = (PyObject*)__Pyx_PyCode_New(1, 2, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__345, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_ElementTree, 3156, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__346)) __PYX_ERR(0, 3156, __pyx_L1_error)
-  __pyx_tuple__347 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__347)) __PYX_ERR(0, 3156, __pyx_L1_error)
+  __pyx_codeobj__346 = (PyObject*)__Pyx_PyCode_New(1, 2, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__345, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_ElementTree, 3159, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__346)) __PYX_ERR(0, 3159, __pyx_L1_error)
+  __pyx_tuple__347 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__347)) __PYX_ERR(0, 3159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__347);
   __Pyx_GIVEREF(__pyx_tuple__347);
 
-  /* "lxml/etree.pyx":3182
+  /* "lxml/etree.pyx":3185
  * 
  * 
  * def HTML(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""HTML(text, parser=None, base_url=None)
  * 
  */
-  __pyx_tuple__348 = PyTuple_Pack(5, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__348)) __PYX_ERR(0, 3182, __pyx_L1_error)
+  __pyx_tuple__348 = PyTuple_Pack(5, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__348)) __PYX_ERR(0, 3185, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__348);
   __Pyx_GIVEREF(__pyx_tuple__348);
-  __pyx_codeobj__349 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__348, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_HTML, 3182, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__349)) __PYX_ERR(0, 3182, __pyx_L1_error)
-  __pyx_tuple__350 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__350)) __PYX_ERR(0, 3182, __pyx_L1_error)
+  __pyx_codeobj__349 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__348, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_HTML, 3185, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__349)) __PYX_ERR(0, 3185, __pyx_L1_error)
+  __pyx_tuple__350 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__350)) __PYX_ERR(0, 3185, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__350);
   __Pyx_GIVEREF(__pyx_tuple__350);
 
-  /* "lxml/etree.pyx":3208
+  /* "lxml/etree.pyx":3211
  * 
  * 
  * def XML(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""XML(text, parser=None, base_url=None)
  * 
  */
-  __pyx_tuple__351 = PyTuple_Pack(5, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__351)) __PYX_ERR(0, 3208, __pyx_L1_error)
+  __pyx_tuple__351 = PyTuple_Pack(5, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__351)) __PYX_ERR(0, 3211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__351);
   __Pyx_GIVEREF(__pyx_tuple__351);
-  __pyx_codeobj__352 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__351, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_XML, 3208, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__352)) __PYX_ERR(0, 3208, __pyx_L1_error)
-  __pyx_tuple__353 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__353)) __PYX_ERR(0, 3208, __pyx_L1_error)
+  __pyx_codeobj__352 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__351, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_XML, 3211, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__352)) __PYX_ERR(0, 3211, __pyx_L1_error)
+  __pyx_tuple__353 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__353)) __PYX_ERR(0, 3211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__353);
   __Pyx_GIVEREF(__pyx_tuple__353);
 
-  /* "lxml/etree.pyx":3239
+  /* "lxml/etree.pyx":3242
  * 
  * 
  * def fromstring(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""fromstring(text, parser=None, base_url=None)
  * 
  */
-  __pyx_tuple__354 = PyTuple_Pack(5, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__354)) __PYX_ERR(0, 3239, __pyx_L1_error)
+  __pyx_tuple__354 = PyTuple_Pack(5, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__354)) __PYX_ERR(0, 3242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__354);
   __Pyx_GIVEREF(__pyx_tuple__354);
-  __pyx_codeobj__355 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__354, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_fromstring, 3239, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__355)) __PYX_ERR(0, 3239, __pyx_L1_error)
-  __pyx_tuple__356 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__356)) __PYX_ERR(0, 3239, __pyx_L1_error)
+  __pyx_codeobj__355 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__354, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_fromstring, 3242, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__355)) __PYX_ERR(0, 3242, __pyx_L1_error)
+  __pyx_tuple__356 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__356)) __PYX_ERR(0, 3242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__356);
   __Pyx_GIVEREF(__pyx_tuple__356);
 
-  /* "lxml/etree.pyx":3260
+  /* "lxml/etree.pyx":3263
  * 
  * 
  * def fromstringlist(strings, _BaseParser parser=None):             # <<<<<<<<<<<<<<
  *     u"""fromstringlist(strings, parser=None)
  * 
  */
-  __pyx_tuple__357 = PyTuple_Pack(5, __pyx_n_s_strings, __pyx_n_s_parser, __pyx_n_s_doc_2, __pyx_n_s_feed, __pyx_n_s_data); if (unlikely(!__pyx_tuple__357)) __PYX_ERR(0, 3260, __pyx_L1_error)
+  __pyx_tuple__357 = PyTuple_Pack(5, __pyx_n_s_strings, __pyx_n_s_parser, __pyx_n_s_doc_2, __pyx_n_s_feed, __pyx_n_s_data); if (unlikely(!__pyx_tuple__357)) __PYX_ERR(0, 3263, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__357);
   __Pyx_GIVEREF(__pyx_tuple__357);
-  __pyx_codeobj__358 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__357, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_fromstringlist, 3260, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__358)) __PYX_ERR(0, 3260, __pyx_L1_error)
-  __pyx_tuple__359 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__359)) __PYX_ERR(0, 3260, __pyx_L1_error)
+  __pyx_codeobj__358 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__357, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_fromstringlist, 3263, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__358)) __PYX_ERR(0, 3263, __pyx_L1_error)
+  __pyx_tuple__359 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__359)) __PYX_ERR(0, 3263, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__359);
   __Pyx_GIVEREF(__pyx_tuple__359);
 
-  /* "lxml/etree.pyx":3281
+  /* "lxml/etree.pyx":3284
  * 
  * 
  * def iselement(element):             # <<<<<<<<<<<<<<
  *     u"""iselement(element)
  * 
  */
-  __pyx_tuple__360 = PyTuple_Pack(1, __pyx_n_s_element); if (unlikely(!__pyx_tuple__360)) __PYX_ERR(0, 3281, __pyx_L1_error)
+  __pyx_tuple__360 = PyTuple_Pack(1, __pyx_n_s_element); if (unlikely(!__pyx_tuple__360)) __PYX_ERR(0, 3284, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__360);
   __Pyx_GIVEREF(__pyx_tuple__360);
-  __pyx_codeobj__361 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__360, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iselement, 3281, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__361)) __PYX_ERR(0, 3281, __pyx_L1_error)
+  __pyx_codeobj__361 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__360, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_iselement, 3284, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__361)) __PYX_ERR(0, 3284, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3289
+  /* "lxml/etree.pyx":3292
  * 
  * 
  * def indent(tree, space="  ", *, Py_ssize_t level=0):             # <<<<<<<<<<<<<<
  *     """indent(tree, space="  ", level=0)
  * 
  */
-  __pyx_tuple__362 = PyTuple_Pack(5, __pyx_n_s_tree, __pyx_n_s_space, __pyx_n_s_level, __pyx_n_s_root, __pyx_n_s_indent); if (unlikely(!__pyx_tuple__362)) __PYX_ERR(0, 3289, __pyx_L1_error)
+  __pyx_tuple__362 = PyTuple_Pack(5, __pyx_n_s_tree, __pyx_n_s_space, __pyx_n_s_level, __pyx_n_s_root, __pyx_n_s_indent); if (unlikely(!__pyx_tuple__362)) __PYX_ERR(0, 3292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__362);
   __Pyx_GIVEREF(__pyx_tuple__362);
-  __pyx_codeobj__363 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__362, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_indent, 3289, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__363)) __PYX_ERR(0, 3289, __pyx_L1_error)
-  __pyx_tuple__364 = PyTuple_Pack(1, ((PyObject*)__pyx_kp_s__51)); if (unlikely(!__pyx_tuple__364)) __PYX_ERR(0, 3289, __pyx_L1_error)
+  __pyx_codeobj__363 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__362, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_indent, 3292, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__363)) __PYX_ERR(0, 3292, __pyx_L1_error)
+  __pyx_tuple__364 = PyTuple_Pack(1, ((PyObject*)__pyx_kp_s__51)); if (unlikely(!__pyx_tuple__364)) __PYX_ERR(0, 3292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__364);
   __Pyx_GIVEREF(__pyx_tuple__364);
 
-  /* "lxml/etree.pyx":3340
+  /* "lxml/etree.pyx":3343
  * 
  * 
  * def dump(_Element elem not None, *, bint pretty_print=True, with_tail=True):             # <<<<<<<<<<<<<<
  *     u"""dump(elem, pretty_print=True, with_tail=True)
  * 
  */
-  __pyx_tuple__365 = PyTuple_Pack(4, __pyx_n_s_elem, __pyx_n_s_pretty_print, __pyx_n_s_with_tail, __pyx_n_s_xml); if (unlikely(!__pyx_tuple__365)) __PYX_ERR(0, 3340, __pyx_L1_error)
+  __pyx_tuple__365 = PyTuple_Pack(4, __pyx_n_s_elem, __pyx_n_s_pretty_print, __pyx_n_s_with_tail, __pyx_n_s_xml); if (unlikely(!__pyx_tuple__365)) __PYX_ERR(0, 3343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__365);
   __Pyx_GIVEREF(__pyx_tuple__365);
-  __pyx_codeobj__366 = (PyObject*)__Pyx_PyCode_New(1, 2, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__365, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_dump, 3340, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__366)) __PYX_ERR(0, 3340, __pyx_L1_error)
+  __pyx_codeobj__366 = (PyObject*)__Pyx_PyCode_New(1, 2, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__365, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_dump, 3343, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__366)) __PYX_ERR(0, 3343, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3353
+  /* "lxml/etree.pyx":3356
  * 
  * 
  * def tostring(element_or_tree, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
  *              xml_declaration=None, bint pretty_print=False, bint with_tail=True,
  *              standalone=None, doctype=None,
  */
-  __pyx_tuple__367 = PyTuple_Pack(16, __pyx_n_s_element_or_tree, __pyx_n_s_encoding, __pyx_n_s_method, __pyx_n_s_xml_declaration, __pyx_n_s_pretty_print, __pyx_n_s_with_tail, __pyx_n_s_standalone, __pyx_n_s_doctype, __pyx_n_s_exclusive, __pyx_n_s_inclusive_ns_prefixes, __pyx_n_s_with_comments, __pyx_n_s_strip_text, __pyx_n_s_write_declaration, __pyx_n_s_is_standalone, __pyx_n_s_out, __pyx_n_s_target); if (unlikely(!__pyx_tuple__367)) __PYX_ERR(0, 3353, __pyx_L1_error)
+  __pyx_tuple__367 = PyTuple_Pack(16, __pyx_n_s_element_or_tree, __pyx_n_s_encoding, __pyx_n_s_method, __pyx_n_s_xml_declaration, __pyx_n_s_pretty_print, __pyx_n_s_with_tail, __pyx_n_s_standalone, __pyx_n_s_doctype, __pyx_n_s_exclusive, __pyx_n_s_inclusive_ns_prefixes, __pyx_n_s_with_comments, __pyx_n_s_strip_text, __pyx_n_s_write_declaration, __pyx_n_s_is_standalone, __pyx_n_s_out, __pyx_n_s_target); if (unlikely(!__pyx_tuple__367)) __PYX_ERR(0, 3356, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__367);
   __Pyx_GIVEREF(__pyx_tuple__367);
-  __pyx_codeobj__368 = (PyObject*)__Pyx_PyCode_New(1, 11, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__367, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_tostring, 3353, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__368)) __PYX_ERR(0, 3353, __pyx_L1_error)
+  __pyx_codeobj__368 = (PyObject*)__Pyx_PyCode_New(1, 11, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__367, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_tostring, 3356, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__368)) __PYX_ERR(0, 3356, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3466
+  /* "lxml/etree.pyx":3469
  * 
  * 
  * def tostringlist(element_or_tree, *args, **kwargs):             # <<<<<<<<<<<<<<
  *     u"""tostringlist(element_or_tree, *args, **kwargs)
  * 
  */
-  __pyx_tuple__369 = PyTuple_Pack(3, __pyx_n_s_element_or_tree, __pyx_n_s_args, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__369)) __PYX_ERR(0, 3466, __pyx_L1_error)
+  __pyx_tuple__369 = PyTuple_Pack(3, __pyx_n_s_element_or_tree, __pyx_n_s_args, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__369)) __PYX_ERR(0, 3469, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__369);
   __Pyx_GIVEREF(__pyx_tuple__369);
-  __pyx_codeobj__370 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__369, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_tostringlist, 3466, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__370)) __PYX_ERR(0, 3466, __pyx_L1_error)
+  __pyx_codeobj__370 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__369, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_tostringlist, 3469, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__370)) __PYX_ERR(0, 3469, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3478
+  /* "lxml/etree.pyx":3481
  * 
  * 
  * def tounicode(element_or_tree, *, method=u"xml", bint pretty_print=False,             # <<<<<<<<<<<<<<
  *               bint with_tail=True, doctype=None):
  *     u"""tounicode(element_or_tree, method="xml", pretty_print=False,
  */
-  __pyx_tuple__371 = PyTuple_Pack(5, __pyx_n_s_element_or_tree, __pyx_n_s_method, __pyx_n_s_pretty_print, __pyx_n_s_with_tail, __pyx_n_s_doctype); if (unlikely(!__pyx_tuple__371)) __PYX_ERR(0, 3478, __pyx_L1_error)
+  __pyx_tuple__371 = PyTuple_Pack(5, __pyx_n_s_element_or_tree, __pyx_n_s_method, __pyx_n_s_pretty_print, __pyx_n_s_with_tail, __pyx_n_s_doctype); if (unlikely(!__pyx_tuple__371)) __PYX_ERR(0, 3481, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__371);
   __Pyx_GIVEREF(__pyx_tuple__371);
-  __pyx_codeobj__372 = (PyObject*)__Pyx_PyCode_New(1, 4, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__371, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_tounicode, 3478, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__372)) __PYX_ERR(0, 3478, __pyx_L1_error)
+  __pyx_codeobj__372 = (PyObject*)__Pyx_PyCode_New(1, 4, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__371, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_tounicode, 3481, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__372)) __PYX_ERR(0, 3481, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3512
+  /* "lxml/etree.pyx":3515
  * 
  * 
  * def parse(source, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""parse(source, parser=None, base_url=None)
  * 
  */
-  __pyx_tuple__373 = PyTuple_Pack(5, __pyx_n_s_source, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__373)) __PYX_ERR(0, 3512, __pyx_L1_error)
+  __pyx_tuple__373 = PyTuple_Pack(5, __pyx_n_s_source, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__373)) __PYX_ERR(0, 3515, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__373);
   __Pyx_GIVEREF(__pyx_tuple__373);
-  __pyx_codeobj__374 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__373, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_parse, 3512, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__374)) __PYX_ERR(0, 3512, __pyx_L1_error)
-  __pyx_tuple__375 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__375)) __PYX_ERR(0, 3512, __pyx_L1_error)
+  __pyx_codeobj__374 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__373, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_parse, 3515, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__374)) __PYX_ERR(0, 3515, __pyx_L1_error)
+  __pyx_tuple__375 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__375)) __PYX_ERR(0, 3515, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__375);
   __Pyx_GIVEREF(__pyx_tuple__375);
 
-  /* "lxml/etree.pyx":3544
+  /* "lxml/etree.pyx":3547
  * 
  * 
  * def adopt_external_document(capsule, _BaseParser parser=None):             # <<<<<<<<<<<<<<
  *     """adopt_external_document(capsule, parser=None)
  * 
  */
-  __pyx_tuple__376 = PyTuple_Pack(5, __pyx_n_s_capsule, __pyx_n_s_parser, __pyx_n_s_c_doc, __pyx_n_s_is_owned, __pyx_n_s_doc_2); if (unlikely(!__pyx_tuple__376)) __PYX_ERR(0, 3544, __pyx_L1_error)
+  __pyx_tuple__376 = PyTuple_Pack(5, __pyx_n_s_capsule, __pyx_n_s_parser, __pyx_n_s_c_doc, __pyx_n_s_is_owned, __pyx_n_s_doc_2); if (unlikely(!__pyx_tuple__376)) __PYX_ERR(0, 3547, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__376);
   __Pyx_GIVEREF(__pyx_tuple__376);
-  __pyx_codeobj__377 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__376, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_adopt_external_document, 3544, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__377)) __PYX_ERR(0, 3544, __pyx_L1_error)
-  __pyx_tuple__378 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__378)) __PYX_ERR(0, 3544, __pyx_L1_error)
+  __pyx_codeobj__377 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__376, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_adopt_external_document, 3547, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__377)) __PYX_ERR(0, 3547, __pyx_L1_error)
+  __pyx_tuple__378 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__378)) __PYX_ERR(0, 3547, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__378);
   __Pyx_GIVEREF(__pyx_tuple__378);
 
@@ -250204,125 +250281,125 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_tuple__455);
   __pyx_codeobj__456 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__455, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_position, 23, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__456)) __PYX_ERR(2, 23, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":975
+  /* "src/lxml/parser.pxi":978
  *         return u"libxml2 %d.%d.%d" % LIBXML_VERSION
  * 
  *     def setElementClassLookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
  *         u":deprecated: use ``parser.set_element_class_lookup(lookup)`` instead."
  *         self.set_element_class_lookup(lookup)
  */
-  __pyx_tuple__457 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_lookup); if (unlikely(!__pyx_tuple__457)) __PYX_ERR(2, 975, __pyx_L1_error)
+  __pyx_tuple__457 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_lookup); if (unlikely(!__pyx_tuple__457)) __PYX_ERR(2, 978, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__457);
   __Pyx_GIVEREF(__pyx_tuple__457);
-  __pyx_codeobj__458 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__457, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_setElementClassLookup, 975, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__458)) __PYX_ERR(2, 975, __pyx_L1_error)
+  __pyx_codeobj__458 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__457, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_setElementClassLookup, 978, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__458)) __PYX_ERR(2, 978, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":979
+  /* "src/lxml/parser.pxi":982
  *         self.set_element_class_lookup(lookup)
  * 
  *     def set_element_class_lookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
  *         u"""set_element_class_lookup(self, lookup = None)
  * 
  */
-  __pyx_tuple__459 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_lookup); if (unlikely(!__pyx_tuple__459)) __PYX_ERR(2, 979, __pyx_L1_error)
+  __pyx_tuple__459 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_lookup); if (unlikely(!__pyx_tuple__459)) __PYX_ERR(2, 982, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__459);
   __Pyx_GIVEREF(__pyx_tuple__459);
-  __pyx_codeobj__460 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__459, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_set_element_class_lookup, 979, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__460)) __PYX_ERR(2, 979, __pyx_L1_error)
+  __pyx_codeobj__460 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__459, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_set_element_class_lookup, 982, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__460)) __PYX_ERR(2, 982, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1006
+  /* "src/lxml/parser.pxi":1009
  *         return parser
  * 
  *     def copy(self):             # <<<<<<<<<<<<<<
  *         u"""copy(self)
  * 
  */
-  __pyx_tuple__461 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__461)) __PYX_ERR(2, 1006, __pyx_L1_error)
+  __pyx_tuple__461 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__461)) __PYX_ERR(2, 1009, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__461);
   __Pyx_GIVEREF(__pyx_tuple__461);
-  __pyx_codeobj__462 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__461, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_copy, 1006, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__462)) __PYX_ERR(2, 1006, __pyx_L1_error)
+  __pyx_codeobj__462 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__461, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_copy, 1009, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__462)) __PYX_ERR(2, 1009, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1013
+  /* "src/lxml/parser.pxi":1016
  *         return self._copy()
  * 
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
  *         u"""makeelement(self, _tag, attrib=None, nsmap=None, **_extra)
  * 
  */
-  __pyx_tuple__463 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__463)) __PYX_ERR(2, 1013, __pyx_L1_error)
+  __pyx_tuple__463 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__463)) __PYX_ERR(2, 1016, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__463);
   __Pyx_GIVEREF(__pyx_tuple__463);
-  __pyx_codeobj__464 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__463, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_makeelement, 1013, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__464)) __PYX_ERR(2, 1013, __pyx_L1_error)
+  __pyx_codeobj__464 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__463, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_makeelement, 1016, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__464)) __PYX_ERR(2, 1016, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1256
+  /* "src/lxml/parser.pxi":1259
  *         return self._getPushParserContext()._error_log.copy()
  * 
  *     cpdef feed(self, data):             # <<<<<<<<<<<<<<
  *         u"""feed(self, data)
  * 
  */
-  __pyx_tuple__465 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_data); if (unlikely(!__pyx_tuple__465)) __PYX_ERR(2, 1256, __pyx_L1_error)
+  __pyx_tuple__465 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_data); if (unlikely(!__pyx_tuple__465)) __PYX_ERR(2, 1259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__465);
   __Pyx_GIVEREF(__pyx_tuple__465);
-  __pyx_codeobj__466 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__465, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_feed, 1256, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__466)) __PYX_ERR(2, 1256, __pyx_L1_error)
+  __pyx_codeobj__466 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__465, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_feed, 1259, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__466)) __PYX_ERR(2, 1259, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1380
+  /* "src/lxml/parser.pxi":1383
  *                 context.cleanup()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         u"""close(self)
  * 
  */
-  __pyx_tuple__467 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__467)) __PYX_ERR(2, 1380, __pyx_L1_error)
+  __pyx_tuple__467 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__467)) __PYX_ERR(2, 1383, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__467);
   __Pyx_GIVEREF(__pyx_tuple__467);
-  __pyx_codeobj__468 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__467, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_close, 1380, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__468)) __PYX_ERR(2, 1380, __pyx_L1_error)
+  __pyx_codeobj__468 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__467, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_close, 1383, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__468)) __PYX_ERR(2, 1383, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1586
+  /* "src/lxml/parser.pxi":1589
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
  *         return (<_SaxParserContext?>self._getPushParserContext()).events_iterator
  * 
  */
-  __pyx_tuple__469 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__469)) __PYX_ERR(2, 1586, __pyx_L1_error)
+  __pyx_tuple__469 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__469)) __PYX_ERR(2, 1589, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__469);
   __Pyx_GIVEREF(__pyx_tuple__469);
-  __pyx_codeobj__470 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__469, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_read_events, 1586, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__470)) __PYX_ERR(2, 1586, __pyx_L1_error)
+  __pyx_codeobj__470 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__469, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_read_events, 1589, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__470)) __PYX_ERR(2, 1589, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1638
+  /* "src/lxml/parser.pxi":1641
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)
  * 
  * def set_default_parser(_BaseParser parser=None):             # <<<<<<<<<<<<<<
  *     u"""set_default_parser(parser=None)
  * 
  */
-  __pyx_tuple__471 = PyTuple_Pack(1, __pyx_n_s_parser); if (unlikely(!__pyx_tuple__471)) __PYX_ERR(2, 1638, __pyx_L1_error)
+  __pyx_tuple__471 = PyTuple_Pack(1, __pyx_n_s_parser); if (unlikely(!__pyx_tuple__471)) __PYX_ERR(2, 1641, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__471);
   __Pyx_GIVEREF(__pyx_tuple__471);
-  __pyx_codeobj__472 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__471, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_set_default_parser, 1638, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__472)) __PYX_ERR(2, 1638, __pyx_L1_error)
-  __pyx_tuple__473 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__473)) __PYX_ERR(2, 1638, __pyx_L1_error)
+  __pyx_codeobj__472 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__471, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_set_default_parser, 1641, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__472)) __PYX_ERR(2, 1641, __pyx_L1_error)
+  __pyx_tuple__473 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__473)) __PYX_ERR(2, 1641, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__473);
   __Pyx_GIVEREF(__pyx_tuple__473);
 
-  /* "src/lxml/parser.pxi":1654
+  /* "src/lxml/parser.pxi":1657
  *     __GLOBAL_PARSER_CONTEXT.setDefaultParser(parser)
  * 
  * def get_default_parser():             # <<<<<<<<<<<<<<
  *     u"get_default_parser()"
  *     return __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  */
-  __pyx_codeobj__474 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_get_default_parser, 1654, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__474)) __PYX_ERR(2, 1654, __pyx_L1_error)
+  __pyx_codeobj__474 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_get_default_parser, 1657, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__474)) __PYX_ERR(2, 1657, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1759
+  /* "src/lxml/parser.pxi":1762
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
  *         return (<_SaxParserContext?>self._getPushParserContext()).events_iterator
  * 
  */
-  __pyx_tuple__475 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__475)) __PYX_ERR(2, 1759, __pyx_L1_error)
+  __pyx_tuple__475 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__475)) __PYX_ERR(2, 1762, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__475);
   __Pyx_GIVEREF(__pyx_tuple__475);
-  __pyx_codeobj__476 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__475, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_read_events, 1759, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__476)) __PYX_ERR(2, 1759, __pyx_L1_error)
+  __pyx_codeobj__476 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__475, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_parser_pxi, __pyx_n_s_read_events, 1762, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__476)) __PYX_ERR(2, 1762, __pyx_L1_error)
 
   /* "src/lxml/saxparser.pxi":813
  *     # Python level event handlers
@@ -251277,136 +251354,136 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple__624);
   __Pyx_GIVEREF(__pyx_tuple__624);
 
-  /* "src/lxml/xslt.pxi":438
+  /* "src/lxml/xslt.pxi":439
  * 
  *     @staticmethod
  *     def strparam(strval):             # <<<<<<<<<<<<<<
  *         u"""strparam(strval)
  * 
  */
-  __pyx_tuple__625 = PyTuple_Pack(1, __pyx_n_s_strval); if (unlikely(!__pyx_tuple__625)) __PYX_ERR(4, 438, __pyx_L1_error)
+  __pyx_tuple__625 = PyTuple_Pack(1, __pyx_n_s_strval); if (unlikely(!__pyx_tuple__625)) __PYX_ERR(4, 439, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__625);
   __Pyx_GIVEREF(__pyx_tuple__625);
-  __pyx_codeobj__626 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__625, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_strparam, 438, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__626)) __PYX_ERR(4, 438, __pyx_L1_error)
+  __pyx_codeobj__626 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__625, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_strparam, 439, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__626)) __PYX_ERR(4, 439, __pyx_L1_error)
 
-  /* "src/lxml/xslt.pxi":452
+  /* "src/lxml/xslt.pxi":453
  * 
  *     @staticmethod
  *     def set_global_max_depth(int max_depth):             # <<<<<<<<<<<<<<
  *         u"""set_global_max_depth(max_depth)
  * 
  */
-  __pyx_tuple__627 = PyTuple_Pack(1, __pyx_n_s_max_depth); if (unlikely(!__pyx_tuple__627)) __PYX_ERR(4, 452, __pyx_L1_error)
+  __pyx_tuple__627 = PyTuple_Pack(1, __pyx_n_s_max_depth); if (unlikely(!__pyx_tuple__627)) __PYX_ERR(4, 453, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__627);
   __Pyx_GIVEREF(__pyx_tuple__627);
-  __pyx_codeobj__628 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__627, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_set_global_max_depth, 452, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__628)) __PYX_ERR(4, 452, __pyx_L1_error)
+  __pyx_codeobj__628 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__627, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_set_global_max_depth, 453, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__628)) __PYX_ERR(4, 453, __pyx_L1_error)
 
-  /* "src/lxml/xslt.pxi":471
+  /* "src/lxml/xslt.pxi":472
  *         xslt.xsltMaxDepth = max_depth
  * 
  *     def apply(self, _input, *, profile_run=False, **kw):             # <<<<<<<<<<<<<<
  *         u"""apply(self, _input,  profile_run=False, **kw)
  * 
  */
-  __pyx_tuple__629 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_input, __pyx_n_s_profile_run, __pyx_n_s_kw_2); if (unlikely(!__pyx_tuple__629)) __PYX_ERR(4, 471, __pyx_L1_error)
+  __pyx_tuple__629 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_input, __pyx_n_s_profile_run, __pyx_n_s_kw_2); if (unlikely(!__pyx_tuple__629)) __PYX_ERR(4, 472, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__629);
   __Pyx_GIVEREF(__pyx_tuple__629);
-  __pyx_codeobj__630 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__629, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_apply, 471, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__630)) __PYX_ERR(4, 471, __pyx_L1_error)
+  __pyx_codeobj__630 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__629, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_apply, 472, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__630)) __PYX_ERR(4, 472, __pyx_L1_error)
 
-  /* "src/lxml/xslt.pxi":477
+  /* "src/lxml/xslt.pxi":478
  *         return self(_input, profile_run=profile_run, **kw)
  * 
  *     def tostring(self, _ElementTree result_tree):             # <<<<<<<<<<<<<<
  *         u"""tostring(self, result_tree)
  * 
  */
-  __pyx_tuple__631 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_result_tree); if (unlikely(!__pyx_tuple__631)) __PYX_ERR(4, 477, __pyx_L1_error)
+  __pyx_tuple__631 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_result_tree); if (unlikely(!__pyx_tuple__631)) __PYX_ERR(4, 478, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__631);
   __Pyx_GIVEREF(__pyx_tuple__631);
-  __pyx_codeobj__632 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__631, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_tostring, 477, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__632)) __PYX_ERR(4, 477, __pyx_L1_error)
+  __pyx_codeobj__632 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__631, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_tostring, 478, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__632)) __PYX_ERR(4, 478, __pyx_L1_error)
 
-  /* "src/lxml/xslt.pxi":486
+  /* "src/lxml/xslt.pxi":487
  *         return str(result_tree)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
  *         return self.__copy__()
  * 
  */
-  __pyx_tuple__633 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_memo); if (unlikely(!__pyx_tuple__633)) __PYX_ERR(4, 486, __pyx_L1_error)
+  __pyx_tuple__633 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_memo); if (unlikely(!__pyx_tuple__633)) __PYX_ERR(4, 487, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__633);
   __Pyx_GIVEREF(__pyx_tuple__633);
-  __pyx_codeobj__634 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__633, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_deepcopy, 486, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__634)) __PYX_ERR(4, 486, __pyx_L1_error)
+  __pyx_codeobj__634 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__633, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_deepcopy, 487, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__634)) __PYX_ERR(4, 487, __pyx_L1_error)
 
-  /* "src/lxml/xslt.pxi":489
+  /* "src/lxml/xslt.pxi":490
  *         return self.__copy__()
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
  *         return _copyXSLT(self)
  * 
  */
-  __pyx_tuple__635 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__635)) __PYX_ERR(4, 489, __pyx_L1_error)
+  __pyx_tuple__635 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__635)) __PYX_ERR(4, 490, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__635);
   __Pyx_GIVEREF(__pyx_tuple__635);
-  __pyx_codeobj__636 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__635, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_copy_2, 489, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__636)) __PYX_ERR(4, 489, __pyx_L1_error)
+  __pyx_codeobj__636 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__635, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_copy_2, 490, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__636)) __PYX_ERR(4, 490, __pyx_L1_error)
 
-  /* "src/lxml/xslt.pxi":717
+  /* "src/lxml/xslt.pxi":718
  *     cdef Py_ssize_t _buffer_refcnt
  * 
  *     def write_output(self, file, *, compression=0):             # <<<<<<<<<<<<<<
  *         """write_output(self, file, *, compression=0)
  * 
  */
-  __pyx_tuple__637 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_file, __pyx_n_s_compression, __pyx_n_s_writer, __pyx_n_s_doc_2, __pyx_n_s_r, __pyx_n_s_rclose, __pyx_n_s_c_compression, __pyx_n_s_c_encoding, __pyx_n_s_c_buffer); if (unlikely(!__pyx_tuple__637)) __PYX_ERR(4, 717, __pyx_L1_error)
+  __pyx_tuple__637 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_file, __pyx_n_s_compression, __pyx_n_s_writer, __pyx_n_s_doc_2, __pyx_n_s_r, __pyx_n_s_rclose, __pyx_n_s_c_compression, __pyx_n_s_c_encoding, __pyx_n_s_c_buffer); if (unlikely(!__pyx_tuple__637)) __PYX_ERR(4, 718, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__637);
   __Pyx_GIVEREF(__pyx_tuple__637);
-  __pyx_codeobj__638 = (PyObject*)__Pyx_PyCode_New(2, 1, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__637, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_write_output, 717, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__638)) __PYX_ERR(4, 717, __pyx_L1_error)
+  __pyx_codeobj__638 = (PyObject*)__Pyx_PyCode_New(2, 1, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__637, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_write_output, 718, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__638)) __PYX_ERR(4, 718, __pyx_L1_error)
 
-  /* "src/lxml/xslt.pxi":787
+  /* "src/lxml/xslt.pxi":788
  *         return result
  * 
  *     def __unicode__(self):             # <<<<<<<<<<<<<<
  *         cdef xmlChar* encoding
  *         cdef xmlChar* s = NULL
  */
-  __pyx_tuple__639 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_encoding, __pyx_n_s_s_4, __pyx_n_s_l, __pyx_n_s_result); if (unlikely(!__pyx_tuple__639)) __PYX_ERR(4, 787, __pyx_L1_error)
+  __pyx_tuple__639 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_encoding, __pyx_n_s_s_4, __pyx_n_s_l, __pyx_n_s_result); if (unlikely(!__pyx_tuple__639)) __PYX_ERR(4, 788, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__639);
   __Pyx_GIVEREF(__pyx_tuple__639);
-  __pyx_codeobj__640 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__639, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_unicode_2, 787, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__640)) __PYX_ERR(4, 787, __pyx_L1_error)
+  __pyx_codeobj__640 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__639, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_unicode_2, 788, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__640)) __PYX_ERR(4, 788, __pyx_L1_error)
 
-  /* "src/lxml/xslt.pxi":881
+  /* "src/lxml/xslt.pxi":882
  * # XSLT PI support
  * 
  * cdef object _RE_PI_HREF = re.compile(ur'\s+href\s*=\s*(?:\'([^\']*)\'|"([^"]*)")')             # <<<<<<<<<<<<<<
  * cdef object _FIND_PI_HREF = _RE_PI_HREF.findall
  * cdef object _REPLACE_PI_HREF = _RE_PI_HREF.sub
  */
-  __pyx_tuple__641 = PyTuple_Pack(1, __pyx_kp_u_s_href_s_s); if (unlikely(!__pyx_tuple__641)) __PYX_ERR(4, 881, __pyx_L1_error)
+  __pyx_tuple__641 = PyTuple_Pack(1, __pyx_kp_u_s_href_s_s); if (unlikely(!__pyx_tuple__641)) __PYX_ERR(4, 882, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__641);
   __Pyx_GIVEREF(__pyx_tuple__641);
 
-  /* "src/lxml/xslt.pxi":895
+  /* "src/lxml/xslt.pxi":896
  * 
  * cdef class _XSLTProcessingInstruction(PIBase):
  *     def parseXSL(self, parser=None):             # <<<<<<<<<<<<<<
  *         u"""parseXSL(self, parser=None)
  * 
  */
-  __pyx_tuple__642 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_parser, __pyx_n_s_result_doc, __pyx_n_s_result_node, __pyx_n_s_href_utf, __pyx_n_s_c_href, __pyx_n_s_c_attr, __pyx_n_s_hrefs, __pyx_n_s_root); if (unlikely(!__pyx_tuple__642)) __PYX_ERR(4, 895, __pyx_L1_error)
+  __pyx_tuple__642 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_parser, __pyx_n_s_result_doc, __pyx_n_s_result_node, __pyx_n_s_href_utf, __pyx_n_s_c_href, __pyx_n_s_c_attr, __pyx_n_s_hrefs, __pyx_n_s_root); if (unlikely(!__pyx_tuple__642)) __PYX_ERR(4, 896, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__642);
   __Pyx_GIVEREF(__pyx_tuple__642);
-  __pyx_codeobj__643 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__642, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_parseXSL, 895, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__643)) __PYX_ERR(4, 895, __pyx_L1_error)
+  __pyx_codeobj__643 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__642, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_parseXSL, 896, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__643)) __PYX_ERR(4, 896, __pyx_L1_error)
 
-  /* "src/lxml/xslt.pxi":952
+  /* "src/lxml/xslt.pxi":953
  *         return _elementTreeFactory(result_node._doc, result_node)
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
  *         u"""set(self, key, value)
  * 
  */
-  __pyx_tuple__644 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_value, __pyx_n_s_attrib, __pyx_n_s_text); if (unlikely(!__pyx_tuple__644)) __PYX_ERR(4, 952, __pyx_L1_error)
+  __pyx_tuple__644 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_key, __pyx_n_s_value, __pyx_n_s_attrib, __pyx_n_s_text); if (unlikely(!__pyx_tuple__644)) __PYX_ERR(4, 953, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__644);
   __Pyx_GIVEREF(__pyx_tuple__644);
-  __pyx_codeobj__645 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__644, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_set, 952, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__645)) __PYX_ERR(4, 952, __pyx_L1_error)
+  __pyx_codeobj__645 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__644, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xslt_pxi, __pyx_n_s_set, 953, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__645)) __PYX_ERR(4, 953, __pyx_L1_error)
 
   /* "src/lxml/xsltext.pxi":6
  *     u"""Base class of an XSLT extension element.
@@ -251444,65 +251521,65 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_tuple__650);
   __pyx_codeobj__651 = (PyObject*)__Pyx_PyCode_New(3, 2, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__650, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_xsltext_pxi, __pyx_n_s_process_children, 74, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__651)) __PYX_ERR(19, 74, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3625
+  /* "lxml/etree.pyx":3628
  *         self._error_log = _ErrorLog()
  * 
  *     def validate(self, etree):             # <<<<<<<<<<<<<<
  *         u"""validate(self, etree)
  * 
  */
-  __pyx_tuple__652 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_etree); if (unlikely(!__pyx_tuple__652)) __PYX_ERR(0, 3625, __pyx_L1_error)
+  __pyx_tuple__652 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_etree); if (unlikely(!__pyx_tuple__652)) __PYX_ERR(0, 3628, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__652);
   __Pyx_GIVEREF(__pyx_tuple__652);
-  __pyx_codeobj__653 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__652, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_validate, 3625, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__653)) __PYX_ERR(0, 3625, __pyx_L1_error)
+  __pyx_codeobj__653 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__652, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_validate, 3628, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__653)) __PYX_ERR(0, 3628, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3634
+  /* "lxml/etree.pyx":3637
  *         return self(etree)
  * 
  *     def assertValid(self, etree):             # <<<<<<<<<<<<<<
  *         u"""assertValid(self, etree)
  * 
  */
-  __pyx_tuple__654 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_etree); if (unlikely(!__pyx_tuple__654)) __PYX_ERR(0, 3634, __pyx_L1_error)
+  __pyx_tuple__654 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_etree); if (unlikely(!__pyx_tuple__654)) __PYX_ERR(0, 3637, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__654);
   __Pyx_GIVEREF(__pyx_tuple__654);
-  __pyx_codeobj__655 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__654, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_assertValid, 3634, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__655)) __PYX_ERR(0, 3634, __pyx_L1_error)
+  __pyx_codeobj__655 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__654, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_assertValid, 3637, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__655)) __PYX_ERR(0, 3637, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3644
+  /* "lxml/etree.pyx":3647
  *                                   self._error_log)
  * 
  *     def assert_(self, etree):             # <<<<<<<<<<<<<<
  *         u"""assert_(self, etree)
  * 
  */
-  __pyx_tuple__656 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_etree); if (unlikely(!__pyx_tuple__656)) __PYX_ERR(0, 3644, __pyx_L1_error)
+  __pyx_tuple__656 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_etree); if (unlikely(!__pyx_tuple__656)) __PYX_ERR(0, 3647, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__656);
   __Pyx_GIVEREF(__pyx_tuple__656);
-  __pyx_codeobj__657 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__656, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_assert, 3644, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__657)) __PYX_ERR(0, 3644, __pyx_L1_error)
+  __pyx_codeobj__657 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__656, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_assert, 3647, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__657)) __PYX_ERR(0, 3647, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3653
+  /* "lxml/etree.pyx":3656
  *                 u"Document does not comply with schema")
  * 
  *     cpdef _append_log_message(self, int domain, int type, int level, int line,             # <<<<<<<<<<<<<<
  *                               message, filename):
  *         self._error_log._receiveGeneric(domain, type, level, line, message,
  */
-  __pyx_tuple__658 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_domain, __pyx_n_s_type, __pyx_n_s_level, __pyx_n_s_line_2, __pyx_n_s_message, __pyx_n_s_filename); if (unlikely(!__pyx_tuple__658)) __PYX_ERR(0, 3653, __pyx_L1_error)
+  __pyx_tuple__658 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_domain, __pyx_n_s_type, __pyx_n_s_level, __pyx_n_s_line_2, __pyx_n_s_message, __pyx_n_s_filename); if (unlikely(!__pyx_tuple__658)) __PYX_ERR(0, 3656, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__658);
   __Pyx_GIVEREF(__pyx_tuple__658);
-  __pyx_codeobj__659 = (PyObject*)__Pyx_PyCode_New(7, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__658, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_append_log_message, 3653, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__659)) __PYX_ERR(0, 3653, __pyx_L1_error)
+  __pyx_codeobj__659 = (PyObject*)__Pyx_PyCode_New(7, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__658, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_append_log_message, 3656, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__659)) __PYX_ERR(0, 3656, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3658
+  /* "lxml/etree.pyx":3661
  *                                         filename)
  * 
  *     cpdef _clear_error_log(self):             # <<<<<<<<<<<<<<
  *         self._error_log.clear()
  * 
  */
-  __pyx_tuple__660 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__660)) __PYX_ERR(0, 3658, __pyx_L1_error)
+  __pyx_tuple__660 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__660)) __PYX_ERR(0, 3661, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__660);
   __Pyx_GIVEREF(__pyx_tuple__660);
-  __pyx_codeobj__661 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__660, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_clear_error_log, 3658, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__661)) __PYX_ERR(0, 3658, __pyx_L1_error)
+  __pyx_codeobj__661 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__660, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_etree_pyx, __pyx_n_s_clear_error_log, 3661, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__661)) __PYX_ERR(0, 3661, __pyx_L1_error)
 
   /* "src/lxml/dtd.pxi":163
  *        return funicodeOrNone(self._c_node.defaultValue)
@@ -251690,6 +251767,11 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
 }
 
 static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
+  /* AssertionsEnabled.init */
+  __Pyx_init_assertions_enabled();
+
+if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)
+
   __pyx_umethod_PyBytes_Type_replace.type = (PyObject*)&PyBytes_Type;
   __pyx_umethod_PyBytes_Type_split.type = (PyObject*)&PyBytes_Type;
   __pyx_umethod_PyDict_Type_get.type = (PyObject*)&PyDict_Type;
@@ -251698,7 +251780,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
   __pyx_umethod_PyList_Type_pop.type = (PyObject*)&PyList_Type;
   __pyx_umethod_PySet_Type_update.type = (PyObject*)&PySet_Type;
   __pyx_umethod_PyUnicode_Type_strip.type = (PyObject*)&PyUnicode_Type;
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error)
@@ -251739,6 +251821,7 @@ static int __Pyx_modinit_global_init_code(void) {
   __pyx_v_4lxml_5etree_partial = Py_None; Py_INCREF(Py_None);
   __pyx_v_4lxml_5etree_islice = Py_None; Py_INCREF(Py_None);
   __pyx_v_4lxml_5etree_ITER_EMPTY = Py_None; Py_INCREF(Py_None);
+  __pyx_v_4lxml_5etree_MutableMapping = Py_None; Py_INCREF(Py_None);
   __pyx_v_4lxml_5etree_IMMUTABLE_EMPTY_MAPPING = Py_None; Py_INCREF(Py_None);
   __pyx_v_4lxml_5etree__FILENAME_ENCODING = ((PyObject*)Py_None); Py_INCREF(Py_None);
   __pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES = ((PyObject*)Py_None); Py_INCREF(Py_None);
@@ -251866,46 +251949,46 @@ static int __Pyx_modinit_type_init_code(void) {
   __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
   /*--- Type init code ---*/
   __pyx_type_4lxml_5etree_Error.tp_base = (&((PyTypeObject*)PyExc_Exception)[0]);
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_Error) < 0) __PYX_ERR(0, 211, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_Error) < 0) __PYX_ERR(0, 212, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_Error.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_Error.tp_dictoffset && __pyx_type_4lxml_5etree_Error.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_Error.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Error, (PyObject *)&__pyx_type_4lxml_5etree_Error) < 0) __PYX_ERR(0, 211, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Error, (PyObject *)&__pyx_type_4lxml_5etree_Error) < 0) __PYX_ERR(0, 212, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_Error = &__pyx_type_4lxml_5etree_Error;
   __pyx_type_4lxml_5etree_LxmlError.tp_base = __pyx_ptype_4lxml_5etree_Error;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_LxmlError) < 0) __PYX_ERR(0, 215, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_LxmlError) < 0) __PYX_ERR(0, 216, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_LxmlError.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_LxmlError.tp_dictoffset && __pyx_type_4lxml_5etree_LxmlError.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_LxmlError.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_LxmlError, (PyObject *)&__pyx_type_4lxml_5etree_LxmlError) < 0) __PYX_ERR(0, 215, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_LxmlError, (PyObject *)&__pyx_type_4lxml_5etree_LxmlError) < 0) __PYX_ERR(0, 216, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_LxmlError = &__pyx_type_4lxml_5etree_LxmlError;
   __pyx_type_4lxml_5etree_C14NError.tp_base = __pyx_ptype_4lxml_5etree_LxmlError;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_C14NError) < 0) __PYX_ERR(0, 234, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_C14NError) < 0) __PYX_ERR(0, 235, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_C14NError.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_C14NError.tp_dictoffset && __pyx_type_4lxml_5etree_C14NError.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_C14NError.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_C14NError, (PyObject *)&__pyx_type_4lxml_5etree_C14NError) < 0) __PYX_ERR(0, 234, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_C14NError, (PyObject *)&__pyx_type_4lxml_5etree_C14NError) < 0) __PYX_ERR(0, 235, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_C14NError = &__pyx_type_4lxml_5etree_C14NError;
   __pyx_vtabptr_4lxml_5etree__TempStore = &__pyx_vtable_4lxml_5etree__TempStore;
   __pyx_vtable_4lxml_5etree__TempStore.add = (int (*)(struct __pyx_obj_4lxml_5etree__TempStore *, PyObject *))__pyx_f_4lxml_5etree_10_TempStore_add;
   __pyx_vtable_4lxml_5etree__TempStore.clear = (int (*)(struct __pyx_obj_4lxml_5etree__TempStore *))__pyx_f_4lxml_5etree_10_TempStore_clear;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__TempStore) < 0) __PYX_ERR(0, 288, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__TempStore) < 0) __PYX_ERR(0, 289, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__TempStore.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__TempStore.tp_dictoffset && __pyx_type_4lxml_5etree__TempStore.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__TempStore.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__TempStore.tp_dict, __pyx_vtabptr_4lxml_5etree__TempStore) < 0) __PYX_ERR(0, 288, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__TempStore.tp_dict, __pyx_vtabptr_4lxml_5etree__TempStore) < 0) __PYX_ERR(0, 289, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__TempStore = &__pyx_type_4lxml_5etree__TempStore;
   __pyx_vtabptr_4lxml_5etree__ExceptionContext = &__pyx_vtable_4lxml_5etree__ExceptionContext;
   __pyx_vtable_4lxml_5etree__ExceptionContext.clear = (int (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext_clear;
@@ -251913,14 +251996,14 @@ static int __Pyx_modinit_type_init_code(void) {
   __pyx_vtable_4lxml_5etree__ExceptionContext._store_exception = (int (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *, PyObject *))__pyx_f_4lxml_5etree_17_ExceptionContext__store_exception;
   __pyx_vtable_4lxml_5etree__ExceptionContext._has_raised = (int (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext__has_raised;
   __pyx_vtable_4lxml_5etree__ExceptionContext._raise_if_stored = (int (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ExceptionContext) < 0) __PYX_ERR(0, 304, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ExceptionContext) < 0) __PYX_ERR(0, 305, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__ExceptionContext.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__ExceptionContext.tp_dictoffset && __pyx_type_4lxml_5etree__ExceptionContext.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__ExceptionContext.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ExceptionContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ExceptionContext) < 0) __PYX_ERR(0, 304, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ExceptionContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ExceptionContext) < 0) __PYX_ERR(0, 305, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__ExceptionContext = &__pyx_type_4lxml_5etree__ExceptionContext;
   __pyx_vtabptr_4lxml_5etree__LogEntry = &__pyx_vtable_4lxml_5etree__LogEntry;
   __pyx_vtable_4lxml_5etree__LogEntry._setError = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__LogEntry *, xmlError *))__pyx_f_4lxml_5etree_9_LogEntry__setError;
@@ -252049,29 +252132,29 @@ static int __Pyx_modinit_type_init_code(void) {
   __pyx_vtable_4lxml_5etree__Document.buildNewPrefix = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_buildNewPrefix;
   __pyx_vtable_4lxml_5etree__Document._findOrBuildNodeNs = (xmlNs *(*)(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *, int))__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs;
   __pyx_vtable_4lxml_5etree__Document._setNodeNs = (int (*)(struct LxmlDocument *, xmlNode *, const xmlChar *))__pyx_f_4lxml_5etree_9_Document__setNodeNs;
-  if (PyType_Ready(&LxmlDocumentType) < 0) __PYX_ERR(0, 353, __pyx_L1_error)
+  if (PyType_Ready(&LxmlDocumentType) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   LxmlDocumentType.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!LxmlDocumentType.tp_dictoffset && LxmlDocumentType.tp_getattro == PyObject_GenericGetAttr)) {
     LxmlDocumentType.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
-  if (__Pyx_SetVtable(LxmlDocumentType.tp_dict, __pyx_vtabptr_4lxml_5etree__Document) < 0) __PYX_ERR(0, 353, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Document, (PyObject *)&LxmlDocumentType) < 0) __PYX_ERR(0, 353, __pyx_L1_error)
+  if (__Pyx_SetVtable(LxmlDocumentType.tp_dict, __pyx_vtabptr_4lxml_5etree__Document) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Document, (PyObject *)&LxmlDocumentType) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__Document = &LxmlDocumentType;
   __pyx_vtabptr_4lxml_5etree_DocInfo = &__pyx_vtable_4lxml_5etree_DocInfo;
   __pyx_vtable_4lxml_5etree_DocInfo._get_c_dtd = (xmlDtd *(*)(struct __pyx_obj_4lxml_5etree_DocInfo *))__pyx_f_4lxml_5etree_7DocInfo__get_c_dtd;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_DocInfo) < 0) __PYX_ERR(0, 527, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_DocInfo) < 0) __PYX_ERR(0, 528, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_DocInfo.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_DocInfo.tp_dictoffset && __pyx_type_4lxml_5etree_DocInfo.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_DocInfo.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_DocInfo.tp_dict, __pyx_vtabptr_4lxml_5etree_DocInfo) < 0) __PYX_ERR(0, 527, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DocInfo, (PyObject *)&__pyx_type_4lxml_5etree_DocInfo) < 0) __PYX_ERR(0, 527, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_DocInfo.tp_dict, __pyx_vtabptr_4lxml_5etree_DocInfo) < 0) __PYX_ERR(0, 528, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DocInfo, (PyObject *)&__pyx_type_4lxml_5etree_DocInfo) < 0) __PYX_ERR(0, 528, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_DocInfo = &__pyx_type_4lxml_5etree_DocInfo;
-  if (PyType_Ready(&LxmlElementType) < 0) __PYX_ERR(0, 702, __pyx_L1_error)
+  if (PyType_Ready(&LxmlElementType) < 0) __PYX_ERR(0, 703, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   LxmlElementType.tp_print = 0;
   #endif
@@ -252080,7 +252163,7 @@ static int __Pyx_modinit_type_init_code(void) {
   }
   #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__setitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 702, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__setitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 703, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_8_Element_4__setitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_8_Element_4__setitem__.doc = __pyx_doc_4lxml_5etree_8_Element_4__setitem__;
@@ -252090,7 +252173,7 @@ static int __Pyx_modinit_type_init_code(void) {
   #endif
   #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__delitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 702, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__delitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 703, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_8_Element_6__delitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_8_Element_6__delitem__.doc = __pyx_doc_4lxml_5etree_8_Element_6__delitem__;
@@ -252100,7 +252183,7 @@ static int __Pyx_modinit_type_init_code(void) {
   #endif
   #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__repr__"); if (unlikely(!wrapper)) __PYX_ERR(0, 702, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__repr__"); if (unlikely(!wrapper)) __PYX_ERR(0, 703, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_8_Element_30__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_8_Element_30__repr__.doc = __pyx_doc_4lxml_5etree_8_Element_30__repr__;
@@ -252110,7 +252193,7 @@ static int __Pyx_modinit_type_init_code(void) {
   #endif
   #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 702, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 703, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_8_Element_32__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_8_Element_32__getitem__.doc = __pyx_doc_4lxml_5etree_8_Element_32__getitem__;
@@ -252120,7 +252203,7 @@ static int __Pyx_modinit_type_init_code(void) {
   #endif
   #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__len__"); if (unlikely(!wrapper)) __PYX_ERR(0, 702, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__len__"); if (unlikely(!wrapper)) __PYX_ERR(0, 703, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_8_Element_34__len__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_8_Element_34__len__.doc = __pyx_doc_4lxml_5etree_8_Element_34__len__;
@@ -252130,7 +252213,7 @@ static int __Pyx_modinit_type_init_code(void) {
   #endif
   #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__contains__"); if (unlikely(!wrapper)) __PYX_ERR(0, 702, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__contains__"); if (unlikely(!wrapper)) __PYX_ERR(0, 703, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_8_Element_38__contains__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_8_Element_38__contains__.doc = __pyx_doc_4lxml_5etree_8_Element_38__contains__;
@@ -252140,7 +252223,7 @@ static int __Pyx_modinit_type_init_code(void) {
   #endif
   #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__iter__"); if (unlikely(!wrapper)) __PYX_ERR(0, 702, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&LxmlElementType, "__iter__"); if (unlikely(!wrapper)) __PYX_ERR(0, 703, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_8_Element_40__iter__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_8_Element_40__iter__.doc = __pyx_doc_4lxml_5etree_8_Element_40__iter__;
@@ -252148,12 +252231,12 @@ static int __Pyx_modinit_type_init_code(void) {
     }
   }
   #endif
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Element_2, (PyObject *)&LxmlElementType) < 0) __PYX_ERR(0, 702, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Element_2, (PyObject *)&LxmlElementType) < 0) __PYX_ERR(0, 703, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__Element = &LxmlElementType;
   __pyx_vtabptr_4lxml_5etree___ContentOnlyElement = &__pyx_vtable_4lxml_5etree___ContentOnlyElement;
   __pyx_vtable_4lxml_5etree___ContentOnlyElement._raiseImmutable = (int (*)(struct __pyx_obj_4lxml_5etree___ContentOnlyElement *))__pyx_f_4lxml_5etree_20__ContentOnlyElement__raiseImmutable;
   __pyx_type_4lxml_5etree___ContentOnlyElement.tp_base = __pyx_ptype_4lxml_5etree__Element;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___ContentOnlyElement) < 0) __PYX_ERR(0, 1647, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___ContentOnlyElement) < 0) __PYX_ERR(0, 1648, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree___ContentOnlyElement.tp_print = 0;
   #endif
@@ -252162,7 +252245,7 @@ static int __Pyx_modinit_type_init_code(void) {
   }
   #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree___ContentOnlyElement, "__setitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1647, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree___ContentOnlyElement, "__setitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1648, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_20__ContentOnlyElement_6__setitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_20__ContentOnlyElement_6__setitem__.doc = __pyx_doc_4lxml_5etree_20__ContentOnlyElement_6__setitem__;
@@ -252172,7 +252255,7 @@ static int __Pyx_modinit_type_init_code(void) {
   #endif
   #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree___ContentOnlyElement, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1647, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree___ContentOnlyElement, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1648, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_20__ContentOnlyElement_8__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_20__ContentOnlyElement_8__getitem__.doc = __pyx_doc_4lxml_5etree_20__ContentOnlyElement_8__getitem__;
@@ -252182,7 +252265,7 @@ static int __Pyx_modinit_type_init_code(void) {
   #endif
   #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree___ContentOnlyElement, "__len__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1647, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree___ContentOnlyElement, "__len__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1648, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_4lxml_5etree_20__ContentOnlyElement_10__len__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_4lxml_5etree_20__ContentOnlyElement_10__len__.doc = __pyx_doc_4lxml_5etree_20__ContentOnlyElement_10__len__;
@@ -252190,78 +252273,78 @@ static int __Pyx_modinit_type_init_code(void) {
     }
   }
   #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree___ContentOnlyElement.tp_dict, __pyx_vtabptr_4lxml_5etree___ContentOnlyElement) < 0) __PYX_ERR(0, 1647, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree___ContentOnlyElement.tp_dict, __pyx_vtabptr_4lxml_5etree___ContentOnlyElement) < 0) __PYX_ERR(0, 1648, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree___ContentOnlyElement = &__pyx_type_4lxml_5etree___ContentOnlyElement;
   __pyx_vtabptr_4lxml_5etree__Comment = &__pyx_vtable_4lxml_5etree__Comment;
   __pyx_vtable_4lxml_5etree__Comment.__pyx_base = *__pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
   __pyx_type_4lxml_5etree__Comment.tp_base = __pyx_ptype_4lxml_5etree___ContentOnlyElement;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__Comment) < 0) __PYX_ERR(0, 1714, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__Comment) < 0) __PYX_ERR(0, 1715, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__Comment.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__Comment.tp_dictoffset && __pyx_type_4lxml_5etree__Comment.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__Comment.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Comment.tp_dict, __pyx_vtabptr_4lxml_5etree__Comment) < 0) __PYX_ERR(0, 1714, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Comment_2, (PyObject *)&__pyx_type_4lxml_5etree__Comment) < 0) __PYX_ERR(0, 1714, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Comment.tp_dict, __pyx_vtabptr_4lxml_5etree__Comment) < 0) __PYX_ERR(0, 1715, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Comment_2, (PyObject *)&__pyx_type_4lxml_5etree__Comment) < 0) __PYX_ERR(0, 1715, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__Comment = &__pyx_type_4lxml_5etree__Comment;
   __pyx_vtabptr_4lxml_5etree__ProcessingInstruction = &__pyx_vtable_4lxml_5etree__ProcessingInstruction;
   __pyx_vtable_4lxml_5etree__ProcessingInstruction.__pyx_base = *__pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
   __pyx_type_4lxml_5etree__ProcessingInstruction.tp_base = __pyx_ptype_4lxml_5etree___ContentOnlyElement;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ProcessingInstruction) < 0) __PYX_ERR(0, 1722, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ProcessingInstruction) < 0) __PYX_ERR(0, 1723, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__ProcessingInstruction.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__ProcessingInstruction.tp_dictoffset && __pyx_type_4lxml_5etree__ProcessingInstruction.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__ProcessingInstruction.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ProcessingInstruction.tp_dict, __pyx_vtabptr_4lxml_5etree__ProcessingInstruction) < 0) __PYX_ERR(0, 1722, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ProcessingInstruction_2, (PyObject *)&__pyx_type_4lxml_5etree__ProcessingInstruction) < 0) __PYX_ERR(0, 1722, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ProcessingInstruction.tp_dict, __pyx_vtabptr_4lxml_5etree__ProcessingInstruction) < 0) __PYX_ERR(0, 1723, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ProcessingInstruction_2, (PyObject *)&__pyx_type_4lxml_5etree__ProcessingInstruction) < 0) __PYX_ERR(0, 1723, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__ProcessingInstruction = &__pyx_type_4lxml_5etree__ProcessingInstruction;
   __pyx_vtabptr_4lxml_5etree__Entity = &__pyx_vtable_4lxml_5etree__Entity;
   __pyx_vtable_4lxml_5etree__Entity.__pyx_base = *__pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
   __pyx_type_4lxml_5etree__Entity.tp_base = __pyx_ptype_4lxml_5etree___ContentOnlyElement;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__Entity) < 0) __PYX_ERR(0, 1773, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__Entity) < 0) __PYX_ERR(0, 1774, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__Entity.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__Entity.tp_dictoffset && __pyx_type_4lxml_5etree__Entity.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__Entity.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Entity.tp_dict, __pyx_vtabptr_4lxml_5etree__Entity) < 0) __PYX_ERR(0, 1773, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Entity_2, (PyObject *)&__pyx_type_4lxml_5etree__Entity) < 0) __PYX_ERR(0, 1773, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Entity.tp_dict, __pyx_vtabptr_4lxml_5etree__Entity) < 0) __PYX_ERR(0, 1774, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Entity_2, (PyObject *)&__pyx_type_4lxml_5etree__Entity) < 0) __PYX_ERR(0, 1774, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__Entity = &__pyx_type_4lxml_5etree__Entity;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_QName) < 0) __PYX_ERR(0, 1802, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_QName) < 0) __PYX_ERR(0, 1803, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_QName.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_QName.tp_dictoffset && __pyx_type_4lxml_5etree_QName.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_QName.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_QName, (PyObject *)&__pyx_type_4lxml_5etree_QName) < 0) __PYX_ERR(0, 1802, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_QName, (PyObject *)&__pyx_type_4lxml_5etree_QName) < 0) __PYX_ERR(0, 1803, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_QName = &__pyx_type_4lxml_5etree_QName;
   __pyx_vtabptr_4lxml_5etree__ElementTree = &__pyx_vtable_4lxml_5etree__ElementTree;
   __pyx_vtable_4lxml_5etree__ElementTree._assertHasRoot = (int (*)(struct LxmlElementTree *))__pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot;
-  if (PyType_Ready(&LxmlElementTreeType) < 0) __PYX_ERR(0, 1871, __pyx_L1_error)
+  if (PyType_Ready(&LxmlElementTreeType) < 0) __PYX_ERR(0, 1872, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   LxmlElementTreeType.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!LxmlElementTreeType.tp_dictoffset && LxmlElementTreeType.tp_getattro == PyObject_GenericGetAttr)) {
     LxmlElementTreeType.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(LxmlElementTreeType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementTree) < 0) __PYX_ERR(0, 1871, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementTree_2, (PyObject *)&LxmlElementTreeType) < 0) __PYX_ERR(0, 1871, __pyx_L1_error)
+  if (__Pyx_SetVtable(LxmlElementTreeType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementTree) < 0) __PYX_ERR(0, 1872, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementTree_2, (PyObject *)&LxmlElementTreeType) < 0) __PYX_ERR(0, 1872, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__ElementTree = &LxmlElementTreeType;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__Attrib) < 0) __PYX_ERR(0, 2435, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__Attrib) < 0) __PYX_ERR(0, 2436, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__Attrib.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__Attrib.tp_dictoffset && __pyx_type_4lxml_5etree__Attrib.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__Attrib.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Attrib, (PyObject *)&__pyx_type_4lxml_5etree__Attrib) < 0) __PYX_ERR(0, 2435, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Attrib, (PyObject *)&__pyx_type_4lxml_5etree__Attrib) < 0) __PYX_ERR(0, 2436, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__Attrib = &__pyx_type_4lxml_5etree__Attrib;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__AttribIterator) < 0) __PYX_ERR(0, 2574, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__AttribIterator) < 0) __PYX_ERR(0, 2577, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__AttribIterator.tp_print = 0;
   #endif
@@ -252271,29 +252354,29 @@ static int __Pyx_modinit_type_init_code(void) {
   __pyx_ptype_4lxml_5etree__AttribIterator = &__pyx_type_4lxml_5etree__AttribIterator;
   __pyx_vtabptr_4lxml_5etree__ElementTagMatcher = &__pyx_vtable_4lxml_5etree__ElementTagMatcher;
   __pyx_vtable_4lxml_5etree__ElementTagMatcher._initTagMatch = (PyObject *(*)(struct LxmlElementTagMatcher *, PyObject *))__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch;
-  if (PyType_Ready(&LxmlElementTagMatcherType) < 0) __PYX_ERR(0, 2615, __pyx_L1_error)
+  if (PyType_Ready(&LxmlElementTagMatcherType) < 0) __PYX_ERR(0, 2618, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   LxmlElementTagMatcherType.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!LxmlElementTagMatcherType.tp_dictoffset && LxmlElementTagMatcherType.tp_getattro == PyObject_GenericGetAttr)) {
     LxmlElementTagMatcherType.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(LxmlElementTagMatcherType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementTagMatcher) < 0) __PYX_ERR(0, 2615, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementTagMatcher, (PyObject *)&LxmlElementTagMatcherType) < 0) __PYX_ERR(0, 2615, __pyx_L1_error)
+  if (__Pyx_SetVtable(LxmlElementTagMatcherType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementTagMatcher) < 0) __PYX_ERR(0, 2618, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementTagMatcher, (PyObject *)&LxmlElementTagMatcherType) < 0) __PYX_ERR(0, 2618, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__ElementTagMatcher = &LxmlElementTagMatcherType;
   __pyx_vtabptr_4lxml_5etree__ElementIterator = &__pyx_vtable_4lxml_5etree__ElementIterator;
   __pyx_vtable_4lxml_5etree__ElementIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementTagMatcher;
   __pyx_vtable_4lxml_5etree__ElementIterator._storeNext = (void (*)(struct LxmlElementIterator *, struct LxmlElement *))__pyx_f_4lxml_5etree_16_ElementIterator__storeNext;
   LxmlElementIteratorType.tp_base = __pyx_ptype_4lxml_5etree__ElementTagMatcher;
-  if (PyType_Ready(&LxmlElementIteratorType) < 0) __PYX_ERR(0, 2646, __pyx_L1_error)
+  if (PyType_Ready(&LxmlElementIteratorType) < 0) __PYX_ERR(0, 2649, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   LxmlElementIteratorType.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!LxmlElementIteratorType.tp_dictoffset && LxmlElementIteratorType.tp_getattro == PyObject_GenericGetAttr)) {
     LxmlElementIteratorType.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(LxmlElementIteratorType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementIterator) < 0) __PYX_ERR(0, 2646, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementIterator, (PyObject *)&LxmlElementIteratorType) < 0) __PYX_ERR(0, 2646, __pyx_L1_error)
+  if (__Pyx_SetVtable(LxmlElementIteratorType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementIterator) < 0) __PYX_ERR(0, 2649, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementIterator, (PyObject *)&LxmlElementIteratorType) < 0) __PYX_ERR(0, 2649, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__ElementIterator = &LxmlElementIteratorType;
   __pyx_vtabptr_4lxml_5etree__MultiTagMatcher = &__pyx_vtable_4lxml_5etree__MultiTagMatcher;
   __pyx_vtable_4lxml_5etree__MultiTagMatcher.rejectsAll = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAll;
@@ -252306,97 +252389,97 @@ static int __Pyx_modinit_type_init_code(void) {
   __pyx_vtable_4lxml_5etree__MultiTagMatcher.matches = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlNode *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matches;
   __pyx_vtable_4lxml_5etree__MultiTagMatcher.matchesNsTag = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, const xmlChar *, const xmlChar *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag;
   __pyx_vtable_4lxml_5etree__MultiTagMatcher.matchesAttribute = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlAttr *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribute;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__MultiTagMatcher) < 0) __PYX_ERR(0, 2683, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__MultiTagMatcher) < 0) __PYX_ERR(0, 2686, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__MultiTagMatcher.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__MultiTagMatcher.tp_dictoffset && __pyx_type_4lxml_5etree__MultiTagMatcher.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__MultiTagMatcher.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__MultiTagMatcher.tp_dict, __pyx_vtabptr_4lxml_5etree__MultiTagMatcher) < 0) __PYX_ERR(0, 2683, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__MultiTagMatcher.tp_dict, __pyx_vtabptr_4lxml_5etree__MultiTagMatcher) < 0) __PYX_ERR(0, 2686, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__MultiTagMatcher = &__pyx_type_4lxml_5etree__MultiTagMatcher;
   __pyx_vtabptr_4lxml_5etree__ElementMatchIterator = &__pyx_vtable_4lxml_5etree__ElementMatchIterator;
   __pyx_vtable_4lxml_5etree__ElementMatchIterator._initTagMatcher = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, PyObject *))__pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher;
   __pyx_vtable_4lxml_5etree__ElementMatchIterator._storeNext = (int (*)(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, struct LxmlElement *))__pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ElementMatchIterator) < 0) __PYX_ERR(0, 2822, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ElementMatchIterator) < 0) __PYX_ERR(0, 2825, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__ElementMatchIterator.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__ElementMatchIterator.tp_dictoffset && __pyx_type_4lxml_5etree__ElementMatchIterator.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__ElementMatchIterator.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ElementMatchIterator.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementMatchIterator) < 0) __PYX_ERR(0, 2822, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementMatchIterator, (PyObject *)&__pyx_type_4lxml_5etree__ElementMatchIterator) < 0) __PYX_ERR(0, 2822, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ElementMatchIterator.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementMatchIterator) < 0) __PYX_ERR(0, 2825, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementMatchIterator, (PyObject *)&__pyx_type_4lxml_5etree__ElementMatchIterator) < 0) __PYX_ERR(0, 2825, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__ElementMatchIterator = &__pyx_type_4lxml_5etree__ElementMatchIterator;
   __pyx_vtabptr_4lxml_5etree_ElementChildIterator = &__pyx_vtable_4lxml_5etree_ElementChildIterator;
   __pyx_vtable_4lxml_5etree_ElementChildIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
   __pyx_type_4lxml_5etree_ElementChildIterator.tp_base = __pyx_ptype_4lxml_5etree__ElementMatchIterator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementChildIterator) < 0) __PYX_ERR(0, 2851, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementChildIterator) < 0) __PYX_ERR(0, 2854, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_ElementChildIterator.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_ElementChildIterator.tp_dictoffset && __pyx_type_4lxml_5etree_ElementChildIterator.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_ElementChildIterator.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ElementChildIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_ElementChildIterator) < 0) __PYX_ERR(0, 2851, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementChildIterator, (PyObject *)&__pyx_type_4lxml_5etree_ElementChildIterator) < 0) __PYX_ERR(0, 2851, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ElementChildIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_ElementChildIterator) < 0) __PYX_ERR(0, 2854, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementChildIterator, (PyObject *)&__pyx_type_4lxml_5etree_ElementChildIterator) < 0) __PYX_ERR(0, 2854, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_ElementChildIterator = &__pyx_type_4lxml_5etree_ElementChildIterator;
   __pyx_vtabptr_4lxml_5etree_SiblingsIterator = &__pyx_vtable_4lxml_5etree_SiblingsIterator;
   __pyx_vtable_4lxml_5etree_SiblingsIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
   __pyx_type_4lxml_5etree_SiblingsIterator.tp_base = __pyx_ptype_4lxml_5etree__ElementMatchIterator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_SiblingsIterator) < 0) __PYX_ERR(0, 2871, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_SiblingsIterator) < 0) __PYX_ERR(0, 2874, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_SiblingsIterator.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_SiblingsIterator.tp_dictoffset && __pyx_type_4lxml_5etree_SiblingsIterator.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_SiblingsIterator.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_SiblingsIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_SiblingsIterator) < 0) __PYX_ERR(0, 2871, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SiblingsIterator, (PyObject *)&__pyx_type_4lxml_5etree_SiblingsIterator) < 0) __PYX_ERR(0, 2871, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_SiblingsIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_SiblingsIterator) < 0) __PYX_ERR(0, 2874, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SiblingsIterator, (PyObject *)&__pyx_type_4lxml_5etree_SiblingsIterator) < 0) __PYX_ERR(0, 2874, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_SiblingsIterator = &__pyx_type_4lxml_5etree_SiblingsIterator;
   __pyx_vtabptr_4lxml_5etree_AncestorsIterator = &__pyx_vtable_4lxml_5etree_AncestorsIterator;
   __pyx_vtable_4lxml_5etree_AncestorsIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
   __pyx_type_4lxml_5etree_AncestorsIterator.tp_base = __pyx_ptype_4lxml_5etree__ElementMatchIterator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_AncestorsIterator) < 0) __PYX_ERR(0, 2886, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_AncestorsIterator) < 0) __PYX_ERR(0, 2889, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_AncestorsIterator.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_AncestorsIterator.tp_dictoffset && __pyx_type_4lxml_5etree_AncestorsIterator.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_AncestorsIterator.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_AncestorsIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_AncestorsIterator) < 0) __PYX_ERR(0, 2886, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_AncestorsIterator, (PyObject *)&__pyx_type_4lxml_5etree_AncestorsIterator) < 0) __PYX_ERR(0, 2886, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_AncestorsIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_AncestorsIterator) < 0) __PYX_ERR(0, 2889, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_AncestorsIterator, (PyObject *)&__pyx_type_4lxml_5etree_AncestorsIterator) < 0) __PYX_ERR(0, 2889, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_AncestorsIterator = &__pyx_type_4lxml_5etree_AncestorsIterator;
   __pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator = &__pyx_vtable_4lxml_5etree_ElementDepthFirstIterator;
   __pyx_vtable_4lxml_5etree_ElementDepthFirstIterator._nextNodeAnyTag = (xmlNode *(*)(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *))__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag;
   __pyx_vtable_4lxml_5etree_ElementDepthFirstIterator._nextNodeMatchTag = (xmlNode *(*)(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *))__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchTag;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementDepthFirstIterator) < 0) __PYX_ERR(0, 2896, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementDepthFirstIterator) < 0) __PYX_ERR(0, 2899, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_ElementDepthFirstIterator.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_ElementDepthFirstIterator.tp_dictoffset && __pyx_type_4lxml_5etree_ElementDepthFirstIterator.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_ElementDepthFirstIterator.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ElementDepthFirstIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator) < 0) __PYX_ERR(0, 2896, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementDepthFirstIterator, (PyObject *)&__pyx_type_4lxml_5etree_ElementDepthFirstIterator) < 0) __PYX_ERR(0, 2896, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ElementDepthFirstIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator) < 0) __PYX_ERR(0, 2899, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementDepthFirstIterator, (PyObject *)&__pyx_type_4lxml_5etree_ElementDepthFirstIterator) < 0) __PYX_ERR(0, 2899, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_ElementDepthFirstIterator = &__pyx_type_4lxml_5etree_ElementDepthFirstIterator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementTextIterator) < 0) __PYX_ERR(0, 2972, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementTextIterator) < 0) __PYX_ERR(0, 2975, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_ElementTextIterator.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_ElementTextIterator.tp_dictoffset && __pyx_type_4lxml_5etree_ElementTextIterator.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_ElementTextIterator.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementTextIterator, (PyObject *)&__pyx_type_4lxml_5etree_ElementTextIterator) < 0) __PYX_ERR(0, 2972, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementTextIterator, (PyObject *)&__pyx_type_4lxml_5etree_ElementTextIterator) < 0) __PYX_ERR(0, 2975, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_ElementTextIterator = &__pyx_type_4lxml_5etree_ElementTextIterator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_CDATA) < 0) __PYX_ERR(0, 3098, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_CDATA) < 0) __PYX_ERR(0, 3101, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_CDATA.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_CDATA.tp_dictoffset && __pyx_type_4lxml_5etree_CDATA.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_CDATA.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CDATA, (PyObject *)&__pyx_type_4lxml_5etree_CDATA) < 0) __PYX_ERR(0, 3098, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CDATA, (PyObject *)&__pyx_type_4lxml_5etree_CDATA) < 0) __PYX_ERR(0, 3101, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_CDATA = &__pyx_type_4lxml_5etree_CDATA;
   __pyx_vtabptr_4lxml_5etree__ReadOnlyProxy = &__pyx_vtable_4lxml_5etree__ReadOnlyProxy;
   __pyx_vtable_4lxml_5etree__ReadOnlyProxy._assertNode = (int (*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *))__pyx_f_4lxml_5etree_14_ReadOnlyProxy__assertNode;
@@ -252887,94 +252970,94 @@ static int __Pyx_modinit_type_init_code(void) {
   __pyx_vtable_4lxml_5etree__BaseParser._parseDoc = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, char *, int, char *))__pyx_f_4lxml_5etree_11_BaseParser__parseDoc;
   __pyx_vtable_4lxml_5etree__BaseParser._parseDocFromFile = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, char *))__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile;
   __pyx_vtable_4lxml_5etree__BaseParser._parseDocFromFilelike = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__BaseParser) < 0) __PYX_ERR(2, 795, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__BaseParser) < 0) __PYX_ERR(2, 798, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__BaseParser.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__BaseParser.tp_dictoffset && __pyx_type_4lxml_5etree__BaseParser.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__BaseParser.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__BaseParser.tp_dict, __pyx_vtabptr_4lxml_5etree__BaseParser) < 0) __PYX_ERR(2, 795, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__BaseParser.tp_dict, __pyx_vtabptr_4lxml_5etree__BaseParser) < 0) __PYX_ERR(2, 798, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__BaseParser = &__pyx_type_4lxml_5etree__BaseParser;
   __pyx_vtabptr_4lxml_5etree__FeedParser = &__pyx_vtable_4lxml_5etree__FeedParser;
   __pyx_vtable_4lxml_5etree__FeedParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree__BaseParser;
   __pyx_vtable_4lxml_5etree__FeedParser.feed = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__FeedParser *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_11_FeedParser_feed;
   __pyx_vtable_4lxml_5etree__FeedParser.close = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__FeedParser *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_11_FeedParser_close;
   __pyx_type_4lxml_5etree__FeedParser.tp_base = __pyx_ptype_4lxml_5etree__BaseParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__FeedParser) < 0) __PYX_ERR(2, 1244, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__FeedParser) < 0) __PYX_ERR(2, 1247, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__FeedParser.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__FeedParser.tp_dictoffset && __pyx_type_4lxml_5etree__FeedParser.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__FeedParser.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__FeedParser.tp_dict, __pyx_vtabptr_4lxml_5etree__FeedParser) < 0) __PYX_ERR(2, 1244, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FeedParser, (PyObject *)&__pyx_type_4lxml_5etree__FeedParser) < 0) __PYX_ERR(2, 1244, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__FeedParser.tp_dict, __pyx_vtabptr_4lxml_5etree__FeedParser) < 0) __PYX_ERR(2, 1247, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FeedParser, (PyObject *)&__pyx_type_4lxml_5etree__FeedParser) < 0) __PYX_ERR(2, 1247, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__FeedParser = &__pyx_type_4lxml_5etree__FeedParser;
   __pyx_vtabptr_4lxml_5etree_XMLParser = &__pyx_vtable_4lxml_5etree_XMLParser;
   __pyx_vtable_4lxml_5etree_XMLParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree__FeedParser;
   __pyx_type_4lxml_5etree_XMLParser.tp_base = __pyx_ptype_4lxml_5etree__FeedParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XMLParser) < 0) __PYX_ERR(2, 1477, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XMLParser) < 0) __PYX_ERR(2, 1480, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_XMLParser.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_XMLParser.tp_dictoffset && __pyx_type_4lxml_5etree_XMLParser.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_XMLParser.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_XMLParser) < 0) __PYX_ERR(2, 1477, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_XMLParser, (PyObject *)&__pyx_type_4lxml_5etree_XMLParser) < 0) __PYX_ERR(2, 1477, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_XMLParser) < 0) __PYX_ERR(2, 1480, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_XMLParser, (PyObject *)&__pyx_type_4lxml_5etree_XMLParser) < 0) __PYX_ERR(2, 1480, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_XMLParser = &__pyx_type_4lxml_5etree_XMLParser;
   __pyx_vtabptr_4lxml_5etree_XMLPullParser = &__pyx_vtable_4lxml_5etree_XMLPullParser;
   __pyx_vtable_4lxml_5etree_XMLPullParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree_XMLParser;
   __pyx_type_4lxml_5etree_XMLPullParser.tp_base = __pyx_ptype_4lxml_5etree_XMLParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XMLPullParser) < 0) __PYX_ERR(2, 1561, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XMLPullParser) < 0) __PYX_ERR(2, 1564, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_XMLPullParser.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_XMLPullParser.tp_dictoffset && __pyx_type_4lxml_5etree_XMLPullParser.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_XMLPullParser.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XMLPullParser.tp_dict, __pyx_vtabptr_4lxml_5etree_XMLPullParser) < 0) __PYX_ERR(2, 1561, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_XMLPullParser, (PyObject *)&__pyx_type_4lxml_5etree_XMLPullParser) < 0) __PYX_ERR(2, 1561, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XMLPullParser.tp_dict, __pyx_vtabptr_4lxml_5etree_XMLPullParser) < 0) __PYX_ERR(2, 1564, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_XMLPullParser, (PyObject *)&__pyx_type_4lxml_5etree_XMLPullParser) < 0) __PYX_ERR(2, 1564, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_XMLPullParser = &__pyx_type_4lxml_5etree_XMLPullParser;
   __pyx_vtabptr_4lxml_5etree_ETCompatXMLParser = &__pyx_vtable_4lxml_5etree_ETCompatXMLParser;
   __pyx_vtable_4lxml_5etree_ETCompatXMLParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree_XMLParser;
   __pyx_type_4lxml_5etree_ETCompatXMLParser.tp_base = __pyx_ptype_4lxml_5etree_XMLParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ETCompatXMLParser) < 0) __PYX_ERR(2, 1590, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ETCompatXMLParser) < 0) __PYX_ERR(2, 1593, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_ETCompatXMLParser.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_ETCompatXMLParser.tp_dictoffset && __pyx_type_4lxml_5etree_ETCompatXMLParser.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_ETCompatXMLParser.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ETCompatXMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_ETCompatXMLParser) < 0) __PYX_ERR(2, 1590, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ETCompatXMLParser, (PyObject *)&__pyx_type_4lxml_5etree_ETCompatXMLParser) < 0) __PYX_ERR(2, 1590, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ETCompatXMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_ETCompatXMLParser) < 0) __PYX_ERR(2, 1593, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ETCompatXMLParser, (PyObject *)&__pyx_type_4lxml_5etree_ETCompatXMLParser) < 0) __PYX_ERR(2, 1593, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_ETCompatXMLParser = &__pyx_type_4lxml_5etree_ETCompatXMLParser;
   __pyx_vtabptr_4lxml_5etree_HTMLParser = &__pyx_vtable_4lxml_5etree_HTMLParser;
   __pyx_vtable_4lxml_5etree_HTMLParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree__FeedParser;
   __pyx_type_4lxml_5etree_HTMLParser.tp_base = __pyx_ptype_4lxml_5etree__FeedParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_HTMLParser) < 0) __PYX_ERR(2, 1669, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_HTMLParser) < 0) __PYX_ERR(2, 1672, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_HTMLParser.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_HTMLParser.tp_dictoffset && __pyx_type_4lxml_5etree_HTMLParser.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_HTMLParser.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_HTMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_HTMLParser) < 0) __PYX_ERR(2, 1669, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_HTMLParser, (PyObject *)&__pyx_type_4lxml_5etree_HTMLParser) < 0) __PYX_ERR(2, 1669, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_HTMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_HTMLParser) < 0) __PYX_ERR(2, 1672, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_HTMLParser, (PyObject *)&__pyx_type_4lxml_5etree_HTMLParser) < 0) __PYX_ERR(2, 1672, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_HTMLParser = &__pyx_type_4lxml_5etree_HTMLParser;
   __pyx_vtabptr_4lxml_5etree_HTMLPullParser = &__pyx_vtable_4lxml_5etree_HTMLPullParser;
   __pyx_vtable_4lxml_5etree_HTMLPullParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree_HTMLParser;
   __pyx_type_4lxml_5etree_HTMLPullParser.tp_base = __pyx_ptype_4lxml_5etree_HTMLParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_HTMLPullParser) < 0) __PYX_ERR(2, 1734, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_HTMLPullParser) < 0) __PYX_ERR(2, 1737, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_HTMLPullParser.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_HTMLPullParser.tp_dictoffset && __pyx_type_4lxml_5etree_HTMLPullParser.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_HTMLPullParser.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_HTMLPullParser.tp_dict, __pyx_vtabptr_4lxml_5etree_HTMLPullParser) < 0) __PYX_ERR(2, 1734, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_HTMLPullParser, (PyObject *)&__pyx_type_4lxml_5etree_HTMLPullParser) < 0) __PYX_ERR(2, 1734, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_HTMLPullParser.tp_dict, __pyx_vtabptr_4lxml_5etree_HTMLPullParser) < 0) __PYX_ERR(2, 1737, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_HTMLPullParser, (PyObject *)&__pyx_type_4lxml_5etree_HTMLPullParser) < 0) __PYX_ERR(2, 1737, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_HTMLPullParser = &__pyx_type_4lxml_5etree_HTMLPullParser;
   __pyx_vtabptr_4lxml_5etree__SaxParserTarget = &__pyx_vtable_4lxml_5etree__SaxParserTarget;
   __pyx_vtable_4lxml_5etree__SaxParserTarget._handleSaxStart = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_16_SaxParserTarget__handleSaxStart;
@@ -253601,28 +253684,28 @@ static int __Pyx_modinit_type_init_code(void) {
   __pyx_vtable_4lxml_5etree__XSLTResultTree.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementTree;
   __pyx_vtable_4lxml_5etree__XSLTResultTree._saveToStringAndSize = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XSLTResultTree *, xmlChar **, int *))__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize;
   __pyx_type_4lxml_5etree__XSLTResultTree.tp_base = __pyx_ptype_4lxml_5etree__ElementTree;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTResultTree) < 0) __PYX_ERR(4, 705, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTResultTree) < 0) __PYX_ERR(4, 706, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__XSLTResultTree.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__XSLTResultTree.tp_dictoffset && __pyx_type_4lxml_5etree__XSLTResultTree.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__XSLTResultTree.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTResultTree.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTResultTree) < 0) __PYX_ERR(4, 705, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_XSLTResultTree, (PyObject *)&__pyx_type_4lxml_5etree__XSLTResultTree) < 0) __PYX_ERR(4, 705, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTResultTree.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTResultTree) < 0) __PYX_ERR(4, 706, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_XSLTResultTree, (PyObject *)&__pyx_type_4lxml_5etree__XSLTResultTree) < 0) __PYX_ERR(4, 706, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__XSLTResultTree = &__pyx_type_4lxml_5etree__XSLTResultTree;
   __pyx_vtabptr_4lxml_5etree__XSLTProcessingInstruction = &__pyx_vtable_4lxml_5etree__XSLTProcessingInstruction;
   __pyx_vtable_4lxml_5etree__XSLTProcessingInstruction.__pyx_base = *__pyx_vtabptr_4lxml_5etree_PIBase;
   __pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_base = __pyx_ptype_4lxml_5etree_PIBase;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTProcessingInstruction) < 0) __PYX_ERR(4, 894, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTProcessingInstruction) < 0) __PYX_ERR(4, 895, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_dictoffset && __pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTProcessingInstruction) < 0) __PYX_ERR(4, 894, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_XSLTProcessingInstruction, (PyObject *)&__pyx_type_4lxml_5etree__XSLTProcessingInstruction) < 0) __PYX_ERR(4, 894, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTProcessingInstruction) < 0) __PYX_ERR(4, 895, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_XSLTProcessingInstruction, (PyObject *)&__pyx_type_4lxml_5etree__XSLTProcessingInstruction) < 0) __PYX_ERR(4, 895, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__XSLTProcessingInstruction = &__pyx_type_4lxml_5etree__XSLTProcessingInstruction;
   __pyx_vtabptr_4lxml_5etree_XSLTExtension = &__pyx_vtable_4lxml_5etree_XSLTExtension;
   __pyx_vtable_4lxml_5etree_XSLTExtension._collectXSLTResultContent = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_XSLTExtension *, struct __pyx_obj_4lxml_5etree__XSLTContext *, xmlNode *, int, int))__pyx_f_4lxml_5etree_13XSLTExtension__collectXSLTResultContent;
@@ -253637,27 +253720,27 @@ static int __Pyx_modinit_type_init_code(void) {
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_XSLTExtension, (PyObject *)&__pyx_type_4lxml_5etree_XSLTExtension) < 0) __PYX_ERR(19, 3, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_XSLTExtension = &__pyx_type_4lxml_5etree_XSLTExtension;
   __pyx_type_4lxml_5etree_DocumentInvalid.tp_base = __pyx_ptype_4lxml_5etree_LxmlError;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_DocumentInvalid) < 0) __PYX_ERR(0, 3611, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_DocumentInvalid) < 0) __PYX_ERR(0, 3614, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree_DocumentInvalid.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree_DocumentInvalid.tp_dictoffset && __pyx_type_4lxml_5etree_DocumentInvalid.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree_DocumentInvalid.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DocumentInvalid, (PyObject *)&__pyx_type_4lxml_5etree_DocumentInvalid) < 0) __PYX_ERR(0, 3611, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DocumentInvalid, (PyObject *)&__pyx_type_4lxml_5etree_DocumentInvalid) < 0) __PYX_ERR(0, 3614, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree_DocumentInvalid = &__pyx_type_4lxml_5etree_DocumentInvalid;
   __pyx_vtabptr_4lxml_5etree__Validator = &__pyx_vtable_4lxml_5etree__Validator;
   __pyx_vtable_4lxml_5etree__Validator._append_log_message = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__Validator *, int, int, int, int, PyObject *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_10_Validator__append_log_message;
   __pyx_vtable_4lxml_5etree__Validator._clear_error_log = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__Validator *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_10_Validator__clear_error_log;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__Validator) < 0) __PYX_ERR(0, 3619, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__Validator) < 0) __PYX_ERR(0, 3622, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_5etree__Validator.tp_print = 0;
   #endif
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4lxml_5etree__Validator.tp_dictoffset && __pyx_type_4lxml_5etree__Validator.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_4lxml_5etree__Validator.tp_getattro = __Pyx_PyObject_GenericGetAttr;
   }
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Validator.tp_dict, __pyx_vtabptr_4lxml_5etree__Validator) < 0) __PYX_ERR(0, 3619, __pyx_L1_error)
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Validator, (PyObject *)&__pyx_type_4lxml_5etree__Validator) < 0) __PYX_ERR(0, 3619, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Validator.tp_dict, __pyx_vtabptr_4lxml_5etree__Validator) < 0) __PYX_ERR(0, 3622, __pyx_L1_error)
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Validator, (PyObject *)&__pyx_type_4lxml_5etree__Validator) < 0) __PYX_ERR(0, 3622, __pyx_L1_error)
   __pyx_ptype_4lxml_5etree__Validator = &__pyx_type_4lxml_5etree__Validator;
   __pyx_type_4lxml_5etree_DTDError.tp_base = __pyx_ptype_4lxml_5etree_LxmlError;
   if (PyType_Ready(&__pyx_type_4lxml_5etree_DTDError) < 0) __PYX_ERR(20, 4, __pyx_L1_error)
@@ -254080,14 +254163,13 @@ static int __Pyx_modinit_type_import_code(void) {
   /*--- Type import code ---*/
   __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", 
+  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType_0_29_36(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", 
   #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
-  sizeof(PyTypeObject),
+  sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyTypeObject),
   #else
-  sizeof(PyHeapTypeObject),
+  sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(PyHeapTypeObject),
   #endif
-  __Pyx_ImportType_CheckSize_Warn);
-   if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(26, 9, __pyx_L1_error)
+  __Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(26, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_RefNannyFinishContext();
   return 0;
@@ -254293,7 +254375,7 @@ if (!__Pyx_RefNanny) {
   Py_INCREF(__pyx_b);
   __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
   Py_INCREF(__pyx_cython_runtime);
-  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Initialize various global constants etc. ---*/
   if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
@@ -254874,7 +254956,7 @@ if (!__Pyx_RefNanny) {
  * 
  * cdef object ITER_EMPTY = iter(())             # <<<<<<<<<<<<<<
  * 
- * try:
+ * cdef object MutableMapping
  */
   __pyx_t_1 = PyObject_GetIter(__pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
@@ -254883,9 +254965,9 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":90
- * cdef object ITER_EMPTY = iter(())
+  /* "lxml/etree.pyx":91
  * 
+ * cdef object MutableMapping
  * try:             # <<<<<<<<<<<<<<
  *     from collections.abc import MutableMapping  # Py3.3+
  * except ImportError:
@@ -254899,30 +254981,33 @@ if (!__Pyx_RefNanny) {
     __Pyx_XGOTREF(__pyx_t_5);
     /*try:*/ {
 
-      /* "lxml/etree.pyx":91
- * 
+      /* "lxml/etree.pyx":92
+ * cdef object MutableMapping
  * try:
  *     from collections.abc import MutableMapping  # Py3.3+             # <<<<<<<<<<<<<<
  * except ImportError:
  *     from collections import MutableMapping  # Py2.7
  */
-      __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L2_error)
+      __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L2_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_n_s_MutableMapping);
       __Pyx_GIVEREF(__pyx_n_s_MutableMapping);
       PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_MutableMapping);
-      __pyx_t_2 = __Pyx_Import(__pyx_n_s_collections_abc, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L2_error)
+      __pyx_t_2 = __Pyx_Import(__pyx_n_s_collections_abc, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L2_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_MutableMapping); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L2_error)
+      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_MutableMapping); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L2_error)
       __Pyx_GOTREF(__pyx_t_1);
-      if (PyDict_SetItem(__pyx_d, __pyx_n_s_MutableMapping, __pyx_t_1) < 0) __PYX_ERR(0, 91, __pyx_L2_error)
+      __Pyx_INCREF(__pyx_t_1);
+      __Pyx_XGOTREF(__pyx_v_4lxml_5etree_MutableMapping);
+      __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_MutableMapping, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "lxml/etree.pyx":90
- * cdef object ITER_EMPTY = iter(())
+      /* "lxml/etree.pyx":91
  * 
+ * cdef object MutableMapping
  * try:             # <<<<<<<<<<<<<<
  *     from collections.abc import MutableMapping  # Py3.3+
  * except ImportError:
@@ -254936,7 +255021,7 @@ if (!__Pyx_RefNanny) {
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "lxml/etree.pyx":92
+    /* "lxml/etree.pyx":93
  * try:
  *     from collections.abc import MutableMapping  # Py3.3+
  * except ImportError:             # <<<<<<<<<<<<<<
@@ -254946,29 +255031,32 @@ if (!__Pyx_RefNanny) {
     __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
     if (__pyx_t_6) {
       __Pyx_AddTraceback("lxml.etree", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(0, 92, __pyx_L4_except_error)
+      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(0, 93, __pyx_L4_except_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GOTREF(__pyx_t_7);
 
-      /* "lxml/etree.pyx":93
+      /* "lxml/etree.pyx":94
  *     from collections.abc import MutableMapping  # Py3.3+
  * except ImportError:
  *     from collections import MutableMapping  # Py2.7             # <<<<<<<<<<<<<<
  * 
  * class _ImmutableMapping(MutableMapping):
  */
-      __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 93, __pyx_L4_except_error)
+      __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 94, __pyx_L4_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_INCREF(__pyx_n_s_MutableMapping);
       __Pyx_GIVEREF(__pyx_n_s_MutableMapping);
       PyList_SET_ITEM(__pyx_t_8, 0, __pyx_n_s_MutableMapping);
-      __pyx_t_9 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_8, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 93, __pyx_L4_except_error)
+      __pyx_t_9 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_8, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 94, __pyx_L4_except_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_8 = __Pyx_ImportFrom(__pyx_t_9, __pyx_n_s_MutableMapping); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 93, __pyx_L4_except_error)
+      __pyx_t_8 = __Pyx_ImportFrom(__pyx_t_9, __pyx_n_s_MutableMapping); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 94, __pyx_L4_except_error)
       __Pyx_GOTREF(__pyx_t_8);
-      if (PyDict_SetItem(__pyx_d, __pyx_n_s_MutableMapping, __pyx_t_8) < 0) __PYX_ERR(0, 93, __pyx_L4_except_error)
+      __Pyx_INCREF(__pyx_t_8);
+      __Pyx_XGOTREF(__pyx_v_4lxml_5etree_MutableMapping);
+      __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_MutableMapping, __pyx_t_8);
+      __Pyx_GIVEREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -254979,9 +255067,9 @@ if (!__Pyx_RefNanny) {
     goto __pyx_L4_except_error;
     __pyx_L4_except_error:;
 
-    /* "lxml/etree.pyx":90
- * cdef object ITER_EMPTY = iter(())
+    /* "lxml/etree.pyx":91
  * 
+ * cdef object MutableMapping
  * try:             # <<<<<<<<<<<<<<
  *     from collections.abc import MutableMapping  # Py3.3+
  * except ImportError:
@@ -254999,98 +255087,96 @@ if (!__Pyx_RefNanny) {
     __pyx_L7_try_end:;
   }
 
-  /* "lxml/etree.pyx":95
+  /* "lxml/etree.pyx":96
  *     from collections import MutableMapping  # Py2.7
  * 
  * class _ImmutableMapping(MutableMapping):             # <<<<<<<<<<<<<<
  *     def __getitem__(self, key):
  *         raise KeyError, key
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_MutableMapping); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 95, __pyx_L1_error)
+  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 96, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 95, __pyx_L1_error)
+  __Pyx_INCREF(__pyx_v_4lxml_5etree_MutableMapping);
+  __Pyx_GIVEREF(__pyx_v_4lxml_5etree_MutableMapping);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_4lxml_5etree_MutableMapping);
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 96, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);
-  __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 95, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_1, __pyx_n_s_ImmutableMapping, __pyx_n_s_ImmutableMapping, (PyObject *) NULL, __pyx_n_s_lxml_etree, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 95, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_7, __pyx_n_s_ImmutableMapping, __pyx_n_s_ImmutableMapping, (PyObject *) NULL, __pyx_n_s_lxml_etree, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 96, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "lxml/etree.pyx":96
+  /* "lxml/etree.pyx":97
  * 
  * class _ImmutableMapping(MutableMapping):
  *     def __getitem__(self, key):             # <<<<<<<<<<<<<<
  *         raise KeyError, key
  * 
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_1__getitem__, 0, __pyx_n_s_ImmutableMapping___getitem, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__111)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 96, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_1__getitem__, 0, __pyx_n_s_ImmutableMapping___getitem, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__111)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 97, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_getitem, __pyx_t_9) < 0) __PYX_ERR(0, 96, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_getitem, __pyx_t_9) < 0) __PYX_ERR(0, 97, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/etree.pyx":99
+  /* "lxml/etree.pyx":100
  *         raise KeyError, key
  * 
  *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
  *         raise KeyError, key
  * 
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_3__setitem__, 0, __pyx_n_s_ImmutableMapping___setitem, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__113)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 99, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_3__setitem__, 0, __pyx_n_s_ImmutableMapping___setitem, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__113)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_setitem, __pyx_t_9) < 0) __PYX_ERR(0, 99, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_setitem, __pyx_t_9) < 0) __PYX_ERR(0, 100, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/etree.pyx":102
+  /* "lxml/etree.pyx":103
  *         raise KeyError, key
  * 
  *     def __delitem__(self, key):             # <<<<<<<<<<<<<<
  *         raise KeyError, key
  * 
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_5__delitem__, 0, __pyx_n_s_ImmutableMapping___delitem, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__115)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 102, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_5__delitem__, 0, __pyx_n_s_ImmutableMapping___delitem, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__115)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_delitem, __pyx_t_9) < 0) __PYX_ERR(0, 102, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_delitem, __pyx_t_9) < 0) __PYX_ERR(0, 103, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/etree.pyx":105
+  /* "lxml/etree.pyx":106
  *         raise KeyError, key
  * 
  *     def __contains__(self, key):             # <<<<<<<<<<<<<<
  *         return False
  * 
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_7__contains__, 0, __pyx_n_s_ImmutableMapping___contains, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__117)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_7__contains__, 0, __pyx_n_s_ImmutableMapping___contains, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__117)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_contains, __pyx_t_9) < 0) __PYX_ERR(0, 105, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_contains, __pyx_t_9) < 0) __PYX_ERR(0, 106, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/etree.pyx":108
+  /* "lxml/etree.pyx":109
  *         return False
  * 
  *     def __len__(self):             # <<<<<<<<<<<<<<
  *         return 0
  * 
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_9__len__, 0, __pyx_n_s_ImmutableMapping___len, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__119)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 108, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_9__len__, 0, __pyx_n_s_ImmutableMapping___len, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__119)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_len, __pyx_t_9) < 0) __PYX_ERR(0, 108, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_len, __pyx_t_9) < 0) __PYX_ERR(0, 109, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/etree.pyx":111
+  /* "lxml/etree.pyx":112
  *         return 0
  * 
  *     def __iter__(self):             # <<<<<<<<<<<<<<
  *         return ITER_EMPTY
  *     iterkeys = itervalues = iteritems = __iter__
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_11__iter__, 0, __pyx_n_s_ImmutableMapping___iter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__121)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 111, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ImmutableMapping_11__iter__, 0, __pyx_n_s_ImmutableMapping___iter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__121)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_iter_2, __pyx_t_9) < 0) __PYX_ERR(0, 111, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_iter_2, __pyx_t_9) < 0) __PYX_ERR(0, 112, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/etree.pyx":113
+  /* "lxml/etree.pyx":114
  *     def __iter__(self):
  *         return ITER_EMPTY
  *     iterkeys = itervalues = iteritems = __iter__             # <<<<<<<<<<<<<<
@@ -255102,65 +255188,64 @@ if (!__Pyx_RefNanny) {
     PyErr_Clear();
     __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_iter_2);
   }
-  if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 113, __pyx_L1_error)
+  if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 114, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_iterkeys, __pyx_t_9) < 0) __PYX_ERR(0, 113, __pyx_L1_error)
-  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_itervalues, __pyx_t_9) < 0) __PYX_ERR(0, 113, __pyx_L1_error)
-  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_iteritems, __pyx_t_9) < 0) __PYX_ERR(0, 113, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_iterkeys, __pyx_t_9) < 0) __PYX_ERR(0, 114, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_itervalues, __pyx_t_9) < 0) __PYX_ERR(0, 114, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_iteritems, __pyx_t_9) < 0) __PYX_ERR(0, 114, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/etree.pyx":95
+  /* "lxml/etree.pyx":96
  *     from collections import MutableMapping  # Py2.7
  * 
  * class _ImmutableMapping(MutableMapping):             # <<<<<<<<<<<<<<
  *     def __getitem__(self, key):
  *         raise KeyError, key
  */
-  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_ImmutableMapping, __pyx_t_1, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 95, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ImmutableMapping, __pyx_t_7, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 96, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ImmutableMapping, __pyx_t_9) < 0) __PYX_ERR(0, 95, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ImmutableMapping, __pyx_t_9) < 0) __PYX_ERR(0, 96, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":115
+  /* "lxml/etree.pyx":116
  *     iterkeys = itervalues = iteritems = __iter__
  * 
  * cdef object IMMUTABLE_EMPTY_MAPPING = _ImmutableMapping()             # <<<<<<<<<<<<<<
- * del MutableMapping, _ImmutableMapping
+ * del _ImmutableMapping
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ImmutableMapping); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 115, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_ImmutableMapping); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 116, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree_IMMUTABLE_EMPTY_MAPPING);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_IMMUTABLE_EMPTY_MAPPING, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_IMMUTABLE_EMPTY_MAPPING, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":116
+  /* "lxml/etree.pyx":117
  * 
  * cdef object IMMUTABLE_EMPTY_MAPPING = _ImmutableMapping()
- * del MutableMapping, _ImmutableMapping             # <<<<<<<<<<<<<<
+ * del _ImmutableMapping             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MutableMapping) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ImmutableMapping) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ImmutableMapping) < 0) __PYX_ERR(0, 117, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":134
+  /* "lxml/etree.pyx":135
  * 
  * # make the compiled-in debug state publicly available
  * DEBUG = __DEBUG             # <<<<<<<<<<<<<<
  * 
  * # A struct to store a cached qualified tag name+href pair.
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG, __pyx_int_1) < 0) __PYX_ERR(0, 134, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG, __pyx_int_1) < 0) __PYX_ERR(0, 135, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":145
+  /* "lxml/etree.pyx":146
  * 
  * # global per-thread setup
  * tree.xmlThrDefIndentTreeOutput(1)             # <<<<<<<<<<<<<<
@@ -255169,7 +255254,7 @@ if (!__Pyx_RefNanny) {
  */
   (void)(xmlThrDefIndentTreeOutput(1));
 
-  /* "lxml/etree.pyx":146
+  /* "lxml/etree.pyx":147
  * # global per-thread setup
  * tree.xmlThrDefIndentTreeOutput(1)
  * tree.xmlThrDefLineNumbersDefaultValue(1)             # <<<<<<<<<<<<<<
@@ -255178,7 +255263,7 @@ if (!__Pyx_RefNanny) {
  */
   (void)(xmlThrDefLineNumbersDefaultValue(1));
 
-  /* "lxml/etree.pyx":148
+  /* "lxml/etree.pyx":149
  * tree.xmlThrDefLineNumbersDefaultValue(1)
  * 
  * _initThreadLogging()             # <<<<<<<<<<<<<<
@@ -255187,7 +255272,7 @@ if (!__Pyx_RefNanny) {
  */
   __pyx_f_4lxml_5etree__initThreadLogging();
 
-  /* "lxml/etree.pyx":151
+  /* "lxml/etree.pyx":152
  * 
  * # initialize parser (and threading)
  * xmlparser.xmlInitParser()             # <<<<<<<<<<<<<<
@@ -255196,149 +255281,149 @@ if (!__Pyx_RefNanny) {
  */
   xmlInitParser();
 
-  /* "lxml/etree.pyx":154
+  /* "lxml/etree.pyx":155
  * 
  * # filename encoding
  * cdef bytes _FILENAME_ENCODING = (sys.getfilesystemencoding() or sys.getdefaultencoding() or 'ascii').encode("UTF-8")             # <<<<<<<<<<<<<<
  * cdef char* _C_FILENAME_ENCODING = _cstr(_FILENAME_ENCODING)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_getfilesystemencoding); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 154, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_getfilesystemencoding); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 155, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 154, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 155, __pyx_L1_error)
   if (!__pyx_t_10) {
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   } else {
     __Pyx_INCREF(__pyx_t_2);
-    __pyx_t_7 = __pyx_t_2;
+    __pyx_t_1 = __pyx_t_2;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     goto __pyx_L10_bool_binop_done;
   }
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_getdefaultencoding); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 154, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_getdefaultencoding); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 155, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 154, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 155, __pyx_L1_error)
   if (!__pyx_t_10) {
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   } else {
-    __Pyx_INCREF(__pyx_t_1);
-    __pyx_t_7 = __pyx_t_1;
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_INCREF(__pyx_t_7);
+    __pyx_t_1 = __pyx_t_7;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L10_bool_binop_done;
   }
   __Pyx_INCREF(__pyx_n_s_ascii);
-  __pyx_t_7 = __pyx_n_s_ascii;
+  __pyx_t_1 = __pyx_n_s_ascii;
   __pyx_L10_bool_binop_done:;
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_encode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__122, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 154, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_encode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(PyBytes_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 154, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__122, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 155, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 155, __pyx_L1_error)
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__FILENAME_ENCODING);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__FILENAME_ENCODING, ((PyObject*)__pyx_t_7));
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__FILENAME_ENCODING, ((PyObject*)__pyx_t_1));
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":155
+  /* "lxml/etree.pyx":156
  * # filename encoding
  * cdef bytes _FILENAME_ENCODING = (sys.getfilesystemencoding() or sys.getdefaultencoding() or 'ascii').encode("UTF-8")
  * cdef char* _C_FILENAME_ENCODING = _cstr(_FILENAME_ENCODING)             # <<<<<<<<<<<<<<
  * 
  * # set up some default namespace prefixes
  */
-  __pyx_t_7 = __pyx_v_4lxml_5etree__FILENAME_ENCODING;
-  __Pyx_INCREF(__pyx_t_7);
-  __pyx_v_4lxml_5etree__C_FILENAME_ENCODING = PyBytes_AS_STRING(__pyx_t_7);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __pyx_v_4lxml_5etree__FILENAME_ENCODING;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_4lxml_5etree__C_FILENAME_ENCODING = PyBytes_AS_STRING(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":159
+  /* "lxml/etree.pyx":160
  * # set up some default namespace prefixes
  * cdef dict _DEFAULT_NAMESPACE_PREFIXES = {
  *     b"http://www.w3.org/XML/1998/namespace": b'xml',             # <<<<<<<<<<<<<<
  *     b"http://www.w3.org/1999/xhtml": b"html",
  *     b"http://www.w3.org/1999/XSL/Transform": b"xsl",
  */
-  __pyx_t_7 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 159, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_b_http_www_w3_org_XML_1998_namespa, __pyx_n_b_xml) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_b_http_www_w3_org_1999_xhtml, __pyx_n_b_html) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_b_http_www_w3_org_1999_XSL_Transfo, __pyx_n_b_xsl) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_b_http_www_w3_org_1999_02_22_rdf_s, __pyx_n_b_rdf) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_b_http_schemas_xmlsoap_org_wsdl, __pyx_n_b_wsdl) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_b_http_www_w3_org_2001_XMLSchema, __pyx_n_b_xs) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_b_http_www_w3_org_2001_XMLSchema_i, __pyx_n_b_xsi) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_b_http_purl_org_dc_elements_1_1, __pyx_n_b_dc) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_b_http_codespeak_net_lxml_objectif, __pyx_n_b_py) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_b_http_www_w3_org_XML_1998_namespa, __pyx_n_b_xml) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_b_http_www_w3_org_1999_xhtml, __pyx_n_b_html) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_b_http_www_w3_org_1999_XSL_Transfo, __pyx_n_b_xsl) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_b_http_www_w3_org_1999_02_22_rdf_s, __pyx_n_b_rdf) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_b_http_schemas_xmlsoap_org_wsdl, __pyx_n_b_wsdl) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_b_http_www_w3_org_2001_XMLSchema, __pyx_n_b_xs) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_b_http_www_w3_org_2001_XMLSchema_i, __pyx_n_b_xsi) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_b_http_purl_org_dc_elements_1_1, __pyx_n_b_dc) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_b_http_codespeak_net_lxml_objectif, __pyx_n_b_py) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES, ((PyObject*)__pyx_t_7));
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES, ((PyObject*)__pyx_t_1));
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":175
+  /* "lxml/etree.pyx":176
  * # To avoid runtime encoding overhead, we keep a Unicode copy
  * # of the uri-prefix mapping as (str, str) items view (list in Py2).
  * cdef object _DEFAULT_NAMESPACE_PREFIXES_ITEMS = []             # <<<<<<<<<<<<<<
  * 
  * cdef _update_default_namespace_prefixes_items():
  */
-  __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 175, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES_ITEMS);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES_ITEMS, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES_ITEMS, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":185
+  /* "lxml/etree.pyx":186
  *     }.items()
  * 
  * _update_default_namespace_prefixes_items()             # <<<<<<<<<<<<<<
  * 
  * cdef object _check_internal_prefix = re.compile(b"ns\d+$").match
  */
-  __pyx_t_7 = __pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 185, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __pyx_f_4lxml_5etree__update_default_namespace_prefixes_items(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 186, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":187
+  /* "lxml/etree.pyx":188
  * _update_default_namespace_prefixes_items()
  * 
  * cdef object _check_internal_prefix = re.compile(b"ns\d+$").match             # <<<<<<<<<<<<<<
  * 
  * def register_namespace(prefix, uri):
  */
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 187, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__123, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 187, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_match); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 187, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__123, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_match); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__check_internal_prefix);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__check_internal_prefix, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__check_internal_prefix, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":189
+  /* "lxml/etree.pyx":190
  * cdef object _check_internal_prefix = re.compile(b"ns\d+$").match
  * 
  * def register_namespace(prefix, uri):             # <<<<<<<<<<<<<<
  *     u"""Registers a namespace prefix that newly created Elements in that
  *     namespace will use.  The registry is global, and any existing
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_1register_namespace, 0, __pyx_n_s_register_namespace, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__125)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 189, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_register_namespace, __pyx_t_7) < 0) __PYX_ERR(0, 189, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_1register_namespace, 0, __pyx_n_s_register_namespace, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__125)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 190, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_register_namespace, __pyx_t_1) < 0) __PYX_ERR(0, 190, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":226
+  /* "lxml/etree.pyx":227
  *             self.error_log = error_log.copy()
  * 
  * cdef object _Error = Error             # <<<<<<<<<<<<<<
@@ -255350,34 +255435,34 @@ if (!__Pyx_RefNanny) {
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__Error, ((PyObject *)__pyx_ptype_4lxml_5etree_Error));
   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_4lxml_5etree_Error));
 
-  /* "lxml/etree.pyx":230
+  /* "lxml/etree.pyx":231
  * 
  * # superclass for all syntax errors
  * class LxmlSyntaxError(LxmlError, SyntaxError):             # <<<<<<<<<<<<<<
  *     """Base class for all syntax errors.
  *     """
  */
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 230, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_5etree_LxmlError));
   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_4lxml_5etree_LxmlError));
-  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_ptype_4lxml_5etree_LxmlError));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_ptype_4lxml_5etree_LxmlError));
   __Pyx_INCREF(__pyx_builtin_SyntaxError);
   __Pyx_GIVEREF(__pyx_builtin_SyntaxError);
-  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_builtin_SyntaxError);
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_7, __pyx_n_s_LxmlSyntaxError, __pyx_n_s_LxmlSyntaxError, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Base_class_for_all_syntax_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L1_error)
+  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_builtin_SyntaxError);
+  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 231, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_1, __pyx_n_s_LxmlSyntaxError, __pyx_n_s_LxmlSyntaxError, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Base_class_for_all_syntax_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 231, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_LxmlSyntaxError, __pyx_t_7, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 230, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_LxmlSyntaxError, __pyx_t_1, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 231, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LxmlSyntaxError, __pyx_t_9) < 0) __PYX_ERR(0, 230, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LxmlSyntaxError, __pyx_t_9) < 0) __PYX_ERR(0, 231, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":270
+  /* "lxml/etree.pyx":271
  * 
  * cdef int _LIBXML_VERSION_INT
  * try:             # <<<<<<<<<<<<<<
@@ -255393,53 +255478,53 @@ if (!__Pyx_RefNanny) {
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "lxml/etree.pyx":272
+      /* "lxml/etree.pyx":273
  * try:
  *     _LIBXML_VERSION_INT = int(
  *         re.match(u'[0-9]+', (<unsigned char*>tree.xmlParserVersion).decode("ascii")).group(0))             # <<<<<<<<<<<<<<
  * except Exception:
  *     print u"Unknown libxml2 version: %s" % (<unsigned char*>tree.xmlParserVersion).decode("latin1")
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_match); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 272, __pyx_L13_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_11 = ((unsigned char *)xmlParserVersion);
-      __pyx_t_1 = __Pyx_decode_c_string(((char const *)__pyx_t_11), 0, strlen(((char const *)__pyx_t_11)), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L13_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_match); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L13_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L13_error)
+      __pyx_t_11 = ((unsigned char *)xmlParserVersion);
+      __pyx_t_7 = __Pyx_decode_c_string(((char const *)__pyx_t_11), 0, strlen(((char const *)__pyx_t_11)), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L13_error)
+      __Pyx_GOTREF(__pyx_t_7);
+      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L13_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_INCREF(__pyx_kp_u_0_9);
       __Pyx_GIVEREF(__pyx_kp_u_0_9);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_0_9);
-      __Pyx_INCREF(__pyx_t_1);
-      __Pyx_GIVEREF(__pyx_t_1);
-      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L13_error)
-      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_INCREF(__pyx_t_7);
+      __Pyx_GIVEREF(__pyx_t_7);
+      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L13_error)
+      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L13_error)
+      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L13_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__126, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L13_error)
-      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__126, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L13_error)
+      __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "lxml/etree.pyx":271
+      /* "lxml/etree.pyx":272
  * cdef int _LIBXML_VERSION_INT
  * try:
  *     _LIBXML_VERSION_INT = int(             # <<<<<<<<<<<<<<
  *         re.match(u'[0-9]+', (<unsigned char*>tree.xmlParserVersion).decode("ascii")).group(0))
  * except Exception:
  */
-      __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L13_error)
+      __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L13_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 271, __pyx_L13_error)
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 272, __pyx_L13_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_v_4lxml_5etree__LIBXML_VERSION_INT = __pyx_t_6;
 
-      /* "lxml/etree.pyx":270
+      /* "lxml/etree.pyx":271
  * 
  * cdef int _LIBXML_VERSION_INT
  * try:             # <<<<<<<<<<<<<<
@@ -255458,7 +255543,7 @@ if (!__Pyx_RefNanny) {
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "lxml/etree.pyx":273
+    /* "lxml/etree.pyx":274
  *     _LIBXML_VERSION_INT = int(
  *         re.match(u'[0-9]+', (<unsigned char*>tree.xmlParserVersion).decode("ascii")).group(0))
  * except Exception:             # <<<<<<<<<<<<<<
@@ -255468,12 +255553,12 @@ if (!__Pyx_RefNanny) {
     __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
     if (__pyx_t_6) {
       __Pyx_AddTraceback("lxml.etree", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(0, 273, __pyx_L15_except_error)
+      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_7, &__pyx_t_1) < 0) __PYX_ERR(0, 274, __pyx_L15_except_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_GOTREF(__pyx_t_1);
 
-      /* "lxml/etree.pyx":274
+      /* "lxml/etree.pyx":275
  *         re.match(u'[0-9]+', (<unsigned char*>tree.xmlParserVersion).decode("ascii")).group(0))
  * except Exception:
  *     print u"Unknown libxml2 version: %s" % (<unsigned char*>tree.xmlParserVersion).decode("latin1")             # <<<<<<<<<<<<<<
@@ -255481,15 +255566,15 @@ if (!__Pyx_RefNanny) {
  * 
  */
       __pyx_t_11 = ((unsigned char *)xmlParserVersion);
-      __pyx_t_9 = __Pyx_decode_c_string(((char const *)__pyx_t_11), 0, strlen(((char const *)__pyx_t_11)), NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 274, __pyx_L15_except_error)
+      __pyx_t_9 = __Pyx_decode_c_string(((char const *)__pyx_t_11), 0, strlen(((char const *)__pyx_t_11)), NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 275, __pyx_L15_except_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_Unknown_libxml2_version_s, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 274, __pyx_L15_except_error)
+      __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_Unknown_libxml2_version_s, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 275, __pyx_L15_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      if (__Pyx_PrintOne(0, __pyx_t_8) < 0) __PYX_ERR(0, 274, __pyx_L15_except_error)
+      if (__Pyx_PrintOne(0, __pyx_t_8) < 0) __PYX_ERR(0, 275, __pyx_L15_except_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "lxml/etree.pyx":275
+      /* "lxml/etree.pyx":276
  * except Exception:
  *     print u"Unknown libxml2 version: %s" % (<unsigned char*>tree.xmlParserVersion).decode("latin1")
  *     _LIBXML_VERSION_INT = 0             # <<<<<<<<<<<<<<
@@ -255498,14 +255583,14 @@ if (!__Pyx_RefNanny) {
  */
       __pyx_v_4lxml_5etree__LIBXML_VERSION_INT = 0;
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       goto __pyx_L14_exception_handled;
     }
     goto __pyx_L15_except_error;
     __pyx_L15_except_error:;
 
-    /* "lxml/etree.pyx":270
+    /* "lxml/etree.pyx":271
  * 
  * cdef int _LIBXML_VERSION_INT
  * try:             # <<<<<<<<<<<<<<
@@ -255525,56 +255610,56 @@ if (!__Pyx_RefNanny) {
     __pyx_L18_try_end:;
   }
 
-  /* "lxml/etree.pyx":277
+  /* "lxml/etree.pyx":278
  *     _LIBXML_VERSION_INT = 0
  * 
  * LIBXML_VERSION = __unpackIntVersion(_LIBXML_VERSION_INT)             # <<<<<<<<<<<<<<
  * LIBXML_COMPILED_VERSION = __unpackIntVersion(tree.LIBXML_VERSION)
  * LXML_VERSION = __unpackDottedVersion(tree.LXML_VERSION_STRING)
  */
-  __pyx_t_7 = __pyx_f_4lxml_5etree___unpackIntVersion(__pyx_v_4lxml_5etree__LIBXML_VERSION_INT); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 277, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LIBXML_VERSION, __pyx_t_7) < 0) __PYX_ERR(0, 277, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __pyx_f_4lxml_5etree___unpackIntVersion(__pyx_v_4lxml_5etree__LIBXML_VERSION_INT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 278, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LIBXML_VERSION, __pyx_t_1) < 0) __PYX_ERR(0, 278, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":278
+  /* "lxml/etree.pyx":279
  * 
  * LIBXML_VERSION = __unpackIntVersion(_LIBXML_VERSION_INT)
  * LIBXML_COMPILED_VERSION = __unpackIntVersion(tree.LIBXML_VERSION)             # <<<<<<<<<<<<<<
  * LXML_VERSION = __unpackDottedVersion(tree.LXML_VERSION_STRING)
  * 
  */
-  __pyx_t_7 = __pyx_f_4lxml_5etree___unpackIntVersion(LIBXML_VERSION); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 278, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LIBXML_COMPILED_VERSION, __pyx_t_7) < 0) __PYX_ERR(0, 278, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __pyx_f_4lxml_5etree___unpackIntVersion(LIBXML_VERSION); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LIBXML_COMPILED_VERSION, __pyx_t_1) < 0) __PYX_ERR(0, 279, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":279
+  /* "lxml/etree.pyx":280
  * LIBXML_VERSION = __unpackIntVersion(_LIBXML_VERSION_INT)
  * LIBXML_COMPILED_VERSION = __unpackIntVersion(tree.LIBXML_VERSION)
  * LXML_VERSION = __unpackDottedVersion(tree.LXML_VERSION_STRING)             # <<<<<<<<<<<<<<
  * 
  * __version__ = tree.LXML_VERSION_STRING.decode("ascii")
  */
-  __pyx_t_7 = __Pyx_PyBytes_FromString(LXML_VERSION_STRING); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 279, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_1 = __pyx_f_4lxml_5etree___unpackDottedVersion(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBytes_FromString(LXML_VERSION_STRING); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LXML_VERSION, __pyx_t_1) < 0) __PYX_ERR(0, 279, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_4lxml_5etree___unpackDottedVersion(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 280, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LXML_VERSION, __pyx_t_7) < 0) __PYX_ERR(0, 280, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":281
+  /* "lxml/etree.pyx":282
  * LXML_VERSION = __unpackDottedVersion(tree.LXML_VERSION_STRING)
  * 
  * __version__ = tree.LXML_VERSION_STRING.decode("ascii")             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_1 = __Pyx_decode_c_string(LXML_VERSION_STRING, 0, strlen(LXML_VERSION_STRING), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 281, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_version_2, __pyx_t_1) < 0) __PYX_ERR(0, 281, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_decode_c_string(LXML_VERSION_STRING, 0, strlen(LXML_VERSION_STRING), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 282, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_version_2, __pyx_t_7) < 0) __PYX_ERR(0, 282, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/apihelpers.pxi":650
  *     return attributes
@@ -255583,8 +255668,8 @@ if (!__Pyx_RefNanny) {
  *     ur'^(<\?xml[^>]+)\s+encoding\s*=\s*["\'][^"\']*["\'](\s*\?>|)', re.U)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 650, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 650, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
 
   /* "src/lxml/apihelpers.pxi":651
  * 
@@ -255593,8 +255678,8 @@ if (!__Pyx_RefNanny) {
  * 
  * cdef object __REPLACE_XML_ENCODING = __RE_XML_ENCODING.sub
  */
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_U); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 651, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_U); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 651, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "src/lxml/apihelpers.pxi":650
  *     return attributes
@@ -255608,17 +255693,17 @@ if (!__Pyx_RefNanny) {
   __Pyx_INCREF(__pyx_kp_u_xml_s_encoding_s_s_s);
   __Pyx_GIVEREF(__pyx_kp_u_xml_s_encoding_s_s_s);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_xml_s_encoding_s_s_s);
-  __Pyx_GIVEREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
-  __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 650, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 650, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree___RE_XML_ENCODING);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
   /* "src/lxml/apihelpers.pxi":653
  *     ur'^(<\?xml[^>]+)\s+encoding\s*=\s*["\'][^"\']*["\'](\s*\?>|)', re.U)
@@ -255627,12 +255712,12 @@ if (!__Pyx_RefNanny) {
  * cdef object __HAS_XML_ENCODING = __RE_XML_ENCODING.match
  * 
  */
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s_sub); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 653, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s_sub); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 653, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree___REPLACE_XML_ENCODING);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___REPLACE_XML_ENCODING, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___REPLACE_XML_ENCODING, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
   /* "src/lxml/apihelpers.pxi":654
  * 
@@ -255641,12 +255726,12 @@ if (!__Pyx_RefNanny) {
  * 
  * cdef object _stripEncodingDeclaration(object xml_string):
  */
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s_match); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 654, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s_match); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 654, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree___HAS_XML_ENCODING);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___HAS_XML_ENCODING, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___HAS_XML_ENCODING, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
   /* "src/lxml/apihelpers.pxi":1586
  *     return REL_FILE_PATH
@@ -255655,12 +255740,12 @@ if (!__Pyx_RefNanny) {
  * 
  * cdef object _getFSPathOrObject(object obj):
  */
-  __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_builtin_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1586, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_builtin_object); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1586, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__NO_FSPATH);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__NO_FSPATH, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__NO_FSPATH, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
   /* "src/lxml/xmlerror.pxi":11
  * # module level API functions
@@ -255669,10 +255754,10 @@ if (!__Pyx_RefNanny) {
  *     u"""clear_error_log()
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_3clear_error_log, 0, __pyx_n_s_clear_error_log_2, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__127)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 11, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clear_error_log_2, __pyx_t_7) < 0) __PYX_ERR(6, 11, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_3clear_error_log, 0, __pyx_n_s_clear_error_log_2, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__127)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clear_error_log_2, __pyx_t_1) < 0) __PYX_ERR(6, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/xmlerror.pxi":191
  *         self.last_error = last_error
@@ -255681,10 +255766,10 @@ if (!__Pyx_RefNanny) {
  *         return _BaseErrorLog(self._first_error, self.last_error)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_BaseErrorLog_3copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseErrorLog_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__129)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 191, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseErrorLog->tp_dict, __pyx_n_s_copy, __pyx_t_7) < 0) __PYX_ERR(6, 191, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_BaseErrorLog_3copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseErrorLog_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__129)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 191, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseErrorLog->tp_dict, __pyx_n_s_copy, __pyx_t_1) < 0) __PYX_ERR(6, 191, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__BaseErrorLog);
 
   /* "src/lxml/xmlerror.pxi":197
@@ -255694,10 +255779,10 @@ if (!__Pyx_RefNanny) {
  *         pass
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_BaseErrorLog_7receive, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseErrorLog_receive, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__131)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 197, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseErrorLog->tp_dict, __pyx_n_s_receive, __pyx_t_7) < 0) __PYX_ERR(6, 197, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_BaseErrorLog_7receive, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseErrorLog_receive, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__131)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 197, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseErrorLog->tp_dict, __pyx_n_s_receive, __pyx_t_1) < 0) __PYX_ERR(6, 197, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__BaseErrorLog);
 
   /* "src/lxml/xmlerror.pxi":287
@@ -255707,10 +255792,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Creates a shallow copy of this error log.  Reuses the list of
  *         entries.
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_3copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__133)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 287, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_copy, __pyx_t_7) < 0) __PYX_ERR(6, 287, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_3copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__133)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 287, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_copy, __pyx_t_1) < 0) __PYX_ERR(6, 287, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ListErrorLog);
 
   /* "src/lxml/xmlerror.pxi":325
@@ -255720,10 +255805,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Filter the errors by the given domains and return a new error log
  *         containing the matches.
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_17filter_domains, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_domains, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__135)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 325, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_domains, __pyx_t_7) < 0) __PYX_ERR(6, 325, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_17filter_domains, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_domains, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__135)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 325, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_domains, __pyx_t_1) < 0) __PYX_ERR(6, 325, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ListErrorLog);
 
   /* "src/lxml/xmlerror.pxi":335
@@ -255733,10 +255818,10 @@ if (!__Pyx_RefNanny) {
  *         u"""filter_types(self, types)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_19filter_types, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_types, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__137)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 335, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_types, __pyx_t_7) < 0) __PYX_ERR(6, 335, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_19filter_types, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_types, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__137)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 335, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_types, __pyx_t_1) < 0) __PYX_ERR(6, 335, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ListErrorLog);
 
   /* "src/lxml/xmlerror.pxi":347
@@ -255746,10 +255831,10 @@ if (!__Pyx_RefNanny) {
  *         u"""filter_levels(self, levels)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_21filter_levels, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_levels, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__139)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 347, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_levels, __pyx_t_7) < 0) __PYX_ERR(6, 347, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_21filter_levels, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_levels, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__139)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 347, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_levels, __pyx_t_1) < 0) __PYX_ERR(6, 347, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ListErrorLog);
 
   /* "src/lxml/xmlerror.pxi":359
@@ -255759,10 +255844,10 @@ if (!__Pyx_RefNanny) {
  *         u"""filter_from_level(self, level)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_23filter_from_level, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_from_level, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__141)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 359, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_from_level, __pyx_t_7) < 0) __PYX_ERR(6, 359, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_23filter_from_level, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_from_level, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__141)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 359, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_from_level, __pyx_t_1) < 0) __PYX_ERR(6, 359, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ListErrorLog);
 
   /* "src/lxml/xmlerror.pxi":368
@@ -255772,10 +255857,10 @@ if (!__Pyx_RefNanny) {
  *         u"""filter_from_fatals(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_25filter_from_fatals, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_from_fatals, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__143)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 368, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_from_fatals, __pyx_t_7) < 0) __PYX_ERR(6, 368, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_25filter_from_fatals, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_from_fatals, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__143)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 368, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_from_fatals, __pyx_t_1) < 0) __PYX_ERR(6, 368, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ListErrorLog);
 
   /* "src/lxml/xmlerror.pxi":375
@@ -255785,10 +255870,10 @@ if (!__Pyx_RefNanny) {
  *         u"""filter_from_errors(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_27filter_from_errors, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_from_errors, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__145)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 375, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_from_errors, __pyx_t_7) < 0) __PYX_ERR(6, 375, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_27filter_from_errors, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_from_errors, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__145)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 375, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_from_errors, __pyx_t_1) < 0) __PYX_ERR(6, 375, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ListErrorLog);
 
   /* "src/lxml/xmlerror.pxi":382
@@ -255798,10 +255883,10 @@ if (!__Pyx_RefNanny) {
  *         u"""filter_from_warnings(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_29filter_from_warnings, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_from_warnin, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__147)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 382, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_from_warnings, __pyx_t_7) < 0) __PYX_ERR(6, 382, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13_ListErrorLog_29filter_from_warnings, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ListErrorLog_filter_from_warnin, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__147)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 382, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ListErrorLog->tp_dict, __pyx_n_s_filter_from_warnings, __pyx_t_1) < 0) __PYX_ERR(6, 382, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ListErrorLog);
 
   /* "src/lxml/xmlerror.pxi":441
@@ -255811,10 +255896,10 @@ if (!__Pyx_RefNanny) {
  *         #  TODO: make this a cdef function when Cython supports it
  *         self.disconnect()
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_ErrorLog_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ErrorLog___exit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__149)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 441, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog->tp_dict, __pyx_n_s_exit, __pyx_t_7) < 0) __PYX_ERR(6, 441, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_ErrorLog_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ErrorLog___exit, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__149)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 441, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog->tp_dict, __pyx_n_s_exit, __pyx_t_1) < 0) __PYX_ERR(6, 441, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ErrorLog);
 
   /* "src/lxml/xmlerror.pxi":461
@@ -255824,10 +255909,10 @@ if (!__Pyx_RefNanny) {
  *         self._first_error = None
  *         self.last_error = None
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_ErrorLog_7clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ErrorLog_clear, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__151)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 461, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog->tp_dict, __pyx_n_s_clear, __pyx_t_7) < 0) __PYX_ERR(6, 461, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_ErrorLog_7clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ErrorLog_clear, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__151)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 461, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog->tp_dict, __pyx_n_s_clear, __pyx_t_1) < 0) __PYX_ERR(6, 461, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ErrorLog);
 
   /* "src/lxml/xmlerror.pxi":467
@@ -255837,10 +255922,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Creates a shallow copy of this error log and the list of entries.
  *         """
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_ErrorLog_9copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ErrorLog_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__153)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 467, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog->tp_dict, __pyx_n_s_copy, __pyx_t_7) < 0) __PYX_ERR(6, 467, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_ErrorLog_9copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ErrorLog_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__153)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 467, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog->tp_dict, __pyx_n_s_copy, __pyx_t_1) < 0) __PYX_ERR(6, 467, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ErrorLog);
 
   /* "src/lxml/xmlerror.pxi":477
@@ -255850,10 +255935,10 @@ if (!__Pyx_RefNanny) {
  *         if self._first_error is None and entry.level >= xmlerror.XML_ERR_ERROR:
  *             self._first_error = entry
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_ErrorLog_13receive, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ErrorLog_receive, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__155)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 477, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog->tp_dict, __pyx_n_s_receive, __pyx_t_7) < 0) __PYX_ERR(6, 477, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_ErrorLog_13receive, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ErrorLog_receive, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__155)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 477, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ErrorLog->tp_dict, __pyx_n_s_receive, __pyx_t_1) < 0) __PYX_ERR(6, 477, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ErrorLog);
 
   /* "src/lxml/xmlerror.pxi":487
@@ -255863,10 +255948,10 @@ if (!__Pyx_RefNanny) {
  *         if entry.domain in self._accepted_domains:
  *             _ErrorLog.receive(self, entry)
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_15_DomainErrorLog_3receive, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DomainErrorLog_receive, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__157)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 487, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__DomainErrorLog->tp_dict, __pyx_n_s_receive, __pyx_t_7) < 0) __PYX_ERR(6, 487, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_15_DomainErrorLog_3receive, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DomainErrorLog_receive, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__157)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 487, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__DomainErrorLog->tp_dict, __pyx_n_s_receive, __pyx_t_1) < 0) __PYX_ERR(6, 487, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__DomainErrorLog);
 
   /* "src/lxml/xmlerror.pxi":497
@@ -255876,10 +255961,10 @@ if (!__Pyx_RefNanny) {
  *         if self._first_error is None and entry.level >= xmlerror.XML_ERR_ERROR:
  *             self._first_error = entry
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_RotatingErrorLog_3receive, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_RotatingErrorLog_receive, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__159)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 497, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__RotatingErrorLog->tp_dict, __pyx_n_s_receive, __pyx_t_7) < 0) __PYX_ERR(6, 497, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_RotatingErrorLog_3receive, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_RotatingErrorLog_receive, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__159)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 497, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__RotatingErrorLog->tp_dict, __pyx_n_s_receive, __pyx_t_1) < 0) __PYX_ERR(6, 497, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__RotatingErrorLog);
 
   /* "src/lxml/xmlerror.pxi":548
@@ -255889,10 +255974,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Dummy method that returns an empty error log.
  *         """
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10PyErrorLog_3copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyErrorLog_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__161)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 548, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_PyErrorLog->tp_dict, __pyx_n_s_copy, __pyx_t_7) < 0) __PYX_ERR(6, 548, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10PyErrorLog_3copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyErrorLog_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__161)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 548, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_PyErrorLog->tp_dict, __pyx_n_s_copy, __pyx_t_1) < 0) __PYX_ERR(6, 548, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_PyErrorLog);
 
   /* "src/lxml/xmlerror.pxi":553
@@ -255902,10 +255987,10 @@ if (!__Pyx_RefNanny) {
  *         u"""log(self, log_entry, message, *args)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10PyErrorLog_5log, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyErrorLog_log, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__163)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 553, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_PyErrorLog->tp_dict, __pyx_n_s_log, __pyx_t_7) < 0) __PYX_ERR(6, 553, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10PyErrorLog_5log, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyErrorLog_log, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__163)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 553, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_PyErrorLog->tp_dict, __pyx_n_s_log, __pyx_t_1) < 0) __PYX_ERR(6, 553, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_PyErrorLog);
 
   /* "src/lxml/xmlerror.pxi":570
@@ -255915,10 +256000,10 @@ if (!__Pyx_RefNanny) {
  *         u"""receive(self, log_entry)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10PyErrorLog_7receive, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyErrorLog_receive, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__165)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 570, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_PyErrorLog->tp_dict, __pyx_n_s_receive, __pyx_t_7) < 0) __PYX_ERR(6, 570, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10PyErrorLog_7receive, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyErrorLog_receive, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__165)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 570, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_PyErrorLog->tp_dict, __pyx_n_s_receive, __pyx_t_1) < 0) __PYX_ERR(6, 570, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_PyErrorLog);
 
   /* "src/lxml/xmlerror.pxi":586
@@ -255928,12 +256013,12 @@ if (!__Pyx_RefNanny) {
  * 
  * 
  */
-  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__RotatingErrorLog), __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 586, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree__RotatingErrorLog), __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 586, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree___GLOBAL_ERROR_LOG));
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___GLOBAL_ERROR_LOG, ((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_t_7));
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___GLOBAL_ERROR_LOG, ((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_t_1));
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
   /* "src/lxml/xmlerror.pxi":620
  * 
@@ -255942,10 +256027,10 @@ if (!__Pyx_RefNanny) {
  *     u"""use_global_python_log(log)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_5use_global_python_log, 0, __pyx_n_s_use_global_python_log, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__167)); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 620, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_use_global_python_log, __pyx_t_7) < 0) __PYX_ERR(6, 620, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_5use_global_python_log, 0, __pyx_n_s_use_global_python_log, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__167)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 620, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_use_global_python_log, __pyx_t_1) < 0) __PYX_ERR(6, 620, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/xmlerror.pxi":808
  * 
@@ -255954,16 +256039,16 @@ if (!__Pyx_RefNanny) {
  *     """Libxml2 error levels"""
  * 
  */
-  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__168); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 808, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_tuple__168, __pyx_n_s_ErrorLevels, __pyx_n_s_ErrorLevels, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Libxml2_error_levels); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 808, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_ErrorLevels, __pyx_tuple__168, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 808, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__168); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ErrorLevels, __pyx_t_1) < 0) __PYX_ERR(6, 808, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__168, __pyx_n_s_ErrorLevels, __pyx_n_s_ErrorLevels, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Libxml2_error_levels); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 808, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ErrorLevels, __pyx_tuple__168, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 808, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ErrorLevels, __pyx_t_7) < 0) __PYX_ERR(6, 808, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/xmlerror.pxi":811
  *     """Libxml2 error levels"""
@@ -255972,16 +256057,16 @@ if (!__Pyx_RefNanny) {
  *     """Libxml2 error domains"""
  * 
  */
-  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__169); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 811, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_tuple__169, __pyx_n_s_ErrorDomains, __pyx_n_s_ErrorDomains, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Libxml2_error_domains); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 811, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_ErrorDomains, __pyx_tuple__169, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 811, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__169); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 811, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ErrorDomains, __pyx_t_1) < 0) __PYX_ERR(6, 811, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__169, __pyx_n_s_ErrorDomains, __pyx_n_s_ErrorDomains, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Libxml2_error_domains); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 811, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ErrorDomains, __pyx_tuple__169, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 811, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ErrorDomains, __pyx_t_7) < 0) __PYX_ERR(6, 811, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/xmlerror.pxi":814
  *     """Libxml2 error domains"""
@@ -255990,16 +256075,16 @@ if (!__Pyx_RefNanny) {
  *     """Libxml2 error types"""
  * 
  */
-  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__170); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 814, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_tuple__170, __pyx_n_s_ErrorTypes, __pyx_n_s_ErrorTypes, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Libxml2_error_types); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 814, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_ErrorTypes, __pyx_tuple__170, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 814, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__170); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 814, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ErrorTypes, __pyx_t_1) < 0) __PYX_ERR(6, 814, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__170, __pyx_n_s_ErrorTypes, __pyx_n_s_ErrorTypes, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Libxml2_error_types); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 814, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ErrorTypes, __pyx_tuple__170, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 814, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ErrorTypes, __pyx_t_7) < 0) __PYX_ERR(6, 814, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/xmlerror.pxi":817
  *     """Libxml2 error types"""
@@ -256008,16 +256093,16 @@ if (!__Pyx_RefNanny) {
  *     """Libxml2 RelaxNG error types"""
  * 
  */
-  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__171); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 817, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_tuple__171, __pyx_n_s_RelaxNGErrorTypes, __pyx_n_s_RelaxNGErrorTypes, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Libxml2_RelaxNG_error_types); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 817, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_RelaxNGErrorTypes, __pyx_tuple__171, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 817, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__171); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 817, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RelaxNGErrorTypes, __pyx_t_1) < 0) __PYX_ERR(6, 817, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__171, __pyx_n_s_RelaxNGErrorTypes, __pyx_n_s_RelaxNGErrorTypes, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Libxml2_RelaxNG_error_types); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 817, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_RelaxNGErrorTypes, __pyx_tuple__171, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 817, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RelaxNGErrorTypes, __pyx_t_7) < 0) __PYX_ERR(6, 817, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/xmlerror.pxi":825
  * # This section is generated by the script 'update-error-constants.py'.
@@ -256072,1495 +256157,1509 @@ if (!__Pyx_RefNanny) {
  * 
  * __initErrorConstants()             # <<<<<<<<<<<<<<
  */
-  __pyx_t_7 = __pyx_f_4lxml_5etree___initErrorConstants(); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 1648, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __pyx_f_4lxml_5etree___initErrorConstants(); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1648, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":509
+  /* "lxml/etree.pyx":510
  *                    for i in range(30) ])
  * 
  * cdef tuple _PREFIX_CACHE = __initPrefixCache()             # <<<<<<<<<<<<<<
  * 
  * cdef _Document _documentFactory(xmlDoc* c_doc, _BaseParser parser):
  */
-  __pyx_t_7 = __pyx_f_4lxml_5etree___initPrefixCache(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 509, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = __pyx_f_4lxml_5etree___initPrefixCache(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 510, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__PREFIX_CACHE);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__PREFIX_CACHE, ((PyObject*)__pyx_t_7));
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__PREFIX_CACHE, ((PyObject*)__pyx_t_1));
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":523
+  /* "lxml/etree.pyx":524
  * 
  * 
  * cdef object _find_invalid_public_id_characters = re.compile(             # <<<<<<<<<<<<<<
  *     ur"[^\x20\x0D\x0Aa-zA-Z0-9'()+,./:=?;!*#@$_%-]+").search
  * 
  */
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 523, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__172, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 523, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 524, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__172, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 524, __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;
 
-  /* "lxml/etree.pyx":524
+  /* "lxml/etree.pyx":525
  * 
  * cdef object _find_invalid_public_id_characters = re.compile(
  *     ur"[^\x20\x0D\x0Aa-zA-Z0-9'()+,./:=?;!*#@$_%-]+").search             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_search); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 524, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_search); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 525, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__find_invalid_public_id_characters);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__find_invalid_public_id_characters, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__find_invalid_public_id_characters, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":557
+  /* "lxml/etree.pyx":558
  *         return  tree.xmlCreateIntSubset(c_doc, c_name, NULL, NULL)
  * 
  *     def clear(self):             # <<<<<<<<<<<<<<
  *         u"""Removes DOCTYPE and internal subset from the document."""
  *         cdef xmlDoc* c_doc = self._doc._c_doc
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7DocInfo_3clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DocInfo_clear, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__174)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 557, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_DocInfo->tp_dict, __pyx_n_s_clear, __pyx_t_7) < 0) __PYX_ERR(0, 557, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7DocInfo_3clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_DocInfo_clear, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__174)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_DocInfo->tp_dict, __pyx_n_s_clear, __pyx_t_1) < 0) __PYX_ERR(0, 558, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_DocInfo);
 
-  /* "lxml/etree.pyx":714
+  /* "lxml/etree.pyx":715
  *     cdef object _tag
  * 
  *     def _init(self):             # <<<<<<<<<<<<<<
  *         u"""_init(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_1_init, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element__init, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__176)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 714, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_init_2, __pyx_t_7) < 0) __PYX_ERR(0, 714, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_1_init, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element__init, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__176)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 715, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_init_2, __pyx_t_1) < 0) __PYX_ERR(0, 715, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":802
+  /* "lxml/etree.pyx":803
  *             _removeNode(self._doc, c_node)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
  *         u"__deepcopy__(self, memo)"
  *         return self.__copy__()
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_9__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element___deepcopy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__178)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 802, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_deepcopy, __pyx_t_7) < 0) __PYX_ERR(0, 802, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_9__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element___deepcopy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__178)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 803, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_deepcopy, __pyx_t_1) < 0) __PYX_ERR(0, 803, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":806
+  /* "lxml/etree.pyx":807
  *         return self.__copy__()
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
  *         u"__copy__(self)"
  *         cdef xmlDoc* c_doc
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_11__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element___copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__180)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 806, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_copy_2, __pyx_t_7) < 0) __PYX_ERR(0, 806, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_11__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element___copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__180)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 807, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_copy_2, __pyx_t_1) < 0) __PYX_ERR(0, 807, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":825
+  /* "lxml/etree.pyx":826
  *         return _elementFactory(new_doc, c_node)
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
  *         u"""set(self, key, value)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_13set, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_set, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__182)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 825, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_set, __pyx_t_7) < 0) __PYX_ERR(0, 825, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_13set, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_set, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__182)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_set, __pyx_t_1) < 0) __PYX_ERR(0, 826, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":835
+  /* "lxml/etree.pyx":836
  *         _setAttributeValue(self, key, value)
  * 
  *     def append(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""append(self, element)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_15append, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_append, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__184)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 835, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_append, __pyx_t_7) < 0) __PYX_ERR(0, 835, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_15append, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_append, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__184)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 836, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_append, __pyx_t_1) < 0) __PYX_ERR(0, 836, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":844
+  /* "lxml/etree.pyx":845
  *         _appendChild(self, element)
  * 
  *     def addnext(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""addnext(self, element)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_17addnext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_addnext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__186)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 844, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_addnext, __pyx_t_7) < 0) __PYX_ERR(0, 844, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_17addnext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_addnext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__186)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 845, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_addnext, __pyx_t_1) < 0) __PYX_ERR(0, 845, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":863
+  /* "lxml/etree.pyx":864
  *         _appendSibling(self, element)
  * 
  *     def addprevious(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""addprevious(self, element)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_19addprevious, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_addprevious, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__188)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 863, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_addprevious, __pyx_t_7) < 0) __PYX_ERR(0, 863, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_19addprevious, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_addprevious, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__188)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 864, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_addprevious, __pyx_t_1) < 0) __PYX_ERR(0, 864, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":882
+  /* "lxml/etree.pyx":883
  *         _prependSibling(self, element)
  * 
  *     def extend(self, elements):             # <<<<<<<<<<<<<<
  *         u"""extend(self, elements)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_21extend, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_extend, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__190)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 882, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_extend, __pyx_t_7) < 0) __PYX_ERR(0, 882, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_21extend, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_extend, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__190)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 883, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_extend, __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_5etree__Element);
 
-  /* "lxml/etree.pyx":895
+  /* "lxml/etree.pyx":896
  *             _appendChild(self, element)
  * 
  *     def clear(self, bint keep_tail=False):             # <<<<<<<<<<<<<<
  *         u"""clear(self, keep_tail=False)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_23clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_clear, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__192)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 895, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_clear, __pyx_t_7) < 0) __PYX_ERR(0, 895, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_23clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_clear, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__192)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 896, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_clear, __pyx_t_1) < 0) __PYX_ERR(0, 896, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":927
+  /* "lxml/etree.pyx":928
  *             c_node = c_node_next
  * 
  *     def insert(self, index: int, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""insert(self, index, element)
  * 
  */
-  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 927, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_index, __pyx_n_u_int) < 0) __PYX_ERR(0, 927, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_25insert, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_insert, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__194)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 927, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 928, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_index, __pyx_n_u_int) < 0) __PYX_ERR(0, 928, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_25insert, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_insert, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__194)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 928, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_7);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_insert, __pyx_t_2) < 0) __PYX_ERR(0, 927, __pyx_L1_error)
+  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_insert, __pyx_t_2) < 0) __PYX_ERR(0, 928, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":947
+  /* "lxml/etree.pyx":948
  *         moveNodeToDocument(self._doc, c_source_doc, element._c_node)
  * 
  *     def remove(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""remove(self, element)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_27remove, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_remove, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__196)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 947, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_27remove, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_remove, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__196)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 948, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_remove, __pyx_t_2) < 0) __PYX_ERR(0, 947, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_remove, __pyx_t_2) < 0) __PYX_ERR(0, 948, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":967
+  /* "lxml/etree.pyx":968
  *         moveNodeToDocument(self._doc, c_node.doc, c_node)
  * 
  *     def replace(self, _Element old_element not None,             # <<<<<<<<<<<<<<
  *                 _Element new_element not None):
  *         u"""replace(self, old_element, new_element)
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_29replace, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_replace, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__198)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 967, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_29replace, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_replace, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__198)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 968, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_replace, __pyx_t_2) < 0) __PYX_ERR(0, 967, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_replace, __pyx_t_2) < 0) __PYX_ERR(0, 968, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1214
+  /* "lxml/etree.pyx":1215
  *         return ElementChildIterator(self)
  * 
  *     def __reversed__(self):             # <<<<<<<<<<<<<<
  *         u"__reversed__(self)"
  *         return ElementChildIterator(self, reversed=True)
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_43__reversed__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element___reversed, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__200)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1214, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_43__reversed__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element___reversed, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__200)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1215, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_reversed_2, __pyx_t_2) < 0) __PYX_ERR(0, 1214, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_reversed_2, __pyx_t_2) < 0) __PYX_ERR(0, 1215, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1218
+  /* "lxml/etree.pyx":1219
  *         return ElementChildIterator(self, reversed=True)
  * 
  *     def index(self, _Element child not None, start: int = None, stop: int = None):             # <<<<<<<<<<<<<<
  *         u"""index(self, child, start=None, stop=None)
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1218, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_start, __pyx_n_u_int) < 0) __PYX_ERR(0, 1218, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_stop, __pyx_n_u_int) < 0) __PYX_ERR(0, 1218, __pyx_L1_error)
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_45index, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_index, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__202)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1218, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_start, __pyx_n_u_int) < 0) __PYX_ERR(0, 1219, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_stop, __pyx_n_u_int) < 0) __PYX_ERR(0, 1219, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_45index, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_index, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__202)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1219, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_1, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_index, __pyx_t_7) < 0) __PYX_ERR(0, 1218, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_index, __pyx_t_1) < 0) __PYX_ERR(0, 1219, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1305
+  /* "lxml/etree.pyx":1306
  *             raise ValueError, u"list.index(x): x not in list"
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
  *         u"""get(self, key, default=None)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_47get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__204)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1305, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_get, __pyx_t_7) < 0) __PYX_ERR(0, 1305, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_47get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__204)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1306, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_get, __pyx_t_1) < 0) __PYX_ERR(0, 1306, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1313
+  /* "lxml/etree.pyx":1314
  *         return _getAttributeValue(self, key, default)
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
  *         u"""keys(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_49keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_keys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__206)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1313, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_keys, __pyx_t_7) < 0) __PYX_ERR(0, 1313, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_49keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_keys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__206)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1314, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_keys, __pyx_t_1) < 0) __PYX_ERR(0, 1314, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1322
+  /* "lxml/etree.pyx":1323
  *         return _collectAttributes(self._c_node, 1)
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
  *         u"""values(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_51values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_values, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__208)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1322, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_values, __pyx_t_7) < 0) __PYX_ERR(0, 1322, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_51values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_values, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__208)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1323, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_values, __pyx_t_1) < 0) __PYX_ERR(0, 1323, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1331
+  /* "lxml/etree.pyx":1332
  *         return _collectAttributes(self._c_node, 2)
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
  *         u"""items(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_53items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__210)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1331, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_items, __pyx_t_7) < 0) __PYX_ERR(0, 1331, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_53items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__210)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_items, __pyx_t_1) < 0) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1340
+  /* "lxml/etree.pyx":1341
  *         return _collectAttributes(self._c_node, 3)
  * 
  *     def getchildren(self):             # <<<<<<<<<<<<<<
  *         u"""getchildren(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_55getchildren, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getchildren, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__212)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1340, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getchildren, __pyx_t_7) < 0) __PYX_ERR(0, 1340, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_55getchildren, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getchildren, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__212)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getchildren, __pyx_t_1) < 0) __PYX_ERR(0, 1341, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1353
+  /* "lxml/etree.pyx":1354
  *         return _collectChildren(self)
  * 
  *     def getparent(self):             # <<<<<<<<<<<<<<
  *         u"""getparent(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_57getparent, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getparent, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__214)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1353, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getparent, __pyx_t_7) < 0) __PYX_ERR(0, 1353, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_57getparent, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getparent, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__214)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1354, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getparent, __pyx_t_1) < 0) __PYX_ERR(0, 1354, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1365
+  /* "lxml/etree.pyx":1366
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def getnext(self):             # <<<<<<<<<<<<<<
  *         u"""getnext(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_59getnext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getnext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__216)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1365, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getnext, __pyx_t_7) < 0) __PYX_ERR(0, 1365, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_59getnext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getnext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__216)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1366, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getnext, __pyx_t_1) < 0) __PYX_ERR(0, 1366, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1377
+  /* "lxml/etree.pyx":1378
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def getprevious(self):             # <<<<<<<<<<<<<<
  *         u"""getprevious(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_61getprevious, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getprevious, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__218)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1377, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getprevious, __pyx_t_7) < 0) __PYX_ERR(0, 1377, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_61getprevious, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getprevious, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__218)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1378, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getprevious, __pyx_t_1) < 0) __PYX_ERR(0, 1378, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1389
+  /* "lxml/etree.pyx":1390
  *         return _elementFactory(self._doc, c_node)
  * 
  *     def itersiblings(self, tag=None, *tags, preceding=False):             # <<<<<<<<<<<<<<
  *         u"""itersiblings(self, tag=None, *tags, preceding=False)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_63itersiblings, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_itersiblings, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__220)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1389, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_itersiblings, __pyx_t_7) < 0) __PYX_ERR(0, 1389, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_63itersiblings, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_itersiblings, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__220)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1390, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_itersiblings, __pyx_t_1) < 0) __PYX_ERR(0, 1390, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1412
+  /* "lxml/etree.pyx":1413
  *         return SiblingsIterator(self, tags, preceding=preceding)
  * 
  *     def iterancestors(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""iterancestors(self, tag=None, *tags)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_65iterancestors, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_iterancestors, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__222)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1412, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_iterancestors, __pyx_t_7) < 0) __PYX_ERR(0, 1412, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_65iterancestors, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_iterancestors, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__222)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1413, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_iterancestors, __pyx_t_1) < 0) __PYX_ERR(0, 1413, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1426
+  /* "lxml/etree.pyx":1427
  *         return AncestorsIterator(self, tags)
  * 
  *     def iterdescendants(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""iterdescendants(self, tag=None, *tags)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_67iterdescendants, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_iterdescendants, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__224)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1426, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_iterdescendants, __pyx_t_7) < 0) __PYX_ERR(0, 1426, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_67iterdescendants, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_iterdescendants, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__224)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1427, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_iterdescendants, __pyx_t_1) < 0) __PYX_ERR(0, 1427, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1441
+  /* "lxml/etree.pyx":1442
  *         return ElementDepthFirstIterator(self, tags, inclusive=False)
  * 
  *     def iterchildren(self, tag=None, *tags, reversed=False):             # <<<<<<<<<<<<<<
  *         u"""iterchildren(self, tag=None, *tags, reversed=False)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_69iterchildren, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_iterchildren, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__226)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1441, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_iterchildren, __pyx_t_7) < 0) __PYX_ERR(0, 1441, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_69iterchildren, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_iterchildren, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__226)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1442, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_iterchildren, __pyx_t_1) < 0) __PYX_ERR(0, 1442, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1456
+  /* "lxml/etree.pyx":1457
  *         return ElementChildIterator(self, tags, reversed=reversed)
  * 
  *     def getroottree(self):             # <<<<<<<<<<<<<<
  *         u"""getroottree(self)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_71getroottree, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getroottree, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__228)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1456, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getroottree, __pyx_t_7) < 0) __PYX_ERR(0, 1456, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_71getroottree, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getroottree, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__228)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1457, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getroottree, __pyx_t_1) < 0) __PYX_ERR(0, 1457, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1468
+  /* "lxml/etree.pyx":1469
  *         return _elementTreeFactory(self._doc, None)
  * 
  *     def getiterator(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""getiterator(self, tag=None, *tags)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_73getiterator, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getiterator, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__230)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1468, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getiterator, __pyx_t_7) < 0) __PYX_ERR(0, 1468, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_73getiterator, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_getiterator, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__230)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1469, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_getiterator, __pyx_t_1) < 0) __PYX_ERR(0, 1469, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1490
+  /* "lxml/etree.pyx":1491
  *         return ElementDepthFirstIterator(self, tags)
  * 
  *     def iter(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""iter(self, tag=None, *tags)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_75iter, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_iter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__232)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1490, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_iter, __pyx_t_7) < 0) __PYX_ERR(0, 1490, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_75iter, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_iter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__232)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1491, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_iter, __pyx_t_1) < 0) __PYX_ERR(0, 1491, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1514
+  /* "lxml/etree.pyx":1515
  *         return ElementDepthFirstIterator(self, tags)
  * 
  *     def itertext(self, tag=None, *tags, with_tail=True):             # <<<<<<<<<<<<<<
  *         u"""itertext(self, tag=None, *tags, with_tail=True)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_77itertext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_itertext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__234)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1514, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_itertext, __pyx_t_7) < 0) __PYX_ERR(0, 1514, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_77itertext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_itertext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__234)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1515, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_itertext, __pyx_t_1) < 0) __PYX_ERR(0, 1515, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1529
+  /* "lxml/etree.pyx":1530
  *         return ElementTextIterator(self, tags, with_tail=with_tail)
  * 
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
  *         u"""makeelement(self, _tag, attrib=None, nsmap=None, **_extra)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_79makeelement, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_makeelement, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__236)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1529, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_makeelement, __pyx_t_7) < 0) __PYX_ERR(0, 1529, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_79makeelement, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_makeelement, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__236)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1530, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_makeelement, __pyx_t_1) < 0) __PYX_ERR(0, 1530, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1538
+  /* "lxml/etree.pyx":1539
  *                             attrib, nsmap, _extra)
  * 
  *     def find(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""find(self, path, namespaces=None)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_81find, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_find, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__238)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1538, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_find, __pyx_t_7) < 0) __PYX_ERR(0, 1538, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_81find, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_find, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__238)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1539, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_find, __pyx_t_1) < 0) __PYX_ERR(0, 1539, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1551
+  /* "lxml/etree.pyx":1552
  *         return _elementpath.find(self, path, namespaces)
  * 
  *     def findtext(self, path, default=None, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""findtext(self, path, default=None, namespaces=None)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_83findtext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_findtext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__240)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1551, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_findtext, __pyx_t_7) < 0) __PYX_ERR(0, 1551, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_83findtext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_findtext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__240)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1552, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_findtext, __pyx_t_1) < 0) __PYX_ERR(0, 1552, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1564
+  /* "lxml/etree.pyx":1565
  *         return _elementpath.findtext(self, path, default, namespaces)
  * 
  *     def findall(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""findall(self, path, namespaces=None)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_85findall, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_findall, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__242)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1564, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_findall, __pyx_t_7) < 0) __PYX_ERR(0, 1564, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_85findall, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_findall, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__242)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1565, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_findall, __pyx_t_1) < 0) __PYX_ERR(0, 1565, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1577
+  /* "lxml/etree.pyx":1578
  *         return _elementpath.findall(self, path, namespaces)
  * 
  *     def iterfind(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""iterfind(self, path, namespaces=None)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_87iterfind, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_iterfind, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__244)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1577, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_iterfind, __pyx_t_7) < 0) __PYX_ERR(0, 1577, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_87iterfind, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_iterfind, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__244)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1578, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_iterfind, __pyx_t_1) < 0) __PYX_ERR(0, 1578, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1590
+  /* "lxml/etree.pyx":1591
  *         return _elementpath.iterfind(self, path, namespaces)
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,             # <<<<<<<<<<<<<<
  *               smart_strings=True, **_variables):
  *         u"""xpath(self, _path, namespaces=None, extensions=None, smart_strings=True, **_variables)
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_89xpath, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_xpath, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__246)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1590, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_xpath, __pyx_t_7) < 0) __PYX_ERR(0, 1590, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_89xpath, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_xpath, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__246)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1591, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_xpath, __pyx_t_1) < 0) __PYX_ERR(0, 1591, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1601
+  /* "lxml/etree.pyx":1602
  *         return evaluator(_path, **_variables)
  * 
  *     def cssselect(self, expr, *, translator='xml'):             # <<<<<<<<<<<<<<
  *         """
  *         Run the CSS expression on this element and its children,
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_91cssselect, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_cssselect, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__248)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1601, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_cssselect, __pyx_t_7) < 0) __PYX_ERR(0, 1601, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8_Element_91cssselect, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Element_cssselect, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__248)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1602, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Element->tp_dict, __pyx_n_s_cssselect, __pyx_t_1) < 0) __PYX_ERR(0, 1602, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Element);
 
-  /* "lxml/etree.pyx":1651
+  /* "lxml/etree.pyx":1652
  *         raise TypeError, u"this element does not have children or attributes"
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
  *         u"set(self, key, value)"
  *         self._raiseImmutable()
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_1set, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_set, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__250)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1651, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_set, __pyx_t_7) < 0) __PYX_ERR(0, 1651, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_1set, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_set, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__250)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1652, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_set, __pyx_t_1) < 0) __PYX_ERR(0, 1652, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree___ContentOnlyElement);
 
-  /* "lxml/etree.pyx":1655
+  /* "lxml/etree.pyx":1656
  *         self._raiseImmutable()
  * 
  *     def append(self, value):             # <<<<<<<<<<<<<<
  *         u"append(self, value)"
  *         self._raiseImmutable()
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_3append, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_append, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__252)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1655, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_append, __pyx_t_7) < 0) __PYX_ERR(0, 1655, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_3append, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_append, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__252)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1656, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_append, __pyx_t_1) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree___ContentOnlyElement);
 
-  /* "lxml/etree.pyx":1659
+  /* "lxml/etree.pyx":1660
  *         self._raiseImmutable()
  * 
  *     def insert(self, index, value):             # <<<<<<<<<<<<<<
  *         u"insert(self, index, value)"
  *         self._raiseImmutable()
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_5insert, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_insert, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__254)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1659, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_insert, __pyx_t_7) < 0) __PYX_ERR(0, 1659, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_5insert, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_insert, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__254)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1660, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_insert, __pyx_t_1) < 0) __PYX_ERR(0, 1660, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree___ContentOnlyElement);
 
-  /* "lxml/etree.pyx":1698
+  /* "lxml/etree.pyx":1699
  *         return 0
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
  *         u"get(self, key, default=None)"
  *         return None
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_13get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__256)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1698, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_get, __pyx_t_7) < 0) __PYX_ERR(0, 1698, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_13get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__256)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1699, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_get, __pyx_t_1) < 0) __PYX_ERR(0, 1699, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree___ContentOnlyElement);
 
-  /* "lxml/etree.pyx":1702
+  /* "lxml/etree.pyx":1703
  *         return None
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
  *         u"keys(self)"
  *         return []
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_15keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_keys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__258)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1702, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_keys, __pyx_t_7) < 0) __PYX_ERR(0, 1702, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_15keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_keys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__258)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1703, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_keys, __pyx_t_1) < 0) __PYX_ERR(0, 1703, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree___ContentOnlyElement);
 
-  /* "lxml/etree.pyx":1706
+  /* "lxml/etree.pyx":1707
  *         return []
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
  *         u"items(self)"
  *         return []
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_17items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__260)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1706, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_items, __pyx_t_7) < 0) __PYX_ERR(0, 1706, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_17items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__260)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1707, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_items, __pyx_t_1) < 0) __PYX_ERR(0, 1707, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree___ContentOnlyElement);
 
-  /* "lxml/etree.pyx":1710
+  /* "lxml/etree.pyx":1711
  *         return []
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
  *         u"values(self)"
  *         return []
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_19values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_values, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__262)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1710, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_values, __pyx_t_7) < 0) __PYX_ERR(0, 1710, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20__ContentOnlyElement_19values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ContentOnlyElement_values, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__262)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1711, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree___ContentOnlyElement->tp_dict, __pyx_n_s_values, __pyx_t_1) < 0) __PYX_ERR(0, 1711, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree___ContentOnlyElement);
 
-  /* "lxml/etree.pyx":1747
+  /* "lxml/etree.pyx":1748
  *             return "<?%s?>" % strrepr(self.target)
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
  *         u"""get(self, key, default=None)
  * 
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_ProcessingInstruction_3get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ProcessingInstruction_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__264)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1747, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ProcessingInstruction->tp_dict, __pyx_n_s_get, __pyx_t_7) < 0) __PYX_ERR(0, 1747, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_ProcessingInstruction_3get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ProcessingInstruction_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__264)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1748, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ProcessingInstruction->tp_dict, __pyx_n_s_get, __pyx_t_1) < 0) __PYX_ERR(0, 1748, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ProcessingInstruction);
 
-  /* "lxml/etree.pyx":1771
+  /* "lxml/etree.pyx":1772
  *                  for attr, value1, value2 in _FIND_PI_ATTRIBUTES(u' ' + self.text) }
  * 
  * cdef object _FIND_PI_ATTRIBUTES = re.compile(ur'\s+(\w+)\s*=\s*(?:\'([^\']*)\'|"([^"]*)")', re.U).findall             # <<<<<<<<<<<<<<
  * 
  * cdef class _Entity(__ContentOnlyElement):
  */
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1771, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_U); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1771, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1771, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1772, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_U); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1772, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1772, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_kp_u_s_w_s_s);
   __Pyx_GIVEREF(__pyx_kp_u_s_w_s_s);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_s_w_s_s);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u_s_w_s_s);
   __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_7, 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(0, 1771, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1772, __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_findall); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1771, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_findall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1772, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__FIND_PI_ATTRIBUTES);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__FIND_PI_ATTRIBUTES, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__FIND_PI_ATTRIBUTES, __pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_7);
+  __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":1891
+  /* "lxml/etree.pyx":1892
  *         return 0
  * 
  *     def parse(self, source, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *         u"""parse(self, source, parser=None, base_url=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_1parse, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_parse, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__266)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1891, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_parse, __pyx_t_1) < 0) __PYX_ERR(0, 1891, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_1parse, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_parse, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__266)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1892, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_parse, __pyx_t_7) < 0) __PYX_ERR(0, 1892, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":1907
+  /* "lxml/etree.pyx":1908
  *         return self._context_node
  * 
  *     def _setroot(self, _Element root not None):             # <<<<<<<<<<<<<<
  *         u"""_setroot(self, root)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_3_setroot, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree__setroot, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__268)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1907, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_setroot, __pyx_t_1) < 0) __PYX_ERR(0, 1907, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_3_setroot, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree__setroot, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__268)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1908, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_setroot, __pyx_t_7) < 0) __PYX_ERR(0, 1908, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":1918
+  /* "lxml/etree.pyx":1919
  *         self._doc = None
  * 
  *     def getroot(self):             # <<<<<<<<<<<<<<
  *         u"""getroot(self)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_5getroot, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_getroot, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__270)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1918, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_getroot, __pyx_t_1) < 0) __PYX_ERR(0, 1918, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_5getroot, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_getroot, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__270)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1919, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_getroot, __pyx_t_7) < 0) __PYX_ERR(0, 1919, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":1925
+  /* "lxml/etree.pyx":1926
  *         return self._context_node
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
  *         return _elementTreeFactory(self._doc, self._context_node)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_7__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree___copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__272)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1925, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_copy_2, __pyx_t_1) < 0) __PYX_ERR(0, 1925, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_7__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree___copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__272)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1926, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_copy_2, __pyx_t_7) < 0) __PYX_ERR(0, 1926, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":1928
+  /* "lxml/etree.pyx":1929
  *         return _elementTreeFactory(self._doc, self._context_node)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
  *         cdef _Element root
  *         cdef _Document doc
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_9__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree___deepcopy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__274)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1928, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_deepcopy, __pyx_t_1) < 0) __PYX_ERR(0, 1928, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_9__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree___deepcopy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__274)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1929, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_deepcopy, __pyx_t_7) < 0) __PYX_ERR(0, 1929, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":1968
+  /* "lxml/etree.pyx":1969
  *         return None
  * 
  *     def write(self, file, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
  *               bint pretty_print=False, xml_declaration=None, bint with_tail=True,
  *               standalone=None, doctype=None, compression=0,
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_11write, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_write, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__276)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1968, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_write, __pyx_t_1) < 0) __PYX_ERR(0, 1968, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_11write, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_write, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__276)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1969, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_write, __pyx_t_7) < 0) __PYX_ERR(0, 1969, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2078
+  /* "lxml/etree.pyx":2079
  *                     is_standalone, compression)
  * 
  *     def getpath(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""getpath(self, element)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_13getpath, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_getpath, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__278)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2078, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_getpath, __pyx_t_1) < 0) __PYX_ERR(0, 2078, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_13getpath, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_getpath, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__278)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2079, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_getpath, __pyx_t_7) < 0) __PYX_ERR(0, 2079, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2116
+  /* "lxml/etree.pyx":2117
  *         return path
  * 
  *     def getelementpath(self, _Element element not None):             # <<<<<<<<<<<<<<
  *         u"""getelementpath(self, element)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_15getelementpath, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_getelementpath, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__280)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2116, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_getelementpath, __pyx_t_1) < 0) __PYX_ERR(0, 2116, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_15getelementpath, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_getelementpath, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__280)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2117, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_getelementpath, __pyx_t_7) < 0) __PYX_ERR(0, 2117, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2180
+  /* "lxml/etree.pyx":2181
  *         return '/'.join(path)
  * 
  *     def getiterator(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""getiterator(self, *tags, tag=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_17getiterator, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_getiterator, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__282)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2180, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_getiterator, __pyx_t_1) < 0) __PYX_ERR(0, 2180, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_17getiterator, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_getiterator, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__282)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2181, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_getiterator, __pyx_t_7) < 0) __PYX_ERR(0, 2181, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2204
+  /* "lxml/etree.pyx":2205
  *         return root.getiterator(*tags)
  * 
  *     def iter(self, tag=None, *tags):             # <<<<<<<<<<<<<<
  *         u"""iter(self, tag=None, *tags)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_19iter, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_iter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__284)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2204, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_iter, __pyx_t_1) < 0) __PYX_ERR(0, 2204, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_19iter, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_iter, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__284)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2205, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_iter, __pyx_t_7) < 0) __PYX_ERR(0, 2205, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2222
+  /* "lxml/etree.pyx":2223
  *         return root.iter(*tags)
  * 
  *     def find(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""find(self, path, namespaces=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_21find, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_find, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__286)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2222, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_find, __pyx_t_1) < 0) __PYX_ERR(0, 2222, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_21find, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_find, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__286)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2223, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_find, __pyx_t_7) < 0) __PYX_ERR(0, 2223, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2239
+  /* "lxml/etree.pyx":2240
  *         return root.find(path, namespaces)
  * 
  *     def findtext(self, path, default=None, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""findtext(self, path, default=None, namespaces=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_23findtext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_findtext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__288)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2239, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_findtext, __pyx_t_1) < 0) __PYX_ERR(0, 2239, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_23findtext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_findtext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__288)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2240, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_findtext, __pyx_t_7) < 0) __PYX_ERR(0, 2240, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2256
+  /* "lxml/etree.pyx":2257
  *         return root.findtext(path, default, namespaces)
  * 
  *     def findall(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""findall(self, path, namespaces=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_25findall, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_findall, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__290)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2256, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_findall, __pyx_t_1) < 0) __PYX_ERR(0, 2256, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_25findall, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_findall, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__290)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2257, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_findall, __pyx_t_7) < 0) __PYX_ERR(0, 2257, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2273
+  /* "lxml/etree.pyx":2274
  *         return root.findall(path, namespaces)
  * 
  *     def iterfind(self, path, namespaces=None):             # <<<<<<<<<<<<<<
  *         u"""iterfind(self, path, namespaces=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_27iterfind, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_iterfind, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__292)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2273, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_iterfind, __pyx_t_1) < 0) __PYX_ERR(0, 2273, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_27iterfind, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_iterfind, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__292)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2274, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_iterfind, __pyx_t_7) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2290
+  /* "lxml/etree.pyx":2291
  *         return root.iterfind(path, namespaces)
  * 
  *     def xpath(self, _path, *, namespaces=None, extensions=None,             # <<<<<<<<<<<<<<
  *               smart_strings=True, **_variables):
  *         u"""xpath(self, _path, namespaces=None, extensions=None, smart_strings=True, **_variables)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_29xpath, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_xpath, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__294)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2290, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_xpath, __pyx_t_1) < 0) __PYX_ERR(0, 2290, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_29xpath, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_xpath, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__294)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2291, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_xpath, __pyx_t_7) < 0) __PYX_ERR(0, 2291, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2315
+  /* "lxml/etree.pyx":2316
  *         return evaluator(_path, **_variables)
  * 
  *     def xslt(self, _xslt, extensions=None, access_control=None, **_kw):             # <<<<<<<<<<<<<<
  *         u"""xslt(self, _xslt, extensions=None, access_control=None, **_kw)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_31xslt, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_xslt, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__296)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2315, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_xslt_3, __pyx_t_1) < 0) __PYX_ERR(0, 2315, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_31xslt, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_xslt, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__296)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2316, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_xslt_3, __pyx_t_7) < 0) __PYX_ERR(0, 2316, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2334
+  /* "lxml/etree.pyx":2335
  *         return style(self, **_kw)
  * 
  *     def relaxng(self, relaxng):             # <<<<<<<<<<<<<<
  *         u"""relaxng(self, relaxng)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_33relaxng, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_relaxng, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__298)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2334, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_relaxng, __pyx_t_1) < 0) __PYX_ERR(0, 2334, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_33relaxng, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_relaxng, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__298)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2335, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_relaxng, __pyx_t_7) < 0) __PYX_ERR(0, 2335, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2352
+  /* "lxml/etree.pyx":2353
  *         return schema.validate(self)
  * 
  *     def xmlschema(self, xmlschema):             # <<<<<<<<<<<<<<
  *         u"""xmlschema(self, xmlschema)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_35xmlschema, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_xmlschema, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__300)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2352, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_xmlschema, __pyx_t_1) < 0) __PYX_ERR(0, 2352, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_35xmlschema, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_xmlschema, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__300)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2353, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_xmlschema, __pyx_t_7) < 0) __PYX_ERR(0, 2353, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2370
+  /* "lxml/etree.pyx":2371
  *         return schema.validate(self)
  * 
  *     def xinclude(self):             # <<<<<<<<<<<<<<
  *         u"""xinclude(self)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_37xinclude, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_xinclude, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__302)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2370, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_xinclude, __pyx_t_1) < 0) __PYX_ERR(0, 2370, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_37xinclude, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_xinclude, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__302)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2371, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_xinclude, __pyx_t_7) < 0) __PYX_ERR(0, 2371, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2385
+  /* "lxml/etree.pyx":2386
  *         XInclude()(self._context_node)
  * 
  *     def write_c14n(self, file, *, bint exclusive=False, bint with_comments=True,             # <<<<<<<<<<<<<<
  *                    compression=0, inclusive_ns_prefixes=None):
  *         u"""write_c14n(self, file, exclusive=False, with_comments=True,
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_39write_c14n, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_write_c14n, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__304)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2385, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_write_c14n, __pyx_t_1) < 0) __PYX_ERR(0, 2385, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ElementTree_39write_c14n, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementTree_write_c14n, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__304)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2386, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementTree->tp_dict, __pyx_n_s_write_c14n, __pyx_t_7) < 0) __PYX_ERR(0, 2386, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementTree);
 
-  /* "lxml/etree.pyx":2452
+  /* "lxml/etree.pyx":2453
  *         _delAttribute(self._element, key)
  * 
  *     def update(self, sequence_or_dict):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         if isinstance(sequence_or_dict, (dict, _Attrib)):
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_7update, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_update, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__306)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2452, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_update, __pyx_t_1) < 0) __PYX_ERR(0, 2452, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_7update, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_update, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__306)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2453, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_update, __pyx_t_7) < 0) __PYX_ERR(0, 2453, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2459
+  /* "lxml/etree.pyx":2460
  *             _setAttributeValue(self._element, key, value)
  * 
  *     def pop(self, key, *default):             # <<<<<<<<<<<<<<
  *         if len(default) > 1:
  *             raise TypeError, f"pop expected at most 2 arguments, got {len(default)+1}"
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_9pop, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_pop, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__308)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2459, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_pop, __pyx_t_1) < 0) __PYX_ERR(0, 2459, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_9pop, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_pop, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__308)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2460, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_pop, __pyx_t_7) < 0) __PYX_ERR(0, 2460, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2472
+  /* "lxml/etree.pyx":2473
  *         return result
  * 
  *     def clear(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         c_attrs = self._element._c_node.properties
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_11clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_clear, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__310)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2472, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_clear, __pyx_t_1) < 0) __PYX_ERR(0, 2472, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_11clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_clear, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__310)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2473, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_clear, __pyx_t_7) < 0) __PYX_ERR(0, 2473, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2484
+  /* "lxml/etree.pyx":2485
  *         return repr(dict( _collectAttributes(self._element._c_node, 3) ))
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return dict(_collectAttributes(self._element._c_node, 3))
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_15__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib___copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__312)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2484, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_copy_2, __pyx_t_1) < 0) __PYX_ERR(0, 2484, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_15__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib___copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__312)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2485, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_copy_2, __pyx_t_7) < 0) __PYX_ERR(0, 2485, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2488
+  /* "lxml/etree.pyx":2489
  *         return dict(_collectAttributes(self._element._c_node, 3))
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return dict(_collectAttributes(self._element._c_node, 3))
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_17__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib___deepcopy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__314)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2488, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_deepcopy, __pyx_t_1) < 0) __PYX_ERR(0, 2488, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_17__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib___deepcopy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__314)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2489, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_deepcopy, __pyx_t_7) < 0) __PYX_ERR(0, 2489, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2518
+  /* "lxml/etree.pyx":2519
  *         return c
  * 
  *     def get(self, key, default=None):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return _getAttributeValue(self._element, key, default)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_25get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__316)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2518, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_get, __pyx_t_1) < 0) __PYX_ERR(0, 2518, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_25get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__316)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2519, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_get, __pyx_t_7) < 0) __PYX_ERR(0, 2519, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2522
+  /* "lxml/etree.pyx":2523
  *         return _getAttributeValue(self._element, key, default)
  * 
  *     def keys(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return _collectAttributes(self._element._c_node, 1)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_27keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_keys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__318)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2522, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_keys, __pyx_t_1) < 0) __PYX_ERR(0, 2522, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_27keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_keys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__318)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2523, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_keys, __pyx_t_7) < 0) __PYX_ERR(0, 2523, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2530
+  /* "lxml/etree.pyx":2531
  *         return iter(_collectAttributes(self._element._c_node, 1))
  * 
  *     def iterkeys(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return iter(_collectAttributes(self._element._c_node, 1))
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_31iterkeys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_iterkeys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__320)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2530, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_iterkeys, __pyx_t_1) < 0) __PYX_ERR(0, 2530, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_31iterkeys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_iterkeys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__320)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2531, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_iterkeys, __pyx_t_7) < 0) __PYX_ERR(0, 2531, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2534
+  /* "lxml/etree.pyx":2535
  *         return iter(_collectAttributes(self._element._c_node, 1))
  * 
  *     def values(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return _collectAttributes(self._element._c_node, 2)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_33values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_values, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__322)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2534, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_values, __pyx_t_1) < 0) __PYX_ERR(0, 2534, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_33values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_values, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__322)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2535, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_values, __pyx_t_7) < 0) __PYX_ERR(0, 2535, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2538
+  /* "lxml/etree.pyx":2539
  *         return _collectAttributes(self._element._c_node, 2)
  * 
  *     def itervalues(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return iter(_collectAttributes(self._element._c_node, 2))
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_35itervalues, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_itervalues, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__324)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2538, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_itervalues, __pyx_t_1) < 0) __PYX_ERR(0, 2538, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_35itervalues, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_itervalues, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__324)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2539, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_itervalues, __pyx_t_7) < 0) __PYX_ERR(0, 2539, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2542
+  /* "lxml/etree.pyx":2543
  *         return iter(_collectAttributes(self._element._c_node, 2))
  * 
  *     def items(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return _collectAttributes(self._element._c_node, 3)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_37items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__326)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2542, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_items, __pyx_t_1) < 0) __PYX_ERR(0, 2542, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_37items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__326)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2543, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_items, __pyx_t_7) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2546
+  /* "lxml/etree.pyx":2547
  *         return _collectAttributes(self._element._c_node, 3)
  * 
  *     def iteritems(self):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return iter(_collectAttributes(self._element._c_node, 3))
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_39iteritems, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_iteritems, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__328)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2546, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_iteritems, __pyx_t_1) < 0) __PYX_ERR(0, 2546, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_39iteritems, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_iteritems, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__328)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2547, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_iteritems, __pyx_t_7) < 0) __PYX_ERR(0, 2547, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":2550
+  /* "lxml/etree.pyx":2551
  *         return iter(_collectAttributes(self._element._c_node, 3))
  * 
  *     def has_key(self, key):             # <<<<<<<<<<<<<<
  *         _assertValidNode(self._element)
  *         return key in self
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_41has_key, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_has_key, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__330)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2550, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_has_key, __pyx_t_1) < 0) __PYX_ERR(0, 2550, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_Attrib_41has_key, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Attrib_has_key, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__330)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2551, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Attrib->tp_dict, __pyx_n_s_has_key, __pyx_t_7) < 0) __PYX_ERR(0, 2551, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Attrib);
 
-  /* "lxml/etree.pyx":3029
+  /* "lxml/etree.pyx":2572
+ *         return python.PyObject_RichCompare(one, other, op)
+ * 
+ * MutableMapping.register(_Attrib)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_MutableMapping, __pyx_n_s_register); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2572, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_7, ((PyObject *)__pyx_ptype_4lxml_5etree__Attrib)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2572, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "lxml/etree.pyx":3032
  * # module-level API for ElementTree
  * 
  * def Element(_tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
  *     u"""Element(_tag, attrib=None, nsmap=None, **_extra)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7Element, 0, __pyx_n_s_Element, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__332)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3029, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__333);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Element, __pyx_t_1) < 0) __PYX_ERR(0, 3029, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7Element, 0, __pyx_n_s_Element, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__332)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3032, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__333);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Element, __pyx_t_2) < 0) __PYX_ERR(0, 3032, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":3043
+  /* "lxml/etree.pyx":3046
  * 
  * 
  * def Comment(text=None):             # <<<<<<<<<<<<<<
  *     u"""Comment(text=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9Comment, 0, __pyx_n_s_Comment, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__335)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3043, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__336);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Comment, __pyx_t_1) < 0) __PYX_ERR(0, 3043, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9Comment, 0, __pyx_n_s_Comment, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__335)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3046, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__336);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Comment, __pyx_t_2) < 0) __PYX_ERR(0, 3046, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":3067
+  /* "lxml/etree.pyx":3070
  * 
  * 
  * def ProcessingInstruction(target, text=None):             # <<<<<<<<<<<<<<
  *     u"""ProcessingInstruction(target, text=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11ProcessingInstruction, 0, __pyx_n_s_ProcessingInstruction, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__338)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3067, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__339);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ProcessingInstruction, __pyx_t_1) < 0) __PYX_ERR(0, 3067, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11ProcessingInstruction, 0, __pyx_n_s_ProcessingInstruction, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__338)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3070, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__339);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ProcessingInstruction, __pyx_t_2) < 0) __PYX_ERR(0, 3070, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":3095
+  /* "lxml/etree.pyx":3098
  *     return _elementFactory(doc, c_node)
  * 
  * PI = ProcessingInstruction             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ProcessingInstruction); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3095, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PI, __pyx_t_1) < 0) __PYX_ERR(0, 3095, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ProcessingInstruction); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3098, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PI, __pyx_t_2) < 0) __PYX_ERR(0, 3098, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":3120
+  /* "lxml/etree.pyx":3123
  * 
  * 
  * def Entity(name):             # <<<<<<<<<<<<<<
  *     u"""Entity(name)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13Entity, 0, __pyx_n_s_Entity, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__341)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3120, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Entity, __pyx_t_1) < 0) __PYX_ERR(0, 3120, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13Entity, 0, __pyx_n_s_Entity, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__341)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3123, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Entity, __pyx_t_2) < 0) __PYX_ERR(0, 3123, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":3146
+  /* "lxml/etree.pyx":3149
  * 
  * 
  * def SubElement(_Element _parent not None, _tag,             # <<<<<<<<<<<<<<
  *                attrib=None, nsmap=None, **_extra):
  *     u"""SubElement(_parent, _tag, attrib=None, nsmap=None, **_extra)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_15SubElement, 0, __pyx_n_s_SubElement, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__343)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3146, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__344);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SubElement, __pyx_t_1) < 0) __PYX_ERR(0, 3146, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_15SubElement, 0, __pyx_n_s_SubElement, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__343)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3149, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__344);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SubElement, __pyx_t_2) < 0) __PYX_ERR(0, 3149, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":3156
+  /* "lxml/etree.pyx":3159
  * 
  * 
  * def ElementTree(_Element element=None, *, file=None, _BaseParser parser=None):             # <<<<<<<<<<<<<<
  *     u"""ElementTree(element=None, file=None, parser=None)
  * 
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3156, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_file, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3156, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_parser, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3156, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17ElementTree, 0, __pyx_n_s_ElementTree, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__346)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3156, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__347);
-  __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_ElementTree, __pyx_t_2) < 0) __PYX_ERR(0, 3156, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_file, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3159, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_parser, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3159, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17ElementTree, 0, __pyx_n_s_ElementTree, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__346)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3159, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__347);
+  __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_ElementTree, __pyx_t_7) < 0) __PYX_ERR(0, 3159, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":3182
+  /* "lxml/etree.pyx":3185
  * 
  * 
  * def HTML(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""HTML(text, parser=None, base_url=None)
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3182, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3185, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3185, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_19HTML, 0, __pyx_n_s_HTML, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__349)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3185, __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, 3182, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_19HTML, 0, __pyx_n_s_HTML, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__349)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3182, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__350);
-  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__350);
+  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_7);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_HTML, __pyx_t_2) < 0) __PYX_ERR(0, 3185, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_HTML, __pyx_t_1) < 0) __PYX_ERR(0, 3182, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3208
+  /* "lxml/etree.pyx":3211
  * 
  * 
  * def XML(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""XML(text, parser=None, base_url=None)
  * 
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3208, __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, 3208, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21XML, 0, __pyx_n_s_XML, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__352)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3208, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__353);
-  __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_XML, __pyx_t_2) < 0) __PYX_ERR(0, 3208, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3211, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21XML, 0, __pyx_n_s_XML, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__352)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3211, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__353);
+  __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_XML, __pyx_t_7) < 0) __PYX_ERR(0, 3211, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":3239
+  /* "lxml/etree.pyx":3242
  * 
  * 
  * def fromstring(text, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""fromstring(text, parser=None, base_url=None)
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3239, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3242, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3242, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23fromstring, 0, __pyx_n_s_fromstring, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__355)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3242, __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, 3239, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23fromstring, 0, __pyx_n_s_fromstring, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__355)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3239, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__356);
-  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__356);
+  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_7);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fromstring, __pyx_t_2) < 0) __PYX_ERR(0, 3242, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fromstring, __pyx_t_1) < 0) __PYX_ERR(0, 3239, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3260
+  /* "lxml/etree.pyx":3263
  * 
  * 
  * def fromstringlist(strings, _BaseParser parser=None):             # <<<<<<<<<<<<<<
  *     u"""fromstringlist(strings, parser=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_25fromstringlist, 0, __pyx_n_s_fromstringlist, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__358)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3260, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__359);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fromstringlist, __pyx_t_1) < 0) __PYX_ERR(0, 3260, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_25fromstringlist, 0, __pyx_n_s_fromstringlist, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__358)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3263, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__359);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fromstringlist, __pyx_t_2) < 0) __PYX_ERR(0, 3263, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":3281
+  /* "lxml/etree.pyx":3284
  * 
  * 
  * def iselement(element):             # <<<<<<<<<<<<<<
  *     u"""iselement(element)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27iselement, 0, __pyx_n_s_iselement, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__361)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3281, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_iselement, __pyx_t_1) < 0) __PYX_ERR(0, 3281, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27iselement, 0, __pyx_n_s_iselement, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__361)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3284, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_iselement, __pyx_t_2) < 0) __PYX_ERR(0, 3284, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":3289
+  /* "lxml/etree.pyx":3292
  * 
  * 
  * def indent(tree, space="  ", *, Py_ssize_t level=0):             # <<<<<<<<<<<<<<
  *     """indent(tree, space="  ", level=0)
  * 
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3289, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyInt_FromSsize_t(((Py_ssize_t)0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3289, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_level, __pyx_t_2) < 0) __PYX_ERR(0, 3289, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_29indent, 0, __pyx_n_s_indent, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__363)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3289, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__364);
-  __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_indent, __pyx_t_2) < 0) __PYX_ERR(0, 3289, __pyx_L1_error)
+  __pyx_t_7 = PyInt_FromSsize_t(((Py_ssize_t)0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3292, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_level, __pyx_t_7) < 0) __PYX_ERR(0, 3292, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_29indent, 0, __pyx_n_s_indent, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__363)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3292, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__364);
+  __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_indent, __pyx_t_7) < 0) __PYX_ERR(0, 3292, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":3340
+  /* "lxml/etree.pyx":3343
  * 
  * 
  * def dump(_Element elem not None, *, bint pretty_print=True, with_tail=True):             # <<<<<<<<<<<<<<
  *     u"""dump(elem, pretty_print=True, with_tail=True)
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3340, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3343, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_2 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3340, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pretty_print, __pyx_t_1) < 0) __PYX_ERR(0, 3340, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_with_tail, ((PyObject *)Py_True)) < 0) __PYX_ERR(0, 3340, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_31dump, 0, __pyx_n_s_dump, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__366)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3340, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_2);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_pretty_print, __pyx_t_2) < 0) __PYX_ERR(0, 3343, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_with_tail, ((PyObject *)Py_True)) < 0) __PYX_ERR(0, 3343, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_31dump, 0, __pyx_n_s_dump, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__366)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3343, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_7);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_dump, __pyx_t_2) < 0) __PYX_ERR(0, 3343, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_dump, __pyx_t_1) < 0) __PYX_ERR(0, 3340, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3353
+  /* "lxml/etree.pyx":3356
  * 
  * 
  * def tostring(element_or_tree, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
  *              xml_declaration=None, bint pretty_print=False, bint with_tail=True,
  *              standalone=None, doctype=None,
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3353, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_encoding, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_method, ((PyObject*)__pyx_n_s_xml)) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_xml_declaration, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3356, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_encoding, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_method, ((PyObject*)__pyx_n_s_xml)) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_xml_declaration, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3354
+  /* "lxml/etree.pyx":3357
  * 
  * def tostring(element_or_tree, *, encoding=None, method="xml",
  *              xml_declaration=None, bint pretty_print=False, bint with_tail=True,             # <<<<<<<<<<<<<<
  *              standalone=None, doctype=None,
  *              # method='c14n'
  */
-  __pyx_t_2 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3354, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_pretty_print, __pyx_t_2) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3354, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_with_tail, __pyx_t_2) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_standalone, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_doctype, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3357, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pretty_print, __pyx_t_7) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_7 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3357, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_with_tail, __pyx_t_7) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_standalone, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_doctype, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3357
+  /* "lxml/etree.pyx":3360
  *              standalone=None, doctype=None,
  *              # method='c14n'
  *              bint exclusive=False, inclusive_ns_prefixes=None,             # <<<<<<<<<<<<<<
  *              # method='c14n2'
  *              bint with_comments=True, bint strip_text=False,
  */
-  __pyx_t_2 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3357, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_exclusive, __pyx_t_2) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_inclusive_ns_prefixes, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3360, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_exclusive, __pyx_t_7) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_inclusive_ns_prefixes, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3359
+  /* "lxml/etree.pyx":3362
  *              bint exclusive=False, inclusive_ns_prefixes=None,
  *              # method='c14n2'
  *              bint with_comments=True, bint strip_text=False,             # <<<<<<<<<<<<<<
  *              ):
  *     u"""tostring(element_or_tree, encoding=None, method="xml",
  */
-  __pyx_t_2 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3359, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_with_comments, __pyx_t_2) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3359, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_strip_text, __pyx_t_2) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3362, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_with_comments, __pyx_t_7) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_7 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3362, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_strip_text, __pyx_t_7) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":3353
+  /* "lxml/etree.pyx":3356
  * 
  * 
  * def tostring(element_or_tree, *, encoding=None, method="xml",             # <<<<<<<<<<<<<<
  *              xml_declaration=None, bint pretty_print=False, bint with_tail=True,
  *              standalone=None, doctype=None,
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_33tostring, 0, __pyx_n_s_tostring, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__368)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3353, __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_tostring, __pyx_t_2) < 0) __PYX_ERR(0, 3353, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_33tostring, 0, __pyx_n_s_tostring, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__368)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3356, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __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_tostring, __pyx_t_7) < 0) __PYX_ERR(0, 3356, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":3466
+  /* "lxml/etree.pyx":3469
  * 
  * 
  * def tostringlist(element_or_tree, *args, **kwargs):             # <<<<<<<<<<<<<<
  *     u"""tostringlist(element_or_tree, *args, **kwargs)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_35tostringlist, 0, __pyx_n_s_tostringlist, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__370)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3466, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tostringlist, __pyx_t_2) < 0) __PYX_ERR(0, 3466, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_35tostringlist, 0, __pyx_n_s_tostringlist, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__370)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3469, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tostringlist, __pyx_t_7) < 0) __PYX_ERR(0, 3469, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":3478
+  /* "lxml/etree.pyx":3481
  * 
  * 
  * def tounicode(element_or_tree, *, method=u"xml", bint pretty_print=False,             # <<<<<<<<<<<<<<
  *               bint with_tail=True, doctype=None):
  *     u"""tounicode(element_or_tree, method="xml", pretty_print=False,
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3478, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3481, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_method, ((PyObject*)__pyx_n_u_xml)) < 0) __PYX_ERR(0, 3481, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3481, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_method, ((PyObject*)__pyx_n_u_xml)) < 0) __PYX_ERR(0, 3478, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3478, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pretty_print, __pyx_t_1) < 0) __PYX_ERR(0, 3478, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_pretty_print, __pyx_t_2) < 0) __PYX_ERR(0, 3481, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/etree.pyx":3479
+  /* "lxml/etree.pyx":3482
  * 
  * def tounicode(element_or_tree, *, method=u"xml", bint pretty_print=False,
  *               bint with_tail=True, doctype=None):             # <<<<<<<<<<<<<<
  *     u"""tounicode(element_or_tree, method="xml", pretty_print=False,
  *                   with_tail=True, doctype=None)
  */
-  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3479, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_with_tail, __pyx_t_1) < 0) __PYX_ERR(0, 3478, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_doctype, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3478, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3482, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_with_tail, __pyx_t_2) < 0) __PYX_ERR(0, 3481, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_doctype, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3481, __pyx_L1_error)
 
-  /* "lxml/etree.pyx":3478
+  /* "lxml/etree.pyx":3481
  * 
  * 
  * def tounicode(element_or_tree, *, method=u"xml", bint pretty_print=False,             # <<<<<<<<<<<<<<
  *               bint with_tail=True, doctype=None):
  *     u"""tounicode(element_or_tree, method="xml", pretty_print=False,
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_37tounicode, 0, __pyx_n_s_tounicode, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__372)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3478, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_2);
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_37tounicode, 0, __pyx_n_s_tounicode, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__372)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3481, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_7);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tounicode, __pyx_t_2) < 0) __PYX_ERR(0, 3481, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tounicode, __pyx_t_1) < 0) __PYX_ERR(0, 3478, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/etree.pyx":3512
+  /* "lxml/etree.pyx":3515
  * 
  * 
  * def parse(source, _BaseParser parser=None, *, base_url=None):             # <<<<<<<<<<<<<<
  *     u"""parse(source, parser=None, base_url=None)
  * 
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3512, __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, 3512, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_39parse, 0, __pyx_n_s_parse, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__374)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3512, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3515, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__375);
-  __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, 3512, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(0, 3515, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_39parse, 0, __pyx_n_s_parse, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__374)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3515, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__375);
+  __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_parse, __pyx_t_7) < 0) __PYX_ERR(0, 3515, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/etree.pyx":3544
+  /* "lxml/etree.pyx":3547
  * 
  * 
  * def adopt_external_document(capsule, _BaseParser parser=None):             # <<<<<<<<<<<<<<
  *     """adopt_external_document(capsule, parser=None)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_41adopt_external_document, 0, __pyx_n_s_adopt_external_document, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__377)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3544, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__378);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_adopt_external_document, __pyx_t_2) < 0) __PYX_ERR(0, 3544, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_41adopt_external_document, 0, __pyx_n_s_adopt_external_document, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__377)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3547, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__378);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_adopt_external_document, __pyx_t_7) < 0) __PYX_ERR(0, 3547, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/readonlytree.pxi":160
  *         return c_node != NULL
@@ -257569,10 +257668,10 @@ if (!__Pyx_RefNanny) {
  *         u"__deepcopy__(self, memo)"
  *         return self.__copy__()
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_11__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy___deepcopy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__380)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 160, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_deepcopy, __pyx_t_2) < 0) __PYX_ERR(7, 160, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_11__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy___deepcopy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__380)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 160, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_deepcopy, __pyx_t_7) < 0) __PYX_ERR(7, 160, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyProxy);
 
   /* "src/lxml/readonlytree.pxi":164
@@ -257582,10 +257681,10 @@ if (!__Pyx_RefNanny) {
  *         u"__copy__(self)"
  *         cdef xmlDoc* c_doc
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_13__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy___copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__382)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 164, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_copy_2, __pyx_t_2) < 0) __PYX_ERR(7, 164, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_13__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy___copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__382)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 164, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_copy_2, __pyx_t_7) < 0) __PYX_ERR(7, 164, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyProxy);
 
   /* "src/lxml/readonlytree.pxi":187
@@ -257595,10 +257694,10 @@ if (!__Pyx_RefNanny) {
  *         u"""iterchildren(self, tag=None, reversed=False)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_17iterchildren, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy_iterchildren, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__384)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 187, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_iterchildren, __pyx_t_2) < 0) __PYX_ERR(7, 187, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_17iterchildren, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy_iterchildren, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__384)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 187, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_iterchildren, __pyx_t_7) < 0) __PYX_ERR(7, 187, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyProxy);
 
   /* "src/lxml/readonlytree.pxi":199
@@ -257608,10 +257707,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Returns all subelements. The elements are returned in document
  *         order.
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_19getchildren, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy_getchildren, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__386)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 199, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_getchildren, __pyx_t_2) < 0) __PYX_ERR(7, 199, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_19getchildren, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy_getchildren, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__386)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 199, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_getchildren, __pyx_t_7) < 0) __PYX_ERR(7, 199, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyProxy);
 
   /* "src/lxml/readonlytree.pxi":214
@@ -257621,10 +257720,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Returns the parent of this element or None for the root element.
  *         """
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_21getparent, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy_getparent, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__388)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 214, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_getparent, __pyx_t_2) < 0) __PYX_ERR(7, 214, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_21getparent, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy_getparent, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__388)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 214, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_getparent, __pyx_t_7) < 0) __PYX_ERR(7, 214, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyProxy);
 
   /* "src/lxml/readonlytree.pxi":225
@@ -257634,10 +257733,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Returns the following sibling of this element or None.
  *         """
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_23getnext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy_getnext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__390)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 225, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_getnext, __pyx_t_2) < 0) __PYX_ERR(7, 225, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_23getnext, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy_getnext, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__390)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 225, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_getnext, __pyx_t_7) < 0) __PYX_ERR(7, 225, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyProxy);
 
   /* "src/lxml/readonlytree.pxi":235
@@ -257647,10 +257746,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Returns the preceding sibling of this element or None.
  *         """
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_25getprevious, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy_getprevious, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__392)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 235, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_getprevious, __pyx_t_2) < 0) __PYX_ERR(7, 235, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14_ReadOnlyProxy_25getprevious, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyProxy_getprevious, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__392)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 235, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyProxy->tp_dict, __pyx_n_s_getprevious, __pyx_t_7) < 0) __PYX_ERR(7, 235, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyProxy);
 
   /* "src/lxml/readonlytree.pxi":304
@@ -257660,10 +257759,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Gets an element attribute.
  *         """
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21_ReadOnlyElementProxy_1get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyElementProxy_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__394)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 304, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy->tp_dict, __pyx_n_s_get, __pyx_t_2) < 0) __PYX_ERR(7, 304, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21_ReadOnlyElementProxy_1get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyElementProxy_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__394)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 304, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy->tp_dict, __pyx_n_s_get, __pyx_t_7) < 0) __PYX_ERR(7, 304, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy);
 
   /* "src/lxml/readonlytree.pxi":310
@@ -257673,10 +257772,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Gets a list of attribute names. The names are returned in an
  *         arbitrary order (just like for an ordinary Python dictionary).
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21_ReadOnlyElementProxy_3keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyElementProxy_keys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__396)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 310, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy->tp_dict, __pyx_n_s_keys, __pyx_t_2) < 0) __PYX_ERR(7, 310, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21_ReadOnlyElementProxy_3keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyElementProxy_keys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__396)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 310, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy->tp_dict, __pyx_n_s_keys, __pyx_t_7) < 0) __PYX_ERR(7, 310, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy);
 
   /* "src/lxml/readonlytree.pxi":317
@@ -257686,10 +257785,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Gets element attributes, as a sequence. The attributes are returned
  *         in an arbitrary order.
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21_ReadOnlyElementProxy_5values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyElementProxy_values, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__398)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 317, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy->tp_dict, __pyx_n_s_values, __pyx_t_2) < 0) __PYX_ERR(7, 317, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21_ReadOnlyElementProxy_5values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyElementProxy_values, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__398)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 317, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy->tp_dict, __pyx_n_s_values, __pyx_t_7) < 0) __PYX_ERR(7, 317, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy);
 
   /* "src/lxml/readonlytree.pxi":324
@@ -257699,10 +257798,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Gets element attributes, as a sequence. The attributes are returned
  *         in an arbitrary order.
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21_ReadOnlyElementProxy_7items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyElementProxy_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__400)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 324, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy->tp_dict, __pyx_n_s_items, __pyx_t_2) < 0) __PYX_ERR(7, 324, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21_ReadOnlyElementProxy_7items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ReadOnlyElementProxy_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__400)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 324, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy->tp_dict, __pyx_n_s_items, __pyx_t_7) < 0) __PYX_ERR(7, 324, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy);
 
   /* "src/lxml/readonlytree.pxi":390
@@ -257712,10 +257811,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Append a copy of an Element to the list of children.
  *         """
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_OpaqueDocumentWrapper_1append, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_OpaqueDocumentWrapper_append, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__402)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 390, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__OpaqueDocumentWrapper->tp_dict, __pyx_n_s_append, __pyx_t_2) < 0) __PYX_ERR(7, 390, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_OpaqueDocumentWrapper_1append, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_OpaqueDocumentWrapper_append, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__402)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 390, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__OpaqueDocumentWrapper->tp_dict, __pyx_n_s_append, __pyx_t_7) < 0) __PYX_ERR(7, 390, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__OpaqueDocumentWrapper);
 
   /* "src/lxml/readonlytree.pxi":407
@@ -257725,10 +257824,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Append a copy of all Elements from a sequence to the list of
  *         children.
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_OpaqueDocumentWrapper_3extend, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_OpaqueDocumentWrapper_extend, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__404)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 407, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__OpaqueDocumentWrapper->tp_dict, __pyx_n_s_extend, __pyx_t_2) < 0) __PYX_ERR(7, 407, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_22_OpaqueDocumentWrapper_3extend, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_OpaqueDocumentWrapper_extend, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__404)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 407, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__OpaqueDocumentWrapper->tp_dict, __pyx_n_s_extend, __pyx_t_7) < 0) __PYX_ERR(7, 407, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__OpaqueDocumentWrapper);
 
   /* "src/lxml/readonlytree.pxi":487
@@ -257738,10 +257837,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Append a copy of an Element to the list of children.
  *         """
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23_AppendOnlyElementProxy_1append, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AppendOnlyElementProxy_append, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__406)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 487, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AppendOnlyElementProxy->tp_dict, __pyx_n_s_append, __pyx_t_2) < 0) __PYX_ERR(7, 487, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23_AppendOnlyElementProxy_1append, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AppendOnlyElementProxy_append, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__406)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 487, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AppendOnlyElementProxy->tp_dict, __pyx_n_s_append, __pyx_t_7) < 0) __PYX_ERR(7, 487, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AppendOnlyElementProxy);
 
   /* "src/lxml/readonlytree.pxi":499
@@ -257751,10 +257850,10 @@ if (!__Pyx_RefNanny) {
  *         u"""Append a copy of all Elements from a sequence to the list of
  *         children.
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23_AppendOnlyElementProxy_3extend, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AppendOnlyElementProxy_extend, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__408)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 499, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AppendOnlyElementProxy->tp_dict, __pyx_n_s_extend, __pyx_t_2) < 0) __PYX_ERR(7, 499, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23_AppendOnlyElementProxy_3extend, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_AppendOnlyElementProxy_extend, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__408)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 499, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AppendOnlyElementProxy->tp_dict, __pyx_n_s_extend, __pyx_t_7) < 0) __PYX_ERR(7, 499, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AppendOnlyElementProxy);
 
   /* "src/lxml/classlookup.pxi":248
@@ -257764,10 +257863,10 @@ if (!__Pyx_RefNanny) {
  *         u"""set_fallback(self, lookup)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_26FallbackElementClassLookup_5set_fallback, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FallbackElementClassLookup_set_f, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__410)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 248, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_FallbackElementClassLookup->tp_dict, __pyx_n_s_set_fallback, __pyx_t_2) < 0) __PYX_ERR(8, 248, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_26FallbackElementClassLookup_5set_fallback, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FallbackElementClassLookup_set_f, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__410)); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 248, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_FallbackElementClassLookup->tp_dict, __pyx_n_s_set_fallback, __pyx_t_7) < 0) __PYX_ERR(8, 248, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_FallbackElementClassLookup);
 
   /* "src/lxml/classlookup.pxi":430
@@ -257777,10 +257876,10 @@ if (!__Pyx_RefNanny) {
  *         u"lookup(self, type, doc, namespace, name)"
  *         return None
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_24CustomElementClassLookup_3lookup, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CustomElementClassLookup_lookup, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__412)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 430, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_CustomElementClassLookup->tp_dict, __pyx_n_s_lookup, __pyx_t_2) < 0) __PYX_ERR(8, 430, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_24CustomElementClassLookup_3lookup, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CustomElementClassLookup_lookup, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__412)); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 430, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_CustomElementClassLookup->tp_dict, __pyx_n_s_lookup, __pyx_t_7) < 0) __PYX_ERR(8, 430, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_CustomElementClassLookup);
 
   /* "src/lxml/classlookup.pxi":512
@@ -257790,10 +257889,10 @@ if (!__Pyx_RefNanny) {
  *         u"""lookup(self, doc, element)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_24PythonElementClassLookup_3lookup, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PythonElementClassLookup_lookup, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__414)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 512, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_PythonElementClassLookup->tp_dict, __pyx_n_s_lookup, __pyx_t_2) < 0) __PYX_ERR(8, 512, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_24PythonElementClassLookup_3lookup, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PythonElementClassLookup_lookup, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__414)); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 512, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_PythonElementClassLookup->tp_dict, __pyx_n_s_lookup, __pyx_t_7) < 0) __PYX_ERR(8, 512, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_PythonElementClassLookup);
 
   /* "src/lxml/classlookup.pxi":549
@@ -257803,11 +257902,11 @@ if (!__Pyx_RefNanny) {
  *     u"""set_element_class_lookup(lookup = None)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_43set_element_class_lookup, 0, __pyx_n_s_set_element_class_lookup, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__416)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 549, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__417);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_element_class_lookup, __pyx_t_2) < 0) __PYX_ERR(8, 549, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_43set_element_class_lookup, 0, __pyx_n_s_set_element_class_lookup, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__416)); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 549, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__417);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_element_class_lookup, __pyx_t_7) < 0) __PYX_ERR(8, 549, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/classlookup.pxi":578
  * # default setup: parser delegation
@@ -257816,24 +257915,24 @@ if (!__Pyx_RefNanny) {
  * 
  * set_element_class_lookup(DEFAULT_ELEMENT_CLASS_LOOKUP)
  */
-  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree_ParserBasedElementClassLookup)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 578, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree_ParserBasedElementClassLookup)); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 578, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree_DEFAULT_ELEMENT_CLASS_LOOKUP));
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_DEFAULT_ELEMENT_CLASS_LOOKUP, ((struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup *)__pyx_t_2));
-  __Pyx_GIVEREF(__pyx_t_2);
-  __pyx_t_2 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_DEFAULT_ELEMENT_CLASS_LOOKUP, ((struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup *)__pyx_t_7));
+  __Pyx_GIVEREF(__pyx_t_7);
+  __pyx_t_7 = 0;
 
   /* "src/lxml/classlookup.pxi":580
  * DEFAULT_ELEMENT_CLASS_LOOKUP = ParserBasedElementClassLookup()
  * 
  * set_element_class_lookup(DEFAULT_ELEMENT_CLASS_LOOKUP)             # <<<<<<<<<<<<<<
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 580, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 580, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_7, ((PyObject *)__pyx_v_4lxml_5etree_DEFAULT_ELEMENT_CLASS_LOOKUP)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 580, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_4lxml_5etree_DEFAULT_ELEMENT_CLASS_LOOKUP)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 580, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/nsclasses.pxi":29
  *         self._entries = {}
@@ -257842,10 +257941,10 @@ if (!__Pyx_RefNanny) {
  *         u"""update(self, class_dict_iterable)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_NamespaceRegistry_3update, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NamespaceRegistry_update, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__419)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 29, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_dict, __pyx_n_s_update, __pyx_t_1) < 0) __PYX_ERR(11, 29, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_NamespaceRegistry_3update, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NamespaceRegistry_update, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__419)); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_dict, __pyx_n_s_update, __pyx_t_2) < 0) __PYX_ERR(11, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__NamespaceRegistry);
 
   /* "src/lxml/nsclasses.pxi":74
@@ -257855,10 +257954,10 @@ if (!__Pyx_RefNanny) {
  *         return list(self._entries.items())
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_NamespaceRegistry_11items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NamespaceRegistry_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__421)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 74, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_dict, __pyx_n_s_items, __pyx_t_1) < 0) __PYX_ERR(11, 74, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_NamespaceRegistry_11items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NamespaceRegistry_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__421)); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_dict, __pyx_n_s_items, __pyx_t_2) < 0) __PYX_ERR(11, 74, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__NamespaceRegistry);
 
   /* "src/lxml/nsclasses.pxi":77
@@ -257868,10 +257967,10 @@ if (!__Pyx_RefNanny) {
  *         return iter(self._entries.items())
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_NamespaceRegistry_13iteritems, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NamespaceRegistry_iteritems, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__423)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 77, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_dict, __pyx_n_s_iteritems, __pyx_t_1) < 0) __PYX_ERR(11, 77, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_NamespaceRegistry_13iteritems, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NamespaceRegistry_iteritems, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__423)); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_dict, __pyx_n_s_iteritems, __pyx_t_2) < 0) __PYX_ERR(11, 77, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__NamespaceRegistry);
 
   /* "src/lxml/nsclasses.pxi":80
@@ -257881,10 +257980,10 @@ if (!__Pyx_RefNanny) {
  *         self._entries.clear()
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_NamespaceRegistry_15clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NamespaceRegistry_clear, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__425)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 80, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_dict, __pyx_n_s_clear, __pyx_t_1) < 0) __PYX_ERR(11, 80, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_NamespaceRegistry_15clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NamespaceRegistry_clear, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__425)); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_dict, __pyx_n_s_clear, __pyx_t_2) < 0) __PYX_ERR(11, 80, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__NamespaceRegistry);
 
   /* "src/lxml/nsclasses.pxi":99
@@ -257894,10 +257993,10 @@ if (!__Pyx_RefNanny) {
  *         self[name] = obj
  *         return obj
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_NamespaceRegistry_19__deco, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NamespaceRegistry___deco, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__427)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 99, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_dict, __pyx_n_s_deco, __pyx_t_1) < 0) __PYX_ERR(11, 99, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_18_NamespaceRegistry_19__deco, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_NamespaceRegistry___deco, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__427)); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 99, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_dict, __pyx_n_s_deco, __pyx_t_2) < 0) __PYX_ERR(11, 99, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__NamespaceRegistry);
 
   /* "src/lxml/nsclasses.pxi":147
@@ -257907,10 +258006,10 @@ if (!__Pyx_RefNanny) {
  *         u"""get_namespace(self, ns_uri)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27ElementNamespaceClassLookup_5get_namespace, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementNamespaceClassLookup_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__429)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 147, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_ElementNamespaceClassLookup->tp_dict, __pyx_n_s_get_namespace, __pyx_t_1) < 0) __PYX_ERR(11, 147, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_27ElementNamespaceClassLookup_5get_namespace, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementNamespaceClassLookup_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__429)); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 147, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_ElementNamespaceClassLookup->tp_dict, __pyx_n_s_get_namespace, __pyx_t_2) < 0) __PYX_ERR(11, 147, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_ElementNamespaceClassLookup);
 
   /* "src/lxml/nsclasses.pxi":205
@@ -257920,12 +258019,12 @@ if (!__Pyx_RefNanny) {
  * 
  * def FunctionNamespace(ns_uri):
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 205, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 205, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree___FUNCTION_NAMESPACE_REGISTRIES);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___FUNCTION_NAMESPACE_REGISTRIES, ((PyObject*)__pyx_t_1));
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___FUNCTION_NAMESPACE_REGISTRIES, ((PyObject*)__pyx_t_2));
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
 
   /* "src/lxml/nsclasses.pxi":207
  * __FUNCTION_NAMESPACE_REGISTRIES = {}
@@ -257934,10 +258033,10 @@ if (!__Pyx_RefNanny) {
  *     u"""FunctionNamespace(ns_uri)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_45FunctionNamespace, 0, __pyx_n_s_FunctionNamespace, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__431)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 207, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FunctionNamespace, __pyx_t_1) < 0) __PYX_ERR(11, 207, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_45FunctionNamespace, 0, __pyx_n_s_FunctionNamespace, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__431)); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 207, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FunctionNamespace, __pyx_t_2) < 0) __PYX_ERR(11, 207, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "src/lxml/docloader.pxi":25
  * cdef class Resolver:
@@ -257946,10 +258045,10 @@ if (!__Pyx_RefNanny) {
  *         u"""resolve(self, system_url, public_id, context)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8Resolver_1resolve, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Resolver_resolve, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__433)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 25, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_Resolver->tp_dict, __pyx_n_s_resolve, __pyx_t_1) < 0) __PYX_ERR(12, 25, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8Resolver_1resolve, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Resolver_resolve, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__433)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_Resolver->tp_dict, __pyx_n_s_resolve, __pyx_t_2) < 0) __PYX_ERR(12, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_Resolver);
 
   /* "src/lxml/docloader.pxi":36
@@ -257959,10 +258058,10 @@ if (!__Pyx_RefNanny) {
  *         u"""resolve_empty(self, context)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8Resolver_3resolve_empty, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Resolver_resolve_empty, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__435)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 36, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_Resolver->tp_dict, __pyx_n_s_resolve_empty, __pyx_t_1) < 0) __PYX_ERR(12, 36, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8Resolver_3resolve_empty, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Resolver_resolve_empty, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__435)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_Resolver->tp_dict, __pyx_n_s_resolve_empty, __pyx_t_2) < 0) __PYX_ERR(12, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_Resolver);
 
   /* "src/lxml/docloader.pxi":48
@@ -257972,10 +258071,10 @@ if (!__Pyx_RefNanny) {
  *         u"""resolve_string(self, string, context, base_url=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8Resolver_5resolve_string, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Resolver_resolve_string, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__437)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 48, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_Resolver->tp_dict, __pyx_n_s_resolve_string, __pyx_t_1) < 0) __PYX_ERR(12, 48, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8Resolver_5resolve_string, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Resolver_resolve_string, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__437)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_Resolver->tp_dict, __pyx_n_s_resolve_string, __pyx_t_2) < 0) __PYX_ERR(12, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_Resolver);
 
   /* "src/lxml/docloader.pxi":69
@@ -257985,10 +258084,10 @@ if (!__Pyx_RefNanny) {
  *         u"""resolve_filename(self, filename, context)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8Resolver_7resolve_filename, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Resolver_resolve_filename, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__439)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 69, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_Resolver->tp_dict, __pyx_n_s_resolve_filename, __pyx_t_1) < 0) __PYX_ERR(12, 69, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8Resolver_7resolve_filename, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Resolver_resolve_filename, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__439)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_Resolver->tp_dict, __pyx_n_s_resolve_filename, __pyx_t_2) < 0) __PYX_ERR(12, 69, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_Resolver);
 
   /* "src/lxml/docloader.pxi":83
@@ -257998,10 +258097,10 @@ if (!__Pyx_RefNanny) {
  *         u"""resolve_file(self, f, context, base_url=None, close=True)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8Resolver_9resolve_file, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Resolver_resolve_file, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__441)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 83, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_Resolver->tp_dict, __pyx_n_s_resolve_file, __pyx_t_1) < 0) __PYX_ERR(12, 83, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8Resolver_9resolve_file, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Resolver_resolve_file, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__441)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 83, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_Resolver->tp_dict, __pyx_n_s_resolve_file, __pyx_t_2) < 0) __PYX_ERR(12, 83, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_Resolver);
 
   /* "src/lxml/docloader.pxi":120
@@ -258011,10 +258110,10 @@ if (!__Pyx_RefNanny) {
  *         u"""add(self, resolver)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ResolverRegistry_3add, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ResolverRegistry_add, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__443)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 120, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ResolverRegistry->tp_dict, __pyx_n_s_add, __pyx_t_1) < 0) __PYX_ERR(12, 120, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ResolverRegistry_3add, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ResolverRegistry_add, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__443)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 120, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ResolverRegistry->tp_dict, __pyx_n_s_add, __pyx_t_2) < 0) __PYX_ERR(12, 120, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ResolverRegistry);
 
   /* "src/lxml/docloader.pxi":133
@@ -258024,10 +258123,10 @@ if (!__Pyx_RefNanny) {
  *         u"remove(self, resolver)"
  *         self._resolvers.discard(resolver)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ResolverRegistry_5remove, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ResolverRegistry_remove, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__445)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 133, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ResolverRegistry->tp_dict, __pyx_n_s_remove, __pyx_t_1) < 0) __PYX_ERR(12, 133, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ResolverRegistry_5remove, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ResolverRegistry_remove, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__445)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 133, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ResolverRegistry->tp_dict, __pyx_n_s_remove, __pyx_t_2) < 0) __PYX_ERR(12, 133, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ResolverRegistry);
 
   /* "src/lxml/docloader.pxi":143
@@ -258037,10 +258136,10 @@ if (!__Pyx_RefNanny) {
  *         u"copy(self)"
  *         return self._copy()
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ResolverRegistry_7copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ResolverRegistry_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__447)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 143, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ResolverRegistry->tp_dict, __pyx_n_s_copy, __pyx_t_1) < 0) __PYX_ERR(12, 143, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ResolverRegistry_7copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ResolverRegistry_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__447)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 143, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ResolverRegistry->tp_dict, __pyx_n_s_copy, __pyx_t_2) < 0) __PYX_ERR(12, 143, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ResolverRegistry);
 
   /* "src/lxml/docloader.pxi":147
@@ -258050,10 +258149,10 @@ if (!__Pyx_RefNanny) {
  *         u"resolve(self, system_url, public_id, context)"
  *         for resolver in self._resolvers:
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ResolverRegistry_9resolve, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ResolverRegistry_resolve, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__449)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 147, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ResolverRegistry->tp_dict, __pyx_n_s_resolve, __pyx_t_1) < 0) __PYX_ERR(12, 147, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_17_ResolverRegistry_9resolve, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ResolverRegistry_resolve, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__449)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 147, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ResolverRegistry->tp_dict, __pyx_n_s_resolve, __pyx_t_2) < 0) __PYX_ERR(12, 147, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ResolverRegistry);
 
   /* "src/lxml/parser.pxi":7
@@ -258063,17 +258162,17 @@ if (!__Pyx_RefNanny) {
  *     """Syntax error while parsing an XML document.
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_2, __pyx_n_s_ParseError, __pyx_n_s_ParseError, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Syntax_error_while_parsing_an_XM); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 7, __pyx_L1_error)
+  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
+  __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_7, __pyx_n_s_ParseError, __pyx_n_s_ParseError, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Syntax_error_while_parsing_an_XM); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "src/lxml/parser.pxi":12
  *     For compatibility with ElementTree 1.3 and later.
@@ -258085,7 +258184,7 @@ if (!__Pyx_RefNanny) {
   __pyx_t_8 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10ParseError_1__init__, 0, __pyx_n_s_ParseError___init, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__451)); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_8, __pyx_tuple__452);
-  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_n_s_init, __pyx_t_8) < 0) __PYX_ERR(2, 12, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_init, __pyx_t_8) < 0) __PYX_ERR(2, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
   /* "src/lxml/parser.pxi":19
@@ -258108,7 +258207,7 @@ if (!__Pyx_RefNanny) {
   __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_property, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_n_s_position, __pyx_t_9) < 0) __PYX_ERR(2, 19, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_position, __pyx_t_9) < 0) __PYX_ERR(2, 19, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
   /* "src/lxml/parser.pxi":22
@@ -258118,7 +258217,7 @@ if (!__Pyx_RefNanny) {
  *     def position(self, new_pos):
  *         self.lineno, column = new_pos
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_7, __pyx_n_s_position);
+  __pyx_t_8 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_position);
   if (unlikely(!__pyx_t_8)) {
     PyErr_Clear();
     __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_position);
@@ -258154,7 +258253,7 @@ if (!__Pyx_RefNanny) {
   if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 22, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_n_s_position, __pyx_t_9) < 0) __PYX_ERR(2, 23, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_position, __pyx_t_9) < 0) __PYX_ERR(2, 23, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
   /* "src/lxml/parser.pxi":7
@@ -258164,13 +258263,13 @@ if (!__Pyx_RefNanny) {
  *     """Syntax error while parsing an XML document.
  * 
  */
-  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ParseError, __pyx_t_2, __pyx_t_7, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 7, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_ParseError, __pyx_t_7, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_ParseError, __pyx_t_9) < 0) __PYX_ERR(2, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/parser.pxi":27
  *         self.offset = column - 1
@@ -258179,12 +258278,12 @@ if (!__Pyx_RefNanny) {
  * 
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ParseError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 27, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_ParseError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__ParseError);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__ParseError, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_2);
-  __pyx_t_2 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__ParseError, __pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_7);
+  __pyx_t_7 = 0;
 
   /* "src/lxml/parser.pxi":30
  * 
@@ -258193,24 +258292,24 @@ if (!__Pyx_RefNanny) {
  *     """Syntax error while parsing an XML document.
  *     """
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ParseError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 30, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 30, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
-  __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 30, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_ParseError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_XMLSyntaxError, __pyx_n_s_XMLSyntaxError, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Syntax_error_while_parsing_an_XM_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 30, __pyx_L1_error)
+  __Pyx_GIVEREF(__pyx_t_7);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
+  __pyx_t_7 = 0;
+  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_XMLSyntaxError, __pyx_t_1, __pyx_t_7, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 30, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_2, __pyx_n_s_XMLSyntaxError, __pyx_n_s_XMLSyntaxError, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Syntax_error_while_parsing_an_XM_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_XMLSyntaxError, __pyx_t_2, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_XMLSyntaxError, __pyx_t_9) < 0) __PYX_ERR(2, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/parser.pxi":178
  *         context._implied_parser_contexts.pop()
@@ -258219,12 +258318,12 @@ if (!__Pyx_RefNanny) {
  * __GLOBAL_PARSER_CONTEXT.initMainParserContext()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ParserDictionaryContext)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 178, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__ParserDictionaryContext)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 178, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT));
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, ((struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)__pyx_t_1));
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, ((struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)__pyx_t_2));
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
 
   /* "src/lxml/parser.pxi":179
  * 
@@ -258262,85 +258361,85 @@ if (!__Pyx_RefNanny) {
  */
   __pyx_v_4lxml_5etree___DEFAULT_ENTITY_LOADER = xmlGetExternalEntityLoader();
 
-  /* "src/lxml/parser.pxi":975
+  /* "src/lxml/parser.pxi":978
  *         return u"libxml2 %d.%d.%d" % LIBXML_VERSION
  * 
  *     def setElementClassLookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
  *         u":deprecated: use ``parser.set_element_class_lookup(lookup)`` instead."
  *         self.set_element_class_lookup(lookup)
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_BaseParser_3setElementClassLookup, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseParser_setElementClassLooku, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__458)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 975, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser->tp_dict, __pyx_n_s_setElementClassLookup, __pyx_t_1) < 0) __PYX_ERR(2, 975, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_BaseParser_3setElementClassLookup, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseParser_setElementClassLooku, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__458)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 978, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser->tp_dict, __pyx_n_s_setElementClassLookup, __pyx_t_2) < 0) __PYX_ERR(2, 978, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__BaseParser);
 
-  /* "src/lxml/parser.pxi":979
+  /* "src/lxml/parser.pxi":982
  *         self.set_element_class_lookup(lookup)
  * 
  *     def set_element_class_lookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
  *         u"""set_element_class_lookup(self, lookup = None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_BaseParser_5set_element_class_lookup, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseParser_set_element_class_lo, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__460)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 979, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser->tp_dict, __pyx_n_s_set_element_class_lookup, __pyx_t_1) < 0) __PYX_ERR(2, 979, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_BaseParser_5set_element_class_lookup, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseParser_set_element_class_lo, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__460)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 982, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser->tp_dict, __pyx_n_s_set_element_class_lookup, __pyx_t_2) < 0) __PYX_ERR(2, 982, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__BaseParser);
 
-  /* "src/lxml/parser.pxi":1006
+  /* "src/lxml/parser.pxi":1009
  *         return parser
  * 
  *     def copy(self):             # <<<<<<<<<<<<<<
  *         u"""copy(self)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_BaseParser_7copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseParser_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__462)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1006, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser->tp_dict, __pyx_n_s_copy, __pyx_t_1) < 0) __PYX_ERR(2, 1006, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_BaseParser_7copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseParser_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__462)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1009, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser->tp_dict, __pyx_n_s_copy, __pyx_t_2) < 0) __PYX_ERR(2, 1009, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__BaseParser);
 
-  /* "src/lxml/parser.pxi":1013
+  /* "src/lxml/parser.pxi":1016
  *         return self._copy()
  * 
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
  *         u"""makeelement(self, _tag, attrib=None, nsmap=None, **_extra)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_BaseParser_9makeelement, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseParser_makeelement, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__464)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1013, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser->tp_dict, __pyx_n_s_makeelement, __pyx_t_1) < 0) __PYX_ERR(2, 1013, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_BaseParser_9makeelement, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BaseParser_makeelement, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__464)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1016, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__BaseParser->tp_dict, __pyx_n_s_makeelement, __pyx_t_2) < 0) __PYX_ERR(2, 1016, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__BaseParser);
 
-  /* "src/lxml/parser.pxi":1256
+  /* "src/lxml/parser.pxi":1259
  *         return self._getPushParserContext()._error_log.copy()
  * 
  *     cpdef feed(self, data):             # <<<<<<<<<<<<<<
  *         u"""feed(self, data)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_FeedParser_1feed, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FeedParser_feed, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__466)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1256, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__FeedParser->tp_dict, __pyx_n_s_feed, __pyx_t_1) < 0) __PYX_ERR(2, 1256, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_FeedParser_1feed, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FeedParser_feed, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__466)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1259, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__FeedParser->tp_dict, __pyx_n_s_feed, __pyx_t_2) < 0) __PYX_ERR(2, 1259, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__FeedParser);
 
-  /* "src/lxml/parser.pxi":1380
+  /* "src/lxml/parser.pxi":1383
  *                 context.cleanup()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         u"""close(self)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_FeedParser_3close, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FeedParser_close, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__468)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1380, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__FeedParser->tp_dict, __pyx_n_s_close, __pyx_t_1) < 0) __PYX_ERR(2, 1380, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11_FeedParser_3close, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FeedParser_close, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__468)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1383, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__FeedParser->tp_dict, __pyx_n_s_close, __pyx_t_2) < 0) __PYX_ERR(2, 1383, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__FeedParser);
 
-  /* "src/lxml/parser.pxi":1473
+  /* "src/lxml/parser.pxi":1476
  *     xmlparser.XML_PARSE_NOCDATA |
  *     xmlparser.XML_PARSE_NONET   |
  *     xmlparser.XML_PARSE_COMPACT |             # <<<<<<<<<<<<<<
@@ -258349,80 +258448,80 @@ if (!__Pyx_RefNanny) {
  */
   __pyx_v_4lxml_5etree__XML_DEFAULT_PARSE_OPTIONS = ((((XML_PARSE_NOENT | XML_PARSE_NOCDATA) | XML_PARSE_NONET) | XML_PARSE_COMPACT) | XML_PARSE_BIG_LINES);
 
-  /* "src/lxml/parser.pxi":1586
+  /* "src/lxml/parser.pxi":1589
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
  *         return (<_SaxParserContext?>self._getPushParserContext()).events_iterator
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13XMLPullParser_3read_events, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XMLPullParser_read_events, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__470)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1586, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XMLPullParser->tp_dict, __pyx_n_s_read_events, __pyx_t_1) < 0) __PYX_ERR(2, 1586, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_13XMLPullParser_3read_events, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XMLPullParser_read_events, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__470)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1589, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XMLPullParser->tp_dict, __pyx_n_s_read_events, __pyx_t_2) < 0) __PYX_ERR(2, 1589, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_XMLPullParser);
 
-  /* "src/lxml/parser.pxi":1630
+  /* "src/lxml/parser.pxi":1633
  * 
  * # ET 1.2 compatible name
  * XMLTreeBuilder = ETCompatXMLParser             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_XMLTreeBuilder, ((PyObject *)__pyx_ptype_4lxml_5etree_ETCompatXMLParser)) < 0) __PYX_ERR(2, 1630, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_XMLTreeBuilder, ((PyObject *)__pyx_ptype_4lxml_5etree_ETCompatXMLParser)) < 0) __PYX_ERR(2, 1633, __pyx_L1_error)
 
-  /* "src/lxml/parser.pxi":1634
+  /* "src/lxml/parser.pxi":1637
  * 
  * cdef XMLParser __DEFAULT_XML_PARSER
  * __DEFAULT_XML_PARSER = XMLParser()             # <<<<<<<<<<<<<<
  * 
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree_XMLParser)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1634, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree_XMLParser)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1637, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER));
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER, ((struct __pyx_obj_4lxml_5etree_XMLParser *)__pyx_t_1));
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER, ((struct __pyx_obj_4lxml_5etree_XMLParser *)__pyx_t_2));
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "src/lxml/parser.pxi":1636
+  /* "src/lxml/parser.pxi":1639
  * __DEFAULT_XML_PARSER = XMLParser()
  * 
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)             # <<<<<<<<<<<<<<
  * 
  * def set_default_parser(_BaseParser parser=None):
  */
-  __pyx_t_1 = ((PyObject *)__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER);
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_f_4lxml_5etree_24_ParserDictionaryContext_setDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_1));
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = ((PyObject *)__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER);
+  __Pyx_INCREF(__pyx_t_2);
+  __pyx_f_4lxml_5etree_24_ParserDictionaryContext_setDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_2));
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/parser.pxi":1638
+  /* "src/lxml/parser.pxi":1641
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)
  * 
  * def set_default_parser(_BaseParser parser=None):             # <<<<<<<<<<<<<<
  *     u"""set_default_parser(parser=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_47set_default_parser, 0, __pyx_n_s_set_default_parser, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__472)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1638, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__473);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_default_parser, __pyx_t_1) < 0) __PYX_ERR(2, 1638, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_47set_default_parser, 0, __pyx_n_s_set_default_parser, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__472)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1641, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__473);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_default_parser, __pyx_t_2) < 0) __PYX_ERR(2, 1641, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/parser.pxi":1654
+  /* "src/lxml/parser.pxi":1657
  *     __GLOBAL_PARSER_CONTEXT.setDefaultParser(parser)
  * 
  * def get_default_parser():             # <<<<<<<<<<<<<<
  *     u"get_default_parser()"
  *     return __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_49get_default_parser, 0, __pyx_n_s_get_default_parser, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__474)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1654, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_default_parser, __pyx_t_1) < 0) __PYX_ERR(2, 1654, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_49get_default_parser, 0, __pyx_n_s_get_default_parser, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__474)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1657, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_default_parser, __pyx_t_2) < 0) __PYX_ERR(2, 1657, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/lxml/parser.pxi":1665
+  /* "src/lxml/parser.pxi":1668
  * _HTML_DEFAULT_PARSE_OPTIONS = (
  *     htmlparser.HTML_PARSE_RECOVER |
  *     htmlparser.HTML_PARSE_NONET   |             # <<<<<<<<<<<<<<
@@ -258431,31 +258530,31 @@ if (!__Pyx_RefNanny) {
  */
   __pyx_v_4lxml_5etree__HTML_DEFAULT_PARSE_OPTIONS = ((HTML_PARSE_RECOVER | HTML_PARSE_NONET) | HTML_PARSE_COMPACT);
 
-  /* "src/lxml/parser.pxi":1731
+  /* "src/lxml/parser.pxi":1734
  * 
  * cdef HTMLParser __DEFAULT_HTML_PARSER
  * __DEFAULT_HTML_PARSER = HTMLParser()             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree_HTMLParser)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1731, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree_HTMLParser)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1734, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree___DEFAULT_HTML_PARSER));
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___DEFAULT_HTML_PARSER, ((struct __pyx_obj_4lxml_5etree_HTMLParser *)__pyx_t_1));
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___DEFAULT_HTML_PARSER, ((struct __pyx_obj_4lxml_5etree_HTMLParser *)__pyx_t_2));
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "src/lxml/parser.pxi":1759
+  /* "src/lxml/parser.pxi":1762
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
  *         return (<_SaxParserContext?>self._getPushParserContext()).events_iterator
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14HTMLPullParser_3read_events, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_HTMLPullParser_read_events, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__476)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1759, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_HTMLPullParser->tp_dict, __pyx_n_s_read_events, __pyx_t_1) < 0) __PYX_ERR(2, 1759, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_14HTMLPullParser_3read_events, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_HTMLPullParser_read_events, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__476)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1762, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_HTMLPullParser->tp_dict, __pyx_n_s_read_events, __pyx_t_2) < 0) __PYX_ERR(2, 1762, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_HTMLPullParser);
 
   /* "src/lxml/saxparser.pxi":3
@@ -258465,27 +258564,27 @@ if (!__Pyx_RefNanny) {
  *     """
  *     An XMLSyntaxError that additionally inherits from AssertionError for
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 3, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
   __Pyx_INCREF(__pyx_builtin_AssertionError);
   __Pyx_GIVEREF(__pyx_builtin_AssertionError);
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_builtin_AssertionError);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3, __pyx_L1_error)
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_builtin_AssertionError);
+  __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_7, __pyx_n_s_XMLSyntaxAssertionError, __pyx_n_s_XMLSyntaxAssertionError, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_An_XMLSyntaxError_that_addition); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_2, __pyx_n_s_XMLSyntaxAssertionError, __pyx_n_s_XMLSyntaxAssertionError, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_An_XMLSyntaxError_that_addition); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_XMLSyntaxAssertionError, __pyx_t_2, __pyx_t_7, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 3, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_XMLSyntaxAssertionError, __pyx_t_7, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_XMLSyntaxAssertionError, __pyx_t_9) < 0) __PYX_ERR(3, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/saxparser.pxi":813
  *     # Python level event handlers
@@ -258494,10 +258593,10 @@ if (!__Pyx_RefNanny) {
  *         u"""close(self)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_3close, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_close, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__478)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 813, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_close, __pyx_t_2) < 0) __PYX_ERR(3, 813, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_3close, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_close, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__478)); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 813, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_close, __pyx_t_7) < 0) __PYX_ERR(3, 813, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_TreeBuilder);
 
   /* "src/lxml/saxparser.pxi":826
@@ -258507,10 +258606,10 @@ if (!__Pyx_RefNanny) {
  *         u"""data(self, data)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_5data, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_data, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__480)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 826, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_data, __pyx_t_2) < 0) __PYX_ERR(3, 826, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_5data, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_data, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__480)); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 826, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_data, __pyx_t_7) < 0) __PYX_ERR(3, 826, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_TreeBuilder);
 
   /* "src/lxml/saxparser.pxi":834
@@ -258520,10 +258619,10 @@ if (!__Pyx_RefNanny) {
  *         u"""start(self, tag, attrs, nsmap=None)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_7start, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_start, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__482)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 834, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_start, __pyx_t_2) < 0) __PYX_ERR(3, 834, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_7start, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_start, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__482)); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 834, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_start, __pyx_t_7) < 0) __PYX_ERR(3, 834, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_TreeBuilder);
 
   /* "src/lxml/saxparser.pxi":843
@@ -258533,10 +258632,10 @@ if (!__Pyx_RefNanny) {
  *         u"""end(self, tag)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_9end, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_end, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__484)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 843, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_end, __pyx_t_2) < 0) __PYX_ERR(3, 843, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_9end, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_end, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__484)); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 843, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_end, __pyx_t_7) < 0) __PYX_ERR(3, 843, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_TreeBuilder);
 
   /* "src/lxml/saxparser.pxi":853
@@ -258546,10 +258645,10 @@ if (!__Pyx_RefNanny) {
  *         u"""pi(self, target, data=None)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_11pi, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_pi, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__486)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 853, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_pi, __pyx_t_2) < 0) __PYX_ERR(3, 853, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_11pi, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_pi, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__486)); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 853, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_pi, __pyx_t_7) < 0) __PYX_ERR(3, 853, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_TreeBuilder);
 
   /* "src/lxml/saxparser.pxi":861
@@ -258559,10 +258658,10 @@ if (!__Pyx_RefNanny) {
  *         u"""comment(self, comment)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_13comment, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_comment, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__488)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 861, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_comment, __pyx_t_2) < 0) __PYX_ERR(3, 861, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_11TreeBuilder_13comment, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TreeBuilder_comment, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__488)); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 861, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_TreeBuilder->tp_dict, __pyx_n_s_comment, __pyx_t_7) < 0) __PYX_ERR(3, 861, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_TreeBuilder);
 
   /* "src/lxml/parsertarget.pxi":4
@@ -258588,22 +258687,22 @@ if (!__Pyx_RefNanny) {
  * except ImportError:
  *     from inspect import getargspec as inspect_getargspec
  */
-      __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 5, __pyx_L21_error)
-      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(13, 5, __pyx_L21_error)
+      __Pyx_GOTREF(__pyx_t_7);
       __Pyx_INCREF(__pyx_n_s_getfullargspec);
       __Pyx_GIVEREF(__pyx_n_s_getfullargspec);
-      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_getfullargspec);
-      __pyx_t_1 = __Pyx_patch_inspect(__Pyx_Import(__pyx_n_s_inspect, __pyx_t_2, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 5, __pyx_L21_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_getfullargspec); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 5, __pyx_L21_error)
+      PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_getfullargspec);
+      __pyx_t_2 = __Pyx_patch_inspect(__Pyx_Import(__pyx_n_s_inspect, __pyx_t_7, 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 5, __pyx_L21_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_getfullargspec); if (unlikely(!__pyx_t_7)) __PYX_ERR(13, 5, __pyx_L21_error)
+      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_INCREF(__pyx_t_7);
       __Pyx_XGOTREF(__pyx_v_4lxml_5etree_inspect_getargspec);
-      __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_inspect_getargspec, __pyx_t_2);
-      __Pyx_GIVEREF(__pyx_t_2);
+      __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_inspect_getargspec, __pyx_t_7);
+      __Pyx_GIVEREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
       /* "src/lxml/parsertarget.pxi":4
  * 
@@ -258636,10 +258735,10 @@ if (!__Pyx_RefNanny) {
     __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
     if (__pyx_t_6) {
       __Pyx_AddTraceback("lxml.etree", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_7) < 0) __PYX_ERR(13, 6, __pyx_L23_except_error)
-      __Pyx_GOTREF(__pyx_t_1);
+      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_7, &__pyx_t_1) < 0) __PYX_ERR(13, 6, __pyx_L23_except_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_GOTREF(__pyx_t_1);
 
       /* "src/lxml/parsertarget.pxi":7
  *     from inspect import getfullargspec as inspect_getargspec
@@ -258664,9 +258763,9 @@ if (!__Pyx_RefNanny) {
       __Pyx_GIVEREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       goto __pyx_L22_exception_handled;
     }
     goto __pyx_L23_except_error;
@@ -258699,15 +258798,15 @@ if (!__Pyx_RefNanny) {
  *     # Admittedly, this is somewhat ugly, but it's the easiest way
  *     # to push the Python level parser result through the parser
  */
-  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(13, 10, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
   __Pyx_GIVEREF(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
-  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
-  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 10, __pyx_L1_error)
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
+  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(13, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_1, __pyx_n_s_TargetParserResult, __pyx_n_s_TargetParserResult, (PyObject *) NULL, __pyx_n_s_lxml_etree, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_7, __pyx_n_s_TargetParserResult, __pyx_n_s_TargetParserResult, (PyObject *) NULL, __pyx_n_s_lxml_etree, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 10, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
 
   /* "src/lxml/parsertarget.pxi":14
  *     # to push the Python level parser result through the parser
@@ -258718,7 +258817,7 @@ if (!__Pyx_RefNanny) {
  */
   __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_19_TargetParserResult_1__init__, 0, __pyx_n_s_TargetParserResult___init, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__490)); if (unlikely(!__pyx_t_12)) __PYX_ERR(13, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
-  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_init, __pyx_t_12) < 0) __PYX_ERR(13, 14, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_init, __pyx_t_12) < 0) __PYX_ERR(13, 14, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 
   /* "src/lxml/parsertarget.pxi":10
@@ -258728,13 +258827,13 @@ if (!__Pyx_RefNanny) {
  *     # Admittedly, this is somewhat ugly, but it's the easiest way
  *     # to push the Python level parser result through the parser
  */
-  __pyx_t_12 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_TargetParserResult, __pyx_t_7, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(13, 10, __pyx_L1_error)
+  __pyx_t_12 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_TargetParserResult, __pyx_t_1, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(13, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_TargetParserResult, __pyx_t_12) < 0) __PYX_ERR(13, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/serializer.pxi":4
  * 
@@ -258743,22 +258842,22 @@ if (!__Pyx_RefNanny) {
  * 
  * 
  */
-  __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 4, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_n_s_GzipFile);
   __Pyx_GIVEREF(__pyx_n_s_GzipFile);
-  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_GzipFile);
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_gzip, __pyx_t_7, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 4, __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_GzipFile); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 4, __pyx_L1_error)
+  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_GzipFile);
+  __pyx_t_7 = __Pyx_Import(__pyx_n_s_gzip, __pyx_t_1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_INCREF(__pyx_t_7);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_GzipFile); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree_GzipFile);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_GzipFile, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_GzipFile, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "src/lxml/serializer.pxi":614
  * 
@@ -258767,19 +258866,19 @@ if (!__Pyx_RefNanny) {
  * 
  * cdef object gzip
  */
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 614, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 614, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __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, 614, __pyx_L1_error)
+  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_open);
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_io, __pyx_t_7, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 614, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_open); 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, 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, 614, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_open, __pyx_t_7) < 0) __PYX_ERR(9, 614, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/serializer.pxi":617
  * 
@@ -258788,12 +258887,12 @@ if (!__Pyx_RefNanny) {
  * 
  * cdef object getwriter
  */
-  __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_t_1 = __Pyx_Import(__pyx_n_s_gzip, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 617, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __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;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_gzip, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
   /* "src/lxml/serializer.pxi":620
  * 
@@ -258802,22 +258901,22 @@ if (!__Pyx_RefNanny) {
  * cdef object utf8_writer = getwriter('utf8')
  * 
  */
-  __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 620, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 620, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __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, 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, 620, __pyx_L1_error)
+  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_getwriter);
+  __pyx_t_7 = __Pyx_Import(__pyx_n_s_codecs, __pyx_t_1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 620, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_INCREF(__pyx_t_7);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_getwriter); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 620, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree_getwriter);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_getwriter, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_getwriter, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "src/lxml/serializer.pxi":621
  * cdef object getwriter
@@ -258826,12 +258925,12 @@ if (!__Pyx_RefNanny) {
  * 
  * 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, 621, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_getwriter, __pyx_tuple__491, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 621, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __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;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_utf8_writer, __pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_7);
+  __pyx_t_7 = 0;
 
   /* "src/lxml/serializer.pxi":624
  * 
@@ -258840,22 +258939,22 @@ if (!__Pyx_RefNanny) {
  * 
  * cdef object _open_utf8_file
  */
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 624, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 624, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __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, 624, __pyx_L1_error)
+  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_contextmanager);
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_contextlib, __pyx_t_7, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 624, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_contextmanager); 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, 624, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_t_7);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree_contextmanager);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_contextmanager, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_contextmanager, __pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/serializer.pxi":629
  * 
@@ -258864,9 +258963,9 @@ if (!__Pyx_RefNanny) {
  *     file = _getFSPathOrObject(file)
  *     if _isString(file):
  */
-  __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);
+  __pyx_t_1 = __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_1)) __PYX_ERR(9, 629, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__493);
 
   /* "src/lxml/serializer.pxi":628
  * cdef object _open_utf8_file
@@ -258875,13 +258974,13 @@ if (!__Pyx_RefNanny) {
  * def _open_utf8_file(file, compression=0):
  *     file = _getFSPathOrObject(file)
  */
-  __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_t_7 = __Pyx_PyObject_CallOneArg(__pyx_v_4lxml_5etree_contextmanager, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 628, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__open_utf8_file);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__open_utf8_file, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_2);
-  __pyx_t_2 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__open_utf8_file, __pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_7);
+  __pyx_t_7 = 0;
 
   /* "src/lxml/serializer.pxi":901
  * # C14N 2.0
@@ -258890,17 +258989,17 @@ if (!__Pyx_RefNanny) {
  *     """Convert XML to its C14N 2.0 serialised form.
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 901, __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, 901, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_from_file, ((PyObject *)Py_None)) < 0) __PYX_ERR(9, 901, __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, 901, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 901, __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, 901, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_out, ((PyObject *)Py_None)) < 0) __PYX_ERR(9, 901, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_from_file, ((PyObject *)Py_None)) < 0) __PYX_ERR(9, 901, __pyx_L1_error)
+  __pyx_t_1 = __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_1)) __PYX_ERR(9, 901, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__496);
+  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_7);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_canonicalize, __pyx_t_1) < 0) __PYX_ERR(9, 901, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/serializer.pxi":968
  * 
@@ -258909,29 +259008,29 @@ if (!__Pyx_RefNanny) {
  * 
  * 
  */
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 968, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 968, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_UNICODE); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 968, __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, 968, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 968, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 968, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_kp_s_w_w);
   __Pyx_GIVEREF(__pyx_kp_s_w_w);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_s_w_w);
-  __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, 968, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_w_w);
+  __Pyx_GIVEREF(__pyx_t_7);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
+  __pyx_t_7 = 0;
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 968, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __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, 968, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_match); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 968, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__looks_like_prefix_name);
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__looks_like_prefix_name, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__looks_like_prefix_name, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
 
   /* "src/lxml/serializer.pxi":1044
  *         self._root_done = False
@@ -258940,10 +259039,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1044, __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, 1044, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1044, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_iter_namespaces, __pyx_t_2) < 0) __PYX_ERR(9, 1044, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
   /* "src/lxml/serializer.pxi":1093
@@ -258953,10 +259052,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1093, __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, 1093, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1093, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_data, __pyx_t_2) < 0) __PYX_ERR(9, 1093, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
   /* "src/lxml/serializer.pxi":1111
@@ -258966,10 +259065,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1111, __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, 1111, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1111, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_start_ns_2, __pyx_t_2) < 0) __PYX_ERR(9, 1111, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
   /* "src/lxml/serializer.pxi":1119
@@ -258979,10 +259078,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1119, __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, 1119, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1119, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_start, __pyx_t_2) < 0) __PYX_ERR(9, 1119, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
   /* "src/lxml/serializer.pxi":1204
@@ -258992,10 +259091,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1204, __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, 1204, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1204, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_end, __pyx_t_2) < 0) __PYX_ERR(9, 1204, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
   /* "src/lxml/serializer.pxi":1216
@@ -259005,10 +259104,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1216, __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, 1216, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1216, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_comment, __pyx_t_2) < 0) __PYX_ERR(9, 1216, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
   /* "src/lxml/serializer.pxi":1229
@@ -259018,10 +259117,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1229, __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, 1229, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1229, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_pi, __pyx_t_2) < 0) __PYX_ERR(9, 1229, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
   /* "src/lxml/serializer.pxi":1241
@@ -259031,10 +259130,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1241, __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, 1241, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1241, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_C14NWriterTarget->tp_dict, __pyx_n_s_close, __pyx_t_2) < 0) __PYX_ERR(9, 1241, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_C14NWriterTarget);
 
   /* "src/lxml/serializer.pxi":1348
@@ -259044,10 +259143,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1348, __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, 1348, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1348, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_enter, __pyx_t_2) < 0) __PYX_ERR(9, 1348, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_xmlfile);
 
   /* "src/lxml/serializer.pxi":1355
@@ -259057,10 +259156,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1355, __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, 1355, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1355, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_exit, __pyx_t_2) < 0) __PYX_ERR(9, 1355, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_xmlfile);
 
   /* "src/lxml/serializer.pxi":1363
@@ -259070,10 +259169,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1363, __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, 1363, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1363, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_aenter, __pyx_t_2) < 0) __PYX_ERR(9, 1363, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_xmlfile);
 
   /* "src/lxml/serializer.pxi":1374
@@ -259083,10 +259182,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1374, __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, 1374, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1374, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_xmlfile->tp_dict, __pyx_n_s_aexit, __pyx_t_2) < 0) __PYX_ERR(9, 1374, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_xmlfile);
 
   /* "src/lxml/serializer.pxi":1431
@@ -259096,10 +259195,10 @@ if (!__Pyx_RefNanny) {
  *         """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, 1431, __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, 1431, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1431, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_write_declaration, __pyx_t_2) < 0) __PYX_ERR(9, 1431, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1460
@@ -259109,10 +259208,10 @@ if (!__Pyx_RefNanny) {
  *         """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, 1460, __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, 1460, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1460, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_write_doctype, __pyx_t_2) < 0) __PYX_ERR(9, 1460, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1477
@@ -259122,10 +259221,10 @@ if (!__Pyx_RefNanny) {
  *         """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, 1477, __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, 1477, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1477, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_method, __pyx_t_2) < 0) __PYX_ERR(9, 1477, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1487
@@ -259135,10 +259234,10 @@ if (!__Pyx_RefNanny) {
  *         """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, 1487, __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, 1487, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1487, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_element, __pyx_t_2) < 0) __PYX_ERR(9, 1487, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1624
@@ -259148,10 +259247,10 @@ if (!__Pyx_RefNanny) {
  *         """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, 1624, __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, 1624, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1624, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_write, __pyx_t_2) < 0) __PYX_ERR(9, 1624, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1671
@@ -259161,10 +259260,10 @@ if (!__Pyx_RefNanny) {
  *         """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, 1671, __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, 1671, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1671, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IncrementalFileWriter->tp_dict, __pyx_n_s_flush, __pyx_t_2) < 0) __PYX_ERR(9, 1671, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1718
@@ -259174,10 +259273,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1718, __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, 1718, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1718, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncDataWriter->tp_dict, __pyx_n_s_write, __pyx_t_2) < 0) __PYX_ERR(9, 1718, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncDataWriter);
 
   /* "src/lxml/serializer.pxi":1721
@@ -259187,10 +259286,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1721, __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, 1721, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1721, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncDataWriter->tp_dict, __pyx_n_s_close, __pyx_t_2) < 0) __PYX_ERR(9, 1721, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncDataWriter);
 
   /* "src/lxml/serializer.pxi":1750
@@ -259200,10 +259299,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1750, __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, 1750, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1750, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_flush, __pyx_t_2) < 0) __PYX_ERR(9, 1750, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1756
@@ -259213,10 +259312,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1756, __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, 1756, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1756, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_write_declaration, __pyx_t_2) < 0) __PYX_ERR(9, 1756, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1762
@@ -259226,10 +259325,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1762, __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, 1762, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1762, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_write_doctype, __pyx_t_2) < 0) __PYX_ERR(9, 1762, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1768
@@ -259239,10 +259338,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1768, __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, 1768, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1768, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_write, __pyx_t_2) < 0) __PYX_ERR(9, 1768, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1774
@@ -259252,10 +259351,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1774, __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, 1774, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1774, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_method, __pyx_t_2) < 0) __PYX_ERR(9, 1774, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1777
@@ -259265,10 +259364,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1777, __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, 1777, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1777, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_element, __pyx_t_2) < 0) __PYX_ERR(9, 1777, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1781
@@ -259278,10 +259377,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1781, __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, 1781, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1781, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter->tp_dict, __pyx_n_s_close_2, __pyx_t_2) < 0) __PYX_ERR(9, 1781, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncIncrementalFileWriter);
 
   /* "src/lxml/serializer.pxi":1801
@@ -259291,10 +259390,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1801, __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, 1801, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1801, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncFileWriterElement->tp_dict, __pyx_n_s_aenter, __pyx_t_2) < 0) __PYX_ERR(9, 1801, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncFileWriterElement);
 
   /* "src/lxml/serializer.pxi":1807
@@ -259304,10 +259403,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1807, __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, 1807, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1807, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__AsyncFileWriterElement->tp_dict, __pyx_n_s_aexit, __pyx_t_2) < 0) __PYX_ERR(9, 1807, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__AsyncFileWriterElement);
 
   /* "src/lxml/serializer.pxi":1829
@@ -259317,10 +259416,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1829, __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, 1829, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1829, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__FileWriterElement->tp_dict, __pyx_n_s_enter, __pyx_t_2) < 0) __PYX_ERR(9, 1829, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__FileWriterElement);
 
   /* "src/lxml/serializer.pxi":1833
@@ -259330,10 +259429,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1833, __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, 1833, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1833, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__FileWriterElement->tp_dict, __pyx_n_s_exit, __pyx_t_2) < 0) __PYX_ERR(9, 1833, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__FileWriterElement);
 
   /* "src/lxml/serializer.pxi":1855
@@ -259343,10 +259442,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1855, __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, 1855, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1855, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_enter, __pyx_t_2) < 0) __PYX_ERR(9, 1855, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MethodChanger);
 
   /* "src/lxml/serializer.pxi":1861
@@ -259356,10 +259455,10 @@ if (!__Pyx_RefNanny) {
  *         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, 1861, __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, 1861, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1861, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_exit, __pyx_t_2) < 0) __PYX_ERR(9, 1861, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MethodChanger);
 
   /* "src/lxml/serializer.pxi":1869
@@ -259369,10 +259468,10 @@ if (!__Pyx_RefNanny) {
  *         # 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, 1869, __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, 1869, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1869, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_aenter, __pyx_t_2) < 0) __PYX_ERR(9, 1869, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MethodChanger);
 
   /* "src/lxml/serializer.pxi":1873
@@ -259382,10 +259481,10 @@ if (!__Pyx_RefNanny) {
  *         # 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, 1873, __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, 1873, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __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_2)) __PYX_ERR(9, 1873, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MethodChanger->tp_dict, __pyx_n_s_aexit, __pyx_t_2) < 0) __PYX_ERR(9, 1873, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MethodChanger);
 
   /* "src/lxml/iterparse.pxi":149
@@ -259395,10 +259494,10 @@ if (!__Pyx_RefNanny) {
  *         u"""set_element_class_lookup(self, lookup = None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9iterparse_3set_element_class_lookup, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_iterparse_set_element_class_look, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__556)); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 149, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_iterparse->tp_dict, __pyx_n_s_set_element_class_lookup, __pyx_t_1) < 0) __PYX_ERR(14, 149, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9iterparse_3set_element_class_lookup, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_iterparse_set_element_class_look, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__556)); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 149, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_iterparse->tp_dict, __pyx_n_s_set_element_class_lookup, __pyx_t_2) < 0) __PYX_ERR(14, 149, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_iterparse);
 
   /* "src/lxml/iterparse.pxi":158
@@ -259408,10 +259507,10 @@ if (!__Pyx_RefNanny) {
  *         u"""makeelement(self, _tag, attrib=None, nsmap=None, **_extra)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9iterparse_5makeelement, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_iterparse_makeelement, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__558)); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 158, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_iterparse->tp_dict, __pyx_n_s_makeelement, __pyx_t_1) < 0) __PYX_ERR(14, 158, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9iterparse_5makeelement, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_iterparse_makeelement, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__558)); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 158, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_iterparse->tp_dict, __pyx_n_s_makeelement, __pyx_t_2) < 0) __PYX_ERR(14, 158, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_iterparse);
 
   /* "src/lxml/iterparse.pxi":375
@@ -259421,10 +259520,10 @@ if (!__Pyx_RefNanny) {
  *         """Prevent descending into the current subtree.
  *         Instead, the next returned event will be the 'end' event of the current element
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8iterwalk_7skip_subtree, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_iterwalk_skip_subtree, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__560)); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 375, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_iterwalk->tp_dict, __pyx_n_s_skip_subtree, __pyx_t_1) < 0) __PYX_ERR(14, 375, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_8iterwalk_7skip_subtree, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_iterwalk_skip_subtree, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__560)); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 375, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_iterwalk->tp_dict, __pyx_n_s_skip_subtree, __pyx_t_2) < 0) __PYX_ERR(14, 375, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_iterwalk);
 
   /* "src/lxml/xmlid.pxi":3
@@ -259434,16 +259533,16 @@ if (!__Pyx_RefNanny) {
  *     u"""XMLID(text, parser=None, base_url=None)
  * 
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 3, __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(15, 3, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_56XMLID, 0, __pyx_n_s_XMLID, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__562)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 3, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__563);
-  __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_XMLID, __pyx_t_2) < 0) __PYX_ERR(15, 3, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(15, 3, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_56XMLID, 0, __pyx_n_s_XMLID, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__562)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__563);
+  __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_XMLID, __pyx_t_7) < 0) __PYX_ERR(15, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/xmlid.pxi":24
  *     return root, dic
@@ -259452,16 +259551,16 @@ if (!__Pyx_RefNanny) {
  *     u"""XMLDTDID(text, parser=None, base_url=None)
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 24, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(15, 24, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_58XMLDTDID, 0, __pyx_n_s_XMLDTDID, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__565)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 24, __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(15, 24, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_58XMLDTDID, 0, __pyx_n_s_XMLDTDID, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__565)); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 24, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__566);
-  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__566);
+  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_7);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_XMLDTDID, __pyx_t_2) < 0) __PYX_ERR(15, 24, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_XMLDTDID, __pyx_t_1) < 0) __PYX_ERR(15, 24, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/xmlid.pxi":44
  *         return root, _IDDict(root)
@@ -259470,16 +259569,16 @@ if (!__Pyx_RefNanny) {
  *     u"""parseid(source, parser=None)
  * 
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 44, __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(15, 44, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_60parseid, 0, __pyx_n_s_parseid, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__568)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 44, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 44, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__569);
-  __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_parseid, __pyx_t_2) < 0) __PYX_ERR(15, 44, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_base_url, ((PyObject *)Py_None)) < 0) __PYX_ERR(15, 44, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_60parseid, 0, __pyx_n_s_parseid, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__568)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__569);
+  __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_parseid, __pyx_t_7) < 0) __PYX_ERR(15, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/xmlid.pxi":78
  *         self._items = None
@@ -259488,10 +259587,10 @@ if (!__Pyx_RefNanny) {
  *         return _IDDict(self._doc)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_3copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__571)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 78, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_copy, __pyx_t_2) < 0) __PYX_ERR(15, 78, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_3copy, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__571)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_copy, __pyx_t_7) < 0) __PYX_ERR(15, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IDDict);
 
   /* "src/lxml/xmlid.pxi":95
@@ -259501,10 +259600,10 @@ if (!__Pyx_RefNanny) {
  *         return self[id_name]
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_7get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__573)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 95, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_get, __pyx_t_2) < 0) __PYX_ERR(15, 95, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_7get, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_get, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__573)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 95, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_get, __pyx_t_7) < 0) __PYX_ERR(15, 95, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IDDict);
 
   /* "src/lxml/xmlid.pxi":105
@@ -259514,10 +259613,10 @@ if (!__Pyx_RefNanny) {
  *         return id_name in self
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_11has_key, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_has_key, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__575)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 105, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_has_key, __pyx_t_2) < 0) __PYX_ERR(15, 105, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_11has_key, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_has_key, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__575)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_has_key, __pyx_t_7) < 0) __PYX_ERR(15, 105, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IDDict);
 
   /* "src/lxml/xmlid.pxi":111
@@ -259527,10 +259626,10 @@ if (!__Pyx_RefNanny) {
  *         if self._keys is None:
  *             self._keys = self._build_keys()
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_15keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_keys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__577)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 111, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_keys, __pyx_t_2) < 0) __PYX_ERR(15, 111, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_15keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_keys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__577)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 111, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_keys, __pyx_t_7) < 0) __PYX_ERR(15, 111, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IDDict);
 
   /* "src/lxml/xmlid.pxi":121
@@ -259540,10 +259639,10 @@ if (!__Pyx_RefNanny) {
  *         return self
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_19iterkeys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_iterkeys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__579)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 121, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_iterkeys, __pyx_t_2) < 0) __PYX_ERR(15, 121, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_19iterkeys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_iterkeys, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__579)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 121, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_iterkeys, __pyx_t_7) < 0) __PYX_ERR(15, 121, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IDDict);
 
   /* "src/lxml/xmlid.pxi":129
@@ -259553,10 +259652,10 @@ if (!__Pyx_RefNanny) {
  *         if self._items is None:
  *             self._items = self._build_items()
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_23items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__581)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 129, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_items, __pyx_t_2) < 0) __PYX_ERR(15, 129, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_23items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_items, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__581)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 129, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_items, __pyx_t_7) < 0) __PYX_ERR(15, 129, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IDDict);
 
   /* "src/lxml/xmlid.pxi":134
@@ -259566,10 +259665,10 @@ if (!__Pyx_RefNanny) {
  *         if self._items is None:
  *             self._items = self._build_items()
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_25iteritems, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_iteritems, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__583)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 134, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_iteritems, __pyx_t_2) < 0) __PYX_ERR(15, 134, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_25iteritems, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_iteritems, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__583)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 134, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_iteritems, __pyx_t_7) < 0) __PYX_ERR(15, 134, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IDDict);
 
   /* "src/lxml/xmlid.pxi":139
@@ -259579,10 +259678,10 @@ if (!__Pyx_RefNanny) {
  *         cdef list values = []
  *         if self._items is None:
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_27values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_values, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__585)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 139, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_values, __pyx_t_2) < 0) __PYX_ERR(15, 139, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_27values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_values, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__585)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 139, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_values, __pyx_t_7) < 0) __PYX_ERR(15, 139, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IDDict);
 
   /* "src/lxml/xmlid.pxi":149
@@ -259592,10 +259691,10 @@ if (!__Pyx_RefNanny) {
  *         return iter(self.values())
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_29itervalues, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_itervalues, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__587)); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 149, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_itervalues, __pyx_t_2) < 0) __PYX_ERR(15, 149, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7_IDDict_29itervalues, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_IDDict_itervalues, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__587)); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 149, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__IDDict->tp_dict, __pyx_n_s_itervalues, __pyx_t_7) < 0) __PYX_ERR(15, 149, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__IDDict);
 
   /* "src/lxml/cleanup.pxi":3
@@ -259605,11 +259704,11 @@ if (!__Pyx_RefNanny) {
  *     u"""cleanup_namespaces(tree_or_element, top_nsmap=None, keep_ns_prefixes=None)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_62cleanup_namespaces, 0, __pyx_n_s_cleanup_namespaces, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__589)); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__590);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_cleanup_namespaces, __pyx_t_2) < 0) __PYX_ERR(17, 3, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_62cleanup_namespaces, 0, __pyx_n_s_cleanup_namespaces, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__589)); if (unlikely(!__pyx_t_7)) __PYX_ERR(17, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__590);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_cleanup_namespaces, __pyx_t_7) < 0) __PYX_ERR(17, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/cleanup.pxi":33
  * 
@@ -259618,10 +259717,10 @@ if (!__Pyx_RefNanny) {
  *     u"""strip_attributes(tree_or_element, *attribute_names)
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_64strip_attributes, 0, __pyx_n_s_strip_attributes, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__592)); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 33, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_strip_attributes, __pyx_t_2) < 0) __PYX_ERR(17, 33, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_64strip_attributes, 0, __pyx_n_s_strip_attributes, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__592)); if (unlikely(!__pyx_t_7)) __PYX_ERR(17, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_strip_attributes, __pyx_t_7) < 0) __PYX_ERR(17, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/cleanup.pxi":74
  * 
@@ -259630,18 +259729,18 @@ if (!__Pyx_RefNanny) {
  *     u"""strip_elements(tree_or_element, *tag_names, with_tail=True)
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 74, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(17, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_2 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(((int)1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 74, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_with_tail, __pyx_t_1) < 0) __PYX_ERR(17, 74, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_66strip_elements, 0, __pyx_n_s_strip_elements, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__594)); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 74, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_1, __pyx_t_2);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_with_tail, __pyx_t_2) < 0) __PYX_ERR(17, 74, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_66strip_elements, 0, __pyx_n_s_strip_elements, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__594)); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_2, __pyx_t_7);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_strip_elements, __pyx_t_2) < 0) __PYX_ERR(17, 74, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_strip_elements, __pyx_t_1) < 0) __PYX_ERR(17, 74, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/cleanup.pxi":145
  * 
@@ -259650,10 +259749,10 @@ if (!__Pyx_RefNanny) {
  *     u"""strip_tags(tree_or_element, *tag_names)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_68strip_tags, 0, __pyx_n_s_strip_tags, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__596)); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 145, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_strip_tags, __pyx_t_1) < 0) __PYX_ERR(17, 145, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_68strip_tags, 0, __pyx_n_s_strip_tags, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__596)); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 145, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_strip_tags, __pyx_t_2) < 0) __PYX_ERR(17, 145, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "src/lxml/extensions.pxi":368
  * 
@@ -259674,16 +259773,16 @@ if (!__Pyx_RefNanny) {
  *     u"""Extension(module, function_mapping=None, ns=None)
  * 
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 426, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ns, ((PyObject *)Py_None)) < 0) __PYX_ERR(10, 426, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_70Extension, 0, __pyx_n_s_Extension, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__599)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 426, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 426, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__600);
-  __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_Extension, __pyx_t_2) < 0) __PYX_ERR(10, 426, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ns, ((PyObject *)Py_None)) < 0) __PYX_ERR(10, 426, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_70Extension, 0, __pyx_n_s_Extension, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__599)); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 426, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__600);
+  __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_Extension, __pyx_t_7) < 0) __PYX_ERR(10, 426, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/extensions.pxi":498
  *         return rexp_compiled
@@ -259692,10 +259791,10 @@ if (!__Pyx_RefNanny) {
  *         flags = self._make_string(flags)
  *         s = self._make_string(s)
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ExsltRegExp_3test, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ExsltRegExp_test, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__602)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 498, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ExsltRegExp->tp_dict, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(10, 498, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ExsltRegExp_3test, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ExsltRegExp_test, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__602)); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 498, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ExsltRegExp->tp_dict, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(10, 498, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ExsltRegExp);
 
   /* "src/lxml/extensions.pxi":507
@@ -259705,10 +259804,10 @@ if (!__Pyx_RefNanny) {
  *         cdef list result_list
  *         flags = self._make_string(flags)
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ExsltRegExp_5match, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ExsltRegExp_match, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__604)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 507, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ExsltRegExp->tp_dict, __pyx_n_s_match, __pyx_t_2) < 0) __PYX_ERR(10, 507, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ExsltRegExp_5match, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ExsltRegExp_match, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__604)); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 507, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ExsltRegExp->tp_dict, __pyx_n_s_match, __pyx_t_7) < 0) __PYX_ERR(10, 507, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ExsltRegExp);
 
   /* "src/lxml/extensions.pxi":533
@@ -259718,10 +259817,10 @@ if (!__Pyx_RefNanny) {
  *         replacement = self._make_string(replacement)
  *         flags = self._make_string(flags)
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ExsltRegExp_7replace, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ExsltRegExp_replace, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__606)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 533, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ExsltRegExp->tp_dict, __pyx_n_s_replace, __pyx_t_2) < 0) __PYX_ERR(10, 533, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_12_ExsltRegExp_7replace, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ExsltRegExp_replace, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__606)); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 533, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ExsltRegExp->tp_dict, __pyx_n_s_replace, __pyx_t_7) < 0) __PYX_ERR(10, 533, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ExsltRegExp);
 
   /* "src/lxml/extensions.pxi":730
@@ -259731,10 +259830,10 @@ if (!__Pyx_RefNanny) {
  *         return self._parent
  * 
  */
-  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21_ElementUnicodeResult_1getparent, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementUnicodeResult_getparent, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__608)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 730, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementUnicodeResult->tp_dict, __pyx_n_s_getparent, __pyx_t_2) < 0) __PYX_ERR(10, 730, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_21_ElementUnicodeResult_1getparent, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ElementUnicodeResult_getparent, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__608)); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 730, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__ElementUnicodeResult->tp_dict, __pyx_n_s_getparent, __pyx_t_7) < 0) __PYX_ERR(10, 730, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__ElementUnicodeResult);
 
   /* "src/lxml/extensions.pxi":734
@@ -259754,15 +259853,15 @@ if (!__Pyx_RefNanny) {
  *         # we need to use a Python class here, or PyPy will crash on creation
  *         # https://bitbucket.org/pypy/pypy/issues/2021/pypy3-pytype_ready-crashes-for-extension
  */
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 735, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 735, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(((PyObject *)(&PyUnicode_Type)));
     __Pyx_GIVEREF(((PyObject *)(&PyUnicode_Type)));
-    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)(&PyUnicode_Type)));
-    __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 735, __pyx_L1_error)
+    PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)(&PyUnicode_Type)));
+    __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 735, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_7, __pyx_n_s_PyElementUnicodeResult, __pyx_n_s_PyElementUnicodeResult, (PyObject *) NULL, __pyx_n_s_lxml_etree, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 735, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_2, __pyx_n_s_PyElementUnicodeResult, __pyx_n_s_PyElementUnicodeResult, (PyObject *) NULL, __pyx_n_s_lxml_etree, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 735, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_7);
 
     /* "src/lxml/extensions.pxi":738
  *         # we need to use a Python class here, or PyPy will crash on creation
@@ -259773,7 +259872,7 @@ if (!__Pyx_RefNanny) {
  */
     __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_23_PyElementUnicodeResult_1getparent, 0, __pyx_n_s_PyElementUnicodeResult_getparen, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__610)); if (unlikely(!__pyx_t_12)) __PYX_ERR(10, 738, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_12);
-    if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_n_s_getparent, __pyx_t_12) < 0) __PYX_ERR(10, 738, __pyx_L1_error)
+    if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_getparent, __pyx_t_12) < 0) __PYX_ERR(10, 738, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 
     /* "src/lxml/extensions.pxi":735
@@ -259783,15 +259882,15 @@ if (!__Pyx_RefNanny) {
  *         # we need to use a Python class here, or PyPy will crash on creation
  *         # https://bitbucket.org/pypy/pypy/issues/2021/pypy3-pytype_ready-crashes-for-extension
  */
-    __pyx_t_12 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PyElementUnicodeResult, __pyx_t_2, __pyx_t_7, NULL, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(10, 735, __pyx_L1_error)
+    __pyx_t_12 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_PyElementUnicodeResult, __pyx_t_7, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(10, 735, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_12);
     __Pyx_XGOTREF(__pyx_v_4lxml_5etree__PyElementUnicodeResult);
     __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__PyElementUnicodeResult, __pyx_t_12);
     __Pyx_GIVEREF(__pyx_t_12);
     __pyx_t_12 = 0;
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
     /* "src/lxml/extensions.pxi":734
  * 
@@ -259809,15 +259908,15 @@ if (!__Pyx_RefNanny) {
  *     # we need to use a Python class here, bytes cannot be C-subclassed
  *     # in Pyrex/Cython
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 741, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 741, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(((PyObject *)(&PyBytes_Type)));
   __Pyx_GIVEREF(((PyObject *)(&PyBytes_Type)));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)(&PyBytes_Type)));
-  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 741, __pyx_L1_error)
+  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)(&PyBytes_Type)));
+  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 741, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_7, __pyx_n_s_ElementStringResult, __pyx_n_s_ElementStringResult, (PyObject *) NULL, __pyx_n_s_lxml_etree, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 741, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_2, __pyx_n_s_ElementStringResult, __pyx_n_s_ElementStringResult, (PyObject *) NULL, __pyx_n_s_lxml_etree, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 741, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
 
   /* "src/lxml/extensions.pxi":744
  *     # we need to use a Python class here, bytes cannot be C-subclassed
@@ -259828,7 +259927,7 @@ if (!__Pyx_RefNanny) {
  */
   __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_20_ElementStringResult_1getparent, 0, __pyx_n_s_ElementStringResult_getparent, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__612)); if (unlikely(!__pyx_t_12)) __PYX_ERR(10, 744, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
-  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_n_s_getparent, __pyx_t_12) < 0) __PYX_ERR(10, 744, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_getparent, __pyx_t_12) < 0) __PYX_ERR(10, 744, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 
   /* "src/lxml/extensions.pxi":741
@@ -259838,13 +259937,13 @@ if (!__Pyx_RefNanny) {
  *     # we need to use a Python class here, bytes cannot be C-subclassed
  *     # in Pyrex/Cython
  */
-  __pyx_t_12 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ElementStringResult, __pyx_t_2, __pyx_t_7, NULL, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(10, 741, __pyx_L1_error)
+  __pyx_t_12 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_ElementStringResult, __pyx_t_7, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(10, 741, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_ElementStringResult, __pyx_t_12) < 0) __PYX_ERR(10, 741, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "src/lxml/xpath.pxi":3
  * # XPath evaluation
@@ -259853,27 +259952,27 @@ if (!__Pyx_RefNanny) {
  *     pass
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 3, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_7);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
   __Pyx_INCREF(((PyObject *)__pyx_ptype_4lxml_5etree_XPathError));
   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_4lxml_5etree_XPathError));
-  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_ptype_4lxml_5etree_XPathError));
-  __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_XPathSyntaxError, __pyx_n_s_XPathSyntaxError, (PyObject *) NULL, __pyx_n_s_lxml_etree, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 3, __pyx_L1_error)
+  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_ptype_4lxml_5etree_XPathError));
+  __pyx_t_7 = 0;
+  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_12 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_XPathSyntaxError, __pyx_t_1, __pyx_t_7, NULL, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(18, 3, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_2, __pyx_n_s_XPathSyntaxError, __pyx_n_s_XPathSyntaxError, (PyObject *) NULL, __pyx_n_s_lxml_etree, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_12 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_XPathSyntaxError, __pyx_t_2, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(18, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_XPathSyntaxError, __pyx_t_12) < 0) __PYX_ERR(18, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "src/lxml/xpath.pxi":10
  * 
@@ -259882,8 +259981,8 @@ if (!__Pyx_RefNanny) {
  *     xmlerror.XML_XPATH_UNFINISHED_LITERAL_ERROR,
  *     xmlerror.XML_XPATH_VARIABLE_REF_ERROR,
  */
-  __pyx_t_1 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_NUMBER_ERROR); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 10, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_NUMBER_ERROR); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
 
   /* "src/lxml/xpath.pxi":11
  * cdef object _XPATH_SYNTAX_ERRORS = (
@@ -259892,8 +259991,8 @@ if (!__Pyx_RefNanny) {
  *     xmlerror.XML_XPATH_VARIABLE_REF_ERROR,
  *     xmlerror.XML_XPATH_INVALID_PREDICATE_ERROR,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_UNFINISHED_LITERAL_ERROR); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 11, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_UNFINISHED_LITERAL_ERROR); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
 
   /* "src/lxml/xpath.pxi":12
  *     xmlerror.XML_XPATH_NUMBER_ERROR,
@@ -259902,8 +260001,8 @@ if (!__Pyx_RefNanny) {
  *     xmlerror.XML_XPATH_INVALID_PREDICATE_ERROR,
  *     xmlerror.XML_XPATH_UNCLOSED_ERROR,
  */
-  __pyx_t_7 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_VARIABLE_REF_ERROR); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 12, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_VARIABLE_REF_ERROR); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "src/lxml/xpath.pxi":13
  *     xmlerror.XML_XPATH_UNFINISHED_LITERAL_ERROR,
@@ -259944,21 +260043,21 @@ if (!__Pyx_RefNanny) {
  */
   __pyx_t_13 = PyTuple_New(6); if (unlikely(!__pyx_t_13)) __PYX_ERR(18, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_13);
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_7);
+  PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_12);
   PyTuple_SET_ITEM(__pyx_t_13, 3, __pyx_t_12);
   __Pyx_GIVEREF(__pyx_t_9);
   PyTuple_SET_ITEM(__pyx_t_13, 4, __pyx_t_9);
   __Pyx_GIVEREF(__pyx_t_8);
   PyTuple_SET_ITEM(__pyx_t_13, 5, __pyx_t_8);
-  __pyx_t_1 = 0;
   __pyx_t_2 = 0;
   __pyx_t_7 = 0;
+  __pyx_t_1 = 0;
   __pyx_t_12 = 0;
   __pyx_t_9 = 0;
   __pyx_t_8 = 0;
@@ -260014,8 +260113,8 @@ if (!__Pyx_RefNanny) {
  *     xmlerror.XML_XPATH_INVALID_ARITY,
  *     xmlerror.XML_XPATH_INVALID_CTXT_SIZE,
  */
-  __pyx_t_7 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_INVALID_TYPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 23, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_INVALID_TYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "src/lxml/xpath.pxi":24
  *     xmlerror.XML_XPATH_INVALID_OPERAND,
@@ -260024,8 +260123,8 @@ if (!__Pyx_RefNanny) {
  *     xmlerror.XML_XPATH_INVALID_CTXT_SIZE,
  *     xmlerror.XML_XPATH_INVALID_CTXT_POSITION
  */
-  __pyx_t_2 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_INVALID_ARITY); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 24, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_7 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_INVALID_ARITY); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
 
   /* "src/lxml/xpath.pxi":25
  *     xmlerror.XML_XPATH_INVALID_TYPE,
@@ -260034,8 +260133,8 @@ if (!__Pyx_RefNanny) {
  *     xmlerror.XML_XPATH_INVALID_CTXT_POSITION
  * )
  */
-  __pyx_t_1 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_INVALID_CTXT_SIZE); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 25, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyInt_From_xmlParserErrors(XML_XPATH_INVALID_CTXT_SIZE); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
 
   /* "src/lxml/xpath.pxi":26
  *     xmlerror.XML_XPATH_INVALID_ARITY,
@@ -260064,21 +260163,21 @@ if (!__Pyx_RefNanny) {
   PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_9);
   __Pyx_GIVEREF(__pyx_t_12);
   PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_t_12);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_15, 4, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_15, 4, __pyx_t_7);
+  PyTuple_SET_ITEM(__pyx_t_15, 5, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_15, 5, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_15, 6, __pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_15, 6, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_14);
   PyTuple_SET_ITEM(__pyx_t_15, 7, __pyx_t_14);
   __pyx_t_13 = 0;
   __pyx_t_8 = 0;
   __pyx_t_9 = 0;
   __pyx_t_12 = 0;
+  __pyx_t_1 = 0;
   __pyx_t_7 = 0;
   __pyx_t_2 = 0;
-  __pyx_t_1 = 0;
   __pyx_t_14 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__XPATH_EVAL_ERRORS);
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__XPATH_EVAL_ERRORS, __pyx_t_15);
@@ -260201,13 +260300,13 @@ if (!__Pyx_RefNanny) {
   PyTuple_SET_ITEM(__pyx_t_14, 1, ((PyObject *)__pyx_ptype_4lxml_5etree_SerialisationError));
   __pyx_t_15 = __Pyx_CalculateMetaclass(NULL, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_15, __pyx_t_14, __pyx_n_s_XSLTSaveError, __pyx_n_s_XSLTSaveError, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Error_serialising_an_XSLT_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 18, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_15, __pyx_n_s_XSLTSaveError, __pyx_t_14, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 18, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_15, __pyx_t_14, __pyx_n_s_XSLTSaveError, __pyx_n_s_XSLTSaveError, (PyObject *) NULL, __pyx_n_s_lxml_etree, __pyx_kp_s_Error_serialising_an_XSLT_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 18, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_XSLTSaveError, __pyx_t_2) < 0) __PYX_ERR(4, 18, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_15, __pyx_n_s_XSLTSaveError, __pyx_t_14, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_XSLTSaveError, __pyx_t_7) < 0) __PYX_ERR(4, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 
@@ -260341,143 +260440,143 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_14);
   __pyx_t_14 = 0;
 
-  /* "src/lxml/xslt.pxi":438
+  /* "src/lxml/xslt.pxi":439
  * 
  *     @staticmethod
  *     def strparam(strval):             # <<<<<<<<<<<<<<
  *         u"""strparam(strval)
  * 
  */
-  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_7strparam, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT_strparam, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__626)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 438, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_7strparam, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT_strparam, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__626)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 439, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_strparam, __pyx_t_14) < 0) __PYX_ERR(4, 438, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_strparam, __pyx_t_14) < 0) __PYX_ERR(4, 439, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_XSLT);
 
-  /* "src/lxml/xslt.pxi":437
+  /* "src/lxml/xslt.pxi":438
  *         return self._error_log.copy()
  * 
  *     @staticmethod             # <<<<<<<<<<<<<<
  *     def strparam(strval):
  *         u"""strparam(strval)
  */
-  __Pyx_GetNameInClass(__pyx_t_14, (PyObject *)__pyx_ptype_4lxml_5etree_XSLT, __pyx_n_s_strparam); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 438, __pyx_L1_error)
+  __Pyx_GetNameInClass(__pyx_t_14, (PyObject *)__pyx_ptype_4lxml_5etree_XSLT, __pyx_n_s_strparam); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 439, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  __pyx_t_15 = __Pyx_PyObject_CallOneArg(__pyx_builtin_staticmethod, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 437, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_PyObject_CallOneArg(__pyx_builtin_staticmethod, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 438, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_strparam, __pyx_t_15) < 0) __PYX_ERR(4, 438, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_strparam, __pyx_t_15) < 0) __PYX_ERR(4, 439, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_XSLT);
 
-  /* "src/lxml/xslt.pxi":452
+  /* "src/lxml/xslt.pxi":453
  * 
  *     @staticmethod
  *     def set_global_max_depth(int max_depth):             # <<<<<<<<<<<<<<
  *         u"""set_global_max_depth(max_depth)
  * 
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_9set_global_max_depth, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT_set_global_max_depth, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__628)); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 452, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_9set_global_max_depth, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT_set_global_max_depth, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__628)); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 453, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_set_global_max_depth, __pyx_t_15) < 0) __PYX_ERR(4, 452, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_set_global_max_depth, __pyx_t_15) < 0) __PYX_ERR(4, 453, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_XSLT);
 
-  /* "src/lxml/xslt.pxi":451
+  /* "src/lxml/xslt.pxi":452
  *         return _XSLTQuotedStringParam(strval)
  * 
  *     @staticmethod             # <<<<<<<<<<<<<<
  *     def set_global_max_depth(int max_depth):
  *         u"""set_global_max_depth(max_depth)
  */
-  __Pyx_GetNameInClass(__pyx_t_15, (PyObject *)__pyx_ptype_4lxml_5etree_XSLT, __pyx_n_s_set_global_max_depth); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 452, __pyx_L1_error)
+  __Pyx_GetNameInClass(__pyx_t_15, (PyObject *)__pyx_ptype_4lxml_5etree_XSLT, __pyx_n_s_set_global_max_depth); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 453, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  __pyx_t_14 = __Pyx_PyObject_CallOneArg(__pyx_builtin_staticmethod, __pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 451, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_PyObject_CallOneArg(__pyx_builtin_staticmethod, __pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 452, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_set_global_max_depth, __pyx_t_14) < 0) __PYX_ERR(4, 452, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_set_global_max_depth, __pyx_t_14) < 0) __PYX_ERR(4, 453, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_XSLT);
 
-  /* "src/lxml/xslt.pxi":471
+  /* "src/lxml/xslt.pxi":472
  *         xslt.xsltMaxDepth = max_depth
  * 
  *     def apply(self, _input, *, profile_run=False, **kw):             # <<<<<<<<<<<<<<
  *         u"""apply(self, _input,  profile_run=False, **kw)
  * 
  */
-  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_11apply, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT_apply, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__630)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 471, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_11apply, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT_apply, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__630)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 472, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_apply, __pyx_t_14) < 0) __PYX_ERR(4, 471, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_apply, __pyx_t_14) < 0) __PYX_ERR(4, 472, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_XSLT);
 
-  /* "src/lxml/xslt.pxi":477
+  /* "src/lxml/xslt.pxi":478
  *         return self(_input, profile_run=profile_run, **kw)
  * 
  *     def tostring(self, _ElementTree result_tree):             # <<<<<<<<<<<<<<
  *         u"""tostring(self, result_tree)
  * 
  */
-  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_13tostring, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT_tostring, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__632)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 477, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_13tostring, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT_tostring, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__632)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 478, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_tostring, __pyx_t_14) < 0) __PYX_ERR(4, 477, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_tostring, __pyx_t_14) < 0) __PYX_ERR(4, 478, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_XSLT);
 
-  /* "src/lxml/xslt.pxi":486
+  /* "src/lxml/xslt.pxi":487
  *         return str(result_tree)
  * 
  *     def __deepcopy__(self, memo):             # <<<<<<<<<<<<<<
  *         return self.__copy__()
  * 
  */
-  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_15__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT___deepcopy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__634)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 486, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_15__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT___deepcopy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__634)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 487, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_deepcopy, __pyx_t_14) < 0) __PYX_ERR(4, 486, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_deepcopy, __pyx_t_14) < 0) __PYX_ERR(4, 487, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_XSLT);
 
-  /* "src/lxml/xslt.pxi":489
+  /* "src/lxml/xslt.pxi":490
  *         return self.__copy__()
  * 
  *     def __copy__(self):             # <<<<<<<<<<<<<<
  *         return _copyXSLT(self)
  * 
  */
-  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_17__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT___copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__636)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 489, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_4XSLT_17__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLT___copy, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__636)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 490, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_copy_2, __pyx_t_14) < 0) __PYX_ERR(4, 489, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_copy_2, __pyx_t_14) < 0) __PYX_ERR(4, 490, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_XSLT);
 
-  /* "src/lxml/xslt.pxi":717
+  /* "src/lxml/xslt.pxi":718
  *     cdef Py_ssize_t _buffer_refcnt
  * 
  *     def write_output(self, file, *, compression=0):             # <<<<<<<<<<<<<<
  *         """write_output(self, file, *, compression=0)
  * 
  */
-  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_15_XSLTResultTree_1write_output, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLTResultTree_write_output, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__638)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 717, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_15_XSLTResultTree_1write_output, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLTResultTree_write_output, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__638)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 718, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__XSLTResultTree->tp_dict, __pyx_n_s_write_output, __pyx_t_14) < 0) __PYX_ERR(4, 717, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__XSLTResultTree->tp_dict, __pyx_n_s_write_output, __pyx_t_14) < 0) __PYX_ERR(4, 718, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__XSLTResultTree);
 
-  /* "src/lxml/xslt.pxi":787
+  /* "src/lxml/xslt.pxi":788
  *         return result
  * 
  *     def __unicode__(self):             # <<<<<<<<<<<<<<
  *         cdef xmlChar* encoding
  *         cdef xmlChar* s = NULL
  */
-  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_15_XSLTResultTree_5__unicode__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLTResultTree___unicode, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__640)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 787, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_15_XSLTResultTree_5__unicode__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLTResultTree___unicode, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__640)); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 788, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__XSLTResultTree->tp_dict, __pyx_n_s_unicode_2, __pyx_t_14) < 0) __PYX_ERR(4, 787, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__XSLTResultTree->tp_dict, __pyx_n_s_unicode_2, __pyx_t_14) < 0) __PYX_ERR(4, 788, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__XSLTResultTree);
 
-  /* "src/lxml/xslt.pxi":872
+  /* "src/lxml/xslt.pxi":873
  * # functions like "output" and "write" are a potential security risk, but we
  * # rely on the user to configure XSLTAccessControl as needed
  * xslt.xsltRegisterAllExtras()             # <<<<<<<<<<<<<<
@@ -260486,7 +260585,7 @@ if (!__Pyx_RefNanny) {
  */
   xsltRegisterAllExtras();
 
-  /* "src/lxml/xslt.pxi":875
+  /* "src/lxml/xslt.pxi":876
  * 
  * # enable EXSLT support for XSLT
  * xslt.exsltRegisterAll()             # <<<<<<<<<<<<<<
@@ -260495,16 +260594,16 @@ if (!__Pyx_RefNanny) {
  */
   exsltRegisterAll();
 
-  /* "src/lxml/xslt.pxi":881
+  /* "src/lxml/xslt.pxi":882
  * # XSLT PI support
  * 
  * cdef object _RE_PI_HREF = re.compile(ur'\s+href\s*=\s*(?:\'([^\']*)\'|"([^"]*)")')             # <<<<<<<<<<<<<<
  * cdef object _FIND_PI_HREF = _RE_PI_HREF.findall
  * cdef object _REPLACE_PI_HREF = _RE_PI_HREF.sub
  */
-  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 881, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_14)) __PYX_ERR(4, 882, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_tuple__641, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 881, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_tuple__641, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 882, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__RE_PI_HREF);
@@ -260512,35 +260611,35 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_15);
   __pyx_t_15 = 0;
 
-  /* "src/lxml/xslt.pxi":882
+  /* "src/lxml/xslt.pxi":883
  * 
  * cdef object _RE_PI_HREF = re.compile(ur'\s+href\s*=\s*(?:\'([^\']*)\'|"([^"]*)")')
  * cdef object _FIND_PI_HREF = _RE_PI_HREF.findall             # <<<<<<<<<<<<<<
  * cdef object _REPLACE_PI_HREF = _RE_PI_HREF.sub
  * cdef XPath __findStylesheetByID = None
  */
-  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__RE_PI_HREF, __pyx_n_s_findall); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 882, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__RE_PI_HREF, __pyx_n_s_findall); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__FIND_PI_HREF);
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__FIND_PI_HREF, __pyx_t_15);
   __Pyx_GIVEREF(__pyx_t_15);
   __pyx_t_15 = 0;
 
-  /* "src/lxml/xslt.pxi":883
+  /* "src/lxml/xslt.pxi":884
  * cdef object _RE_PI_HREF = re.compile(ur'\s+href\s*=\s*(?:\'([^\']*)\'|"([^"]*)")')
  * cdef object _FIND_PI_HREF = _RE_PI_HREF.findall
  * cdef object _REPLACE_PI_HREF = _RE_PI_HREF.sub             # <<<<<<<<<<<<<<
  * cdef XPath __findStylesheetByID = None
  * 
  */
-  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__RE_PI_HREF, __pyx_n_s_sub); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 883, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree__RE_PI_HREF, __pyx_n_s_sub); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 884, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__REPLACE_PI_HREF);
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__REPLACE_PI_HREF, __pyx_t_15);
   __Pyx_GIVEREF(__pyx_t_15);
   __pyx_t_15 = 0;
 
-  /* "src/lxml/xslt.pxi":884
+  /* "src/lxml/xslt.pxi":885
  * cdef object _FIND_PI_HREF = _RE_PI_HREF.findall
  * cdef object _REPLACE_PI_HREF = _RE_PI_HREF.sub
  * cdef XPath __findStylesheetByID = None             # <<<<<<<<<<<<<<
@@ -260552,29 +260651,29 @@ if (!__Pyx_RefNanny) {
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___findStylesheetByID, ((struct __pyx_obj_4lxml_5etree_XPath *)Py_None));
   __Pyx_GIVEREF(Py_None);
 
-  /* "src/lxml/xslt.pxi":895
+  /* "src/lxml/xslt.pxi":896
  * 
  * cdef class _XSLTProcessingInstruction(PIBase):
  *     def parseXSL(self, parser=None):             # <<<<<<<<<<<<<<
  *         u"""parseXSL(self, parser=None)
  * 
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_26_XSLTProcessingInstruction_1parseXSL, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLTProcessingInstruction_parse, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__643)); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 895, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_26_XSLTProcessingInstruction_1parseXSL, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLTProcessingInstruction_parse, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__643)); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 896, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__XSLTProcessingInstruction->tp_dict, __pyx_n_s_parseXSL, __pyx_t_15) < 0) __PYX_ERR(4, 895, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__XSLTProcessingInstruction->tp_dict, __pyx_n_s_parseXSL, __pyx_t_15) < 0) __PYX_ERR(4, 896, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__XSLTProcessingInstruction);
 
-  /* "src/lxml/xslt.pxi":952
+  /* "src/lxml/xslt.pxi":953
  *         return _elementTreeFactory(result_node._doc, result_node)
  * 
  *     def set(self, key, value):             # <<<<<<<<<<<<<<
  *         u"""set(self, key, value)
  * 
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_26_XSLTProcessingInstruction_3set, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLTProcessingInstruction_set, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__645)); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 952, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_26_XSLTProcessingInstruction_3set, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_XSLTProcessingInstruction_set, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__645)); if (unlikely(!__pyx_t_15)) __PYX_ERR(4, 953, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__XSLTProcessingInstruction->tp_dict, __pyx_n_s_set, __pyx_t_15) < 0) __PYX_ERR(4, 952, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__XSLTProcessingInstruction->tp_dict, __pyx_n_s_set, __pyx_t_15) < 0) __PYX_ERR(4, 953, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__XSLTProcessingInstruction);
 
@@ -260617,68 +260716,68 @@ if (!__Pyx_RefNanny) {
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_XSLTExtension);
 
-  /* "lxml/etree.pyx":3625
+  /* "lxml/etree.pyx":3628
  *         self._error_log = _ErrorLog()
  * 
  *     def validate(self, etree):             # <<<<<<<<<<<<<<
  *         u"""validate(self, etree)
  * 
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10_Validator_3validate, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Validator_validate, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__653)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3625, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10_Validator_3validate, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Validator_validate, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__653)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3628, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Validator->tp_dict, __pyx_n_s_validate, __pyx_t_15) < 0) __PYX_ERR(0, 3625, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Validator->tp_dict, __pyx_n_s_validate, __pyx_t_15) < 0) __PYX_ERR(0, 3628, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Validator);
 
-  /* "lxml/etree.pyx":3634
+  /* "lxml/etree.pyx":3637
  *         return self(etree)
  * 
  *     def assertValid(self, etree):             # <<<<<<<<<<<<<<
  *         u"""assertValid(self, etree)
  * 
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10_Validator_5assertValid, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Validator_assertValid, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__655)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3634, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10_Validator_5assertValid, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Validator_assertValid, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__655)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3637, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Validator->tp_dict, __pyx_n_s_assertValid, __pyx_t_15) < 0) __PYX_ERR(0, 3634, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Validator->tp_dict, __pyx_n_s_assertValid, __pyx_t_15) < 0) __PYX_ERR(0, 3637, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Validator);
 
-  /* "lxml/etree.pyx":3644
+  /* "lxml/etree.pyx":3647
  *                                   self._error_log)
  * 
  *     def assert_(self, etree):             # <<<<<<<<<<<<<<
  *         u"""assert_(self, etree)
  * 
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10_Validator_7assert_, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Validator_assert, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__657)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3644, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10_Validator_7assert_, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Validator_assert, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__657)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3647, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Validator->tp_dict, __pyx_n_s_assert, __pyx_t_15) < 0) __PYX_ERR(0, 3644, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Validator->tp_dict, __pyx_n_s_assert, __pyx_t_15) < 0) __PYX_ERR(0, 3647, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Validator);
 
-  /* "lxml/etree.pyx":3653
+  /* "lxml/etree.pyx":3656
  *                 u"Document does not comply with schema")
  * 
  *     cpdef _append_log_message(self, int domain, int type, int level, int line,             # <<<<<<<<<<<<<<
  *                               message, filename):
  *         self._error_log._receiveGeneric(domain, type, level, line, message,
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10_Validator_9_append_log_message, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Validator__append_log_message, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__659)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3653, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10_Validator_9_append_log_message, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Validator__append_log_message, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__659)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3656, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Validator->tp_dict, __pyx_n_s_append_log_message, __pyx_t_15) < 0) __PYX_ERR(0, 3653, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Validator->tp_dict, __pyx_n_s_append_log_message, __pyx_t_15) < 0) __PYX_ERR(0, 3656, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Validator);
 
-  /* "lxml/etree.pyx":3658
+  /* "lxml/etree.pyx":3661
  *                                         filename)
  * 
  *     cpdef _clear_error_log(self):             # <<<<<<<<<<<<<<
  *         self._error_log.clear()
  * 
  */
-  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10_Validator_11_clear_error_log, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Validator__clear_error_log, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__661)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3658, __pyx_L1_error)
+  __pyx_t_15 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_10_Validator_11_clear_error_log, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Validator__clear_error_log, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__661)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3661, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_15);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Validator->tp_dict, __pyx_n_s_clear_error_log, __pyx_t_15) < 0) __PYX_ERR(0, 3658, __pyx_L1_error)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__Validator->tp_dict, __pyx_n_s_clear_error_log, __pyx_t_15) < 0) __PYX_ERR(0, 3661, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__Validator);
 
@@ -260849,10 +260948,10 @@ if (!__Pyx_RefNanny) {
     __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
     if (__pyx_t_6) {
       __Pyx_AddTraceback("lxml.etree", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_15, &__pyx_t_14, &__pyx_t_1) < 0) __PYX_ERR(21, 7, __pyx_L32_except_error)
+      if (__Pyx_GetException(&__pyx_t_15, &__pyx_t_14, &__pyx_t_2) < 0) __PYX_ERR(21, 7, __pyx_L32_except_error)
       __Pyx_GOTREF(__pyx_t_15);
       __Pyx_GOTREF(__pyx_t_14);
-      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_GOTREF(__pyx_t_2);
 
       /* "src/lxml/relaxng.pxi":8
  *     import rnc2rng as _rnc2rng
@@ -260867,7 +260966,7 @@ if (!__Pyx_RefNanny) {
       __Pyx_GIVEREF(Py_None);
       __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
       __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
-      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       goto __pyx_L31_exception_handled;
     }
     goto __pyx_L32_except_error;
@@ -260900,10 +260999,10 @@ if (!__Pyx_RefNanny) {
  *         """Parse a RelaxNG schema in compact syntax from a text string
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7RelaxNG_9from_rnc_string, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_RelaxNG_from_rnc_string, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__675)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 153, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_RelaxNG->tp_dict, __pyx_n_s_from_rnc_string, __pyx_t_1) < 0) __PYX_ERR(21, 153, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_7RelaxNG_9from_rnc_string, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_RelaxNG_from_rnc_string, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__675)); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 153, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_RelaxNG->tp_dict, __pyx_n_s_from_rnc_string, __pyx_t_2) < 0) __PYX_ERR(21, 153, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_RelaxNG);
 
   /* "src/lxml/relaxng.pxi":152
@@ -260913,11 +261012,11 @@ if (!__Pyx_RefNanny) {
  *     def from_rnc_string(cls, src, base_url=None):
  *         """Parse a RelaxNG schema in compact syntax from a text string
  */
-  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_4lxml_5etree_RelaxNG, __pyx_n_s_from_rnc_string); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 153, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_14 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(21, 152, __pyx_L1_error)
+  __Pyx_GetNameInClass(__pyx_t_2, (PyObject *)__pyx_ptype_4lxml_5etree_RelaxNG, __pyx_n_s_from_rnc_string); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 153, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_14 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(21, 152, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_RelaxNG->tp_dict, __pyx_n_s_from_rnc_string, __pyx_t_14) < 0) __PYX_ERR(21, 153, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree_RelaxNG);
@@ -260931,11 +261030,11 @@ if (!__Pyx_RefNanny) {
  */
   __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(22, 23, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_14);
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 23, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_xs, __pyx_kp_u_http_www_w3_org_2001_XMLSchema) < 0) __PYX_ERR(22, 23, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_namespaces, __pyx_t_1) < 0) __PYX_ERR(22, 23, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(22, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_xs, __pyx_kp_u_http_www_w3_org_2001_XMLSchema) < 0) __PYX_ERR(22, 23, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_namespaces, __pyx_t_2) < 0) __PYX_ERR(22, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "src/lxml/xmlschema.pxi":21
  * # XMLSchema
@@ -260944,13 +261043,13 @@ if (!__Pyx_RefNanny) {
  *     u"boolean(//xs:attribute[@default or @fixed][1])",
  *     namespaces={u'xs': u'http://www.w3.org/2001/XMLSchema'})
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XPath), __pyx_tuple__676, __pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 21, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4lxml_5etree_XPath), __pyx_tuple__676, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(22, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree__check_for_default_attributes));
-  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__check_for_default_attributes, ((struct __pyx_obj_4lxml_5etree_XPath *)__pyx_t_1));
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__check_for_default_attributes, ((struct __pyx_obj_4lxml_5etree_XPath *)__pyx_t_2));
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
 
   /* "src/lxml/debug.pxi":7
  *     """Debugging support for the memory allocation in libxml2.
@@ -260959,10 +261058,10 @@ if (!__Pyx_RefNanny) {
  *         """bytes_used(self)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_MemDebug_1bytes_used, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MemDebug_bytes_used, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__678)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug->tp_dict, __pyx_n_s_bytes_used, __pyx_t_1) < 0) __PYX_ERR(25, 7, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_MemDebug_1bytes_used, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MemDebug_bytes_used, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__678)); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug->tp_dict, __pyx_n_s_bytes_used, __pyx_t_2) < 0) __PYX_ERR(25, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MemDebug);
 
   /* "src/lxml/debug.pxi":16
@@ -260972,10 +261071,10 @@ if (!__Pyx_RefNanny) {
  *         """blocks_used(self)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_MemDebug_3blocks_used, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MemDebug_blocks_used, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__680)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 16, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug->tp_dict, __pyx_n_s_blocks_used, __pyx_t_1) < 0) __PYX_ERR(25, 16, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_MemDebug_3blocks_used, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MemDebug_blocks_used, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__680)); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug->tp_dict, __pyx_n_s_blocks_used, __pyx_t_2) < 0) __PYX_ERR(25, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MemDebug);
 
   /* "src/lxml/debug.pxi":25
@@ -260985,10 +261084,10 @@ if (!__Pyx_RefNanny) {
  *         """dict_size(self)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_MemDebug_5dict_size, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MemDebug_dict_size, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__682)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 25, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug->tp_dict, __pyx_n_s_dict_size, __pyx_t_1) < 0) __PYX_ERR(25, 25, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_MemDebug_5dict_size, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MemDebug_dict_size, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__682)); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug->tp_dict, __pyx_n_s_dict_size, __pyx_t_2) < 0) __PYX_ERR(25, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MemDebug);
 
   /* "src/lxml/debug.pxi":36
@@ -260998,10 +261097,10 @@ if (!__Pyx_RefNanny) {
  *         """dump(self, output_file=None, byte_count=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_MemDebug_7dump, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MemDebug_dump, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__684)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 36, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug->tp_dict, __pyx_n_s_dump, __pyx_t_1) < 0) __PYX_ERR(25, 36, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_MemDebug_7dump, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MemDebug_dump, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__684)); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug->tp_dict, __pyx_n_s_dump, __pyx_t_2) < 0) __PYX_ERR(25, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MemDebug);
 
   /* "src/lxml/debug.pxi":66
@@ -261011,10 +261110,10 @@ if (!__Pyx_RefNanny) {
  *         """show(self, output_file=None, block_count=None)
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_MemDebug_9show, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MemDebug_show, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__686)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 66, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug->tp_dict, __pyx_n_s_show, __pyx_t_1) < 0) __PYX_ERR(25, 66, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_5etree_9_MemDebug_9show, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_MemDebug_show, NULL, __pyx_n_s_lxml_etree, __pyx_d, ((PyObject *)__pyx_codeobj__686)); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug->tp_dict, __pyx_n_s_show, __pyx_t_2) < 0) __PYX_ERR(25, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   PyType_Modified(__pyx_ptype_4lxml_5etree__MemDebug);
 
   /* "src/lxml/debug.pxi":91
@@ -261022,26 +261121,26 @@ if (!__Pyx_RefNanny) {
  * 
  * memory_debugger = _MemDebug()             # <<<<<<<<<<<<<<
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 91, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_memory_debugger, __pyx_t_1) < 0) __PYX_ERR(25, 91, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4lxml_5etree__MemDebug)); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 91, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_memory_debugger, __pyx_t_2) < 0) __PYX_ERR(25, 91, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "lxml/etree.pyx":1
  * # cython: binding=True             # <<<<<<<<<<<<<<
  * # cython: auto_pickle=False
  * # cython: language_level=2
  */
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_XML_line_3208, __pyx_kp_u_XML_text_parser_None_base_url_No) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_FunctionNamespace_line_207, __pyx_kp_u_FunctionNamespace_ns_uri_Retriev) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_2, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_kp_u_XML_line_3211, __pyx_kp_u_XML_text_parser_None_base_url_No) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_kp_u_FunctionNamespace_line_207, __pyx_kp_u_FunctionNamespace_ns_uri_Retriev) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_2, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /*--- Wrapped vars code ---*/
 
-  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error)
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -261795,6 +261894,7 @@ static void __pyx_module_cleanup(CYTHON_UNUSED PyObject *self) {
   Py_CLEAR(__pyx_v_4lxml_5etree__DEFAULT_NAMESPACE_PREFIXES);
   Py_CLEAR(__pyx_v_4lxml_5etree__FILENAME_ENCODING);
   Py_CLEAR(__pyx_v_4lxml_5etree_IMMUTABLE_EMPTY_MAPPING);
+  Py_CLEAR(__pyx_v_4lxml_5etree_MutableMapping);
   Py_CLEAR(__pyx_v_4lxml_5etree_ITER_EMPTY);
   Py_CLEAR(__pyx_v_4lxml_5etree_islice);
   Py_CLEAR(__pyx_v_4lxml_5etree_partial);
@@ -262303,13 +262403,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     }
     PyErr_SetObject(type, value);
     if (tb) {
-#if CYTHON_COMPILING_IN_PYPY
-        PyObject *tmp_type, *tmp_value, *tmp_tb;
-        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
-        Py_INCREF(tb);
-        PyErr_Restore(tmp_type, tmp_value, tb);
-        Py_XDECREF(tmp_tb);
-#else
+#if CYTHON_FAST_THREAD_STATE
         PyThreadState *tstate = __Pyx_PyThreadState_Current;
         PyObject* tmp_tb = tstate->curexc_traceback;
         if (tb != tmp_tb) {
@@ -262317,6 +262411,12 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             tstate->curexc_traceback = tb;
             Py_XDECREF(tmp_tb);
         }
+#else
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
 #endif
     }
 bad:
@@ -262446,10 +262546,8 @@ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
         Py_DECREF(retval);
         __Pyx_RaiseTooManyValuesError(expected);
         return -1;
-    } else {
-        return __Pyx_IterFinish();
     }
-    return 0;
+    return __Pyx_IterFinish();
 }
 
 /* decode_c_bytes */
@@ -262779,7 +262877,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
         return __Pyx_PyFunction_FastCall(func, NULL, 0);
     }
 #endif
-#ifdef __Pyx_CyFunction_USED
+#if defined(__Pyx_CyFunction_USED) && defined(NDEBUG)
     if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
 #else
     if (likely(PyCFunction_Check(func)))
@@ -263435,9 +263533,7 @@ static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
     PyGILState_STATE state;
     if (nogil)
         state = PyGILState_Ensure();
-#ifdef _MSC_VER
-    else state = (PyGILState_STATE)-1;
-#endif
+    else state = (PyGILState_STATE)0;
 #endif
     __Pyx_PyThreadState_assign
     __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
@@ -263535,7 +263631,7 @@ static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars,
                 padding = PyUnicode_FromOrdinal(padding_char);
                 if (likely(padding) && uoffset > prepend_sign + 1) {
                     PyObject *tmp;
-                    PyObject *repeat = PyInt_FromSize_t(uoffset - prepend_sign);
+                    PyObject *repeat = PyInt_FromSsize_t(uoffset - prepend_sign);
                     if (unlikely(!repeat)) goto done_or_error;
                     tmp = PyNumber_Multiply(padding, repeat);
                     Py_DECREF(repeat);
@@ -263784,7 +263880,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
 /* ObjectGetItem */
 #if CYTHON_USE_TYPE_SLOTS
 static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
-    PyObject *runerr;
+    PyObject *runerr = NULL;
     Py_ssize_t key_value;
     PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
     if (unlikely(!(m && m->sq_item))) {
@@ -264796,11 +264892,11 @@ static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject* iterator, PyObject*
     PyObject* next;
     iternextfunc iternext = Py_TYPE(iterator)->tp_iternext;
     if (likely(iternext)) {
-#if CYTHON_USE_TYPE_SLOTS
+#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY
         next = iternext(iterator);
         if (likely(next))
             return next;
-        #if PY_VERSION_HEX >= 0x02070000
+        #if PY_VERSION_HEX >= 0x02070000 && CYTHON_COMPILING_IN_CPYTHON
         if (unlikely(iternext == &_PyObject_NextNotImplemented))
             return NULL;
         #endif
@@ -264831,11 +264927,11 @@ static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction*
         if (flag == METH_O) {
             return (*(cfunc->func))(self, arg);
         } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) {
-            if (PY_VERSION_HEX >= 0x030700A0) {
+            #if PY_VERSION_HEX >= 0x030700A0
                 return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1);
-            } else {
+            #else
                 return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
-            }
+            #endif
         } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) {
             return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
         }
@@ -266357,7 +266453,10 @@ static PyTypeObject __pyx_GeneratorType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
@@ -266951,9 +267050,14 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P
         self = PyTuple_GetItem(args, 0);
         if (unlikely(!self)) {
             Py_DECREF(new_args);
+#if PY_MAJOR_VERSION > 2
             PyErr_Format(PyExc_TypeError,
                          "unbound method %.200S() needs an argument",
                          cyfunc->func_qualname);
+#else
+            PyErr_SetString(PyExc_TypeError,
+                            "unbound method needs an argument");
+#endif
             return NULL;
         }
         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
@@ -267028,7 +267132,10 @@ static PyTypeObject __pyx_CyFunctionType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
@@ -267226,7 +267333,10 @@ static PyTypeObject __pyx_CoroutineAwaitType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
@@ -267378,7 +267488,10 @@ static PyTypeObject __pyx_CoroutineType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
@@ -267453,7 +267566,11 @@ static PyObject *__Pyx__Coroutine_GetAwaitableIter(PyObject *obj) {
     } else
 #endif
 #if CYTHON_COMPILING_IN_CPYTHON && defined(CO_ITERABLE_COROUTINE)
+#if PY_VERSION_HEX >= 0x030C00A6
+    if (PyGen_CheckExact(obj) && (PyGen_GetCode((PyGenObject*)obj)->co_flags & CO_ITERABLE_COROUTINE)) {
+#else
     if (PyGen_CheckExact(obj) && ((PyGenObject*)obj)->gi_code && ((PyCodeObject *)((PyGenObject*)obj)->gi_code)->co_flags & CO_ITERABLE_COROUTINE) {
+#endif
         return __Pyx_NewRef(obj);
     } else
 #endif
@@ -267503,7 +267620,7 @@ bad:
 }
 
 /* CoroutineYieldFrom */
-static PyObject* __Pyx__Coroutine_Yield_From_Generic(__pyx_CoroutineObject *gen, PyObject *source) {
+  static PyObject* __Pyx__Coroutine_Yield_From_Generic(__pyx_CoroutineObject *gen, PyObject *source) {
     PyObject *retval;
     PyObject *source_gen = __Pyx__Coroutine_GetAwaitableIter(source);
     if (unlikely(!source_gen)) {
@@ -267550,7 +267667,7 @@ static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject
 }
 
 /* py_dict_values */
-static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
+  static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
     if (PY_MAJOR_VERSION >= 3)
         return __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyDict_Type_values, d);
     else
@@ -267558,7 +267675,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
 }
 
 /* dict_getitem_default */
-static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) {
+  static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) {
     PyObject* value;
 #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
     value = PyDict_GetItemWithError(d, key);
@@ -267588,7 +267705,7 @@ static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObjec
 }
 
 /* MergeKeywords */
-static int __Pyx_MergeKeywords(PyObject *kwdict, PyObject *source_mapping) {
+  static int __Pyx_MergeKeywords(PyObject *kwdict, PyObject *source_mapping) {
     PyObject *iter, *key = NULL, *value = NULL;
     int source_is_dict, result;
     Py_ssize_t orig_length, ppos = 0;
@@ -267630,7 +267747,7 @@ bad:
 }
 
 /* set_iter */
-static CYTHON_INLINE PyObject* __Pyx_set_iterator(PyObject* iterable, int is_set,
+  static CYTHON_INLINE PyObject* __Pyx_set_iterator(PyObject* iterable, int is_set,
                                                   Py_ssize_t* p_orig_length, int* p_source_is_set) {
 #if CYTHON_COMPILING_IN_CPYTHON
     is_set = is_set || likely(PySet_CheckExact(iterable) || PyFrozenSet_CheckExact(iterable));
@@ -267681,7 +267798,7 @@ static CYTHON_INLINE int __Pyx_set_iter_next(
 }
 
 /* CIntToPyUnicode */
-static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_xmlXPathObjectType(xmlXPathObjectType value, Py_ssize_t width, char padding_char, char format_char) {
+  static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_xmlXPathObjectType(xmlXPathObjectType value, Py_ssize_t width, char padding_char, char format_char) {
     char digits[sizeof(xmlXPathObjectType)*3+2];
     char *dpos, *end = digits + sizeof(xmlXPathObjectType)*3+2;
     const char *hex_digits = DIGITS_HEX;
@@ -267756,7 +267873,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_xmlXPathObjectType(xmlXPathO
 }
 
 /* CallNextTpTraverse */
-static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse) {
+  static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse) {
     PyTypeObject* type = Py_TYPE(obj);
     while (type && type->tp_traverse != current_tp_traverse)
         type = type->tp_base;
@@ -267768,7 +267885,7 @@ static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, trav
 }
 
 /* CallNextTpClear */
-static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) {
+  static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) {
     PyTypeObject* type = Py_TYPE(obj);
     while (type && type->tp_clear != current_tp_clear)
         type = type->tp_base;
@@ -267779,7 +267896,7 @@ static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) {
 }
 
 /* PyObject_GenericGetAttr */
-#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+  #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
 static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) {
     if (unlikely(Py_TYPE(obj)->tp_dictoffset)) {
         return PyObject_GenericGetAttr(obj, attr_name);
@@ -267789,7 +267906,7 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam
 #endif
 
 /* SetVTable */
-static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+  static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
 #if PY_VERSION_HEX >= 0x02070000
     PyObject *ob = PyCapsule_New(vtable, 0, 0);
 #else
 }
 
 /* TypeImport */
-#ifndef __PYX_HAVE_RT_ImportType
-#define __PYX_HAVE_RT_ImportType
-static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name,
-    size_t size, enum __Pyx_ImportType_CheckSize check_size)
+  #ifndef __PYX_HAVE_RT_ImportType_0_29_36
+#define __PYX_HAVE_RT_ImportType_0_29_36
+static PyTypeObject *__Pyx_ImportType_0_29_36(PyObject *module, const char *module_name, const char *class_name,
+    size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_0_29_36 check_size)
 {
     PyObject *result = 0;
     char warning[200];
     Py_ssize_t basicsize;
+    Py_ssize_t itemsize;
 #ifdef Py_LIMITED_API
     PyObject *py_basicsize;
+    PyObject *py_itemsize;
 #endif
     result = PyObject_GetAttrString(module, class_name);
     if (!result)
@@ -267829,6 +267948,7 @@ static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name,
     }
 #ifndef Py_LIMITED_API
     basicsize = ((PyTypeObject *)result)->tp_basicsize;
+    itemsize = ((PyTypeObject *)result)->tp_itemsize;
 #else
     py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
     if (!py_basicsize)
@@ -267838,22 +267958,37 @@ static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name,
     py_basicsize = 0;
     if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
         goto bad;
+    py_itemsize = PyObject_GetAttrString(result, "__itemsize__");
+    if (!py_itemsize)
+        goto bad;
+    itemsize = PyLong_AsSsize_t(py_itemsize);
+    Py_DECREF(py_itemsize);
+    py_itemsize = 0;
+    if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred())
+        goto bad;
 #endif
-    if ((size_t)basicsize < size) {
+    if (itemsize) {
+        if (size % alignment) {
+            alignment = size % alignment;
+        }
+        if (itemsize < (Py_ssize_t)alignment)
+            itemsize = (Py_ssize_t)alignment;
+    }
+    if ((size_t)(basicsize + itemsize) < size) {
         PyErr_Format(PyExc_ValueError,
             "%.200s.%.200s size changed, may indicate binary incompatibility. "
             "Expected %zd from C header, got %zd from PyObject",
             module_name, class_name, size, basicsize);
         goto bad;
     }
-    if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) {
+    if (check_size == __Pyx_ImportType_CheckSize_Error_0_29_36 && (size_t)basicsize != size) {
         PyErr_Format(PyExc_ValueError,
             "%.200s.%.200s size changed, may indicate binary incompatibility. "
             "Expected %zd from C header, got %zd from PyObject",
             module_name, class_name, size, basicsize);
         goto bad;
     }
-    else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) {
+    else if (check_size == __Pyx_ImportType_CheckSize_Warn_0_29_36 && (size_t)basicsize > size) {
         PyOS_snprintf(warning, sizeof(warning),
             "%s.%s size changed, may indicate binary incompatibility. "
             "Expected %zd from C header, got %zd from PyObject",
@@ -267868,7 +268003,7 @@ bad:
 #endif
 
 /* CalculateMetaclass */
-static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
+  static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
     Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
     for (i=0; i < nbases; i++) {
         PyTypeObject *tmptype;
@@ -267907,7 +268042,7 @@ static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bas
 }
 
 /* Py3ClassCreate */
-static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
+  static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
                                            PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
     PyObject *ns;
     if (metaclass) {
@@ -267974,7 +268109,7 @@ static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj
 }
 
 /* PatchInspect */
-static PyObject* __Pyx_patch_inspect(PyObject* module) {
+  static PyObject* __Pyx_patch_inspect(PyObject* module) {
 #if defined(__Pyx_Generator_USED) && (!defined(CYTHON_PATCH_INSPECT) || CYTHON_PATCH_INSPECT)
     static int inspect_patched = 0;
     if (unlikely((!inspect_patched) && module)) {
@@ -267999,7 +268134,7 @@ static PyObject* __Pyx_patch_inspect(PyObject* module) {
 }
 
 /* GetNameInClass */
-static PyObject *__Pyx_GetGlobalNameAfterAttributeLookup(PyObject *name) {
+  static PyObject *__Pyx_GetGlobalNameAfterAttributeLookup(PyObject *name) {
     PyObject *result;
     __Pyx_PyThreadState_declare
     __Pyx_PyThreadState_assign
@@ -268019,7 +268154,7 @@ static PyObject *__Pyx__GetNameInClass(PyObject *nmspace, PyObject *name) {
 }
 
 /* ClassMethod */
-static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
+  static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
 #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM <= 0x05080000
     if (PyObject_TypeCheck(method, &PyWrapperDescr_Type)) {
         return PyClassMethod_New(method);
@@ -268060,7 +268195,7 @@ static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
 }
 
 /* RegisterModuleCleanup */
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
 static PyObject* __pyx_module_cleanup_atexit(PyObject *module, CYTHON_UNUSED PyObject *unused) {
     __pyx_module_cleanup(module);
     Py_INCREF(Py_None); return Py_None;
@@ -268122,8 +268257,8 @@ bad:
 #endif
 
 /* CLineInTraceback */
-#ifndef CYTHON_CLINE_IN_TRACEBACK
-static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
+  #ifndef CYTHON_CLINE_IN_TRACEBACK
+static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_line) {
     PyObject *use_cline;
     PyObject *ptype, *pvalue, *ptraceback;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -268164,7 +268299,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int
 #endif
 
 /* CodeObjectCache */
-static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+  static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
     int start = 0, mid = 0, end = count - 1;
     if (end >= 0 && code_line > entries[end].code_line) {
         return count;
@@ -268244,7 +268379,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
 }
 
 /* AddTraceback */
-#include "compile.h"
+  #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
 #if PY_VERSION_HEX >= 0x030b00a6
@@ -268351,7 +268486,7 @@ bad:
 }
 
 /* CIntFromPyVerify */
-#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+  #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
     __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
 #define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
     __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
@@ -268373,7 +268508,7 @@ bad:
     }
 
 /* Print */
-#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
+  #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
 static PyObject *__Pyx_GetStdout(void) {
     PyObject *f = PySys_GetObject((char *)"stdout");
     if (!f) {
@@ -268479,7 +268614,7 @@ bad:
 #endif
 
 /* CIntFromPy */
-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+  static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -268538,7 +268673,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -268675,7 +268810,7 @@ raise_neg_overflow:
 }
 
 /* PrintOne */
-#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
+  #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
 static int __Pyx_PrintOne(PyObject* f, PyObject *o) {
     if (!f) {
         if (!(f = __Pyx_GetStdout()))
@@ -268712,7 +268847,7 @@ static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
 #endif
 
 /* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_xmlParserErrors(xmlParserErrors value) {
+  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_xmlParserErrors(xmlParserErrors value) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -268750,7 +268885,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_xmlParserErrors(xmlParserErrors
 }
 
 /* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -268788,7 +268923,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
 }
 
 /* CIntFromPy */
-static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
+  static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -268847,7 +268982,7 @@ static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -268984,7 +269119,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) {
+  static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -269043,7 +269178,7 @@ static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -269180,7 +269315,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-static CYTHON_INLINE signed char __Pyx_PyInt_As_signed__char(PyObject *x) {
+  static CYTHON_INLINE signed char __Pyx_PyInt_As_signed__char(PyObject *x) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -269239,7 +269374,7 @@ static CYTHON_INLINE signed char __Pyx_PyInt_As_signed__char(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -269376,7 +269511,7 @@ raise_neg_overflow:
 }
 
 /* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -269414,7 +269549,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
 }
 
 /* CIntFromPy */
-static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *x) {
+  static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *x) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -269473,7 +269608,7 @@ static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -269610,7 +269745,7 @@ raise_neg_overflow:
 }
 
 /* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value) {
+  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -269648,7 +269783,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value) {
 }
 
 /* CIntFromPy */
-static CYTHON_INLINE xmlChar __Pyx_PyInt_As_xmlChar(PyObject *x) {
+  static CYTHON_INLINE xmlChar __Pyx_PyInt_As_xmlChar(PyObject *x) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -269707,7 +269842,7 @@ static CYTHON_INLINE xmlChar __Pyx_PyInt_As_xmlChar(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -269844,14 +269979,14 @@ raise_neg_overflow:
 }
 
 /* BytesContains */
-static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character) {
+  static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character) {
     const Py_ssize_t length = PyBytes_GET_SIZE(bytes);
     char* char_start = PyBytes_AS_STRING(bytes);
     return memchr(char_start, (unsigned char)character, (size_t)length) != NULL;
 }
 
 /* CIntFromPy */
-static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+  static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
 #ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
@@ -269910,7 +270045,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -270047,7 +270182,7 @@ raise_neg_overflow:
 }
 
 /* CheckBinaryVersion */
-static int __Pyx_check_binary_version(void) {
+  static int __Pyx_check_binary_version(void) {
     char ctversion[5];
     int same=1, i, found_dot;
     const char* rt_from_call = Py_GetVersion();
@@ -270085,7 +270220,7 @@ static int __Pyx_check_binary_version(void) {
 }
 
 /* FunctionExport */
-static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
+  static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
     PyObject *d = 0;
     PyObject *cobj = 0;
     union {
@@ -270122,7 +270257,7 @@ bad:
 }
 
 /* InitStrings */
-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+  static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
     while (t->p) {
         #if PY_MAJOR_VERSION < 3
         if (t->is_unicode) {
index c779ea0e17678443208843cad74bead6638dd106..fb88539324235cea519e7d23a8a899cebb2931ef 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 #ifndef __PYX_HAVE__lxml__etree
 #define __PYX_HAVE__lxml__etree
@@ -13,7 +13,7 @@ struct LxmlElementBase;
 struct LxmlElementClassLookup;
 struct LxmlFallbackElementClassLookup;
 
-/* "lxml/etree.pyx":337
+/* "lxml/etree.pyx":338
  * 
  * # type of a function that steps from node to node
  * ctypedef public xmlNode* (*_node_to_node_function)(xmlNode*)             # <<<<<<<<<<<<<<
@@ -22,7 +22,7 @@ struct LxmlFallbackElementClassLookup;
  */
 typedef xmlNode *(*_node_to_node_function)(xmlNode *);
 
-/* "lxml/etree.pyx":353
+/* "lxml/etree.pyx":354
  * @cython.final
  * @cython.freelist(8)
  * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]:             # <<<<<<<<<<<<<<
@@ -38,7 +38,7 @@ struct LxmlDocument {
   struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
 };
 
-/* "lxml/etree.pyx":702
+/* "lxml/etree.pyx":703
  * 
  * @cython.no_gc_clear
  * cdef public class _Element [ type LxmlElementType, object LxmlElement ]:             # <<<<<<<<<<<<<<
@@ -52,7 +52,7 @@ struct LxmlElement {
   PyObject *_tag;
 };
 
-/* "lxml/etree.pyx":1871
+/* "lxml/etree.pyx":1872
  * 
  * 
  * cdef public class _ElementTree [ type LxmlElementTreeType,             # <<<<<<<<<<<<<<
@@ -66,7 +66,7 @@ struct LxmlElementTree {
   struct LxmlElement *_context_node;
 };
 
-/* "lxml/etree.pyx":2615
+/* "lxml/etree.pyx":2618
  * 
  * 
  * cdef public class _ElementTagMatcher [ object LxmlElementTagMatcher,             # <<<<<<<<<<<<<<
@@ -82,7 +82,7 @@ struct LxmlElementTagMatcher {
   char *_name;
 };
 
-/* "lxml/etree.pyx":2646
+/* "lxml/etree.pyx":2649
  *                 self._name = NULL
  * 
  * cdef public class _ElementIterator(_ElementTagMatcher) [             # <<<<<<<<<<<<<<
index 95dd21ee569b06e0cab6ddd283b69a85777830f5..c0d236bd84ee3b46ef206ff5876b30be7454e751 100644 (file)
@@ -87,6 +87,7 @@ from itertools import islice
 
 cdef object ITER_EMPTY = iter(())
 
+cdef object MutableMapping
 try:
     from collections.abc import MutableMapping  # Py3.3+
 except ImportError:
@@ -113,7 +114,7 @@ class _ImmutableMapping(MutableMapping):
     iterkeys = itervalues = iteritems = __iter__
 
 cdef object IMMUTABLE_EMPTY_MAPPING = _ImmutableMapping()
-del MutableMapping, _ImmutableMapping
+del _ImmutableMapping
 
 
 # the rules
@@ -2568,6 +2569,8 @@ cdef class _Attrib:
             return NotImplemented
         return python.PyObject_RichCompare(one, other, op)
 
+MutableMapping.register(_Attrib)
+
 
 @cython.final
 @cython.internal
index 864f658d7f1e510c95404c4523de08283d72cc6d..9372f627d5b590d82ec704ffd413490fa589f885 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 #ifndef __PYX_HAVE_API__lxml__etree
 #define __PYX_HAVE_API__lxml__etree
@@ -106,9 +106,9 @@ static xmlNs *(*__pyx_api_f_4lxml_5etree_findOrBuildNodeNsPrefix)(struct LxmlDoc
 #endif
 #endif
 
-#ifndef __PYX_HAVE_RT_ImportFunction
-#define __PYX_HAVE_RT_ImportFunction
-static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
+#ifndef __PYX_HAVE_RT_ImportFunction_0_29_36
+#define __PYX_HAVE_RT_ImportFunction_0_29_36
+static int __Pyx_ImportFunction_0_29_36(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
     PyObject *d = 0;
     PyObject *cobj = 0;
     union {
@@ -164,51 +164,51 @@ static int import_lxml__etree(void) {
   PyObject *module = 0;
   module = PyImport_ImportModule("lxml.etree");
   if (!module) goto bad;
-  if (__Pyx_ImportFunction(module, "deepcopyNodeToDocument", (void (**)(void))&__pyx_api_f_4lxml_5etree_deepcopyNodeToDocument, "struct LxmlElement *(struct LxmlDocument *, xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "elementTreeFactory", (void (**)(void))&__pyx_api_f_4lxml_5etree_elementTreeFactory, "struct LxmlElementTree *(struct LxmlElement *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "newElementTree", (void (**)(void))&__pyx_api_f_4lxml_5etree_newElementTree, "struct LxmlElementTree *(struct LxmlElement *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "adoptExternalDocument", (void (**)(void))&__pyx_api_f_4lxml_5etree_adoptExternalDocument, "struct LxmlElementTree *(xmlDoc *, PyObject *, int)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "elementFactory", (void (**)(void))&__pyx_api_f_4lxml_5etree_elementFactory, "struct LxmlElement *(struct LxmlDocument *, xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "makeElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_makeElement, "struct LxmlElement *(PyObject *, struct LxmlDocument *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "makeSubElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_makeSubElement, "struct LxmlElement *(struct LxmlElement *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "setElementClassLookupFunction", (void (**)(void))&__pyx_api_f_4lxml_5etree_setElementClassLookupFunction, "void (_element_class_lookup_function, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "lookupDefaultElementClass", (void (**)(void))&__pyx_api_f_4lxml_5etree_lookupDefaultElementClass, "PyObject *(PyObject *, PyObject *, xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "lookupNamespaceElementClass", (void (**)(void))&__pyx_api_f_4lxml_5etree_lookupNamespaceElementClass, "PyObject *(PyObject *, PyObject *, xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "callLookupFallback", (void (**)(void))&__pyx_api_f_4lxml_5etree_callLookupFallback, "PyObject *(struct LxmlFallbackElementClassLookup *, struct LxmlDocument *, xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "tagMatches", (void (**)(void))&__pyx_api_f_4lxml_5etree_tagMatches, "int (xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "documentOrRaise", (void (**)(void))&__pyx_api_f_4lxml_5etree_documentOrRaise, "struct LxmlDocument *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "rootNodeOrRaise", (void (**)(void))&__pyx_api_f_4lxml_5etree_rootNodeOrRaise, "struct LxmlElement *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "hasText", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasText, "int (xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "hasTail", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasTail, "int (xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "textOf", (void (**)(void))&__pyx_api_f_4lxml_5etree_textOf, "PyObject *(xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "tailOf", (void (**)(void))&__pyx_api_f_4lxml_5etree_tailOf, "PyObject *(xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "setNodeText", (void (**)(void))&__pyx_api_f_4lxml_5etree_setNodeText, "int (xmlNode *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "setTailText", (void (**)(void))&__pyx_api_f_4lxml_5etree_setTailText, "int (xmlNode *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "attributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_attributeValue, "PyObject *(xmlNode *, xmlAttr *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "attributeValueFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_attributeValueFromNsName, "PyObject *(xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "getAttributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_getAttributeValue, "PyObject *(struct LxmlElement *, PyObject *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "iterattributes", (void (**)(void))&__pyx_api_f_4lxml_5etree_iterattributes, "PyObject *(struct LxmlElement *, int)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "collectAttributes", (void (**)(void))&__pyx_api_f_4lxml_5etree_collectAttributes, "PyObject *(xmlNode *, int)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "setAttributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_setAttributeValue, "int (struct LxmlElement *, PyObject *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "delAttribute", (void (**)(void))&__pyx_api_f_4lxml_5etree_delAttribute, "int (struct LxmlElement *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "delAttributeFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_delAttributeFromNsName, "int (xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "hasChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasChild, "int (xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "findChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChild, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "findChildForwards", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChildForwards, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "findChildBackwards", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChildBackwards, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "nextElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_nextElement, "xmlNode *(xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "previousElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_previousElement, "xmlNode *(xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "appendChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_appendChild, "void (struct LxmlElement *, struct LxmlElement *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "appendChildToElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_appendChildToElement, "int (struct LxmlElement *, struct LxmlElement *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "pyunicode", (void (**)(void))&__pyx_api_f_4lxml_5etree_pyunicode, "PyObject *(const xmlChar *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "utf8", (void (**)(void))&__pyx_api_f_4lxml_5etree_utf8, "PyObject *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "getNsTag", (void (**)(void))&__pyx_api_f_4lxml_5etree_getNsTag, "PyObject *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "getNsTagWithEmptyNs", (void (**)(void))&__pyx_api_f_4lxml_5etree_getNsTagWithEmptyNs, "PyObject *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "namespacedName", (void (**)(void))&__pyx_api_f_4lxml_5etree_namespacedName, "PyObject *(xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "namespacedNameFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_namespacedNameFromNsName, "PyObject *(const xmlChar *, const xmlChar *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "iteratorStoreNext", (void (**)(void))&__pyx_api_f_4lxml_5etree_iteratorStoreNext, "void (struct LxmlElementIterator *, struct LxmlElement *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "initTagMatch", (void (**)(void))&__pyx_api_f_4lxml_5etree_initTagMatch, "void (struct LxmlElementTagMatcher *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "findOrBuildNodeNsPrefix", (void (**)(void))&__pyx_api_f_4lxml_5etree_findOrBuildNodeNsPrefix, "xmlNs *(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "deepcopyNodeToDocument", (void (**)(void))&__pyx_api_f_4lxml_5etree_deepcopyNodeToDocument, "struct LxmlElement *(struct LxmlDocument *, xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "elementTreeFactory", (void (**)(void))&__pyx_api_f_4lxml_5etree_elementTreeFactory, "struct LxmlElementTree *(struct LxmlElement *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "newElementTree", (void (**)(void))&__pyx_api_f_4lxml_5etree_newElementTree, "struct LxmlElementTree *(struct LxmlElement *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "adoptExternalDocument", (void (**)(void))&__pyx_api_f_4lxml_5etree_adoptExternalDocument, "struct LxmlElementTree *(xmlDoc *, PyObject *, int)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "elementFactory", (void (**)(void))&__pyx_api_f_4lxml_5etree_elementFactory, "struct LxmlElement *(struct LxmlDocument *, xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "makeElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_makeElement, "struct LxmlElement *(PyObject *, struct LxmlDocument *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "makeSubElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_makeSubElement, "struct LxmlElement *(struct LxmlElement *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "setElementClassLookupFunction", (void (**)(void))&__pyx_api_f_4lxml_5etree_setElementClassLookupFunction, "void (_element_class_lookup_function, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "lookupDefaultElementClass", (void (**)(void))&__pyx_api_f_4lxml_5etree_lookupDefaultElementClass, "PyObject *(PyObject *, PyObject *, xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "lookupNamespaceElementClass", (void (**)(void))&__pyx_api_f_4lxml_5etree_lookupNamespaceElementClass, "PyObject *(PyObject *, PyObject *, xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "callLookupFallback", (void (**)(void))&__pyx_api_f_4lxml_5etree_callLookupFallback, "PyObject *(struct LxmlFallbackElementClassLookup *, struct LxmlDocument *, xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "tagMatches", (void (**)(void))&__pyx_api_f_4lxml_5etree_tagMatches, "int (xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "documentOrRaise", (void (**)(void))&__pyx_api_f_4lxml_5etree_documentOrRaise, "struct LxmlDocument *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "rootNodeOrRaise", (void (**)(void))&__pyx_api_f_4lxml_5etree_rootNodeOrRaise, "struct LxmlElement *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "hasText", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasText, "int (xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "hasTail", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasTail, "int (xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "textOf", (void (**)(void))&__pyx_api_f_4lxml_5etree_textOf, "PyObject *(xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "tailOf", (void (**)(void))&__pyx_api_f_4lxml_5etree_tailOf, "PyObject *(xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "setNodeText", (void (**)(void))&__pyx_api_f_4lxml_5etree_setNodeText, "int (xmlNode *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "setTailText", (void (**)(void))&__pyx_api_f_4lxml_5etree_setTailText, "int (xmlNode *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "attributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_attributeValue, "PyObject *(xmlNode *, xmlAttr *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "attributeValueFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_attributeValueFromNsName, "PyObject *(xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "getAttributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_getAttributeValue, "PyObject *(struct LxmlElement *, PyObject *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "iterattributes", (void (**)(void))&__pyx_api_f_4lxml_5etree_iterattributes, "PyObject *(struct LxmlElement *, int)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "collectAttributes", (void (**)(void))&__pyx_api_f_4lxml_5etree_collectAttributes, "PyObject *(xmlNode *, int)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "setAttributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_setAttributeValue, "int (struct LxmlElement *, PyObject *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "delAttribute", (void (**)(void))&__pyx_api_f_4lxml_5etree_delAttribute, "int (struct LxmlElement *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "delAttributeFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_delAttributeFromNsName, "int (xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "hasChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasChild, "int (xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "findChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChild, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "findChildForwards", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChildForwards, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "findChildBackwards", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChildBackwards, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "nextElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_nextElement, "xmlNode *(xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "previousElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_previousElement, "xmlNode *(xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "appendChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_appendChild, "void (struct LxmlElement *, struct LxmlElement *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "appendChildToElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_appendChildToElement, "int (struct LxmlElement *, struct LxmlElement *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "pyunicode", (void (**)(void))&__pyx_api_f_4lxml_5etree_pyunicode, "PyObject *(const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "utf8", (void (**)(void))&__pyx_api_f_4lxml_5etree_utf8, "PyObject *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "getNsTag", (void (**)(void))&__pyx_api_f_4lxml_5etree_getNsTag, "PyObject *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "getNsTagWithEmptyNs", (void (**)(void))&__pyx_api_f_4lxml_5etree_getNsTagWithEmptyNs, "PyObject *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "namespacedName", (void (**)(void))&__pyx_api_f_4lxml_5etree_namespacedName, "PyObject *(xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "namespacedNameFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_namespacedNameFromNsName, "PyObject *(const xmlChar *, const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "iteratorStoreNext", (void (**)(void))&__pyx_api_f_4lxml_5etree_iteratorStoreNext, "void (struct LxmlElementIterator *, struct LxmlElement *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "initTagMatch", (void (**)(void))&__pyx_api_f_4lxml_5etree_initTagMatch, "void (struct LxmlElementTagMatcher *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "findOrBuildNodeNsPrefix", (void (**)(void))&__pyx_api_f_4lxml_5etree_findOrBuildNodeNsPrefix, "xmlNs *(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
   Py_DECREF(module); module = 0;
   return 0;
   bad:
index bfe1af3eae00e6594abd1a036c18a55dfae0e255..ecead0073bc5ea5339826ce983a071a2b4428cdd 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 /* BEGIN: Cython Metadata
 {
@@ -32,8 +32,8 @@ END: Cython Metadata */
 #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_30"
-#define CYTHON_HEX_VERSION 0x001D1EF0
+#define CYTHON_ABI "0_29_36"
+#define CYTHON_HEX_VERSION 0x001D24F0
 #define CYTHON_FUTURE_DIVISION 1
 #include <stddef.h>
 #ifndef offsetof
@@ -72,6 +72,7 @@ END: Cython Metadata */
   #define CYTHON_COMPILING_IN_PYPY 1
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #undef CYTHON_USE_TYPE_SLOTS
   #define CYTHON_USE_TYPE_SLOTS 0
   #undef CYTHON_USE_PYTYPE_LOOKUP
@@ -100,21 +101,26 @@ END: Cython Metadata */
   #define CYTHON_FAST_THREAD_STATE 0
   #undef CYTHON_FAST_PYCALL
   #define CYTHON_FAST_PYCALL 0
-  #undef CYTHON_PEP489_MULTI_PHASE_INIT
-  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #if PY_VERSION_HEX < 0x03090000
+    #undef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
   #undef CYTHON_USE_TP_FINALIZE
-  #define CYTHON_USE_TP_FINALIZE 0
+  #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
   #undef CYTHON_USE_DICT_VERSIONS
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
-    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
 #elif defined(PYSTON_VERSION)
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -155,10 +161,56 @@ END: Cython Metadata */
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
     #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
+#elif defined(PY_NOGIL)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #ifndef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE 1
+  #endif
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -178,7 +230,7 @@ END: Cython Metadata */
     #undef CYTHON_USE_PYLONG_INTERNALS
     #define CYTHON_USE_PYLONG_INTERNALS 0
   #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
-    #define CYTHON_USE_PYLONG_INTERNALS 1
+    #define CYTHON_USE_PYLONG_INTERNALS (PY_VERSION_HEX < 0x030C00A5)
   #endif
   #ifndef CYTHON_USE_PYLIST_INTERNALS
     #define CYTHON_USE_PYLIST_INTERNALS 1
@@ -217,7 +269,7 @@ END: Cython Metadata */
     #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
   #endif
   #ifndef CYTHON_USE_DICT_VERSIONS
-    #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+    #define CYTHON_USE_DICT_VERSIONS ((PY_VERSION_HEX >= 0x030600B1) && (PY_VERSION_HEX < 0x030C00A5))
   #endif
   #if PY_VERSION_HEX >= 0x030B00A4
     #undef CYTHON_USE_EXC_INFO_STACK
@@ -340,9 +392,6 @@ END: Cython Metadata */
   #endif
 #endif
 
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
-  #define Py_OptimizeFlag 0
-#endif
 #define __PYX_BUILD_PY_SSIZE_T "n"
 #define CYTHON_FORMAT_SSIZE_T "z"
 #if PY_MAJOR_VERSION < 3
@@ -420,6 +469,11 @@ END: Cython Metadata */
 #endif
   #define __Pyx_DefaultClassType PyType_Type
 #endif
+#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
+#else
+  #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
+#endif
 #ifndef Py_TPFLAGS_CHECKTYPES
   #define Py_TPFLAGS_CHECKTYPES 0
 #endif
@@ -527,11 +581,11 @@ 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)))
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_READY(op)       (0)
   #else
-  #define __Pyx_PyUnicode_READY(op)       (0)
+    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+                                                0 : _PyUnicode_Ready((PyObject *)(op)))
   #endif
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
@@ -540,14 +594,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
-  #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
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #else
-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
+    #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
   #endif
 #else
   #define CYTHON_PEP393_ENABLED 0
@@ -946,7 +1000,7 @@ struct __pyx_defaults1 {
   PyObject *__pyx_arg_break_character;
 };
 
-/* "lxml/html/clean.py":501
+/* "lxml/html/clean.py":500
  *         return False
  * 
  *     def kill_conditional_comments(self, doc):             # <<<<<<<<<<<<<<
@@ -1061,18 +1115,18 @@ static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UIN
 
 /* GetModuleGlobalName.proto */
 #if CYTHON_USE_DICT_VERSIONS
-#define __Pyx_GetModuleGlobalName(var, name)  {\
+#define __Pyx_GetModuleGlobalName(var, name)  do {\
     static PY_UINT64_T __pyx_dict_version = 0;\
     static PyObject *__pyx_dict_cached_value = NULL;\
     (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
         (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
         __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
-#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
+} while(0)
+#define __Pyx_GetModuleGlobalNameUncached(var, name)  do {\
     PY_UINT64_T __pyx_dict_version;\
     PyObject *__pyx_dict_cached_value;\
     (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
+} while(0)
 static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
 #else
 #define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
@@ -1494,6 +1548,23 @@ static CYTHON_INLINE int __Pyx_PyObject_SetSlice(
 /* None.proto */
 static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);
 
+/* AssertionsEnabled.proto */
+#define __Pyx_init_assertions_enabled()
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
+  #define __pyx_assertions_enabled() (1)
+#elif PY_VERSION_HEX < 0x03080000  ||  CYTHON_COMPILING_IN_PYPY  ||  defined(Py_LIMITED_API)
+  #define __pyx_assertions_enabled() (!Py_OptimizeFlag)
+#elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030900A6
+  static int __pyx_assertions_enabled_flag;
+  #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag)
+  #undef __Pyx_init_assertions_enabled
+  static void __Pyx_init_assertions_enabled(void) {
+    __pyx_assertions_enabled_flag = ! _PyInterpreterState_GetConfig(__Pyx_PyThreadState_Current->interp)->optimization_level;
+  }
+#else
+  #define __pyx_assertions_enabled() (!Py_OptimizeFlag)
+#endif
+
 /* PyIntBinop.proto */
 #if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
@@ -1641,11 +1712,10 @@ static const char __pyx_k_el[] = "el";
 static const char __pyx_k_kw[] = "kw";
 static const char __pyx_k_on[] = "on";
 static const char __pyx_k_re[] = "re";
-static const char __pyx_k__10[] = ":";
-static const char __pyx_k__12[] = "\\";
-static const char __pyx_k__15[] = ".";
-static const char __pyx_k__16[] = ",";
-static const char __pyx_k__42[] = "/\\*.*?\\*/";
+static const char __pyx_k__10[] = "\\";
+static const char __pyx_k__13[] = ".";
+static const char __pyx_k__14[] = ",";
+static const char __pyx_k__40[] = "/\\*.*?\\*/";
 static const char __pyx_k_a_z[] = "[^a-z]";
 static const char __pyx_k_all[] = "__all__";
 static const char __pyx_k_bad[] = "bad";
@@ -1690,7 +1760,6 @@ static const char __pyx_k_lxml[] = "lxml";
 static const char __pyx_k_main[] = "__main__";
 static const char __pyx_k_meta[] = "meta";
 static const char __pyx_k_name[] = "__name__";
-static const char __pyx_k_path[] = "path";
 static const char __pyx_k_self[] = "self";
 static const char __pyx_k_tags[] = "tags";
 static const char __pyx_k_tail[] = "tail";
@@ -1722,7 +1791,7 @@ static const char __pyx_k_links[] = "links";
 static const char __pyx_k_lower[] = "lower";
 static const char __pyx_k_match[] = "match";
 static const char __pyx_k_param[] = "param";
-static const char __pyx_k_query[] = "query";
+static const char __pyx_k_parts[] = "parts";
 static const char __pyx_k_regex[] = "regex";
 static const char __pyx_k_split[] = "split";
 static const char __pyx_k_start[] = "start";
@@ -1742,7 +1811,6 @@ static const char __pyx_k_iframe[] = "iframe";
 static const char __pyx_k_import[] = "@import";
 static const char __pyx_k_module[] = "__module__";
 static const char __pyx_k_name_2[] = "name";
-static const char __pyx_k_netloc[] = "netloc";
 static const char __pyx_k_nolink[] = "nolink";
 static const char __pyx_k_object[] = "object";
 static const char __pyx_k_parent[] = "parent";
@@ -1780,7 +1848,7 @@ static const char __pyx_k_drop_tag[] = "drop_tag";
 static const char __pyx_k_embedded[] = "embedded";
 static const char __pyx_k_endswith[] = "endswith";
 static const char __pyx_k_finditer[] = "finditer";
-static const char __pyx_k_fragment[] = "fragment";
+static const char __pyx_k_hostname[] = "hostname";
 static const char __pyx_k_import_2[] = "__import__";
 static const char __pyx_k_last_pos[] = "last_pos";
 static const char __pyx_k_nofollow[] = "nofollow";
@@ -1956,11 +2024,10 @@ static PyObject *__pyx_n_s_ValueError;
 static PyObject *__pyx_n_s_XHTML_NAMESPACE;
 static PyObject *__pyx_n_s_XPath;
 static PyObject *__pyx_kp_s__10;
-static PyObject *__pyx_kp_s__12;
-static PyObject *__pyx_kp_s__15;
-static PyObject *__pyx_kp_s__16;
+static PyObject *__pyx_kp_s__13;
+static PyObject *__pyx_kp_s__14;
 static PyObject *__pyx_kp_s__2;
-static PyObject *__pyx_kp_s__42;
+static PyObject *__pyx_kp_s__40;
 static PyObject *__pyx_n_s_a;
 static PyObject *__pyx_kp_s_a_z;
 static PyObject *__pyx_kp_s_a_zA_Z_son_a_zA_Z_s;
@@ -2044,7 +2111,6 @@ static PyObject *__pyx_n_s_findall;
 static PyObject *__pyx_n_s_finditer;
 static PyObject *__pyx_n_s_form;
 static PyObject *__pyx_n_s_forms;
-static PyObject *__pyx_n_s_fragment;
 static PyObject *__pyx_n_s_frame_tags;
 static PyObject *__pyx_n_s_frames;
 static PyObject *__pyx_n_s_fromstring;
@@ -2059,6 +2125,7 @@ static PyObject *__pyx_n_s_head;
 static PyObject *__pyx_n_s_host;
 static PyObject *__pyx_n_s_host_regex;
 static PyObject *__pyx_n_s_host_whitelist;
+static PyObject *__pyx_n_s_hostname;
 static PyObject *__pyx_n_s_href;
 static PyObject *__pyx_n_s_html;
 static PyObject *__pyx_n_s_http;
@@ -2115,7 +2182,6 @@ static PyObject *__pyx_n_s_module;
 static PyObject *__pyx_n_s_name;
 static PyObject *__pyx_n_s_name_2;
 static PyObject *__pyx_n_s_namespaces;
-static PyObject *__pyx_n_s_netloc;
 static PyObject *__pyx_n_s_new;
 static PyObject *__pyx_n_s_nobreak;
 static PyObject *__pyx_n_s_nofollow;
@@ -2131,7 +2197,7 @@ static PyObject *__pyx_n_s_orig_word;
 static PyObject *__pyx_n_s_page_structure;
 static PyObject *__pyx_n_s_param;
 static PyObject *__pyx_n_s_parent;
-static PyObject *__pyx_n_s_path;
+static PyObject *__pyx_n_s_parts;
 static PyObject *__pyx_n_s_pop;
 static PyObject *__pyx_n_s_pos;
 static PyObject *__pyx_n_s_possibly_malicious_schemes;
@@ -2141,7 +2207,6 @@ static PyObject *__pyx_n_s_prepare;
 static PyObject *__pyx_n_s_prev_text;
 static PyObject *__pyx_n_s_processing_instructions;
 static PyObject *__pyx_n_s_qualname;
-static PyObject *__pyx_n_s_query;
 static PyObject *__pyx_n_s_re;
 static PyObject *__pyx_n_s_regex;
 static PyObject *__pyx_n_s_regex_pos;
@@ -2257,16 +2322,16 @@ static PyObject *__pyx_tuple__6;
 static PyObject *__pyx_tuple__7;
 static PyObject *__pyx_tuple__8;
 static PyObject *__pyx_tuple__9;
-static PyObject *__pyx_slice__14;
-static PyObject *__pyx_slice__17;
+static PyObject *__pyx_slice__12;
+static PyObject *__pyx_slice__15;
 static PyObject *__pyx_tuple__11;
-static PyObject *__pyx_tuple__13;
-static PyObject *__pyx_tuple__18;
+static PyObject *__pyx_tuple__16;
+static PyObject *__pyx_tuple__17;
 static PyObject *__pyx_tuple__19;
+static PyObject *__pyx_tuple__20;
 static PyObject *__pyx_tuple__21;
 static PyObject *__pyx_tuple__22;
 static PyObject *__pyx_tuple__23;
-static PyObject *__pyx_tuple__24;
 static PyObject *__pyx_tuple__25;
 static PyObject *__pyx_tuple__27;
 static PyObject *__pyx_tuple__29;
@@ -2274,37 +2339,36 @@ static PyObject *__pyx_tuple__31;
 static PyObject *__pyx_tuple__33;
 static PyObject *__pyx_tuple__35;
 static PyObject *__pyx_tuple__37;
-static PyObject *__pyx_tuple__39;
-static PyObject *__pyx_tuple__40;
+static PyObject *__pyx_tuple__38;
+static PyObject *__pyx_tuple__41;
 static PyObject *__pyx_tuple__43;
 static PyObject *__pyx_tuple__45;
-static PyObject *__pyx_tuple__47;
+static PyObject *__pyx_tuple__46;
 static PyObject *__pyx_tuple__48;
 static PyObject *__pyx_tuple__50;
 static PyObject *__pyx_tuple__52;
 static PyObject *__pyx_tuple__54;
-static PyObject *__pyx_tuple__56;
+static PyObject *__pyx_tuple__55;
 static PyObject *__pyx_tuple__57;
 static PyObject *__pyx_tuple__59;
-static PyObject *__pyx_tuple__61;
-static PyObject *__pyx_codeobj__20;
+static PyObject *__pyx_codeobj__18;
+static PyObject *__pyx_codeobj__24;
 static PyObject *__pyx_codeobj__26;
 static PyObject *__pyx_codeobj__28;
 static PyObject *__pyx_codeobj__30;
 static PyObject *__pyx_codeobj__32;
 static PyObject *__pyx_codeobj__34;
 static PyObject *__pyx_codeobj__36;
-static PyObject *__pyx_codeobj__38;
-static PyObject *__pyx_codeobj__41;
+static PyObject *__pyx_codeobj__39;
+static PyObject *__pyx_codeobj__42;
 static PyObject *__pyx_codeobj__44;
-static PyObject *__pyx_codeobj__46;
+static PyObject *__pyx_codeobj__47;
 static PyObject *__pyx_codeobj__49;
 static PyObject *__pyx_codeobj__51;
 static PyObject *__pyx_codeobj__53;
-static PyObject *__pyx_codeobj__55;
+static PyObject *__pyx_codeobj__56;
 static PyObject *__pyx_codeobj__58;
 static PyObject *__pyx_codeobj__60;
-static PyObject *__pyx_codeobj__62;
 /* Late includes */
 
 /* "lxml/html/clean.py":86
@@ -7611,11 +7675,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_9allow_embedded_url(PyObje
 }
 
 static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_8allow_embedded_url(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_el, PyObject *__pyx_v_url) {
-  PyObject *__pyx_v_scheme = NULL;
-  PyObject *__pyx_v_netloc = NULL;
-  CYTHON_UNUSED PyObject *__pyx_v_path = NULL;
-  CYTHON_UNUSED PyObject *__pyx_v_query = NULL;
-  CYTHON_UNUSED PyObject *__pyx_v_fragment = NULL;
+  PyObject *__pyx_v_parts = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7624,11 +7684,6 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_8allow_embedded_url(CYTHON
   int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
-  PyObject *__pyx_t_9 = NULL;
-  PyObject *__pyx_t_10 = NULL;
-  PyObject *(*__pyx_t_11)(PyObject *);
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -7639,7 +7694,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_8allow_embedded_url(CYTHON
  *         """
  *         if self.whitelist_tags is not None and el.tag not in self.whitelist_tags:             # <<<<<<<<<<<<<<
  *             return False
- *         scheme, netloc, path, query, fragment = urlsplit(url)
+ *         parts = urlsplit(url)
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_whitelist_tags); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 491, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
@@ -7667,8 +7722,8 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_8allow_embedded_url(CYTHON
  *         """
  *         if self.whitelist_tags is not None and el.tag not in self.whitelist_tags:
  *             return False             # <<<<<<<<<<<<<<
- *         scheme, netloc, path, query, fragment = urlsplit(url)
- *         netloc = netloc.lower().split(':', 1)[0]
+ *         parts = urlsplit(url)
+ *         if parts.scheme not in ('http', 'https'):
  */
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(Py_False);
@@ -7680,16 +7735,16 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_8allow_embedded_url(CYTHON
  *         """
  *         if self.whitelist_tags is not None and el.tag not in self.whitelist_tags:             # <<<<<<<<<<<<<<
  *             return False
- *         scheme, netloc, path, query, fragment = urlsplit(url)
+ *         parts = urlsplit(url)
  */
   }
 
   /* "lxml/html/clean.py":493
  *         if self.whitelist_tags is not None and el.tag not in self.whitelist_tags:
  *             return False
- *         scheme, netloc, path, query, fragment = urlsplit(url)             # <<<<<<<<<<<<<<
- *         netloc = netloc.lower().split(':', 1)[0]
- *         if scheme not in ('http', 'https'):
+ *         parts = urlsplit(url)             # <<<<<<<<<<<<<<
+ *         if parts.scheme not in ('http', 'https'):
+ *             return False
  */
   __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_urlsplit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 493, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
@@ -7708,142 +7763,36 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_8allow_embedded_url(CYTHON
   if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 493, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
-    PyObject* sequence = __pyx_t_5;
-    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
-    if (unlikely(size != 5)) {
-      if (size > 5) __Pyx_RaiseTooManyValuesError(5);
-      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(0, 493, __pyx_L1_error)
-    }
-    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-    if (likely(PyTuple_CheckExact(sequence))) {
-      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
-      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
-      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); 
-      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); 
-      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 4); 
-    } else {
-      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
-      __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
-      __pyx_t_7 = PyList_GET_ITEM(sequence, 2); 
-      __pyx_t_8 = PyList_GET_ITEM(sequence, 3); 
-      __pyx_t_9 = PyList_GET_ITEM(sequence, 4); 
-    }
-    __Pyx_INCREF(__pyx_t_2);
-    __Pyx_INCREF(__pyx_t_6);
-    __Pyx_INCREF(__pyx_t_7);
-    __Pyx_INCREF(__pyx_t_8);
-    __Pyx_INCREF(__pyx_t_9);
-    #else
-    {
-      Py_ssize_t i;
-      PyObject** temps[5] = {&__pyx_t_2,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9};
-      for (i=0; i < 5; i++) {
-        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 493, __pyx_L1_error)
-        __Pyx_GOTREF(item);
-        *(temps[i]) = item;
-      }
-    }
-    #endif
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  } else {
-    Py_ssize_t index = -1;
-    PyObject** temps[5] = {&__pyx_t_2,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9};
-    __pyx_t_10 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 493, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_10);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
-    for (index=0; index < 5; index++) {
-      PyObject* item = __pyx_t_11(__pyx_t_10); if (unlikely(!item)) goto __pyx_L6_unpacking_failed;
-      __Pyx_GOTREF(item);
-      *(temps[index]) = item;
-    }
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 5) < 0) __PYX_ERR(0, 493, __pyx_L1_error)
-    __pyx_t_11 = NULL;
-    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-    goto __pyx_L7_unpacking_done;
-    __pyx_L6_unpacking_failed:;
-    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-    __pyx_t_11 = NULL;
-    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(0, 493, __pyx_L1_error)
-    __pyx_L7_unpacking_done:;
-  }
-  __pyx_v_scheme = __pyx_t_2;
-  __pyx_t_2 = 0;
-  __pyx_v_netloc = __pyx_t_6;
-  __pyx_t_6 = 0;
-  __pyx_v_path = __pyx_t_7;
-  __pyx_t_7 = 0;
-  __pyx_v_query = __pyx_t_8;
-  __pyx_t_8 = 0;
-  __pyx_v_fragment = __pyx_t_9;
-  __pyx_t_9 = 0;
+  __pyx_v_parts = __pyx_t_5;
+  __pyx_t_5 = 0;
 
   /* "lxml/html/clean.py":494
  *             return False
- *         scheme, netloc, path, query, fragment = urlsplit(url)
- *         netloc = netloc.lower().split(':', 1)[0]             # <<<<<<<<<<<<<<
- *         if scheme not in ('http', 'https'):
+ *         parts = urlsplit(url)
+ *         if parts.scheme not in ('http', 'https'):             # <<<<<<<<<<<<<<
  *             return False
+ *         if parts.hostname in self.host_whitelist:
  */
-  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_netloc, __pyx_n_s_lower); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 494, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_8 = NULL;
-  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
-    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
-    if (likely(__pyx_t_8)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
-      __Pyx_INCREF(__pyx_t_8);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_9, function);
-    }
-  }
-  __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
-  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
-  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 494, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_split); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 494, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_9);
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 494, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_parts, __pyx_n_s_scheme); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 494, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 494, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_9);
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF_SET(__pyx_v_netloc, __pyx_t_9);
-  __pyx_t_9 = 0;
-
-  /* "lxml/html/clean.py":495
- *         scheme, netloc, path, query, fragment = urlsplit(url)
- *         netloc = netloc.lower().split(':', 1)[0]
- *         if scheme not in ('http', 'https'):             # <<<<<<<<<<<<<<
- *             return False
- *         if netloc in self.host_whitelist:
- */
-  __Pyx_INCREF(__pyx_v_scheme);
-  __pyx_t_9 = __pyx_v_scheme;
-  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_9, __pyx_n_s_http, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 495, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_http, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 494, __pyx_L1_error)
   if (__pyx_t_3) {
   } else {
     __pyx_t_1 = __pyx_t_3;
-    goto __pyx_L9_bool_binop_done;
+    goto __pyx_L7_bool_binop_done;
   }
-  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_9, __pyx_n_s_https, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 495, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_https, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 494, __pyx_L1_error)
   __pyx_t_1 = __pyx_t_3;
-  __pyx_L9_bool_binop_done:;
-  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  __pyx_L7_bool_binop_done:;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/html/clean.py":496
- *         netloc = netloc.lower().split(':', 1)[0]
- *         if scheme not in ('http', 'https'):
+    /* "lxml/html/clean.py":495
+ *         parts = urlsplit(url)
+ *         if parts.scheme not in ('http', 'https'):
  *             return False             # <<<<<<<<<<<<<<
- *         if netloc in self.host_whitelist:
+ *         if parts.hostname in self.host_whitelist:
  *             return True
  */
     __Pyx_XDECREF(__pyx_r);
@@ -7851,32 +7800,35 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_8allow_embedded_url(CYTHON
     __pyx_r = Py_False;
     goto __pyx_L0;
 
-    /* "lxml/html/clean.py":495
- *         scheme, netloc, path, query, fragment = urlsplit(url)
- *         netloc = netloc.lower().split(':', 1)[0]
- *         if scheme not in ('http', 'https'):             # <<<<<<<<<<<<<<
+    /* "lxml/html/clean.py":494
  *             return False
- *         if netloc in self.host_whitelist:
+ *         parts = urlsplit(url)
+ *         if parts.scheme not in ('http', 'https'):             # <<<<<<<<<<<<<<
+ *             return False
+ *         if parts.hostname in self.host_whitelist:
  */
   }
 
-  /* "lxml/html/clean.py":497
- *         if scheme not in ('http', 'https'):
+  /* "lxml/html/clean.py":496
+ *         if parts.scheme not in ('http', 'https'):
  *             return False
- *         if netloc in self.host_whitelist:             # <<<<<<<<<<<<<<
+ *         if parts.hostname in self.host_whitelist:             # <<<<<<<<<<<<<<
  *             return True
  *         return False
  */
-  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_host_whitelist); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 497, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_netloc, __pyx_t_9, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 497, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_parts, __pyx_n_s_hostname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 496, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_host_whitelist); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 496, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_t_5, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 496, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_1 = (__pyx_t_3 != 0);
   if (__pyx_t_1) {
 
-    /* "lxml/html/clean.py":498
+    /* "lxml/html/clean.py":497
  *             return False
- *         if netloc in self.host_whitelist:
+ *         if parts.hostname in self.host_whitelist:
  *             return True             # <<<<<<<<<<<<<<
  *         return False
  * 
@@ -7886,17 +7838,17 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_8allow_embedded_url(CYTHON
     __pyx_r = Py_True;
     goto __pyx_L0;
 
-    /* "lxml/html/clean.py":497
- *         if scheme not in ('http', 'https'):
+    /* "lxml/html/clean.py":496
+ *         if parts.scheme not in ('http', 'https'):
  *             return False
- *         if netloc in self.host_whitelist:             # <<<<<<<<<<<<<<
+ *         if parts.hostname in self.host_whitelist:             # <<<<<<<<<<<<<<
  *             return True
  *         return False
  */
   }
 
-  /* "lxml/html/clean.py":499
- *         if netloc in self.host_whitelist:
+  /* "lxml/html/clean.py":498
+ *         if parts.hostname in self.host_whitelist:
  *             return True
  *         return False             # <<<<<<<<<<<<<<
  * 
@@ -7920,24 +7872,16 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_8allow_embedded_url(CYTHON
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_XDECREF(__pyx_t_9);
-  __Pyx_XDECREF(__pyx_t_10);
   __Pyx_AddTraceback("lxml.html.clean.Cleaner.allow_embedded_url", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_scheme);
-  __Pyx_XDECREF(__pyx_v_netloc);
-  __Pyx_XDECREF(__pyx_v_path);
-  __Pyx_XDECREF(__pyx_v_query);
-  __Pyx_XDECREF(__pyx_v_fragment);
+  __Pyx_XDECREF(__pyx_v_parts);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":501
+/* "lxml/html/clean.py":500
  *         return False
  * 
  *     def kill_conditional_comments(self, doc):             # <<<<<<<<<<<<<<
@@ -7981,11 +7925,11 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_11kill_conditional_comment
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_doc)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("kill_conditional_comments", 1, 2, 2, 1); __PYX_ERR(0, 501, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("kill_conditional_comments", 1, 2, 2, 1); __PYX_ERR(0, 500, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "kill_conditional_comments") < 0)) __PYX_ERR(0, 501, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "kill_conditional_comments") < 0)) __PYX_ERR(0, 500, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -7998,7 +7942,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_11kill_conditional_comment
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("kill_conditional_comments", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 501, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("kill_conditional_comments", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 500, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.html.clean.Cleaner.kill_conditional_comments", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -8011,7 +7955,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_11kill_conditional_comment
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":509
+/* "lxml/html/clean.py":508
  *         has_conditional_comment = _conditional_comment_re.search
  *         self._kill_elements(
  *             doc, lambda el: has_conditional_comment(el.text),             # <<<<<<<<<<<<<<
@@ -8049,8 +7993,8 @@ static PyObject *__pyx_lambda_funcdef_lambda(PyObject *__pyx_self, PyObject *__p
   __pyx_outer_scope = (struct __pyx_obj_4lxml_4html_5clean___pyx_scope_struct__kill_conditional_comments *) __Pyx_CyFunction_GetClosure(__pyx_self);
   __pyx_cur_scope = __pyx_outer_scope;
   __Pyx_XDECREF(__pyx_r);
-  if (unlikely(!__pyx_cur_scope->__pyx_v_has_conditional_comment)) { __Pyx_RaiseClosureNameError("has_conditional_comment"); __PYX_ERR(0, 509, __pyx_L1_error) }
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 509, __pyx_L1_error)
+  if (unlikely(!__pyx_cur_scope->__pyx_v_has_conditional_comment)) { __Pyx_RaiseClosureNameError("has_conditional_comment"); __PYX_ERR(0, 508, __pyx_L1_error) }
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 508, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_cur_scope->__pyx_v_has_conditional_comment);
   __pyx_t_3 = __pyx_cur_scope->__pyx_v_has_conditional_comment; __pyx_t_4 = NULL;
@@ -8066,7 +8010,7 @@ static PyObject *__pyx_lambda_funcdef_lambda(PyObject *__pyx_self, PyObject *__p
   __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, 509, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 508, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_1;
@@ -8087,7 +8031,7 @@ static PyObject *__pyx_lambda_funcdef_lambda(PyObject *__pyx_self, PyObject *__p
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":501
+/* "lxml/html/clean.py":500
  *         return False
  * 
  *     def kill_conditional_comments(self, doc):             # <<<<<<<<<<<<<<
@@ -8114,57 +8058,57 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_10kill_conditional_comment
   if (unlikely(!__pyx_cur_scope)) {
     __pyx_cur_scope = ((struct __pyx_obj_4lxml_4html_5clean___pyx_scope_struct__kill_conditional_comments *)Py_None);
     __Pyx_INCREF(Py_None);
-    __PYX_ERR(0, 501, __pyx_L1_error)
+    __PYX_ERR(0, 500, __pyx_L1_error)
   } else {
     __Pyx_GOTREF(__pyx_cur_scope);
   }
 
-  /* "lxml/html/clean.py":507
+  /* "lxml/html/clean.py":506
  *         we'll kill any comments that could be conditional.
  *         """
  *         has_conditional_comment = _conditional_comment_re.search             # <<<<<<<<<<<<<<
  *         self._kill_elements(
  *             doc, lambda el: has_conditional_comment(el.text),
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_conditional_comment_re); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 507, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_conditional_comment_re); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 506, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_search); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 507, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_search); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 506, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_cur_scope->__pyx_v_has_conditional_comment = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "lxml/html/clean.py":508
+  /* "lxml/html/clean.py":507
  *         """
  *         has_conditional_comment = _conditional_comment_re.search
  *         self._kill_elements(             # <<<<<<<<<<<<<<
  *             doc, lambda el: has_conditional_comment(el.text),
  *             etree.Comment)
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_kill_elements); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 508, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_kill_elements); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 507, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "lxml/html/clean.py":509
+  /* "lxml/html/clean.py":508
  *         has_conditional_comment = _conditional_comment_re.search
  *         self._kill_elements(
  *             doc, lambda el: has_conditional_comment(el.text),             # <<<<<<<<<<<<<<
  *             etree.Comment)
  * 
  */
-  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_25kill_conditional_comments_lambda, 0, __pyx_n_s_Cleaner_kill_conditional_comment, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lxml_html_clean, __pyx_d, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 509, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_25kill_conditional_comments_lambda, 0, __pyx_n_s_Cleaner_kill_conditional_comment, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lxml_html_clean, __pyx_d, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 508, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "lxml/html/clean.py":510
+  /* "lxml/html/clean.py":509
  *         self._kill_elements(
  *             doc, lambda el: has_conditional_comment(el.text),
  *             etree.Comment)             # <<<<<<<<<<<<<<
  * 
  *     def _kill_elements(self, doc, condition, iterate=None):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_etree); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 510, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_etree); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 509, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Comment); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 510, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Comment); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 509, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
@@ -8182,7 +8126,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_10kill_conditional_comment
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_1)) {
     PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_doc, __pyx_t_3, __pyx_t_5};
-    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 508, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 507, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8192,7 +8136,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_10kill_conditional_comment
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
     PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_doc, __pyx_t_3, __pyx_t_5};
-    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 508, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 507, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8200,7 +8144,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_10kill_conditional_comment
   } else
   #endif
   {
-    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 508, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 507, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -8214,14 +8158,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_10kill_conditional_comment
     PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_t_5);
     __pyx_t_3 = 0;
     __pyx_t_5 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 508, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 507, __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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/html/clean.py":501
+  /* "lxml/html/clean.py":500
  *         return False
  * 
  *     def kill_conditional_comments(self, doc):             # <<<<<<<<<<<<<<
@@ -8248,7 +8192,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_10kill_conditional_comment
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":512
+/* "lxml/html/clean.py":511
  *             etree.Comment)
  * 
  *     def _kill_elements(self, doc, condition, iterate=None):             # <<<<<<<<<<<<<<
@@ -8298,13 +8242,13 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_13_kill_elements(PyObject
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_doc)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_kill_elements", 0, 3, 4, 1); __PYX_ERR(0, 512, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_kill_elements", 0, 3, 4, 1); __PYX_ERR(0, 511, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_condition)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_kill_elements", 0, 3, 4, 2); __PYX_ERR(0, 512, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_kill_elements", 0, 3, 4, 2); __PYX_ERR(0, 511, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
@@ -8314,7 +8258,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_13_kill_elements(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_kill_elements") < 0)) __PYX_ERR(0, 512, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_kill_elements") < 0)) __PYX_ERR(0, 511, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -8334,7 +8278,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_13_kill_elements(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("_kill_elements", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 512, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("_kill_elements", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 511, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.html.clean.Cleaner._kill_elements", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -8365,26 +8309,26 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_kill_elements", 0);
 
-  /* "lxml/html/clean.py":513
+  /* "lxml/html/clean.py":512
  * 
  *     def _kill_elements(self, doc, condition, iterate=None):
  *         bad = []             # <<<<<<<<<<<<<<
  *         for el in doc.iter(iterate):
  *             if condition(el):
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 513, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 512, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_bad = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/html/clean.py":514
+  /* "lxml/html/clean.py":513
  *     def _kill_elements(self, doc, condition, iterate=None):
  *         bad = []
  *         for el in doc.iter(iterate):             # <<<<<<<<<<<<<<
  *             if condition(el):
  *                 bad.append(el)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_doc, __pyx_n_s_iter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 514, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_doc, __pyx_n_s_iter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 513, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -8398,16 +8342,16 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_iterate) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_iterate);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 513, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   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_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 514, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 513, __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(0, 514, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 513, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
@@ -8415,17 +8359,17 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
       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_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 514, __pyx_L1_error)
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 513, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 513, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 514, __pyx_L1_error)
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 513, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 513, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -8435,7 +8379,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 514, __pyx_L1_error)
+          else __PYX_ERR(0, 513, __pyx_L1_error)
         }
         break;
       }
@@ -8444,7 +8388,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
     __Pyx_XDECREF_SET(__pyx_v_el, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/html/clean.py":515
+    /* "lxml/html/clean.py":514
  *         bad = []
  *         for el in doc.iter(iterate):
  *             if condition(el):             # <<<<<<<<<<<<<<
@@ -8464,23 +8408,23 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
     }
     __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_v_el) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_el);
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 515, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 514, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (__pyx_t_7) {
 
-      /* "lxml/html/clean.py":516
+      /* "lxml/html/clean.py":515
  *         for el in doc.iter(iterate):
  *             if condition(el):
  *                 bad.append(el)             # <<<<<<<<<<<<<<
  *         for el in bad:
  *             el.drop_tree()
  */
-      __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_bad, __pyx_v_el); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 516, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_bad, __pyx_v_el); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 515, __pyx_L1_error)
 
-      /* "lxml/html/clean.py":515
+      /* "lxml/html/clean.py":514
  *         bad = []
  *         for el in doc.iter(iterate):
  *             if condition(el):             # <<<<<<<<<<<<<<
@@ -8489,7 +8433,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
  */
     }
 
-    /* "lxml/html/clean.py":514
+    /* "lxml/html/clean.py":513
  *     def _kill_elements(self, doc, condition, iterate=None):
  *         bad = []
  *         for el in doc.iter(iterate):             # <<<<<<<<<<<<<<
@@ -8499,7 +8443,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/html/clean.py":517
+  /* "lxml/html/clean.py":516
  *             if condition(el):
  *                 bad.append(el)
  *         for el in bad:             # <<<<<<<<<<<<<<
@@ -8510,22 +8454,22 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
   for (;;) {
     if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 517, __pyx_L1_error)
+    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 516, __pyx_L1_error)
     #else
-    __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 516, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     #endif
     __Pyx_XDECREF_SET(__pyx_v_el, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/html/clean.py":518
+    /* "lxml/html/clean.py":517
  *                 bad.append(el)
  *         for el in bad:
  *             el.drop_tree()             # <<<<<<<<<<<<<<
  * 
  *     def _remove_javascript_link(self, link):
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_drop_tree); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 518, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_drop_tree); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 517, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_6 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -8539,12 +8483,12 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
     }
     __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 518, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "lxml/html/clean.py":517
+    /* "lxml/html/clean.py":516
  *             if condition(el):
  *                 bad.append(el)
  *         for el in bad:             # <<<<<<<<<<<<<<
@@ -8554,7 +8498,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/html/clean.py":512
+  /* "lxml/html/clean.py":511
  *             etree.Comment)
  * 
  *     def _kill_elements(self, doc, condition, iterate=None):             # <<<<<<<<<<<<<<
@@ -8580,7 +8524,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_12_kill_elements(CYTHON_UN
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":520
+/* "lxml/html/clean.py":519
  *             el.drop_tree()
  * 
  *     def _remove_javascript_link(self, link):             # <<<<<<<<<<<<<<
@@ -8623,11 +8567,11 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_15_remove_javascript_link(
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_link)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_remove_javascript_link", 1, 2, 2, 1); __PYX_ERR(0, 520, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_remove_javascript_link", 1, 2, 2, 1); __PYX_ERR(0, 519, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_remove_javascript_link") < 0)) __PYX_ERR(0, 520, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_remove_javascript_link") < 0)) __PYX_ERR(0, 519, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -8640,7 +8584,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_15_remove_javascript_link(
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("_remove_javascript_link", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 520, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("_remove_javascript_link", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 519, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.html.clean.Cleaner._remove_javascript_link", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -8669,16 +8613,16 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_remove_javascript_link", 0);
 
-  /* "lxml/html/clean.py":522
+  /* "lxml/html/clean.py":521
  *     def _remove_javascript_link(self, link):
  *         # links like "j a v a s c r i p t:" might be interpreted in IE
  *         new = _substitute_whitespace('', unquote_plus(link))             # <<<<<<<<<<<<<<
  *         if _has_javascript_scheme(new):
  *             # FIXME: should this be None to delete?
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_substitute_whitespace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 522, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_substitute_whitespace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 521, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_unquote_plus); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 522, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_unquote_plus); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 521, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -8692,7 +8636,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
   }
   __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_link) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_link);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 522, __pyx_L1_error)
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 521, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
@@ -8710,7 +8654,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_2)) {
     PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_kp_s__2, __pyx_t_3};
-    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8719,14 +8663,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
     PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_kp_s__2, __pyx_t_3};
-    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else
   #endif
   {
-    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 522, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 521, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -8737,7 +8681,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
@@ -8745,14 +8689,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
   __pyx_v_new = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/html/clean.py":523
+  /* "lxml/html/clean.py":522
  *         # links like "j a v a s c r i p t:" might be interpreted in IE
  *         new = _substitute_whitespace('', unquote_plus(link))
  *         if _has_javascript_scheme(new):             # <<<<<<<<<<<<<<
  *             # FIXME: should this be None to delete?
  *             return ''
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_has_javascript_scheme); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 523, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_has_javascript_scheme); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 522, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_5 = NULL;
   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
@@ -8766,14 +8710,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
   }
   __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_new) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_new);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 523, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 523, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 522, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_7) {
 
-    /* "lxml/html/clean.py":525
+    /* "lxml/html/clean.py":524
  *         if _has_javascript_scheme(new):
  *             # FIXME: should this be None to delete?
  *             return ''             # <<<<<<<<<<<<<<
@@ -8785,7 +8729,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
     __pyx_r = __pyx_kp_s__2;
     goto __pyx_L0;
 
-    /* "lxml/html/clean.py":523
+    /* "lxml/html/clean.py":522
  *         # links like "j a v a s c r i p t:" might be interpreted in IE
  *         new = _substitute_whitespace('', unquote_plus(link))
  *         if _has_javascript_scheme(new):             # <<<<<<<<<<<<<<
@@ -8794,7 +8738,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
  */
   }
 
-  /* "lxml/html/clean.py":526
+  /* "lxml/html/clean.py":525
  *             # FIXME: should this be None to delete?
  *             return ''
  *         return link             # <<<<<<<<<<<<<<
@@ -8806,7 +8750,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
   __pyx_r = __pyx_v_link;
   goto __pyx_L0;
 
-  /* "lxml/html/clean.py":520
+  /* "lxml/html/clean.py":519
  *             el.drop_tree()
  * 
  *     def _remove_javascript_link(self, link):             # <<<<<<<<<<<<<<
@@ -8830,7 +8774,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_14_remove_javascript_link(
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":530
+/* "lxml/html/clean.py":529
  *     _substitute_comments = re.compile(r'/\*.*?\*[inserted by cython to avoid comment closer]/', re.S).sub
  * 
  *     def _has_sneaky_javascript(self, style):             # <<<<<<<<<<<<<<
@@ -8874,11 +8818,11 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_17_has_sneaky_javascript(P
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_style)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_has_sneaky_javascript", 1, 2, 2, 1); __PYX_ERR(0, 530, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_has_sneaky_javascript", 1, 2, 2, 1); __PYX_ERR(0, 529, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_has_sneaky_javascript") < 0)) __PYX_ERR(0, 530, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_has_sneaky_javascript") < 0)) __PYX_ERR(0, 529, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -8891,7 +8835,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_17_has_sneaky_javascript(P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("_has_sneaky_javascript", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 530, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("_has_sneaky_javascript", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 529, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.html.clean.Cleaner._has_sneaky_javascript", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -8920,14 +8864,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   __Pyx_RefNannySetupContext("_has_sneaky_javascript", 0);
   __Pyx_INCREF(__pyx_v_style);
 
-  /* "lxml/html/clean.py":541
+  /* "lxml/html/clean.py":540
  *         more sneaky attempts.
  *         """
  *         style = self._substitute_comments('', style)             # <<<<<<<<<<<<<<
  *         style = style.replace('\\', '')
  *         style = _substitute_whitespace('', style)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_substitute_comments); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 541, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_substitute_comments); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
@@ -8944,7 +8888,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_2)) {
     PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_s__2, __pyx_v_style};
-    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else
@@ -8952,13 +8896,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
     PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_s__2, __pyx_v_style};
-    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else
   #endif
   {
-    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 541, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __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;
@@ -8969,7 +8913,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
     __Pyx_INCREF(__pyx_v_style);
     __Pyx_GIVEREF(__pyx_v_style);
     PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_style);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
@@ -8977,29 +8921,29 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   __Pyx_DECREF_SET(__pyx_v_style, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/html/clean.py":542
+  /* "lxml/html/clean.py":541
  *         """
  *         style = self._substitute_comments('', style)
  *         style = style.replace('\\', '')             # <<<<<<<<<<<<<<
  *         style = _substitute_whitespace('', style)
  *         style = style.lower()
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_style, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_style, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 542, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 541, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF_SET(__pyx_v_style, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/html/clean.py":543
+  /* "lxml/html/clean.py":542
  *         style = self._substitute_comments('', style)
  *         style = style.replace('\\', '')
  *         style = _substitute_whitespace('', style)             # <<<<<<<<<<<<<<
  *         style = style.lower()
  *         if _has_javascript_scheme(style):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_substitute_whitespace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 543, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_substitute_whitespace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_5 = NULL;
   __pyx_t_4 = 0;
@@ -9016,7 +8960,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_1)) {
     PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_kp_s__2, __pyx_v_style};
-    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 542, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else
@@ -9024,13 +8968,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
     PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_kp_s__2, __pyx_v_style};
-    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 542, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else
   #endif
   {
-    __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 543, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 542, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     if (__pyx_t_5) {
       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
@@ -9041,7 +8985,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
     __Pyx_INCREF(__pyx_v_style);
     __Pyx_GIVEREF(__pyx_v_style);
     PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_v_style);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 542, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
@@ -9049,14 +8993,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   __Pyx_DECREF_SET(__pyx_v_style, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/html/clean.py":544
+  /* "lxml/html/clean.py":543
  *         style = style.replace('\\', '')
  *         style = _substitute_whitespace('', style)
  *         style = style.lower()             # <<<<<<<<<<<<<<
  *         if _has_javascript_scheme(style):
  *             return True
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_style, __pyx_n_s_lower); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 544, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_style, __pyx_n_s_lower); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 543, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -9070,20 +9014,20 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   }
   __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, 544, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF_SET(__pyx_v_style, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/html/clean.py":545
+  /* "lxml/html/clean.py":544
  *         style = _substitute_whitespace('', style)
  *         style = style.lower()
  *         if _has_javascript_scheme(style):             # <<<<<<<<<<<<<<
  *             return True
  *         if 'expression(' in style:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_has_javascript_scheme); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 545, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_has_javascript_scheme); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 544, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
@@ -9097,14 +9041,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   }
   __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_v_style) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_style);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 545, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 544, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 545, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 544, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_6) {
 
-    /* "lxml/html/clean.py":546
+    /* "lxml/html/clean.py":545
  *         style = style.lower()
  *         if _has_javascript_scheme(style):
  *             return True             # <<<<<<<<<<<<<<
@@ -9116,7 +9060,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
     __pyx_r = Py_True;
     goto __pyx_L0;
 
-    /* "lxml/html/clean.py":545
+    /* "lxml/html/clean.py":544
  *         style = _substitute_whitespace('', style)
  *         style = style.lower()
  *         if _has_javascript_scheme(style):             # <<<<<<<<<<<<<<
@@ -9125,18 +9069,18 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
  */
   }
 
-  /* "lxml/html/clean.py":547
+  /* "lxml/html/clean.py":546
  *         if _has_javascript_scheme(style):
  *             return True
  *         if 'expression(' in style:             # <<<<<<<<<<<<<<
  *             return True
  *         if '@import' in style:
  */
-  __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_expression, __pyx_v_style, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 547, __pyx_L1_error)
+  __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_expression, __pyx_v_style, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 546, __pyx_L1_error)
   __pyx_t_7 = (__pyx_t_6 != 0);
   if (__pyx_t_7) {
 
-    /* "lxml/html/clean.py":548
+    /* "lxml/html/clean.py":547
  *             return True
  *         if 'expression(' in style:
  *             return True             # <<<<<<<<<<<<<<
@@ -9148,7 +9092,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
     __pyx_r = Py_True;
     goto __pyx_L0;
 
-    /* "lxml/html/clean.py":547
+    /* "lxml/html/clean.py":546
  *         if _has_javascript_scheme(style):
  *             return True
  *         if 'expression(' in style:             # <<<<<<<<<<<<<<
@@ -9157,18 +9101,18 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
  */
   }
 
-  /* "lxml/html/clean.py":549
+  /* "lxml/html/clean.py":548
  *         if 'expression(' in style:
  *             return True
  *         if '@import' in style:             # <<<<<<<<<<<<<<
  *             return True
  *         if '</noscript' in style:
  */
-  __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_import, __pyx_v_style, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 549, __pyx_L1_error)
+  __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_import, __pyx_v_style, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 548, __pyx_L1_error)
   __pyx_t_6 = (__pyx_t_7 != 0);
   if (__pyx_t_6) {
 
-    /* "lxml/html/clean.py":550
+    /* "lxml/html/clean.py":549
  *             return True
  *         if '@import' in style:
  *             return True             # <<<<<<<<<<<<<<
@@ -9180,7 +9124,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
     __pyx_r = Py_True;
     goto __pyx_L0;
 
-    /* "lxml/html/clean.py":549
+    /* "lxml/html/clean.py":548
  *         if 'expression(' in style:
  *             return True
  *         if '@import' in style:             # <<<<<<<<<<<<<<
@@ -9189,18 +9133,18 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
  */
   }
 
-  /* "lxml/html/clean.py":551
+  /* "lxml/html/clean.py":550
  *         if '@import' in style:
  *             return True
  *         if '</noscript' in style:             # <<<<<<<<<<<<<<
  *             # e.g. '<noscript><style><a title="</noscript><img src=x onerror=alert(1)>">'
  *             return True
  */
-  __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_noscript, __pyx_v_style, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 551, __pyx_L1_error)
+  __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_noscript, __pyx_v_style, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 550, __pyx_L1_error)
   __pyx_t_7 = (__pyx_t_6 != 0);
   if (__pyx_t_7) {
 
-    /* "lxml/html/clean.py":553
+    /* "lxml/html/clean.py":552
  *         if '</noscript' in style:
  *             # e.g. '<noscript><style><a title="</noscript><img src=x onerror=alert(1)>">'
  *             return True             # <<<<<<<<<<<<<<
@@ -9212,7 +9156,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
     __pyx_r = Py_True;
     goto __pyx_L0;
 
-    /* "lxml/html/clean.py":551
+    /* "lxml/html/clean.py":550
  *         if '@import' in style:
  *             return True
  *         if '</noscript' in style:             # <<<<<<<<<<<<<<
@@ -9221,14 +9165,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
  */
   }
 
-  /* "lxml/html/clean.py":554
+  /* "lxml/html/clean.py":553
  *             # e.g. '<noscript><style><a title="</noscript><img src=x onerror=alert(1)>">'
  *             return True
  *         if _looks_like_tag_content(style):             # <<<<<<<<<<<<<<
  *             # e.g. '<math><style><img src=x onerror=alert(1)></style></math>'
  *             return True
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_looks_like_tag_content); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_looks_like_tag_content); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 553, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
@@ -9242,14 +9186,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   }
   __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_v_style) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_style);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 553, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 554, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 553, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_7) {
 
-    /* "lxml/html/clean.py":556
+    /* "lxml/html/clean.py":555
  *         if _looks_like_tag_content(style):
  *             # e.g. '<math><style><img src=x onerror=alert(1)></style></math>'
  *             return True             # <<<<<<<<<<<<<<
@@ -9261,7 +9205,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
     __pyx_r = Py_True;
     goto __pyx_L0;
 
-    /* "lxml/html/clean.py":554
+    /* "lxml/html/clean.py":553
  *             # e.g. '<noscript><style><a title="</noscript><img src=x onerror=alert(1)>">'
  *             return True
  *         if _looks_like_tag_content(style):             # <<<<<<<<<<<<<<
@@ -9270,7 +9214,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
  */
   }
 
-  /* "lxml/html/clean.py":557
+  /* "lxml/html/clean.py":556
  *             # e.g. '<math><style><img src=x onerror=alert(1)></style></math>'
  *             return True
  *         return False             # <<<<<<<<<<<<<<
@@ -9282,7 +9226,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   __pyx_r = Py_False;
   goto __pyx_L0;
 
-  /* "lxml/html/clean.py":530
+  /* "lxml/html/clean.py":529
  *     _substitute_comments = re.compile(r'/\*.*?\*[inserted by cython to avoid comment closer]/', re.S).sub
  * 
  *     def _has_sneaky_javascript(self, style):             # <<<<<<<<<<<<<<
@@ -9305,7 +9249,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_16_has_sneaky_javascript(C
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":559
+/* "lxml/html/clean.py":558
  *         return False
  * 
  *     def clean_html(self, html):             # <<<<<<<<<<<<<<
@@ -9348,11 +9292,11 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_19clean_html(PyObject *__p
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_html)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("clean_html", 1, 2, 2, 1); __PYX_ERR(0, 559, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("clean_html", 1, 2, 2, 1); __PYX_ERR(0, 558, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clean_html") < 0)) __PYX_ERR(0, 559, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clean_html") < 0)) __PYX_ERR(0, 558, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -9365,7 +9309,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7Cleaner_19clean_html(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("clean_html", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 559, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("clean_html", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 558, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.html.clean.Cleaner.clean_html", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -9395,7 +9339,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("clean_html", 0);
 
-  /* "lxml/html/clean.py":560
+  /* "lxml/html/clean.py":559
  * 
  *     def clean_html(self, html):
  *         result_type = type(html)             # <<<<<<<<<<<<<<
@@ -9405,28 +9349,28 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
   __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_html)));
   __pyx_v_result_type = ((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_html)));
 
-  /* "lxml/html/clean.py":561
+  /* "lxml/html/clean.py":560
  *     def clean_html(self, html):
  *         result_type = type(html)
  *         if isinstance(html, basestring):             # <<<<<<<<<<<<<<
  *             doc = fromstring(html)
  *         else:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_basestring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_basestring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_IsInstance(__pyx_v_html, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 561, __pyx_L1_error)
+  __pyx_t_2 = PyObject_IsInstance(__pyx_v_html, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 560, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/html/clean.py":562
+    /* "lxml/html/clean.py":561
  *         result_type = type(html)
  *         if isinstance(html, basestring):
  *             doc = fromstring(html)             # <<<<<<<<<<<<<<
  *         else:
  *             doc = copy.deepcopy(html)
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 562, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 561, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -9440,13 +9384,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
     }
     __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_html) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_html);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_doc = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "lxml/html/clean.py":561
+    /* "lxml/html/clean.py":560
  *     def clean_html(self, html):
  *         result_type = type(html)
  *         if isinstance(html, basestring):             # <<<<<<<<<<<<<<
@@ -9456,7 +9400,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
     goto __pyx_L3;
   }
 
-  /* "lxml/html/clean.py":564
+  /* "lxml/html/clean.py":563
  *             doc = fromstring(html)
  *         else:
  *             doc = copy.deepcopy(html)             # <<<<<<<<<<<<<<
@@ -9464,9 +9408,9 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
  *         return _transform_result(result_type, doc)
  */
   /*else*/ {
-    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 564, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 563, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_deepcopy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 564, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_deepcopy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 563, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = NULL;
@@ -9481,7 +9425,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
     }
     __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_html) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_html);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_v_doc = __pyx_t_1;
@@ -9489,7 +9433,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
   }
   __pyx_L3:;
 
-  /* "lxml/html/clean.py":565
+  /* "lxml/html/clean.py":564
  *         else:
  *             doc = copy.deepcopy(html)
  *         self(doc)             # <<<<<<<<<<<<<<
@@ -9509,12 +9453,12 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
   }
   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_doc) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_doc);
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/html/clean.py":566
+  /* "lxml/html/clean.py":565
  *             doc = copy.deepcopy(html)
  *         self(doc)
  *         return _transform_result(result_type, doc)             # <<<<<<<<<<<<<<
@@ -9522,7 +9466,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
  * clean = Cleaner()
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_transform_result); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 566, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_transform_result); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 565, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_4 = NULL;
   __pyx_t_6 = 0;
@@ -9539,7 +9483,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_5)) {
     PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_result_type), __pyx_v_doc};
-    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else
@@ -9547,13 +9491,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
     PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_result_type), __pyx_v_doc};
-    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 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, 566, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 565, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -9564,7 +9508,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
     __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_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
@@ -9573,7 +9517,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "lxml/html/clean.py":559
+  /* "lxml/html/clean.py":558
  *         return False
  * 
  *     def clean_html(self, html):             # <<<<<<<<<<<<<<
@@ -9597,7 +9541,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_7Cleaner_18clean_html(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":591
+/* "lxml/html/clean.py":590
  * _avoid_classes = ['nolink']
  * 
  * def autolink(el, link_regexes=_link_regexes,             # <<<<<<<<<<<<<<
@@ -9615,7 +9559,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_16__defaults__(CYTHON_UNUSED PyObje
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__defaults__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 591, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_link_regexes);
   __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_link_regexes);
@@ -9629,7 +9573,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_16__defaults__(CYTHON_UNUSED PyObje
   __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_avoid_classes);
   __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_avoid_classes);
   PyTuple_SET_ITEM(__pyx_t_1, 3, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_avoid_classes);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 591, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -9725,7 +9669,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_3autolink(PyObject *__pyx_self, PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "autolink") < 0)) __PYX_ERR(0, 591, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "autolink") < 0)) __PYX_ERR(0, 590, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -9750,7 +9694,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_3autolink(PyObject *__pyx_self, PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("autolink", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 591, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("autolink", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 590, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.html.clean.autolink", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -9788,21 +9732,21 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("autolink", 0);
 
-  /* "lxml/html/clean.py":609
+  /* "lxml/html/clean.py":608
  *     substituted, only the contents of the element.
  *     """
  *     if el.tag in avoid_elements:             # <<<<<<<<<<<<<<
  *         return
  *     class_name = el.get('class')
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 609, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 608, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_v_avoid_elements, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 609, __pyx_L1_error)
+  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_v_avoid_elements, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 608, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/html/clean.py":610
+    /* "lxml/html/clean.py":609
  *     """
  *     if el.tag in avoid_elements:
  *         return             # <<<<<<<<<<<<<<
@@ -9813,7 +9757,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/html/clean.py":609
+    /* "lxml/html/clean.py":608
  *     substituted, only the contents of the element.
  *     """
  *     if el.tag in avoid_elements:             # <<<<<<<<<<<<<<
@@ -9822,14 +9766,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
  */
   }
 
-  /* "lxml/html/clean.py":611
+  /* "lxml/html/clean.py":610
  *     if el.tag in avoid_elements:
  *         return
  *     class_name = el.get('class')             # <<<<<<<<<<<<<<
  *     if class_name:
  *         class_name = class_name.split()
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 611, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 610, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -9843,30 +9787,30 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
   }
   __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_n_s_class) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_n_s_class);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 611, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 610, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_class_name = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/html/clean.py":612
+  /* "lxml/html/clean.py":611
  *         return
  *     class_name = el.get('class')
  *     if class_name:             # <<<<<<<<<<<<<<
  *         class_name = class_name.split()
  *         for match_class in avoid_classes:
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_class_name); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 612, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_class_name); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 611, __pyx_L1_error)
   if (__pyx_t_3) {
 
-    /* "lxml/html/clean.py":613
+    /* "lxml/html/clean.py":612
  *     class_name = el.get('class')
  *     if class_name:
  *         class_name = class_name.split()             # <<<<<<<<<<<<<<
  *         for match_class in avoid_classes:
  *             if match_class in class_name:
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_class_name, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 613, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_class_name, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 612, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -9880,13 +9824,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
     }
     __pyx_t_1 = (__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_1)) __PYX_ERR(0, 613, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 612, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_class_name, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/html/clean.py":614
+    /* "lxml/html/clean.py":613
  *     if class_name:
  *         class_name = class_name.split()
  *         for match_class in avoid_classes:             # <<<<<<<<<<<<<<
@@ -9897,26 +9841,26 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
       __pyx_t_1 = __pyx_v_avoid_classes; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_avoid_classes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 614, __pyx_L1_error)
+      __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_avoid_classes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 613, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_7 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 614, __pyx_L1_error)
+      __pyx_t_7 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 613, __pyx_L1_error)
     }
     for (;;) {
       if (likely(!__pyx_t_7)) {
         if (likely(PyList_CheckExact(__pyx_t_1))) {
           if (__pyx_t_6 >= 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_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 614, __pyx_L1_error)
+          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 613, __pyx_L1_error)
           #else
-          __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 614, __pyx_L1_error)
+          __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 613, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_4);
           #endif
         } else {
           if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 614, __pyx_L1_error)
+          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 613, __pyx_L1_error)
           #else
-          __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 614, __pyx_L1_error)
+          __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 613, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_4);
           #endif
         }
@@ -9926,7 +9870,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(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, 614, __pyx_L1_error)
+            else __PYX_ERR(0, 613, __pyx_L1_error)
           }
           break;
         }
@@ -9935,18 +9879,18 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
       __Pyx_XDECREF_SET(__pyx_v_match_class, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "lxml/html/clean.py":615
+      /* "lxml/html/clean.py":614
  *         class_name = class_name.split()
  *         for match_class in avoid_classes:
  *             if match_class in class_name:             # <<<<<<<<<<<<<<
  *                 return
  *     for child in list(el):
  */
-      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_match_class, __pyx_v_class_name, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 615, __pyx_L1_error)
+      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_match_class, __pyx_v_class_name, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 614, __pyx_L1_error)
       __pyx_t_2 = (__pyx_t_3 != 0);
       if (__pyx_t_2) {
 
-        /* "lxml/html/clean.py":616
+        /* "lxml/html/clean.py":615
  *         for match_class in avoid_classes:
  *             if match_class in class_name:
  *                 return             # <<<<<<<<<<<<<<
@@ -9958,7 +9902,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         goto __pyx_L0;
 
-        /* "lxml/html/clean.py":615
+        /* "lxml/html/clean.py":614
  *         class_name = class_name.split()
  *         for match_class in avoid_classes:
  *             if match_class in class_name:             # <<<<<<<<<<<<<<
@@ -9967,7 +9911,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
  */
       }
 
-      /* "lxml/html/clean.py":614
+      /* "lxml/html/clean.py":613
  *     if class_name:
  *         class_name = class_name.split()
  *         for match_class in avoid_classes:             # <<<<<<<<<<<<<<
@@ -9977,7 +9921,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "lxml/html/clean.py":612
+    /* "lxml/html/clean.py":611
  *         return
  *     class_name = el.get('class')
  *     if class_name:             # <<<<<<<<<<<<<<
@@ -9986,128 +9930,128 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
  */
   }
 
-  /* "lxml/html/clean.py":617
+  /* "lxml/html/clean.py":616
  *             if match_class in class_name:
  *                 return
  *     for child in list(el):             # <<<<<<<<<<<<<<
  *         autolink(child, link_regexes=link_regexes,
  *                  avoid_elements=avoid_elements,
  */
-  __pyx_t_1 = PySequence_List(__pyx_v_el); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 617, __pyx_L1_error)
+  __pyx_t_1 = PySequence_List(__pyx_v_el); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 616, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (__pyx_t_6 >= 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_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 617, __pyx_L1_error)
+    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 616, __pyx_L1_error)
     #else
-    __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 617, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 616, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     #endif
     __Pyx_XDECREF_SET(__pyx_v_child, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/html/clean.py":618
+    /* "lxml/html/clean.py":617
  *                 return
  *     for child in list(el):
  *         autolink(child, link_regexes=link_regexes,             # <<<<<<<<<<<<<<
  *                  avoid_elements=avoid_elements,
  *                  avoid_hosts=avoid_hosts,
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_autolink); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 618, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_autolink); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 617, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 618, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 617, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_child);
     __Pyx_GIVEREF(__pyx_v_child);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_child);
-    __pyx_t_8 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 618, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 617, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_link_regexes, __pyx_v_link_regexes) < 0) __PYX_ERR(0, 618, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_link_regexes, __pyx_v_link_regexes) < 0) __PYX_ERR(0, 617, __pyx_L1_error)
 
-    /* "lxml/html/clean.py":619
+    /* "lxml/html/clean.py":618
  *     for child in list(el):
  *         autolink(child, link_regexes=link_regexes,
  *                  avoid_elements=avoid_elements,             # <<<<<<<<<<<<<<
  *                  avoid_hosts=avoid_hosts,
  *                  avoid_classes=avoid_classes)
  */
-    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_avoid_elements, __pyx_v_avoid_elements) < 0) __PYX_ERR(0, 618, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_avoid_elements, __pyx_v_avoid_elements) < 0) __PYX_ERR(0, 617, __pyx_L1_error)
 
-    /* "lxml/html/clean.py":620
+    /* "lxml/html/clean.py":619
  *         autolink(child, link_regexes=link_regexes,
  *                  avoid_elements=avoid_elements,
  *                  avoid_hosts=avoid_hosts,             # <<<<<<<<<<<<<<
  *                  avoid_classes=avoid_classes)
  *         if child.tail:
  */
-    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_avoid_hosts, __pyx_v_avoid_hosts) < 0) __PYX_ERR(0, 618, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_avoid_hosts, __pyx_v_avoid_hosts) < 0) __PYX_ERR(0, 617, __pyx_L1_error)
 
-    /* "lxml/html/clean.py":621
+    /* "lxml/html/clean.py":620
  *                  avoid_elements=avoid_elements,
  *                  avoid_hosts=avoid_hosts,
  *                  avoid_classes=avoid_classes)             # <<<<<<<<<<<<<<
  *         if child.tail:
  *             text, tail_children = _link_text(
  */
-    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_avoid_classes, __pyx_v_avoid_classes) < 0) __PYX_ERR(0, 618, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_avoid_classes, __pyx_v_avoid_classes) < 0) __PYX_ERR(0, 617, __pyx_L1_error)
 
-    /* "lxml/html/clean.py":618
+    /* "lxml/html/clean.py":617
  *                 return
  *     for child in list(el):
  *         autolink(child, link_regexes=link_regexes,             # <<<<<<<<<<<<<<
  *                  avoid_elements=avoid_elements,
  *                  avoid_hosts=avoid_hosts,
  */
-    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 618, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 617, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "lxml/html/clean.py":622
+    /* "lxml/html/clean.py":621
  *                  avoid_hosts=avoid_hosts,
  *                  avoid_classes=avoid_classes)
  *         if child.tail:             # <<<<<<<<<<<<<<
  *             text, tail_children = _link_text(
  *                 child.tail, link_regexes, avoid_hosts, factory=el.makeelement)
  */
-    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_tail); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 622, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_tail); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 621, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 622, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 621, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     if (__pyx_t_2) {
 
-      /* "lxml/html/clean.py":623
+      /* "lxml/html/clean.py":622
  *                  avoid_classes=avoid_classes)
  *         if child.tail:
  *             text, tail_children = _link_text(             # <<<<<<<<<<<<<<
  *                 child.tail, link_regexes, avoid_hosts, factory=el.makeelement)
  *             if tail_children:
  */
-      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_link_text); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 623, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_link_text); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 622, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "lxml/html/clean.py":624
+      /* "lxml/html/clean.py":623
  *         if child.tail:
  *             text, tail_children = _link_text(
  *                 child.tail, link_regexes, avoid_hosts, factory=el.makeelement)             # <<<<<<<<<<<<<<
  *             if tail_children:
  *                 child.tail = text
  */
-      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_tail); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 624, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_tail); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 623, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
 
-      /* "lxml/html/clean.py":623
+      /* "lxml/html/clean.py":622
  *                  avoid_classes=avoid_classes)
  *         if child.tail:
  *             text, tail_children = _link_text(             # <<<<<<<<<<<<<<
  *                 child.tail, link_regexes, avoid_hosts, factory=el.makeelement)
  *             if tail_children:
  */
-      __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 623, __pyx_L1_error)
+      __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 622, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_8);
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_8);
@@ -10119,28 +10063,28 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
       PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_avoid_hosts);
       __pyx_t_8 = 0;
 
-      /* "lxml/html/clean.py":624
+      /* "lxml/html/clean.py":623
  *         if child.tail:
  *             text, tail_children = _link_text(
  *                 child.tail, link_regexes, avoid_hosts, factory=el.makeelement)             # <<<<<<<<<<<<<<
  *             if tail_children:
  *                 child.tail = text
  */
-      __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 624, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 623, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_makeelement); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 624, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_makeelement); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 623, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_factory, __pyx_t_1) < 0) __PYX_ERR(0, 624, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_factory, __pyx_t_1) < 0) __PYX_ERR(0, 623, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "lxml/html/clean.py":623
+      /* "lxml/html/clean.py":622
  *                  avoid_classes=avoid_classes)
  *         if child.tail:
  *             text, tail_children = _link_text(             # <<<<<<<<<<<<<<
  *                 child.tail, link_regexes, avoid_hosts, factory=el.makeelement)
  *             if tail_children:
  */
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 623, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 622, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -10151,7 +10095,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          __PYX_ERR(0, 623, __pyx_L1_error)
+          __PYX_ERR(0, 622, __pyx_L1_error)
         }
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -10164,15 +10108,15 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
         __Pyx_INCREF(__pyx_t_8);
         __Pyx_INCREF(__pyx_t_5);
         #else
-        __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 623, __pyx_L1_error)
+        __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 622, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_8);
-        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 623, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 622, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #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(0, 623, __pyx_L1_error)
+        __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 622, __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;
@@ -10180,7 +10124,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
         __Pyx_GOTREF(__pyx_t_8);
         index = 1; __pyx_t_5 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_5)) goto __pyx_L11_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_5);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 623, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 622, __pyx_L1_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L12_unpacking_done;
@@ -10188,7 +10132,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(0, 623, __pyx_L1_error)
+        __PYX_ERR(0, 622, __pyx_L1_error)
         __pyx_L12_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_text, __pyx_t_8);
@@ -10196,33 +10140,33 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
       __Pyx_XDECREF_SET(__pyx_v_tail_children, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "lxml/html/clean.py":625
+      /* "lxml/html/clean.py":624
  *             text, tail_children = _link_text(
  *                 child.tail, link_regexes, avoid_hosts, factory=el.makeelement)
  *             if tail_children:             # <<<<<<<<<<<<<<
  *                 child.tail = text
  *                 index = el.index(child)
  */
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_tail_children); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 625, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_tail_children); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 624, __pyx_L1_error)
       if (__pyx_t_2) {
 
-        /* "lxml/html/clean.py":626
+        /* "lxml/html/clean.py":625
  *                 child.tail, link_regexes, avoid_hosts, factory=el.makeelement)
  *             if tail_children:
  *                 child.tail = text             # <<<<<<<<<<<<<<
  *                 index = el.index(child)
  *                 el[index+1:index+1] = tail_children
  */
-        if (__Pyx_PyObject_SetAttrStr(__pyx_v_child, __pyx_n_s_tail, __pyx_v_text) < 0) __PYX_ERR(0, 626, __pyx_L1_error)
+        if (__Pyx_PyObject_SetAttrStr(__pyx_v_child, __pyx_n_s_tail, __pyx_v_text) < 0) __PYX_ERR(0, 625, __pyx_L1_error)
 
-        /* "lxml/html/clean.py":627
+        /* "lxml/html/clean.py":626
  *             if tail_children:
  *                 child.tail = text
  *                 index = el.index(child)             # <<<<<<<<<<<<<<
  *                 el[index+1:index+1] = tail_children
  *     if el.text:
  */
-        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_index); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 627, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_index); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 626, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_t_8 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -10236,28 +10180,28 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
         }
         __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_8, __pyx_v_child) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_child);
         __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
-        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 627, __pyx_L1_error)
+        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 626, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_1);
         __pyx_t_1 = 0;
 
-        /* "lxml/html/clean.py":628
+        /* "lxml/html/clean.py":627
  *                 child.tail = text
  *                 index = el.index(child)
  *                 el[index+1:index+1] = tail_children             # <<<<<<<<<<<<<<
  *     if el.text:
  *         text, pre_children = _link_text(
  */
-        __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_v_index, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_v_index, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 627, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_5 = __Pyx_PyInt_AddObjC(__pyx_v_index, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 628, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyInt_AddObjC(__pyx_v_index, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 627, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        if (__Pyx_PyObject_SetSlice(__pyx_v_el, __pyx_v_tail_children, 0, 0, &__pyx_t_1, &__pyx_t_5, NULL, 0, 0, 1) < 0) __PYX_ERR(0, 628, __pyx_L1_error)
+        if (__Pyx_PyObject_SetSlice(__pyx_v_el, __pyx_v_tail_children, 0, 0, &__pyx_t_1, &__pyx_t_5, NULL, 0, 0, 1) < 0) __PYX_ERR(0, 627, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-        /* "lxml/html/clean.py":625
+        /* "lxml/html/clean.py":624
  *             text, tail_children = _link_text(
  *                 child.tail, link_regexes, avoid_hosts, factory=el.makeelement)
  *             if tail_children:             # <<<<<<<<<<<<<<
@@ -10266,7 +10210,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
  */
       }
 
-      /* "lxml/html/clean.py":622
+      /* "lxml/html/clean.py":621
  *                  avoid_hosts=avoid_hosts,
  *                  avoid_classes=avoid_classes)
  *         if child.tail:             # <<<<<<<<<<<<<<
@@ -10275,7 +10219,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
  */
     }
 
-    /* "lxml/html/clean.py":617
+    /* "lxml/html/clean.py":616
  *             if match_class in class_name:
  *                 return
  *     for child in list(el):             # <<<<<<<<<<<<<<
@@ -10285,47 +10229,47 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
   }
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "lxml/html/clean.py":629
+  /* "lxml/html/clean.py":628
  *                 index = el.index(child)
  *                 el[index+1:index+1] = tail_children
  *     if el.text:             # <<<<<<<<<<<<<<
  *         text, pre_children = _link_text(
  *             el.text, link_regexes, avoid_hosts, factory=el.makeelement)
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 629, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 628, __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, 629, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 628, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (__pyx_t_2) {
 
-    /* "lxml/html/clean.py":630
+    /* "lxml/html/clean.py":629
  *                 el[index+1:index+1] = tail_children
  *     if el.text:
  *         text, pre_children = _link_text(             # <<<<<<<<<<<<<<
  *             el.text, link_regexes, avoid_hosts, factory=el.makeelement)
  *         if pre_children:
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_link_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 630, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_link_text); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 629, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
 
-    /* "lxml/html/clean.py":631
+    /* "lxml/html/clean.py":630
  *     if el.text:
  *         text, pre_children = _link_text(
  *             el.text, link_regexes, avoid_hosts, factory=el.makeelement)             # <<<<<<<<<<<<<<
  *         if pre_children:
  *             el.text = text
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_text); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 631, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_text); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 630, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
 
-    /* "lxml/html/clean.py":630
+    /* "lxml/html/clean.py":629
  *                 el[index+1:index+1] = tail_children
  *     if el.text:
  *         text, pre_children = _link_text(             # <<<<<<<<<<<<<<
  *             el.text, link_regexes, avoid_hosts, factory=el.makeelement)
  *         if pre_children:
  */
-    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 630, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 629, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
@@ -10337,28 +10281,28 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
     PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_avoid_hosts);
     __pyx_t_5 = 0;
 
-    /* "lxml/html/clean.py":631
+    /* "lxml/html/clean.py":630
  *     if el.text:
  *         text, pre_children = _link_text(
  *             el.text, link_regexes, avoid_hosts, factory=el.makeelement)             # <<<<<<<<<<<<<<
  *         if pre_children:
  *             el.text = text
  */
-    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 631, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 630, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_makeelement); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 631, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_makeelement); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 630, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_factory, __pyx_t_8) < 0) __PYX_ERR(0, 631, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_factory, __pyx_t_8) < 0) __PYX_ERR(0, 630, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "lxml/html/clean.py":630
+    /* "lxml/html/clean.py":629
  *                 el[index+1:index+1] = tail_children
  *     if el.text:
  *         text, pre_children = _link_text(             # <<<<<<<<<<<<<<
  *             el.text, link_regexes, avoid_hosts, factory=el.makeelement)
  *         if pre_children:
  */
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 630, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 629, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -10369,7 +10313,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 630, __pyx_L1_error)
+        __PYX_ERR(0, 629, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -10382,15 +10326,15 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
       __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(__pyx_t_1);
       #else
-      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 630, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 629, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 630, __pyx_L1_error)
+      __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 629, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       #endif
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_4 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 630, __pyx_L1_error)
+      __pyx_t_4 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 629, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext;
@@ -10398,7 +10342,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
       __Pyx_GOTREF(__pyx_t_5);
       index = 1; __pyx_t_1 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L15_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_1);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_4), 2) < 0) __PYX_ERR(0, 630, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_4), 2) < 0) __PYX_ERR(0, 629, __pyx_L1_error)
       __pyx_t_10 = NULL;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       goto __pyx_L16_unpacking_done;
@@ -10406,7 +10350,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_t_10 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 630, __pyx_L1_error)
+      __PYX_ERR(0, 629, __pyx_L1_error)
       __pyx_L16_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_text, __pyx_t_5);
@@ -10414,35 +10358,35 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
     __pyx_v_pre_children = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "lxml/html/clean.py":632
+    /* "lxml/html/clean.py":631
  *         text, pre_children = _link_text(
  *             el.text, link_regexes, avoid_hosts, factory=el.makeelement)
  *         if pre_children:             # <<<<<<<<<<<<<<
  *             el.text = text
  *             el[:0] = pre_children
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_pre_children); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 632, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_pre_children); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 631, __pyx_L1_error)
     if (__pyx_t_2) {
 
-      /* "lxml/html/clean.py":633
+      /* "lxml/html/clean.py":632
  *             el.text, link_regexes, avoid_hosts, factory=el.makeelement)
  *         if pre_children:
  *             el.text = text             # <<<<<<<<<<<<<<
  *             el[:0] = pre_children
  * 
  */
-      if (__Pyx_PyObject_SetAttrStr(__pyx_v_el, __pyx_n_s_text, __pyx_v_text) < 0) __PYX_ERR(0, 633, __pyx_L1_error)
+      if (__Pyx_PyObject_SetAttrStr(__pyx_v_el, __pyx_n_s_text, __pyx_v_text) < 0) __PYX_ERR(0, 632, __pyx_L1_error)
 
-      /* "lxml/html/clean.py":634
+      /* "lxml/html/clean.py":633
  *         if pre_children:
  *             el.text = text
  *             el[:0] = pre_children             # <<<<<<<<<<<<<<
  * 
  * def _link_text(text, link_regexes, avoid_hosts, factory):
  */
-      if (__Pyx_PyObject_SetSlice(__pyx_v_el, __pyx_v_pre_children, 0, 0, NULL, NULL, &__pyx_slice__14, 0, 1, 1) < 0) __PYX_ERR(0, 634, __pyx_L1_error)
+      if (__Pyx_PyObject_SetSlice(__pyx_v_el, __pyx_v_pre_children, 0, 0, NULL, NULL, &__pyx_slice__12, 0, 1, 1) < 0) __PYX_ERR(0, 633, __pyx_L1_error)
 
-      /* "lxml/html/clean.py":632
+      /* "lxml/html/clean.py":631
  *         text, pre_children = _link_text(
  *             el.text, link_regexes, avoid_hosts, factory=el.makeelement)
  *         if pre_children:             # <<<<<<<<<<<<<<
@@ -10451,7 +10395,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
  */
     }
 
-    /* "lxml/html/clean.py":629
+    /* "lxml/html/clean.py":628
  *                 index = el.index(child)
  *                 el[index+1:index+1] = tail_children
  *     if el.text:             # <<<<<<<<<<<<<<
@@ -10460,7 +10404,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
  */
   }
 
-  /* "lxml/html/clean.py":591
+  /* "lxml/html/clean.py":590
  * _avoid_classes = ['nolink']
  * 
  * def autolink(el, link_regexes=_link_regexes,             # <<<<<<<<<<<<<<
@@ -10492,7 +10436,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_2autolink(CYTHON_UNUSED PyObject *_
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":636
+/* "lxml/html/clean.py":635
  *             el[:0] = pre_children
  * 
  * def _link_text(text, link_regexes, avoid_hosts, factory):             # <<<<<<<<<<<<<<
@@ -10541,23 +10485,23 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_5_link_text(PyObject *__pyx_self, P
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_link_regexes)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_link_text", 1, 4, 4, 1); __PYX_ERR(0, 636, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_link_text", 1, 4, 4, 1); __PYX_ERR(0, 635, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_avoid_hosts)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_link_text", 1, 4, 4, 2); __PYX_ERR(0, 636, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_link_text", 1, 4, 4, 2); __PYX_ERR(0, 635, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_factory)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_link_text", 1, 4, 4, 3); __PYX_ERR(0, 636, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_link_text", 1, 4, 4, 3); __PYX_ERR(0, 635, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_link_text") < 0)) __PYX_ERR(0, 636, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_link_text") < 0)) __PYX_ERR(0, 635, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -10574,7 +10518,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_5_link_text(PyObject *__pyx_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("_link_text", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 636, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("_link_text", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 635, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.html.clean._link_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -10625,7 +10569,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
   __Pyx_RefNannySetupContext("_link_text", 0);
   __Pyx_INCREF(__pyx_v_text);
 
-  /* "lxml/html/clean.py":637
+  /* "lxml/html/clean.py":636
  * 
  * def _link_text(text, link_regexes, avoid_hosts, factory):
  *     leading_text = ''             # <<<<<<<<<<<<<<
@@ -10635,19 +10579,19 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
   __Pyx_INCREF(__pyx_kp_s__2);
   __pyx_v_leading_text = __pyx_kp_s__2;
 
-  /* "lxml/html/clean.py":638
+  /* "lxml/html/clean.py":637
  * def _link_text(text, link_regexes, avoid_hosts, factory):
  *     leading_text = ''
  *     links = []             # <<<<<<<<<<<<<<
  *     last_pos = 0
  *     while 1:
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 638, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 637, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_links = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "lxml/html/clean.py":639
+  /* "lxml/html/clean.py":638
  *     leading_text = ''
  *     links = []
  *     last_pos = 0             # <<<<<<<<<<<<<<
@@ -10656,7 +10600,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
   __pyx_v_last_pos = 0;
 
-  /* "lxml/html/clean.py":640
+  /* "lxml/html/clean.py":639
  *     links = []
  *     last_pos = 0
  *     while 1:             # <<<<<<<<<<<<<<
@@ -10665,7 +10609,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
   while (1) {
 
-    /* "lxml/html/clean.py":641
+    /* "lxml/html/clean.py":640
  *     last_pos = 0
  *     while 1:
  *         best_match, best_pos = None, None             # <<<<<<<<<<<<<<
@@ -10681,7 +10625,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     __Pyx_XDECREF_SET(__pyx_v_best_pos, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "lxml/html/clean.py":642
+    /* "lxml/html/clean.py":641
  *     while 1:
  *         best_match, best_pos = None, None
  *         for regex in link_regexes:             # <<<<<<<<<<<<<<
@@ -10692,26 +10636,26 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
       __pyx_t_2 = __pyx_v_link_regexes; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
       __pyx_t_4 = NULL;
     } else {
-      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_link_regexes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 642, __pyx_L1_error)
+      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_link_regexes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 641, __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(0, 642, __pyx_L1_error)
+      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 641, __pyx_L1_error)
     }
     for (;;) {
       if (likely(!__pyx_t_4)) {
         if (likely(PyList_CheckExact(__pyx_t_2))) {
           if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
           #if CYTHON_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(0, 642, __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(0, 641, __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(0, 642, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 641, __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(0, 642, __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(0, 641, __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(0, 642, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 641, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         }
@@ -10721,7 +10665,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(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, 642, __pyx_L1_error)
+            else __PYX_ERR(0, 641, __pyx_L1_error)
           }
           break;
         }
@@ -10730,19 +10674,19 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
       __Pyx_XDECREF_SET(__pyx_v_regex, __pyx_t_1);
       __pyx_t_1 = 0;
 
-      /* "lxml/html/clean.py":643
+      /* "lxml/html/clean.py":642
  *         best_match, best_pos = None, None
  *         for regex in link_regexes:
  *             regex_pos = last_pos             # <<<<<<<<<<<<<<
  *             while 1:
  *                 match = regex.search(text, pos=regex_pos)
  */
-      __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_last_pos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 643, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_last_pos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 642, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_XDECREF_SET(__pyx_v_regex_pos, __pyx_t_1);
       __pyx_t_1 = 0;
 
-      /* "lxml/html/clean.py":644
+      /* "lxml/html/clean.py":643
  *         for regex in link_regexes:
  *             regex_pos = last_pos
  *             while 1:             # <<<<<<<<<<<<<<
@@ -10751,24 +10695,24 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
       while (1) {
 
-        /* "lxml/html/clean.py":645
+        /* "lxml/html/clean.py":644
  *             regex_pos = last_pos
  *             while 1:
  *                 match = regex.search(text, pos=regex_pos)             # <<<<<<<<<<<<<<
  *                 if match is None:
  *                     break
  */
-        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_regex, __pyx_n_s_search); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 645, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_regex, __pyx_n_s_search); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 645, __pyx_L1_error)
+        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 644, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_INCREF(__pyx_v_text);
         __Pyx_GIVEREF(__pyx_v_text);
         PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_text);
-        __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 645, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 644, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_pos, __pyx_v_regex_pos) < 0) __PYX_ERR(0, 645, __pyx_L1_error)
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 645, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_pos, __pyx_v_regex_pos) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 644, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -10776,7 +10720,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
         __Pyx_XDECREF_SET(__pyx_v_match, __pyx_t_7);
         __pyx_t_7 = 0;
 
-        /* "lxml/html/clean.py":646
+        /* "lxml/html/clean.py":645
  *             while 1:
  *                 match = regex.search(text, pos=regex_pos)
  *                 if match is None:             # <<<<<<<<<<<<<<
@@ -10787,7 +10731,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
         __pyx_t_9 = (__pyx_t_8 != 0);
         if (__pyx_t_9) {
 
-          /* "lxml/html/clean.py":647
+          /* "lxml/html/clean.py":646
  *                 match = regex.search(text, pos=regex_pos)
  *                 if match is None:
  *                     break             # <<<<<<<<<<<<<<
@@ -10796,7 +10740,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
           goto __pyx_L8_break;
 
-          /* "lxml/html/clean.py":646
+          /* "lxml/html/clean.py":645
  *             while 1:
  *                 match = regex.search(text, pos=regex_pos)
  *                 if match is None:             # <<<<<<<<<<<<<<
@@ -10805,14 +10749,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
         }
 
-        /* "lxml/html/clean.py":648
+        /* "lxml/html/clean.py":647
  *                 if match is None:
  *                     break
  *                 host = match.group('host')             # <<<<<<<<<<<<<<
  *                 for host_regex in avoid_hosts:
  *                     if host_regex.search(host):
  */
-        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_group); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 648, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_group); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 647, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_5 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -10826,13 +10770,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
         }
         __pyx_t_7 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, __pyx_n_s_host) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_n_s_host);
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 648, __pyx_L1_error)
+        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 647, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_XDECREF_SET(__pyx_v_host, __pyx_t_7);
         __pyx_t_7 = 0;
 
-        /* "lxml/html/clean.py":649
+        /* "lxml/html/clean.py":648
  *                     break
  *                 host = match.group('host')
  *                 for host_regex in avoid_hosts:             # <<<<<<<<<<<<<<
@@ -10843,26 +10787,26 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
           __pyx_t_7 = __pyx_v_avoid_hosts; __Pyx_INCREF(__pyx_t_7); __pyx_t_10 = 0;
           __pyx_t_11 = NULL;
         } else {
-          __pyx_t_10 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_avoid_hosts); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 649, __pyx_L1_error)
+          __pyx_t_10 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_avoid_hosts); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 648, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
-          __pyx_t_11 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 649, __pyx_L1_error)
+          __pyx_t_11 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 648, __pyx_L1_error)
         }
         for (;;) {
           if (likely(!__pyx_t_11)) {
             if (likely(PyList_CheckExact(__pyx_t_7))) {
               if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_7)) break;
               #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-              __pyx_t_6 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 649, __pyx_L1_error)
+              __pyx_t_6 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 648, __pyx_L1_error)
               #else
-              __pyx_t_6 = PySequence_ITEM(__pyx_t_7, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 649, __pyx_L1_error)
+              __pyx_t_6 = PySequence_ITEM(__pyx_t_7, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 648, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_6);
               #endif
             } else {
               if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
               #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-              __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 649, __pyx_L1_error)
+              __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 648, __pyx_L1_error)
               #else
-              __pyx_t_6 = PySequence_ITEM(__pyx_t_7, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 649, __pyx_L1_error)
+              __pyx_t_6 = PySequence_ITEM(__pyx_t_7, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 648, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_6);
               #endif
             }
@@ -10872,7 +10816,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(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, 649, __pyx_L1_error)
+                else __PYX_ERR(0, 648, __pyx_L1_error)
               }
               break;
             }
@@ -10881,14 +10825,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
           __Pyx_XDECREF_SET(__pyx_v_host_regex, __pyx_t_6);
           __pyx_t_6 = 0;
 
-          /* "lxml/html/clean.py":650
+          /* "lxml/html/clean.py":649
  *                 host = match.group('host')
  *                 for host_regex in avoid_hosts:
  *                     if host_regex.search(host):             # <<<<<<<<<<<<<<
  *                         regex_pos = match.end()
  *                         break
  */
-          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_host_regex, __pyx_n_s_search); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 650, __pyx_L1_error)
+          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_host_regex, __pyx_n_s_search); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 649, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_5);
           __pyx_t_1 = NULL;
           if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -10902,21 +10846,21 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
           }
           __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_v_host) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_host);
           __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 650, __pyx_L1_error)
+          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 649, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 650, __pyx_L1_error)
+          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 649, __pyx_L1_error)
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
           if (__pyx_t_9) {
 
-            /* "lxml/html/clean.py":651
+            /* "lxml/html/clean.py":650
  *                 for host_regex in avoid_hosts:
  *                     if host_regex.search(host):
  *                         regex_pos = match.end()             # <<<<<<<<<<<<<<
  *                         break
  *                 else:
  */
-            __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_end); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 651, __pyx_L1_error)
+            __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_end); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 650, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_5);
             __pyx_t_1 = NULL;
             if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
@@ -10930,13 +10874,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
             }
             __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
             __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-            if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 651, __pyx_L1_error)
+            if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 650, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_6);
             __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
             __Pyx_DECREF_SET(__pyx_v_regex_pos, __pyx_t_6);
             __pyx_t_6 = 0;
 
-            /* "lxml/html/clean.py":652
+            /* "lxml/html/clean.py":651
  *                     if host_regex.search(host):
  *                         regex_pos = match.end()
  *                         break             # <<<<<<<<<<<<<<
@@ -10945,7 +10889,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
             goto __pyx_L11_break;
 
-            /* "lxml/html/clean.py":650
+            /* "lxml/html/clean.py":649
  *                 host = match.group('host')
  *                 for host_regex in avoid_hosts:
  *                     if host_regex.search(host):             # <<<<<<<<<<<<<<
@@ -10954,7 +10898,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
           }
 
-          /* "lxml/html/clean.py":649
+          /* "lxml/html/clean.py":648
  *                     break
  *                 host = match.group('host')
  *                 for host_regex in avoid_hosts:             # <<<<<<<<<<<<<<
@@ -10964,41 +10908,44 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
         }
         /*else*/ {
 
-          /* "lxml/html/clean.py":654
+          /* "lxml/html/clean.py":653
  *                         break
  *                 else:
  *                     break             # <<<<<<<<<<<<<<
  *             if match is None:
  *                 continue
  */
-          goto __pyx_L8_break;
+          goto __pyx_L14_outer_break;
         }
 
-        /* "lxml/html/clean.py":649
+        /* "lxml/html/clean.py":648
  *                     break
  *                 host = match.group('host')
  *                 for host_regex in avoid_hosts:             # <<<<<<<<<<<<<<
  *                     if host_regex.search(host):
  *                         regex_pos = match.end()
  */
+        __pyx_L14_outer_break:;
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        goto __pyx_L8_break;
         __pyx_L11_break:;
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       }
       __pyx_L8_break:;
 
-      /* "lxml/html/clean.py":655
+      /* "lxml/html/clean.py":654
  *                 else:
  *                     break
  *             if match is None:             # <<<<<<<<<<<<<<
  *                 continue
  *             if best_pos is None or match.start() < best_pos:
  */
-      if (unlikely(!__pyx_v_match)) { __Pyx_RaiseUnboundLocalError("match"); __PYX_ERR(0, 655, __pyx_L1_error) }
+      if (unlikely(!__pyx_v_match)) { __Pyx_RaiseUnboundLocalError("match"); __PYX_ERR(0, 654, __pyx_L1_error) }
       __pyx_t_9 = (__pyx_v_match == Py_None);
       __pyx_t_8 = (__pyx_t_9 != 0);
       if (__pyx_t_8) {
 
-        /* "lxml/html/clean.py":656
+        /* "lxml/html/clean.py":655
  *                     break
  *             if match is None:
  *                 continue             # <<<<<<<<<<<<<<
@@ -11007,7 +10954,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
         goto __pyx_L5_continue;
 
-        /* "lxml/html/clean.py":655
+        /* "lxml/html/clean.py":654
  *                 else:
  *                     break
  *             if match is None:             # <<<<<<<<<<<<<<
@@ -11016,7 +10963,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
       }
 
-      /* "lxml/html/clean.py":657
+      /* "lxml/html/clean.py":656
  *             if match is None:
  *                 continue
  *             if best_pos is None or match.start() < best_pos:             # <<<<<<<<<<<<<<
@@ -11028,10 +10975,10 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
       if (!__pyx_t_12) {
       } else {
         __pyx_t_8 = __pyx_t_12;
-        goto __pyx_L16_bool_binop_done;
+        goto __pyx_L17_bool_binop_done;
       }
-      if (unlikely(!__pyx_v_match)) { __Pyx_RaiseUnboundLocalError("match"); __PYX_ERR(0, 657, __pyx_L1_error) }
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_start); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 657, __pyx_L1_error)
+      if (unlikely(!__pyx_v_match)) { __Pyx_RaiseUnboundLocalError("match"); __PYX_ERR(0, 656, __pyx_L1_error) }
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_start); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 656, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_5 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
@@ -11045,37 +10992,37 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
       }
       __pyx_t_7 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 657, __pyx_L1_error)
+      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 656, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __pyx_t_6 = PyObject_RichCompare(__pyx_t_7, __pyx_v_best_pos, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 657, __pyx_L1_error)
+      __pyx_t_6 = PyObject_RichCompare(__pyx_t_7, __pyx_v_best_pos, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 656, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 657, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 656, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_8 = __pyx_t_12;
-      __pyx_L16_bool_binop_done:;
+      __pyx_L17_bool_binop_done:;
       if (__pyx_t_8) {
 
-        /* "lxml/html/clean.py":658
+        /* "lxml/html/clean.py":657
  *                 continue
  *             if best_pos is None or match.start() < best_pos:
  *                 best_match = match             # <<<<<<<<<<<<<<
  *                 best_pos = match.start()
  *         if best_match is None:
  */
-        if (unlikely(!__pyx_v_match)) { __Pyx_RaiseUnboundLocalError("match"); __PYX_ERR(0, 658, __pyx_L1_error) }
+        if (unlikely(!__pyx_v_match)) { __Pyx_RaiseUnboundLocalError("match"); __PYX_ERR(0, 657, __pyx_L1_error) }
         __Pyx_INCREF(__pyx_v_match);
         __Pyx_DECREF_SET(__pyx_v_best_match, __pyx_v_match);
 
-        /* "lxml/html/clean.py":659
+        /* "lxml/html/clean.py":658
  *             if best_pos is None or match.start() < best_pos:
  *                 best_match = match
  *                 best_pos = match.start()             # <<<<<<<<<<<<<<
  *         if best_match is None:
  *             # No more matches
  */
-        if (unlikely(!__pyx_v_match)) { __Pyx_RaiseUnboundLocalError("match"); __PYX_ERR(0, 659, __pyx_L1_error) }
-        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_start); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 659, __pyx_L1_error)
+        if (unlikely(!__pyx_v_match)) { __Pyx_RaiseUnboundLocalError("match"); __PYX_ERR(0, 658, __pyx_L1_error) }
+        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_start); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 658, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __pyx_t_5 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
@@ -11089,13 +11036,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
         }
         __pyx_t_6 = (__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_6)) __PYX_ERR(0, 659, __pyx_L1_error)
+        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 658, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_DECREF_SET(__pyx_v_best_pos, __pyx_t_6);
         __pyx_t_6 = 0;
 
-        /* "lxml/html/clean.py":657
+        /* "lxml/html/clean.py":656
  *             if match is None:
  *                 continue
  *             if best_pos is None or match.start() < best_pos:             # <<<<<<<<<<<<<<
@@ -11104,7 +11051,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
       }
 
-      /* "lxml/html/clean.py":642
+      /* "lxml/html/clean.py":641
  *     while 1:
  *         best_match, best_pos = None, None
  *         for regex in link_regexes:             # <<<<<<<<<<<<<<
@@ -11115,7 +11062,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "lxml/html/clean.py":660
+    /* "lxml/html/clean.py":659
  *                 best_match = match
  *                 best_pos = match.start()
  *         if best_match is None:             # <<<<<<<<<<<<<<
@@ -11126,7 +11073,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     __pyx_t_12 = (__pyx_t_8 != 0);
     if (__pyx_t_12) {
 
-      /* "lxml/html/clean.py":662
+      /* "lxml/html/clean.py":661
  *         if best_match is None:
  *             # No more matches
  *             if links:             # <<<<<<<<<<<<<<
@@ -11136,7 +11083,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
       __pyx_t_12 = (PyList_GET_SIZE(__pyx_v_links) != 0);
       if (__pyx_t_12) {
 
-        /* "lxml/html/clean.py":663
+        /* "lxml/html/clean.py":662
  *             # No more matches
  *             if links:
  *                 assert not links[-1].tail             # <<<<<<<<<<<<<<
@@ -11144,44 +11091,44 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  *             else:
  */
         #ifndef CYTHON_WITHOUT_ASSERTIONS
-        if (unlikely(!Py_OptimizeFlag)) {
-          __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_links, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 663, __pyx_L1_error)
+        if (unlikely(__pyx_assertions_enabled())) {
+          __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_links, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 662, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_2);
-          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_tail); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 663, __pyx_L1_error)
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_tail); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 662, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 663, __pyx_L1_error)
+          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 662, __pyx_L1_error)
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
           if (unlikely(!((!__pyx_t_12) != 0))) {
             PyErr_SetNone(PyExc_AssertionError);
-            __PYX_ERR(0, 663, __pyx_L1_error)
+            __PYX_ERR(0, 662, __pyx_L1_error)
           }
         }
         #endif
 
-        /* "lxml/html/clean.py":664
+        /* "lxml/html/clean.py":663
  *             if links:
  *                 assert not links[-1].tail
  *                 links[-1].tail = text             # <<<<<<<<<<<<<<
  *             else:
  *                 assert not leading_text
  */
-        __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_links, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 664, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_links, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 663, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        if (__Pyx_PyObject_SetAttrStr(__pyx_t_6, __pyx_n_s_tail, __pyx_v_text) < 0) __PYX_ERR(0, 664, __pyx_L1_error)
+        if (__Pyx_PyObject_SetAttrStr(__pyx_t_6, __pyx_n_s_tail, __pyx_v_text) < 0) __PYX_ERR(0, 663, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-        /* "lxml/html/clean.py":662
+        /* "lxml/html/clean.py":661
  *         if best_match is None:
  *             # No more matches
  *             if links:             # <<<<<<<<<<<<<<
  *                 assert not links[-1].tail
  *                 links[-1].tail = text
  */
-        goto __pyx_L19;
+        goto __pyx_L20;
       }
 
-      /* "lxml/html/clean.py":666
+      /* "lxml/html/clean.py":665
  *                 links[-1].tail = text
  *             else:
  *                 assert not leading_text             # <<<<<<<<<<<<<<
@@ -11190,16 +11137,16 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
       /*else*/ {
         #ifndef CYTHON_WITHOUT_ASSERTIONS
-        if (unlikely(!Py_OptimizeFlag)) {
-          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_leading_text); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 666, __pyx_L1_error)
+        if (unlikely(__pyx_assertions_enabled())) {
+          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_leading_text); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 665, __pyx_L1_error)
           if (unlikely(!((!__pyx_t_12) != 0))) {
             PyErr_SetNone(PyExc_AssertionError);
-            __PYX_ERR(0, 666, __pyx_L1_error)
+            __PYX_ERR(0, 665, __pyx_L1_error)
           }
         }
         #endif
 
-        /* "lxml/html/clean.py":667
+        /* "lxml/html/clean.py":666
  *             else:
  *                 assert not leading_text
  *                 leading_text = text             # <<<<<<<<<<<<<<
@@ -11209,9 +11156,9 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
         __Pyx_INCREF(__pyx_v_text);
         __Pyx_DECREF_SET(__pyx_v_leading_text, __pyx_v_text);
       }
-      __pyx_L19:;
+      __pyx_L20:;
 
-      /* "lxml/html/clean.py":668
+      /* "lxml/html/clean.py":667
  *                 assert not leading_text
  *                 leading_text = text
  *             break             # <<<<<<<<<<<<<<
@@ -11220,7 +11167,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
       goto __pyx_L4_break;
 
-      /* "lxml/html/clean.py":660
+      /* "lxml/html/clean.py":659
  *                 best_match = match
  *                 best_pos = match.start()
  *         if best_match is None:             # <<<<<<<<<<<<<<
@@ -11229,14 +11176,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/html/clean.py":669
+    /* "lxml/html/clean.py":668
  *                 leading_text = text
  *             break
  *         link = best_match.group(0)             # <<<<<<<<<<<<<<
  *         end = best_match.end()
  *         if link.endswith('.') or link.endswith(','):
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_best_match, __pyx_n_s_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 669, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_best_match, __pyx_n_s_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 668, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_7 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -11250,20 +11197,20 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     }
     __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_7, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0);
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 669, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 668, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_XDECREF_SET(__pyx_v_link, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "lxml/html/clean.py":670
+    /* "lxml/html/clean.py":669
  *             break
  *         link = best_match.group(0)
  *         end = best_match.end()             # <<<<<<<<<<<<<<
  *         if link.endswith('.') or link.endswith(','):
  *             # These punctuation marks shouldn't end a link
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_best_match, __pyx_n_s_end); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 670, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_best_match, __pyx_n_s_end); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 669, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_7 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -11277,20 +11224,20 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     }
     __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 670, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 669, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_XDECREF_SET(__pyx_v_end, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "lxml/html/clean.py":671
+    /* "lxml/html/clean.py":670
  *         link = best_match.group(0)
  *         end = best_match.end()
  *         if link.endswith('.') or link.endswith(','):             # <<<<<<<<<<<<<<
  *             # These punctuation marks shouldn't end a link
  *             end -= 1
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_link, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 671, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_link, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 670, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_7 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -11302,19 +11249,19 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
         __Pyx_DECREF_SET(__pyx_t_2, function);
       }
     }
-    __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_7, __pyx_kp_s__15) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s__15);
+    __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_7, __pyx_kp_s__13) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s__13);
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 671, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 670, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 671, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 670, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     if (!__pyx_t_8) {
     } else {
       __pyx_t_12 = __pyx_t_8;
-      goto __pyx_L21_bool_binop_done;
+      goto __pyx_L22_bool_binop_done;
     }
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_link, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 671, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_link, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 670, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_7 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -11326,42 +11273,42 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
         __Pyx_DECREF_SET(__pyx_t_2, function);
       }
     }
-    __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_7, __pyx_kp_s__16) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s__16);
+    __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_7, __pyx_kp_s__14) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s__14);
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 671, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 670, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 671, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 670, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_12 = __pyx_t_8;
-    __pyx_L21_bool_binop_done:;
+    __pyx_L22_bool_binop_done:;
     if (__pyx_t_12) {
 
-      /* "lxml/html/clean.py":673
+      /* "lxml/html/clean.py":672
  *         if link.endswith('.') or link.endswith(','):
  *             # These punctuation marks shouldn't end a link
  *             end -= 1             # <<<<<<<<<<<<<<
  *             link = link[:-1]
  *         prev_text = text[:best_match.start()]
  */
-      __pyx_t_6 = __Pyx_PyInt_SubtractObjC(__pyx_v_end, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 673, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyInt_SubtractObjC(__pyx_v_end, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 672, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF_SET(__pyx_v_end, __pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "lxml/html/clean.py":674
+      /* "lxml/html/clean.py":673
  *             # These punctuation marks shouldn't end a link
  *             end -= 1
  *             link = link[:-1]             # <<<<<<<<<<<<<<
  *         prev_text = text[:best_match.start()]
  *         if links:
  */
-      __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_v_link, 0, -1L, NULL, NULL, &__pyx_slice__17, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 674, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_v_link, 0, -1L, NULL, NULL, &__pyx_slice__15, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 673, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF_SET(__pyx_v_link, __pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "lxml/html/clean.py":671
+      /* "lxml/html/clean.py":670
  *         link = best_match.group(0)
  *         end = best_match.end()
  *         if link.endswith('.') or link.endswith(','):             # <<<<<<<<<<<<<<
@@ -11370,14 +11317,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/html/clean.py":675
+    /* "lxml/html/clean.py":674
  *             end -= 1
  *             link = link[:-1]
  *         prev_text = text[:best_match.start()]             # <<<<<<<<<<<<<<
  *         if links:
  *             assert not links[-1].tail
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_best_match, __pyx_n_s_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 675, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_best_match, __pyx_n_s_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 674, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_7 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -11391,16 +11338,16 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     }
     __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 675, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 674, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_text, 0, 0, NULL, &__pyx_t_6, NULL, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 675, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_text, 0, 0, NULL, &__pyx_t_6, NULL, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 674, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_XDECREF_SET(__pyx_v_prev_text, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "lxml/html/clean.py":676
+    /* "lxml/html/clean.py":675
  *             link = link[:-1]
  *         prev_text = text[:best_match.start()]
  *         if links:             # <<<<<<<<<<<<<<
@@ -11410,7 +11357,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     __pyx_t_12 = (PyList_GET_SIZE(__pyx_v_links) != 0);
     if (__pyx_t_12) {
 
-      /* "lxml/html/clean.py":677
+      /* "lxml/html/clean.py":676
  *         prev_text = text[:best_match.start()]
  *         if links:
  *             assert not links[-1].tail             # <<<<<<<<<<<<<<
@@ -11418,44 +11365,44 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  *         else:
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
-        __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_links, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 677, __pyx_L1_error)
+      if (unlikely(__pyx_assertions_enabled())) {
+        __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_links, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 676, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_tail); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 677, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_tail); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 676, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 677, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 676, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         if (unlikely(!((!__pyx_t_12) != 0))) {
           PyErr_SetNone(PyExc_AssertionError);
-          __PYX_ERR(0, 677, __pyx_L1_error)
+          __PYX_ERR(0, 676, __pyx_L1_error)
         }
       }
       #endif
 
-      /* "lxml/html/clean.py":678
+      /* "lxml/html/clean.py":677
  *         if links:
  *             assert not links[-1].tail
  *             links[-1].tail = prev_text             # <<<<<<<<<<<<<<
  *         else:
  *             assert not leading_text
  */
-      __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_links, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 678, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_links, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 677, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      if (__Pyx_PyObject_SetAttrStr(__pyx_t_6, __pyx_n_s_tail, __pyx_v_prev_text) < 0) __PYX_ERR(0, 678, __pyx_L1_error)
+      if (__Pyx_PyObject_SetAttrStr(__pyx_t_6, __pyx_n_s_tail, __pyx_v_prev_text) < 0) __PYX_ERR(0, 677, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "lxml/html/clean.py":676
+      /* "lxml/html/clean.py":675
  *             link = link[:-1]
  *         prev_text = text[:best_match.start()]
  *         if links:             # <<<<<<<<<<<<<<
  *             assert not links[-1].tail
  *             links[-1].tail = prev_text
  */
-      goto __pyx_L23;
+      goto __pyx_L24;
     }
 
-    /* "lxml/html/clean.py":680
+    /* "lxml/html/clean.py":679
  *             links[-1].tail = prev_text
  *         else:
  *             assert not leading_text             # <<<<<<<<<<<<<<
@@ -11464,16 +11411,16 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
     /*else*/ {
       #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
-        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_leading_text); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 680, __pyx_L1_error)
+      if (unlikely(__pyx_assertions_enabled())) {
+        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_leading_text); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 679, __pyx_L1_error)
         if (unlikely(!((!__pyx_t_12) != 0))) {
           PyErr_SetNone(PyExc_AssertionError);
-          __PYX_ERR(0, 680, __pyx_L1_error)
+          __PYX_ERR(0, 679, __pyx_L1_error)
         }
       }
       #endif
 
-      /* "lxml/html/clean.py":681
+      /* "lxml/html/clean.py":680
  *         else:
  *             assert not leading_text
  *             leading_text = prev_text             # <<<<<<<<<<<<<<
@@ -11483,9 +11430,9 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v_prev_text);
       __Pyx_DECREF_SET(__pyx_v_leading_text, __pyx_v_prev_text);
     }
-    __pyx_L23:;
+    __pyx_L24:;
 
-    /* "lxml/html/clean.py":682
+    /* "lxml/html/clean.py":681
  *             assert not leading_text
  *             leading_text = prev_text
  *         anchor = factory('a')             # <<<<<<<<<<<<<<
@@ -11505,20 +11452,20 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     }
     __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_7, __pyx_n_s_a) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_s_a);
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 682, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 681, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_XDECREF_SET(__pyx_v_anchor, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "lxml/html/clean.py":683
+    /* "lxml/html/clean.py":682
  *             leading_text = prev_text
  *         anchor = factory('a')
  *         anchor.set('href', link)             # <<<<<<<<<<<<<<
  *         body = best_match.group('body')
  *         if not body:
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_anchor, __pyx_n_s_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 683, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_anchor, __pyx_n_s_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 682, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_7 = NULL;
     __pyx_t_13 = 0;
@@ -11535,7 +11482,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     #if CYTHON_FAST_PYCALL
     if (PyFunction_Check(__pyx_t_2)) {
       PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_n_s_href, __pyx_v_link};
-      __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 683, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 682, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_GOTREF(__pyx_t_6);
     } else
@@ -11543,13 +11490,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     #if CYTHON_FAST_PYCCALL
     if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
       PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_n_s_href, __pyx_v_link};
-      __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 683, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 682, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_GOTREF(__pyx_t_6);
     } else
     #endif
     {
-      __pyx_t_5 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 683, __pyx_L1_error)
+      __pyx_t_5 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 682, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       if (__pyx_t_7) {
         __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7); __pyx_t_7 = NULL;
@@ -11560,21 +11507,21 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v_link);
       __Pyx_GIVEREF(__pyx_v_link);
       PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_13, __pyx_v_link);
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 683, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 682, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "lxml/html/clean.py":684
+    /* "lxml/html/clean.py":683
  *         anchor = factory('a')
  *         anchor.set('href', link)
  *         body = best_match.group('body')             # <<<<<<<<<<<<<<
  *         if not body:
  *             body = link
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_best_match, __pyx_n_s_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 684, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_best_match, __pyx_n_s_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 683, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -11588,24 +11535,24 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
     }
     __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_n_s_body) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_s_body);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 684, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 683, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_XDECREF_SET(__pyx_v_body, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "lxml/html/clean.py":685
+    /* "lxml/html/clean.py":684
  *         anchor.set('href', link)
  *         body = best_match.group('body')
  *         if not body:             # <<<<<<<<<<<<<<
  *             body = link
  *         if body.endswith('.') or body.endswith(','):
  */
-    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_body); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 685, __pyx_L1_error)
+    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_body); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 684, __pyx_L1_error)
     __pyx_t_8 = ((!__pyx_t_12) != 0);
     if (__pyx_t_8) {
 
-      /* "lxml/html/clean.py":686
+      /* "lxml/html/clean.py":685
  *         body = best_match.group('body')
  *         if not body:
  *             body = link             # <<<<<<<<<<<<<<
@@ -11615,7 +11562,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v_link);
       __Pyx_DECREF_SET(__pyx_v_body, __pyx_v_link);
 
-      /* "lxml/html/clean.py":685
+      /* "lxml/html/clean.py":684
  *         anchor.set('href', link)
  *         body = best_match.group('body')
  *         if not body:             # <<<<<<<<<<<<<<
@@ -11624,14 +11571,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/html/clean.py":687
+    /* "lxml/html/clean.py":686
  *         if not body:
  *             body = link
  *         if body.endswith('.') or body.endswith(','):             # <<<<<<<<<<<<<<
  *             body = body[:-1]
  *         anchor.text = body
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_body, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 687, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_body, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 686, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -11643,19 +11590,19 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
         __Pyx_DECREF_SET(__pyx_t_2, function);
       }
     }
-    __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_kp_s__15) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s__15);
+    __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_kp_s__13) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s__13);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 687, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 686, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 687, __pyx_L1_error)
+    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 686, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     if (!__pyx_t_12) {
     } else {
       __pyx_t_8 = __pyx_t_12;
-      goto __pyx_L26_bool_binop_done;
+      goto __pyx_L27_bool_binop_done;
     }
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_body, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 687, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_body, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 686, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -11667,30 +11614,30 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
         __Pyx_DECREF_SET(__pyx_t_2, function);
       }
     }
-    __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_kp_s__16) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s__16);
+    __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_kp_s__14) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s__14);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 687, __pyx_L1_error)
+    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 686, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 687, __pyx_L1_error)
+    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 686, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_8 = __pyx_t_12;
-    __pyx_L26_bool_binop_done:;
+    __pyx_L27_bool_binop_done:;
     if (__pyx_t_8) {
 
-      /* "lxml/html/clean.py":688
+      /* "lxml/html/clean.py":687
  *             body = link
  *         if body.endswith('.') or body.endswith(','):
  *             body = body[:-1]             # <<<<<<<<<<<<<<
  *         anchor.text = body
  *         links.append(anchor)
  */
-      __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_v_body, 0, -1L, NULL, NULL, &__pyx_slice__17, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 688, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_v_body, 0, -1L, NULL, NULL, &__pyx_slice__15, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 687, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF_SET(__pyx_v_body, __pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "lxml/html/clean.py":687
+      /* "lxml/html/clean.py":686
  *         if not body:
  *             body = link
  *         if body.endswith('.') or body.endswith(','):             # <<<<<<<<<<<<<<
@@ -11699,39 +11646,39 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/html/clean.py":689
+    /* "lxml/html/clean.py":688
  *         if body.endswith('.') or body.endswith(','):
  *             body = body[:-1]
  *         anchor.text = body             # <<<<<<<<<<<<<<
  *         links.append(anchor)
  *         text = text[end:]
  */
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_anchor, __pyx_n_s_text, __pyx_v_body) < 0) __PYX_ERR(0, 689, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_anchor, __pyx_n_s_text, __pyx_v_body) < 0) __PYX_ERR(0, 688, __pyx_L1_error)
 
-    /* "lxml/html/clean.py":690
+    /* "lxml/html/clean.py":689
  *             body = body[:-1]
  *         anchor.text = body
  *         links.append(anchor)             # <<<<<<<<<<<<<<
  *         text = text[end:]
  *     return leading_text, links
  */
-    __pyx_t_14 = __Pyx_PyList_Append(__pyx_v_links, __pyx_v_anchor); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 690, __pyx_L1_error)
+    __pyx_t_14 = __Pyx_PyList_Append(__pyx_v_links, __pyx_v_anchor); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 689, __pyx_L1_error)
 
-    /* "lxml/html/clean.py":691
+    /* "lxml/html/clean.py":690
  *         anchor.text = body
  *         links.append(anchor)
  *         text = text[end:]             # <<<<<<<<<<<<<<
  *     return leading_text, links
  * 
  */
-    __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_v_text, 0, 0, &__pyx_v_end, NULL, NULL, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 691, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_v_text, 0, 0, &__pyx_v_end, NULL, NULL, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 690, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_6);
     __pyx_t_6 = 0;
   }
   __pyx_L4_break:;
 
-  /* "lxml/html/clean.py":692
+  /* "lxml/html/clean.py":691
  *         links.append(anchor)
  *         text = text[end:]
  *     return leading_text, links             # <<<<<<<<<<<<<<
@@ -11739,7 +11686,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
  * def autolink_html(html, *args, **kw):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 692, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 691, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_leading_text);
   __Pyx_GIVEREF(__pyx_v_leading_text);
@@ -11751,7 +11698,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "lxml/html/clean.py":636
+  /* "lxml/html/clean.py":635
  *             el[:0] = pre_children
  * 
  * def _link_text(text, link_regexes, avoid_hosts, factory):             # <<<<<<<<<<<<<<
@@ -11789,7 +11736,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_4_link_text(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":694
+/* "lxml/html/clean.py":693
  *     return leading_text, links
  * 
  * def autolink_html(html, *args, **kw):             # <<<<<<<<<<<<<<
@@ -11843,7 +11790,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7autolink_html(PyObject *__pyx_self
       }
       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_kw, values, used_pos_args, "autolink_html") < 0)) __PYX_ERR(0, 694, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, used_pos_args, "autolink_html") < 0)) __PYX_ERR(0, 693, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
       goto __pyx_L5_argtuple_error;
@@ -11854,7 +11801,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_7autolink_html(PyObject *__pyx_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("autolink_html", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 694, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("autolink_html", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 693, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
   __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
@@ -11888,7 +11835,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("autolink_html", 0);
 
-  /* "lxml/html/clean.py":695
+  /* "lxml/html/clean.py":694
  * 
  * def autolink_html(html, *args, **kw):
  *     result_type = type(html)             # <<<<<<<<<<<<<<
@@ -11898,28 +11845,28 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
   __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_html)));
   __pyx_v_result_type = ((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_html)));
 
-  /* "lxml/html/clean.py":696
+  /* "lxml/html/clean.py":695
  * def autolink_html(html, *args, **kw):
  *     result_type = type(html)
  *     if isinstance(html, basestring):             # <<<<<<<<<<<<<<
  *         doc = fromstring(html)
  *     else:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_basestring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 696, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_basestring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 695, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_IsInstance(__pyx_v_html, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 696, __pyx_L1_error)
+  __pyx_t_2 = PyObject_IsInstance(__pyx_v_html, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 695, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "lxml/html/clean.py":697
+    /* "lxml/html/clean.py":696
  *     result_type = type(html)
  *     if isinstance(html, basestring):
  *         doc = fromstring(html)             # <<<<<<<<<<<<<<
  *     else:
  *         doc = copy.deepcopy(html)
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 697, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 696, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -11933,13 +11880,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
     }
     __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_html) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_html);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 697, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 696, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_doc = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "lxml/html/clean.py":696
+    /* "lxml/html/clean.py":695
  * def autolink_html(html, *args, **kw):
  *     result_type = type(html)
  *     if isinstance(html, basestring):             # <<<<<<<<<<<<<<
@@ -11949,7 +11896,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
     goto __pyx_L3;
   }
 
-  /* "lxml/html/clean.py":699
+  /* "lxml/html/clean.py":698
  *         doc = fromstring(html)
  *     else:
  *         doc = copy.deepcopy(html)             # <<<<<<<<<<<<<<
@@ -11957,9 +11904,9 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
  *     return _transform_result(result_type, doc)
  */
   /*else*/ {
-    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 699, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 698, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_deepcopy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 699, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_deepcopy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 698, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = NULL;
@@ -11974,7 +11921,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
     }
     __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_html) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_html);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 698, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_v_doc = __pyx_t_1;
@@ -11982,33 +11929,33 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
   }
   __pyx_L3:;
 
-  /* "lxml/html/clean.py":700
+  /* "lxml/html/clean.py":699
  *     else:
  *         doc = copy.deepcopy(html)
  *     autolink(doc, *args, **kw)             # <<<<<<<<<<<<<<
  *     return _transform_result(result_type, doc)
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_autolink); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 700, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_autolink); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 700, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 699, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_doc);
   __Pyx_GIVEREF(__pyx_v_doc);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_doc);
-  __pyx_t_4 = PyNumber_Add(__pyx_t_5, __pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 700, __pyx_L1_error)
+  __pyx_t_4 = PyNumber_Add(__pyx_t_5, __pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 699, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_Copy(__pyx_v_kw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 700, __pyx_L1_error)
+  __pyx_t_5 = PyDict_Copy(__pyx_v_kw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 699, __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, 700, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 699, __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":701
+  /* "lxml/html/clean.py":700
  *         doc = copy.deepcopy(html)
  *     autolink(doc, *args, **kw)
  *     return _transform_result(result_type, doc)             # <<<<<<<<<<<<<<
@@ -12016,7 +11963,7 @@ 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_5, __pyx_n_s_transform_result); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 701, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_transform_result); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 700, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_4 = NULL;
   __pyx_t_7 = 0;
@@ -12033,7 +11980,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
   #if CYTHON_FAST_PYCALL
   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, 701, __pyx_L1_error)
+    __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, 700, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_6);
   } else
@@ -12041,13 +11988,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
   #if CYTHON_FAST_PYCCALL
   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, 701, __pyx_L1_error)
+    __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, 700, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_6);
   } else
   #endif
   {
-    __pyx_t_1 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 701, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 700, __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;
@@ -12058,7 +12005,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
     __Pyx_INCREF(__pyx_v_doc);
     __Pyx_GIVEREF(__pyx_v_doc);
     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, 701, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 700, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
@@ -12067,7 +12014,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "lxml/html/clean.py":694
+  /* "lxml/html/clean.py":693
  *     return leading_text, links
  * 
  * def autolink_html(html, *args, **kw):             # <<<<<<<<<<<<<<
@@ -12091,7 +12038,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_6autolink_html(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":712
+/* "lxml/html/clean.py":711
  * _avoid_word_break_classes = ['nobreak']
  * 
  * def word_break(el, max_width=40,             # <<<<<<<<<<<<<<
@@ -12109,7 +12056,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_18__defaults__(CYTHON_UNUSED PyObje
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__defaults__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 712, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_int_40));
   __Pyx_GIVEREF(((PyObject *)__pyx_int_40));
@@ -12123,7 +12070,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_18__defaults__(CYTHON_UNUSED PyObje
   __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_break_character);
   __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_break_character);
   PyTuple_SET_ITEM(__pyx_t_1, 3, __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_break_character);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 712, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -12219,7 +12166,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_9word_break(PyObject *__pyx_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "word_break") < 0)) __PYX_ERR(0, 712, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "word_break") < 0)) __PYX_ERR(0, 711, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -12244,7 +12191,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_9word_break(PyObject *__pyx_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("word_break", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 712, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("word_break", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 711, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.html.clean.word_break", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -12280,24 +12227,24 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("word_break", 0);
 
-  /* "lxml/html/clean.py":731
+  /* "lxml/html/clean.py":730
  *     # Character suggestion of &#8203 comes from:
  *     #   http://www.cs.tut.fi/~jkorpela/html/nobr.html
  *     if el.tag in _avoid_word_break_elements:             # <<<<<<<<<<<<<<
  *         return
  *     class_name = el.get('class')
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 731, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_avoid_word_break_elements); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 731, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_avoid_word_break_elements); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 730, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 731, __pyx_L1_error)
+  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 730, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "lxml/html/clean.py":732
+    /* "lxml/html/clean.py":731
  *     #   http://www.cs.tut.fi/~jkorpela/html/nobr.html
  *     if el.tag in _avoid_word_break_elements:
  *         return             # <<<<<<<<<<<<<<
@@ -12308,7 +12255,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "lxml/html/clean.py":731
+    /* "lxml/html/clean.py":730
  *     # Character suggestion of &#8203 comes from:
  *     #   http://www.cs.tut.fi/~jkorpela/html/nobr.html
  *     if el.tag in _avoid_word_break_elements:             # <<<<<<<<<<<<<<
@@ -12317,14 +12264,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/html/clean.py":733
+  /* "lxml/html/clean.py":732
  *     if el.tag in _avoid_word_break_elements:
  *         return
  *     class_name = el.get('class')             # <<<<<<<<<<<<<<
  *     if class_name:
  *         dont_break = False
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 733, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 732, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_5 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -12338,23 +12285,23 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
   }
   __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_n_s_class) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_s_class);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 733, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 732, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_class_name = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "lxml/html/clean.py":734
+  /* "lxml/html/clean.py":733
  *         return
  *     class_name = el.get('class')
  *     if class_name:             # <<<<<<<<<<<<<<
  *         dont_break = False
  *         class_name = class_name.split()
  */
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_class_name); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 734, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_class_name); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 733, __pyx_L1_error)
   if (__pyx_t_4) {
 
-    /* "lxml/html/clean.py":735
+    /* "lxml/html/clean.py":734
  *     class_name = el.get('class')
  *     if class_name:
  *         dont_break = False             # <<<<<<<<<<<<<<
@@ -12363,14 +12310,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
  */
     __pyx_v_dont_break = 0;
 
-    /* "lxml/html/clean.py":736
+    /* "lxml/html/clean.py":735
  *     if class_name:
  *         dont_break = False
  *         class_name = class_name.split()             # <<<<<<<<<<<<<<
  *         for avoid in avoid_classes:
  *             if avoid in class_name:
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_class_name, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_class_name, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 735, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -12384,13 +12331,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
     }
     __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, 736, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 735, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_class_name, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "lxml/html/clean.py":737
+    /* "lxml/html/clean.py":736
  *         dont_break = False
  *         class_name = class_name.split()
  *         for avoid in avoid_classes:             # <<<<<<<<<<<<<<
@@ -12401,26 +12348,26 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
       __pyx_t_2 = __pyx_v_avoid_classes; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_avoid_classes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 737, __pyx_L1_error)
+      __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_avoid_classes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 736, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 737, __pyx_L1_error)
+      __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 736, __pyx_L1_error)
     }
     for (;;) {
       if (likely(!__pyx_t_7)) {
         if (likely(PyList_CheckExact(__pyx_t_2))) {
           if (__pyx_t_6 >= 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_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 737, __pyx_L1_error)
+          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 736, __pyx_L1_error)
           #else
-          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         } else {
           if (__pyx_t_6 >= 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_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 737, __pyx_L1_error)
+          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 736, __pyx_L1_error)
           #else
-          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         }
@@ -12430,7 +12377,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(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, 737, __pyx_L1_error)
+            else __PYX_ERR(0, 736, __pyx_L1_error)
           }
           break;
         }
@@ -12439,18 +12386,18 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
       __Pyx_XDECREF_SET(__pyx_v_avoid, __pyx_t_1);
       __pyx_t_1 = 0;
 
-      /* "lxml/html/clean.py":738
+      /* "lxml/html/clean.py":737
  *         class_name = class_name.split()
  *         for avoid in avoid_classes:
  *             if avoid in class_name:             # <<<<<<<<<<<<<<
  *                 dont_break = True
  *                 break
  */
-      __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_v_avoid, __pyx_v_class_name, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 738, __pyx_L1_error)
+      __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_v_avoid, __pyx_v_class_name, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 737, __pyx_L1_error)
       __pyx_t_3 = (__pyx_t_4 != 0);
       if (__pyx_t_3) {
 
-        /* "lxml/html/clean.py":739
+        /* "lxml/html/clean.py":738
  *         for avoid in avoid_classes:
  *             if avoid in class_name:
  *                 dont_break = True             # <<<<<<<<<<<<<<
@@ -12459,7 +12406,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
  */
         __pyx_v_dont_break = 1;
 
-        /* "lxml/html/clean.py":740
+        /* "lxml/html/clean.py":739
  *             if avoid in class_name:
  *                 dont_break = True
  *                 break             # <<<<<<<<<<<<<<
@@ -12468,7 +12415,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
  */
         goto __pyx_L6_break;
 
-        /* "lxml/html/clean.py":738
+        /* "lxml/html/clean.py":737
  *         class_name = class_name.split()
  *         for avoid in avoid_classes:
  *             if avoid in class_name:             # <<<<<<<<<<<<<<
@@ -12477,7 +12424,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
  */
       }
 
-      /* "lxml/html/clean.py":737
+      /* "lxml/html/clean.py":736
  *         dont_break = False
  *         class_name = class_name.split()
  *         for avoid in avoid_classes:             # <<<<<<<<<<<<<<
@@ -12488,7 +12435,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
     __pyx_L6_break:;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "lxml/html/clean.py":741
+    /* "lxml/html/clean.py":740
  *                 dont_break = True
  *                 break
  *         if dont_break:             # <<<<<<<<<<<<<<
@@ -12498,7 +12445,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
     __pyx_t_3 = (__pyx_v_dont_break != 0);
     if (__pyx_t_3) {
 
-      /* "lxml/html/clean.py":742
+      /* "lxml/html/clean.py":741
  *                 break
  *         if dont_break:
  *             return             # <<<<<<<<<<<<<<
@@ -12509,7 +12456,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
       __pyx_r = Py_None; __Pyx_INCREF(Py_None);
       goto __pyx_L0;
 
-      /* "lxml/html/clean.py":741
+      /* "lxml/html/clean.py":740
  *                 dont_break = True
  *                 break
  *         if dont_break:             # <<<<<<<<<<<<<<
@@ -12518,7 +12465,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/html/clean.py":734
+    /* "lxml/html/clean.py":733
  *         return
  *     class_name = el.get('class')
  *     if class_name:             # <<<<<<<<<<<<<<
@@ -12527,29 +12474,29 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/html/clean.py":743
+  /* "lxml/html/clean.py":742
  *         if dont_break:
  *             return
  *     if el.text:             # <<<<<<<<<<<<<<
  *         el.text = _break_text(el.text, max_width, break_character)
  *     for child in el:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 743, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 742, __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, 743, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 742, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "lxml/html/clean.py":744
+    /* "lxml/html/clean.py":743
  *             return
  *     if el.text:
  *         el.text = _break_text(el.text, max_width, break_character)             # <<<<<<<<<<<<<<
  *     for child in el:
  *         word_break(child, max_width=max_width,
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_break_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 744, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_break_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 743, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_text); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 744, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_el, __pyx_n_s_text); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 743, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_8 = NULL;
     __pyx_t_9 = 0;
@@ -12566,7 +12513,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
     #if CYTHON_FAST_PYCALL
     if (PyFunction_Check(__pyx_t_1)) {
       PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_5, __pyx_v_max_width, __pyx_v_break_character};
-      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 744, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 743, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -12575,14 +12522,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
     #if CYTHON_FAST_PYCCALL
     if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
       PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_5, __pyx_v_max_width, __pyx_v_break_character};
-      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 744, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 743, __pyx_L1_error)
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else
     #endif
     {
-      __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 744, __pyx_L1_error)
+      __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 743, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       if (__pyx_t_8) {
         __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -12596,15 +12543,15 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
       __Pyx_GIVEREF(__pyx_v_break_character);
       PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_v_break_character);
       __pyx_t_5 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 744, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 743, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_el, __pyx_n_s_text, __pyx_t_2) < 0) __PYX_ERR(0, 744, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_el, __pyx_n_s_text, __pyx_t_2) < 0) __PYX_ERR(0, 743, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "lxml/html/clean.py":743
+    /* "lxml/html/clean.py":742
  *         if dont_break:
  *             return
  *     if el.text:             # <<<<<<<<<<<<<<
@@ -12613,7 +12560,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "lxml/html/clean.py":745
+  /* "lxml/html/clean.py":744
  *     if el.text:
  *         el.text = _break_text(el.text, max_width, break_character)
  *     for child in el:             # <<<<<<<<<<<<<<
@@ -12624,26 +12571,26 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
     __pyx_t_2 = __pyx_v_el; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
     __pyx_t_7 = NULL;
   } else {
-    __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_el); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 745, __pyx_L1_error)
+    __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_el); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 744, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 745, __pyx_L1_error)
+    __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 744, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_7)) {
       if (likely(PyList_CheckExact(__pyx_t_2))) {
         if (__pyx_t_6 >= 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_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 745, __pyx_L1_error)
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 744, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 744, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_6 >= 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_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 745, __pyx_L1_error)
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 744, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 744, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -12653,7 +12600,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(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, 745, __pyx_L1_error)
+          else __PYX_ERR(0, 744, __pyx_L1_error)
         }
         break;
       }
@@ -12662,88 +12609,88 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
     __Pyx_XDECREF_SET(__pyx_v_child, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "lxml/html/clean.py":746
+    /* "lxml/html/clean.py":745
  *         el.text = _break_text(el.text, max_width, break_character)
  *     for child in el:
  *         word_break(child, max_width=max_width,             # <<<<<<<<<<<<<<
  *                    avoid_elements=avoid_elements,
  *                    avoid_classes=avoid_classes,
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_word_break); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 746, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_word_break); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 746, __pyx_L1_error)
+    __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 745, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     __Pyx_INCREF(__pyx_v_child);
     __Pyx_GIVEREF(__pyx_v_child);
     PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_child);
-    __pyx_t_5 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 746, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 745, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_max_width, __pyx_v_max_width) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_max_width, __pyx_v_max_width) < 0) __PYX_ERR(0, 745, __pyx_L1_error)
 
-    /* "lxml/html/clean.py":747
+    /* "lxml/html/clean.py":746
  *     for child in el:
  *         word_break(child, max_width=max_width,
  *                    avoid_elements=avoid_elements,             # <<<<<<<<<<<<<<
  *                    avoid_classes=avoid_classes,
  *                    break_character=break_character)
  */
-    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_avoid_elements, __pyx_v_avoid_elements) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_avoid_elements, __pyx_v_avoid_elements) < 0) __PYX_ERR(0, 745, __pyx_L1_error)
 
-    /* "lxml/html/clean.py":748
+    /* "lxml/html/clean.py":747
  *         word_break(child, max_width=max_width,
  *                    avoid_elements=avoid_elements,
  *                    avoid_classes=avoid_classes,             # <<<<<<<<<<<<<<
  *                    break_character=break_character)
  *         if child.tail:
  */
-    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_avoid_classes, __pyx_v_avoid_classes) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_avoid_classes, __pyx_v_avoid_classes) < 0) __PYX_ERR(0, 745, __pyx_L1_error)
 
-    /* "lxml/html/clean.py":749
+    /* "lxml/html/clean.py":748
  *                    avoid_elements=avoid_elements,
  *                    avoid_classes=avoid_classes,
  *                    break_character=break_character)             # <<<<<<<<<<<<<<
  *         if child.tail:
  *             child.tail = _break_text(child.tail, max_width, break_character)
  */
-    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_break_character, __pyx_v_break_character) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_break_character, __pyx_v_break_character) < 0) __PYX_ERR(0, 745, __pyx_L1_error)
 
-    /* "lxml/html/clean.py":746
+    /* "lxml/html/clean.py":745
  *         el.text = _break_text(el.text, max_width, break_character)
  *     for child in el:
  *         word_break(child, max_width=max_width,             # <<<<<<<<<<<<<<
  *                    avoid_elements=avoid_elements,
  *                    avoid_classes=avoid_classes,
  */
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 746, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 745, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "lxml/html/clean.py":750
+    /* "lxml/html/clean.py":749
  *                    avoid_classes=avoid_classes,
  *                    break_character=break_character)
  *         if child.tail:             # <<<<<<<<<<<<<<
  *             child.tail = _break_text(child.tail, max_width, break_character)
  * 
  */
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_tail); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 750, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_tail); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 749, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 750, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 749, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     if (__pyx_t_3) {
 
-      /* "lxml/html/clean.py":751
+      /* "lxml/html/clean.py":750
  *                    break_character=break_character)
  *         if child.tail:
  *             child.tail = _break_text(child.tail, max_width, break_character)             # <<<<<<<<<<<<<<
  * 
  * def word_break_html(html, *args, **kw):
  */
-      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_break_text); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 751, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_break_text); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 750, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_tail); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 751, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_tail); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 750, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __pyx_t_1 = NULL;
       __pyx_t_9 = 0;
@@ -12760,7 +12707,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
       #if CYTHON_FAST_PYCALL
       if (PyFunction_Check(__pyx_t_5)) {
         PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_t_10, __pyx_v_max_width, __pyx_v_break_character};
-        __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 751, __pyx_L1_error)
+        __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 750, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
@@ -12769,14 +12716,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
       #if CYTHON_FAST_PYCCALL
       if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
         PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_t_10, __pyx_v_max_width, __pyx_v_break_character};
-        __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 751, __pyx_L1_error)
+        __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 750, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       } else
       #endif
       {
-        __pyx_t_11 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 751, __pyx_L1_error)
+        __pyx_t_11 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 750, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         if (__pyx_t_1) {
           __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __pyx_t_1 = NULL;
@@ -12790,15 +12737,15 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
         __Pyx_GIVEREF(__pyx_v_break_character);
         PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_9, __pyx_v_break_character);
         __pyx_t_10 = 0;
-        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 751, __pyx_L1_error)
+        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 750, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       }
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__Pyx_PyObject_SetAttrStr(__pyx_v_child, __pyx_n_s_tail, __pyx_t_8) < 0) __PYX_ERR(0, 751, __pyx_L1_error)
+      if (__Pyx_PyObject_SetAttrStr(__pyx_v_child, __pyx_n_s_tail, __pyx_t_8) < 0) __PYX_ERR(0, 750, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "lxml/html/clean.py":750
+      /* "lxml/html/clean.py":749
  *                    avoid_classes=avoid_classes,
  *                    break_character=break_character)
  *         if child.tail:             # <<<<<<<<<<<<<<
@@ -12807,7 +12754,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
  */
     }
 
-    /* "lxml/html/clean.py":745
+    /* "lxml/html/clean.py":744
  *     if el.text:
  *         el.text = _break_text(el.text, max_width, break_character)
  *     for child in el:             # <<<<<<<<<<<<<<
@@ -12817,7 +12764,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "lxml/html/clean.py":712
+  /* "lxml/html/clean.py":711
  * _avoid_word_break_classes = ['nobreak']
  * 
  * def word_break(el, max_width=40,             # <<<<<<<<<<<<<<
@@ -12846,7 +12793,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_8word_break(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":753
+/* "lxml/html/clean.py":752
  *             child.tail = _break_text(child.tail, max_width, break_character)
  * 
  * def word_break_html(html, *args, **kw):             # <<<<<<<<<<<<<<
@@ -12900,7 +12847,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_11word_break_html(PyObject *__pyx_s
       }
       if (unlikely(kw_args > 0)) {
         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, used_pos_args, "word_break_html") < 0)) __PYX_ERR(0, 753, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, used_pos_args, "word_break_html") < 0)) __PYX_ERR(0, 752, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
       goto __pyx_L5_argtuple_error;
@@ -12911,7 +12858,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_11word_break_html(PyObject *__pyx_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("word_break_html", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 753, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("word_break_html", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 752, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
   __Pyx_DECREF(__pyx_v_kw); __pyx_v_kw = 0;
@@ -12943,7 +12890,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("word_break_html", 0);
 
-  /* "lxml/html/clean.py":754
+  /* "lxml/html/clean.py":753
  * 
  * def word_break_html(html, *args, **kw):
  *     result_type = type(html)             # <<<<<<<<<<<<<<
@@ -12953,14 +12900,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
   __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_html)));
   __pyx_v_result_type = ((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_html)));
 
-  /* "lxml/html/clean.py":755
+  /* "lxml/html/clean.py":754
  * def word_break_html(html, *args, **kw):
  *     result_type = type(html)
  *     doc = fromstring(html)             # <<<<<<<<<<<<<<
  *     word_break(doc, *args, **kw)
  *     return _transform_result(result_type, doc)
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 755, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 754, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
@@ -12974,39 +12921,39 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_html) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_html);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 755, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_doc = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/html/clean.py":756
+  /* "lxml/html/clean.py":755
  *     result_type = type(html)
  *     doc = fromstring(html)
  *     word_break(doc, *args, **kw)             # <<<<<<<<<<<<<<
  *     return _transform_result(result_type, doc)
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_word_break); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_word_break); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 755, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 756, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 755, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_doc);
   __Pyx_GIVEREF(__pyx_v_doc);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_doc);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 756, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 755, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_Copy(__pyx_v_kw); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 756, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Copy(__pyx_v_kw); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 755, __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, 756, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 755, __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":757
+  /* "lxml/html/clean.py":756
  *     doc = fromstring(html)
  *     word_break(doc, *args, **kw)
  *     return _transform_result(result_type, doc)             # <<<<<<<<<<<<<<
@@ -13014,7 +12961,7 @@ 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_2, __pyx_n_s_transform_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 757, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_transform_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 756, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_5 = 0;
@@ -13031,7 +12978,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
   #if CYTHON_FAST_PYCALL
   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, 757, __pyx_L1_error)
+    __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, 756, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_4);
   } else
@@ -13039,13 +12986,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
   #if CYTHON_FAST_PYCCALL
   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, 757, __pyx_L1_error)
+    __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, 756, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_4);
   } else
   #endif
   {
-    __pyx_t_1 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 757, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __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;
@@ -13056,7 +13003,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
     __Pyx_INCREF(__pyx_v_doc);
     __Pyx_GIVEREF(__pyx_v_doc);
     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, 757, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 756, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
@@ -13065,7 +13012,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "lxml/html/clean.py":753
+  /* "lxml/html/clean.py":752
  *             child.tail = _break_text(child.tail, max_width, break_character)
  * 
  * def word_break_html(html, *args, **kw):             # <<<<<<<<<<<<<<
@@ -13089,7 +13036,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_10word_break_html(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":759
+/* "lxml/html/clean.py":758
  *     return _transform_result(result_type, doc)
  * 
  * def _break_text(text, max_width, break_character):             # <<<<<<<<<<<<<<
@@ -13135,17 +13082,17 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_13_break_text(PyObject *__pyx_self,
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_width)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_break_text", 1, 3, 3, 1); __PYX_ERR(0, 759, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_break_text", 1, 3, 3, 1); __PYX_ERR(0, 758, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_break_character)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_break_text", 1, 3, 3, 2); __PYX_ERR(0, 759, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_break_text", 1, 3, 3, 2); __PYX_ERR(0, 758, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_break_text") < 0)) __PYX_ERR(0, 759, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_break_text") < 0)) __PYX_ERR(0, 758, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -13160,7 +13107,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_13_break_text(PyObject *__pyx_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("_break_text", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 759, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("_break_text", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 758, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.html.clean._break_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -13195,14 +13142,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
   __Pyx_RefNannySetupContext("_break_text", 0);
   __Pyx_INCREF(__pyx_v_text);
 
-  /* "lxml/html/clean.py":760
+  /* "lxml/html/clean.py":759
  * 
  * def _break_text(text, max_width, break_character):
  *     words = text.split()             # <<<<<<<<<<<<<<
  *     for word in words:
  *         if len(word) > max_width:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_text, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_text, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 759, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -13216,13 +13163,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
   }
   __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, 760, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_words = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "lxml/html/clean.py":761
+  /* "lxml/html/clean.py":760
  * def _break_text(text, max_width, break_character):
  *     words = text.split()
  *     for word in words:             # <<<<<<<<<<<<<<
@@ -13233,26 +13180,26 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
     __pyx_t_1 = __pyx_v_words; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_words); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_words); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 761, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 760, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 761, __pyx_L1_error)
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 760, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 761, __pyx_L1_error)
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 760, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -13262,7 +13209,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 761, __pyx_L1_error)
+          else __PYX_ERR(0, 760, __pyx_L1_error)
         }
         break;
       }
@@ -13271,30 +13218,30 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
     __Pyx_XDECREF_SET(__pyx_v_word, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "lxml/html/clean.py":762
+    /* "lxml/html/clean.py":761
  *     words = text.split()
  *     for word in words:
  *         if len(word) > max_width:             # <<<<<<<<<<<<<<
  *             replacement = _insert_break(word, max_width, break_character)
  *             text = text.replace(word, replacement)
  */
-    __pyx_t_6 = PyObject_Length(__pyx_v_word); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 762, __pyx_L1_error)
-    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)
+    __pyx_t_6 = PyObject_Length(__pyx_v_word); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 761, __pyx_L1_error)
+    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_v_max_width, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 762, __pyx_L1_error)
+    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_v_max_width, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 762, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 761, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_7) {
 
-      /* "lxml/html/clean.py":763
+      /* "lxml/html/clean.py":762
  *     for word in words:
  *         if len(word) > max_width:
  *             replacement = _insert_break(word, max_width, break_character)             # <<<<<<<<<<<<<<
  *             text = text.replace(word, replacement)
  *     return text
  */
-      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_insert_break); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error)
+      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_insert_break); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_t_8 = NULL;
       __pyx_t_9 = 0;
@@ -13311,7 +13258,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
       #if CYTHON_FAST_PYCALL
       if (PyFunction_Check(__pyx_t_2)) {
         PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_v_word, __pyx_v_max_width, __pyx_v_break_character};
-        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 762, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else
@@ -13319,13 +13266,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
       #if CYTHON_FAST_PYCCALL
       if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
         PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_v_word, __pyx_v_max_width, __pyx_v_break_character};
-        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 762, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else
       #endif
       {
-        __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 763, __pyx_L1_error)
+        __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 762, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
         if (__pyx_t_8) {
           __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -13339,7 +13286,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
         __Pyx_INCREF(__pyx_v_break_character);
         __Pyx_GIVEREF(__pyx_v_break_character);
         PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_v_break_character);
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 762, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       }
@@ -13347,14 +13294,14 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
       __Pyx_XDECREF_SET(__pyx_v_replacement, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/html/clean.py":764
+      /* "lxml/html/clean.py":763
  *         if len(word) > max_width:
  *             replacement = _insert_break(word, max_width, break_character)
  *             text = text.replace(word, replacement)             # <<<<<<<<<<<<<<
  *     return text
  * 
  */
-      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_text, __pyx_n_s_replace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_text, __pyx_n_s_replace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_t_10 = NULL;
       __pyx_t_9 = 0;
@@ -13371,7 +13318,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
       #if CYTHON_FAST_PYCALL
       if (PyFunction_Check(__pyx_t_2)) {
         PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_word, __pyx_v_replacement};
-        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 764, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else
@@ -13379,13 +13326,13 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
       #if CYTHON_FAST_PYCCALL
       if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
         PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_word, __pyx_v_replacement};
-        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 764, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error)
         __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else
       #endif
       {
-        __pyx_t_8 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 764, __pyx_L1_error)
+        __pyx_t_8 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 763, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_8);
         if (__pyx_t_10) {
           __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
@@ -13396,7 +13343,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
         __Pyx_INCREF(__pyx_v_replacement);
         __Pyx_GIVEREF(__pyx_v_replacement);
         PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_9, __pyx_v_replacement);
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 764, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       }
@@ -13404,7 +13351,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
       __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "lxml/html/clean.py":762
+      /* "lxml/html/clean.py":761
  *     words = text.split()
  *     for word in words:
  *         if len(word) > max_width:             # <<<<<<<<<<<<<<
@@ -13413,7 +13360,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
  */
     }
 
-    /* "lxml/html/clean.py":761
+    /* "lxml/html/clean.py":760
  * def _break_text(text, max_width, break_character):
  *     words = text.split()
  *     for word in words:             # <<<<<<<<<<<<<<
@@ -13423,7 +13370,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "lxml/html/clean.py":765
+  /* "lxml/html/clean.py":764
  *             replacement = _insert_break(word, max_width, break_character)
  *             text = text.replace(word, replacement)
  *     return text             # <<<<<<<<<<<<<<
@@ -13435,7 +13382,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
   __pyx_r = __pyx_v_text;
   goto __pyx_L0;
 
-  /* "lxml/html/clean.py":759
+  /* "lxml/html/clean.py":758
  *     return _transform_result(result_type, doc)
  * 
  * def _break_text(text, max_width, break_character):             # <<<<<<<<<<<<<<
@@ -13462,7 +13409,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_12_break_text(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "lxml/html/clean.py":769
+/* "lxml/html/clean.py":768
  * _break_prefer_re = re.compile(r'[^a-z]', re.I)
  * 
  * def _insert_break(word, width, break_character):             # <<<<<<<<<<<<<<
@@ -13508,17 +13455,17 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_15_insert_break(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_width)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_insert_break", 1, 3, 3, 1); __PYX_ERR(0, 769, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_insert_break", 1, 3, 3, 1); __PYX_ERR(0, 768, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_break_character)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("_insert_break", 1, 3, 3, 2); __PYX_ERR(0, 769, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("_insert_break", 1, 3, 3, 2); __PYX_ERR(0, 768, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_insert_break") < 0)) __PYX_ERR(0, 769, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_insert_break") < 0)) __PYX_ERR(0, 768, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -13533,7 +13480,7 @@ static PyObject *__pyx_pw_4lxml_4html_5clean_15_insert_break(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("_insert_break", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 769, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("_insert_break", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 768, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.html.clean._insert_break", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -13565,7 +13512,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
   __Pyx_RefNannySetupContext("_insert_break", 0);
   __Pyx_INCREF(__pyx_v_word);
 
-  /* "lxml/html/clean.py":770
+  /* "lxml/html/clean.py":769
  * 
  * def _insert_break(word, width, break_character):
  *     orig_word = word             # <<<<<<<<<<<<<<
@@ -13575,7 +13522,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
   __Pyx_INCREF(__pyx_v_word);
   __pyx_v_orig_word = __pyx_v_word;
 
-  /* "lxml/html/clean.py":771
+  /* "lxml/html/clean.py":770
  * def _insert_break(word, width, break_character):
  *     orig_word = word
  *     result = ''             # <<<<<<<<<<<<<<
@@ -13585,7 +13532,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
   __Pyx_INCREF(__pyx_kp_s__2);
   __pyx_v_result = __pyx_kp_s__2;
 
-  /* "lxml/html/clean.py":772
+  /* "lxml/html/clean.py":771
  *     orig_word = word
  *     result = ''
  *     while len(word) > width:             # <<<<<<<<<<<<<<
@@ -13593,37 +13540,37 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
  *         breaks = list(_break_prefer_re.finditer(start))
  */
   while (1) {
-    __pyx_t_1 = PyObject_Length(__pyx_v_word); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 772, __pyx_L1_error)
-    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 772, __pyx_L1_error)
+    __pyx_t_1 = PyObject_Length(__pyx_v_word); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 771, __pyx_L1_error)
+    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_v_width, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 772, __pyx_L1_error)
+    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_v_width, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 771, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 772, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 771, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (!__pyx_t_4) break;
 
-    /* "lxml/html/clean.py":773
+    /* "lxml/html/clean.py":772
  *     result = ''
  *     while len(word) > width:
  *         start = word[:width]             # <<<<<<<<<<<<<<
  *         breaks = list(_break_prefer_re.finditer(start))
  *         if breaks:
  */
-    __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_word, 0, 0, NULL, &__pyx_v_width, NULL, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 773, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_word, 0, 0, NULL, &__pyx_v_width, NULL, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 772, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "lxml/html/clean.py":774
+    /* "lxml/html/clean.py":773
  *     while len(word) > width:
  *         start = word[:width]
  *         breaks = list(_break_prefer_re.finditer(start))             # <<<<<<<<<<<<<<
  *         if breaks:
  *             last_break = breaks[-1]
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_break_prefer_re); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 774, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_break_prefer_re); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_finditer); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 774, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_finditer); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 773, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = NULL;
@@ -13638,16 +13585,16 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
     }
     __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_v_start) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_start);
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 774, __pyx_L1_error)
+    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 773, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = PySequence_List(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 774, __pyx_L1_error)
+    __pyx_t_5 = PySequence_List(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 773, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_XDECREF_SET(__pyx_v_breaks, ((PyObject*)__pyx_t_5));
     __pyx_t_5 = 0;
 
-    /* "lxml/html/clean.py":775
+    /* "lxml/html/clean.py":774
  *         start = word[:width]
  *         breaks = list(_break_prefer_re.finditer(start))
  *         if breaks:             # <<<<<<<<<<<<<<
@@ -13657,26 +13604,26 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
     __pyx_t_4 = (PyList_GET_SIZE(__pyx_v_breaks) != 0);
     if (__pyx_t_4) {
 
-      /* "lxml/html/clean.py":776
+      /* "lxml/html/clean.py":775
  *         breaks = list(_break_prefer_re.finditer(start))
  *         if breaks:
  *             last_break = breaks[-1]             # <<<<<<<<<<<<<<
  *             # Only walk back up to 10 characters to find a nice break:
  *             if last_break.end() > width-10:
  */
-      __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_breaks, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 776, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_breaks, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 775, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_XDECREF_SET(__pyx_v_last_break, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "lxml/html/clean.py":778
+      /* "lxml/html/clean.py":777
  *             last_break = breaks[-1]
  *             # Only walk back up to 10 characters to find a nice break:
  *             if last_break.end() > width-10:             # <<<<<<<<<<<<<<
  *                 # FIXME: should the break character be at the end of the
  *                 # chunk, or the beginning of the next chunk?
  */
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_last_break, __pyx_n_s_end); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 778, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_last_break, __pyx_n_s_end); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 777, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_2 = NULL;
       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -13690,26 +13637,26 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
       }
       __pyx_t_5 = (__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_5)) __PYX_ERR(0, 778, __pyx_L1_error)
+      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 777, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_v_width, __pyx_int_10, 10, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 778, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_v_width, __pyx_int_10, 10, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 777, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_2 = PyObject_RichCompare(__pyx_t_5, __pyx_t_3, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 778, __pyx_L1_error)
+      __pyx_t_2 = PyObject_RichCompare(__pyx_t_5, __pyx_t_3, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 777, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 778, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 777, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       if (__pyx_t_4) {
 
-        /* "lxml/html/clean.py":781
+        /* "lxml/html/clean.py":780
  *                 # FIXME: should the break character be at the end of the
  *                 # chunk, or the beginning of the next chunk?
  *                 start = word[:last_break.end()]             # <<<<<<<<<<<<<<
  *         result += start + break_character
  *         word = word[len(start):]
  */
-        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_last_break, __pyx_n_s_end); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_last_break, __pyx_n_s_end); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 780, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_5 = NULL;
         if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -13723,16 +13670,16 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
         }
         __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 781, __pyx_L1_error)
+        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 780, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_word, 0, 0, NULL, &__pyx_t_2, NULL, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_word, 0, 0, NULL, &__pyx_t_2, NULL, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 780, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_DECREF_SET(__pyx_v_start, __pyx_t_3);
         __pyx_t_3 = 0;
 
-        /* "lxml/html/clean.py":778
+        /* "lxml/html/clean.py":777
  *             last_break = breaks[-1]
  *             # Only walk back up to 10 characters to find a nice break:
  *             if last_break.end() > width-10:             # <<<<<<<<<<<<<<
@@ -13741,7 +13688,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
  */
       }
 
-      /* "lxml/html/clean.py":775
+      /* "lxml/html/clean.py":774
  *         start = word[:width]
  *         breaks = list(_break_prefer_re.finditer(start))
  *         if breaks:             # <<<<<<<<<<<<<<
@@ -13750,48 +13697,48 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
  */
     }
 
-    /* "lxml/html/clean.py":782
+    /* "lxml/html/clean.py":781
  *                 # chunk, or the beginning of the next chunk?
  *                 start = word[:last_break.end()]
  *         result += start + break_character             # <<<<<<<<<<<<<<
  *         word = word[len(start):]
  *     result += word
  */
-    __pyx_t_3 = PyNumber_Add(__pyx_v_start, __pyx_v_break_character); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 782, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Add(__pyx_v_start, __pyx_v_break_character); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_result, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 782, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_result, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 781, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "lxml/html/clean.py":783
+    /* "lxml/html/clean.py":782
  *                 start = word[:last_break.end()]
  *         result += start + break_character
  *         word = word[len(start):]             # <<<<<<<<<<<<<<
  *     result += word
  *     return result
  */
-    __pyx_t_1 = PyObject_Length(__pyx_v_start); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 783, __pyx_L1_error)
-    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_word, __pyx_t_1, 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 783, __pyx_L1_error)
+    __pyx_t_1 = PyObject_Length(__pyx_v_start); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 782, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_word, __pyx_t_1, 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 782, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_word, __pyx_t_2);
     __pyx_t_2 = 0;
   }
 
-  /* "lxml/html/clean.py":784
+  /* "lxml/html/clean.py":783
  *         result += start + break_character
  *         word = word[len(start):]
  *     result += word             # <<<<<<<<<<<<<<
  *     return result
  * 
  */
-  __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_result, __pyx_v_word); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_result, __pyx_v_word); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 783, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "lxml/html/clean.py":785
+  /* "lxml/html/clean.py":784
  *         word = word[len(start):]
  *     result += word
  *     return result             # <<<<<<<<<<<<<<
@@ -13802,7 +13749,7 @@ static PyObject *__pyx_pf_4lxml_4html_5clean_14_insert_break(CYTHON_UNUSED PyObj
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "lxml/html/clean.py":769
+  /* "lxml/html/clean.py":768
  * _break_prefer_re = re.compile(r'[^a-z]', re.I)
  * 
  * def _insert_break(word, width, break_character):             # <<<<<<<<<<<<<<
@@ -13939,7 +13886,7 @@ static PyTypeObject __pyx_type_4lxml_4html_5clean___pyx_scope_struct__kill_condi
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -14021,11 +13968,10 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_XHTML_NAMESPACE, __pyx_k_XHTML_NAMESPACE, sizeof(__pyx_k_XHTML_NAMESPACE), 0, 0, 1, 1},
   {&__pyx_n_s_XPath, __pyx_k_XPath, sizeof(__pyx_k_XPath), 0, 0, 1, 1},
   {&__pyx_kp_s__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 0, 1, 0},
-  {&__pyx_kp_s__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 0, 1, 0},
-  {&__pyx_kp_s__15, __pyx_k__15, sizeof(__pyx_k__15), 0, 0, 1, 0},
-  {&__pyx_kp_s__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 0, 1, 0},
+  {&__pyx_kp_s__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 0, 1, 0},
+  {&__pyx_kp_s__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 0, 1, 0},
   {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0},
-  {&__pyx_kp_s__42, __pyx_k__42, sizeof(__pyx_k__42), 0, 0, 1, 0},
+  {&__pyx_kp_s__40, __pyx_k__40, sizeof(__pyx_k__40), 0, 0, 1, 0},
   {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1},
   {&__pyx_kp_s_a_z, __pyx_k_a_z, sizeof(__pyx_k_a_z), 0, 0, 1, 0},
   {&__pyx_kp_s_a_zA_Z_son_a_zA_Z_s, __pyx_k_a_zA_Z_son_a_zA_Z_s, sizeof(__pyx_k_a_zA_Z_son_a_zA_Z_s), 0, 0, 1, 0},
@@ -14109,7 +14055,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_finditer, __pyx_k_finditer, sizeof(__pyx_k_finditer), 0, 0, 1, 1},
   {&__pyx_n_s_form, __pyx_k_form, sizeof(__pyx_k_form), 0, 0, 1, 1},
   {&__pyx_n_s_forms, __pyx_k_forms, sizeof(__pyx_k_forms), 0, 0, 1, 1},
-  {&__pyx_n_s_fragment, __pyx_k_fragment, sizeof(__pyx_k_fragment), 0, 0, 1, 1},
   {&__pyx_n_s_frame_tags, __pyx_k_frame_tags, sizeof(__pyx_k_frame_tags), 0, 0, 1, 1},
   {&__pyx_n_s_frames, __pyx_k_frames, sizeof(__pyx_k_frames), 0, 0, 1, 1},
   {&__pyx_n_s_fromstring, __pyx_k_fromstring, sizeof(__pyx_k_fromstring), 0, 0, 1, 1},
@@ -14124,6 +14069,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_host, __pyx_k_host, sizeof(__pyx_k_host), 0, 0, 1, 1},
   {&__pyx_n_s_host_regex, __pyx_k_host_regex, sizeof(__pyx_k_host_regex), 0, 0, 1, 1},
   {&__pyx_n_s_host_whitelist, __pyx_k_host_whitelist, sizeof(__pyx_k_host_whitelist), 0, 0, 1, 1},
+  {&__pyx_n_s_hostname, __pyx_k_hostname, sizeof(__pyx_k_hostname), 0, 0, 1, 1},
   {&__pyx_n_s_href, __pyx_k_href, sizeof(__pyx_k_href), 0, 0, 1, 1},
   {&__pyx_n_s_html, __pyx_k_html, sizeof(__pyx_k_html), 0, 0, 1, 1},
   {&__pyx_n_s_http, __pyx_k_http, sizeof(__pyx_k_http), 0, 0, 1, 1},
@@ -14180,7 +14126,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
   {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
   {&__pyx_n_s_namespaces, __pyx_k_namespaces, sizeof(__pyx_k_namespaces), 0, 0, 1, 1},
-  {&__pyx_n_s_netloc, __pyx_k_netloc, sizeof(__pyx_k_netloc), 0, 0, 1, 1},
   {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1},
   {&__pyx_n_s_nobreak, __pyx_k_nobreak, sizeof(__pyx_k_nobreak), 0, 0, 1, 1},
   {&__pyx_n_s_nofollow, __pyx_k_nofollow, sizeof(__pyx_k_nofollow), 0, 0, 1, 1},
@@ -14196,7 +14141,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_page_structure, __pyx_k_page_structure, sizeof(__pyx_k_page_structure), 0, 0, 1, 1},
   {&__pyx_n_s_param, __pyx_k_param, sizeof(__pyx_k_param), 0, 0, 1, 1},
   {&__pyx_n_s_parent, __pyx_k_parent, sizeof(__pyx_k_parent), 0, 0, 1, 1},
-  {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1},
+  {&__pyx_n_s_parts, __pyx_k_parts, sizeof(__pyx_k_parts), 0, 0, 1, 1},
   {&__pyx_n_s_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 0, 0, 1, 1},
   {&__pyx_n_s_pos, __pyx_k_pos, sizeof(__pyx_k_pos), 0, 0, 1, 1},
   {&__pyx_n_s_possibly_malicious_schemes, __pyx_k_possibly_malicious_schemes, sizeof(__pyx_k_possibly_malicious_schemes), 0, 0, 1, 1},
@@ -14206,7 +14151,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_prev_text, __pyx_k_prev_text, sizeof(__pyx_k_prev_text), 0, 0, 1, 1},
   {&__pyx_n_s_processing_instructions, __pyx_k_processing_instructions, sizeof(__pyx_k_processing_instructions), 0, 0, 1, 1},
   {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1},
-  {&__pyx_n_s_query, __pyx_k_query, sizeof(__pyx_k_query), 0, 0, 1, 1},
   {&__pyx_n_s_re, __pyx_k_re, sizeof(__pyx_k_re), 0, 0, 1, 1},
   {&__pyx_n_s_regex, __pyx_k_regex, sizeof(__pyx_k_regex), 0, 0, 1, 1},
   {&__pyx_n_s_regex_pos, __pyx_k_regex_pos, sizeof(__pyx_k_regex_pos), 0, 0, 1, 1},
@@ -14390,49 +14334,38 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple__9);
   __Pyx_GIVEREF(__pyx_tuple__9);
 
-  /* "lxml/html/clean.py":494
- *             return False
- *         scheme, netloc, path, query, fragment = urlsplit(url)
- *         netloc = netloc.lower().split(':', 1)[0]             # <<<<<<<<<<<<<<
- *         if scheme not in ('http', 'https'):
- *             return False
- */
-  __pyx_tuple__11 = PyTuple_Pack(2, __pyx_kp_s__10, __pyx_int_1); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 494, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__11);
-  __Pyx_GIVEREF(__pyx_tuple__11);
-
-  /* "lxml/html/clean.py":542
+  /* "lxml/html/clean.py":541
  *         """
  *         style = self._substitute_comments('', style)
  *         style = style.replace('\\', '')             # <<<<<<<<<<<<<<
  *         style = _substitute_whitespace('', style)
  *         style = style.lower()
  */
-  __pyx_tuple__13 = PyTuple_Pack(2, __pyx_kp_s__12, __pyx_kp_s__2); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 542, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__13);
-  __Pyx_GIVEREF(__pyx_tuple__13);
+  __pyx_tuple__11 = PyTuple_Pack(2, __pyx_kp_s__10, __pyx_kp_s__2); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 541, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__11);
+  __Pyx_GIVEREF(__pyx_tuple__11);
 
-  /* "lxml/html/clean.py":634
+  /* "lxml/html/clean.py":633
  *         if pre_children:
  *             el.text = text
  *             el[:0] = pre_children             # <<<<<<<<<<<<<<
  * 
  * def _link_text(text, link_regexes, avoid_hosts, factory):
  */
-  __pyx_slice__14 = PySlice_New(Py_None, __pyx_int_0, Py_None); if (unlikely(!__pyx_slice__14)) __PYX_ERR(0, 634, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_slice__14);
-  __Pyx_GIVEREF(__pyx_slice__14);
+  __pyx_slice__12 = PySlice_New(Py_None, __pyx_int_0, Py_None); if (unlikely(!__pyx_slice__12)) __PYX_ERR(0, 633, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__12);
+  __Pyx_GIVEREF(__pyx_slice__12);
 
-  /* "lxml/html/clean.py":674
+  /* "lxml/html/clean.py":673
  *             # These punctuation marks shouldn't end a link
  *             end -= 1
  *             link = link[:-1]             # <<<<<<<<<<<<<<
  *         prev_text = text[:best_match.start()]
  *         if links:
  */
-  __pyx_slice__17 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__17)) __PYX_ERR(0, 674, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_slice__17);
-  __Pyx_GIVEREF(__pyx_slice__17);
+  __pyx_slice__15 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__15)) __PYX_ERR(0, 673, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__15);
+  __Pyx_GIVEREF(__pyx_slice__15);
 
   /* "lxml/html/clean.py":72
  *     r'@\s*import', re.I).sub
@@ -14441,9 +14374,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     r'</?[a-zA-Z]+|\son[a-zA-Z]+\s*=',
  *     *((re.ASCII,) if sys.version_info[0] >= 3 else ())).search
  */
-  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_a_zA_Z_son_a_zA_Z_s); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 72, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__18);
-  __Pyx_GIVEREF(__pyx_tuple__18);
+  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_a_zA_Z_son_a_zA_Z_s); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__16);
+  __Pyx_GIVEREF(__pyx_tuple__16);
 
   /* "lxml/html/clean.py":86
  * _is_unsafe_image_type = re.compile(r"(xml|svg)", re.I).search
@@ -14452,10 +14385,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     safe_image_urls = 0
  *     for image_type in _find_image_dataurls(s):
  */
-  __pyx_tuple__19 = PyTuple_Pack(3, __pyx_n_s_s_2, __pyx_n_s_safe_image_urls, __pyx_n_s_image_type); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 86, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__19);
-  __Pyx_GIVEREF(__pyx_tuple__19);
-  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_has_javascript_scheme, 86, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 86, __pyx_L1_error)
+  __pyx_tuple__17 = PyTuple_Pack(3, __pyx_n_s_s_2, __pyx_n_s_safe_image_urls, __pyx_n_s_image_type); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 86, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__17);
+  __Pyx_GIVEREF(__pyx_tuple__17);
+  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_has_javascript_scheme, 86, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 86, __pyx_L1_error)
 
   /* "lxml/html/clean.py":94
  *     return len(_possibly_malicious_schemes(s)) > safe_image_urls
@@ -14464,9 +14397,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * 
  * # FIXME: check against: http://msdn2.microsoft.com/en-us/library/ms537512.aspx
  */
-  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_s_x00_x08_x0B_x0C_x0E_x19); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 94, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__21);
-  __Pyx_GIVEREF(__pyx_tuple__21);
+  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_s_x00_x08_x0B_x0C_x0E_x19); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 94, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__19);
+  __Pyx_GIVEREF(__pyx_tuple__19);
 
   /* "lxml/html/clean.py":100
  *     r'\[if[\s\n\r]+.*?][\s\n\r]*>', re.I|re.S)
@@ -14475,9 +14408,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     "descendant-or-self::*[@style]")
  * 
  */
-  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_descendant_or_self_style); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 100, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__22);
-  __Pyx_GIVEREF(__pyx_tuple__22);
+  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_descendant_or_self_style); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 100, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__20);
+  __Pyx_GIVEREF(__pyx_tuple__20);
 
   /* "lxml/html/clean.py":103
  *     "descendant-or-self::*[@style]")
@@ -14486,9 +14419,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     ("descendant-or-self::a  [normalize-space(@href) and substring(normalize-space(@href),1,1) != '#'] |"
  *      "descendant-or-self::x:a[normalize-space(@href) and substring(normalize-space(@href),1,1) != '#']"),
  */
-  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_descendant_or_self_a_normalize_s); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 103, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__23);
-  __Pyx_GIVEREF(__pyx_tuple__23);
+  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_descendant_or_self_a_normalize_s); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 103, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__21);
+  __Pyx_GIVEREF(__pyx_tuple__21);
 
   /* "lxml/html/clean.py":109
  * 
@@ -14497,9 +14430,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     """
  *     Instances cleans the document of each of the possible offending
  */
-  __pyx_tuple__24 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 109, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__24);
-  __Pyx_GIVEREF(__pyx_tuple__24);
+  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 109, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__22);
+  __Pyx_GIVEREF(__pyx_tuple__22);
 
   /* "lxml/html/clean.py":227
  *     whitelist_tags = {'iframe', 'embed'}
@@ -14508,10 +14441,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         not_an_attribute = object()
  *         for name, value in kw.items():
  */
-  __pyx_tuple__25 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_kw, __pyx_n_s_not_an_attribute, __pyx_n_s_name_2, __pyx_n_s_value, __pyx_n_s_default); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 227, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__25);
-  __Pyx_GIVEREF(__pyx_tuple__25);
-  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_init, 227, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 227, __pyx_L1_error)
+  __pyx_tuple__23 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_kw, __pyx_n_s_not_an_attribute, __pyx_n_s_name_2, __pyx_n_s_value, __pyx_n_s_default); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 227, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__23);
+  __Pyx_GIVEREF(__pyx_tuple__23);
+  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_init, 227, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 227, __pyx_L1_error)
 
   /* "lxml/html/clean.py":267
  *         )
@@ -14520,10 +14453,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         """
  *         Cleans the document.
  */
-  __pyx_tuple__27 = PyTuple_Pack(17, __pyx_n_s_self, __pyx_n_s_doc, __pyx_n_s_getroot, __pyx_n_s_el, __pyx_n_s_kill_tags, __pyx_n_s_remove_tags, __pyx_n_s_allow_tags, __pyx_n_s_safe_attrs, __pyx_n_s_attrib, __pyx_n_s_aname, __pyx_n_s_old, __pyx_n_s_new, __pyx_n_s_parent, __pyx_n_s_remove, __pyx_n_s_kill, __pyx_n_s_bad, __pyx_n_s_rel); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 267, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__27);
-  __Pyx_GIVEREF(__pyx_tuple__27);
-  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(2, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_call, 267, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 267, __pyx_L1_error)
+  __pyx_tuple__25 = PyTuple_Pack(17, __pyx_n_s_self, __pyx_n_s_doc, __pyx_n_s_getroot, __pyx_n_s_el, __pyx_n_s_kill_tags, __pyx_n_s_remove_tags, __pyx_n_s_allow_tags, __pyx_n_s_safe_attrs, __pyx_n_s_attrib, __pyx_n_s_aname, __pyx_n_s_old, __pyx_n_s_new, __pyx_n_s_parent, __pyx_n_s_remove, __pyx_n_s_kill, __pyx_n_s_bad, __pyx_n_s_rel); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 267, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__25);
+  __Pyx_GIVEREF(__pyx_tuple__25);
+  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_call, 267, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 267, __pyx_L1_error)
 
   /* "lxml/html/clean.py":452
  *                     el.set('rel', rel)
@@ -14532,10 +14465,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         """
  *         Override to suppress rel="nofollow" on some anchors.
  */
-  __pyx_tuple__29 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_anchor); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 452, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__29);
-  __Pyx_GIVEREF(__pyx_tuple__29);
-  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_allow_follow, 452, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 452, __pyx_L1_error)
+  __pyx_tuple__27 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_anchor); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 452, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__27);
+  __Pyx_GIVEREF(__pyx_tuple__27);
+  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_allow_follow, 452, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 452, __pyx_L1_error)
 
   /* "lxml/html/clean.py":458
  *         return False
@@ -14544,10 +14477,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         """
  *         Decide whether an element is configured to be accepted or rejected.
  */
-  __pyx_tuple__31 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_el, __pyx_n_s_attr, __pyx_n_s_one_attr, __pyx_n_s_url); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 458, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__31);
-  __Pyx_GIVEREF(__pyx_tuple__31);
-  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_allow_element, 458, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 458, __pyx_L1_error)
+  __pyx_tuple__29 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_el, __pyx_n_s_attr, __pyx_n_s_one_attr, __pyx_n_s_url); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 458, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__29);
+  __Pyx_GIVEREF(__pyx_tuple__29);
+  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_allow_element, 458, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 458, __pyx_L1_error)
 
   /* "lxml/html/clean.py":482
  *             return self.allow_embedded_url(el, url)
@@ -14556,179 +14489,179 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         """
  *         Decide whether a URL that was found in an element's attributes or text
  */
-  __pyx_tuple__33 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_el, __pyx_n_s_url, __pyx_n_s_scheme, __pyx_n_s_netloc, __pyx_n_s_path, __pyx_n_s_query, __pyx_n_s_fragment); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 482, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__33);
-  __Pyx_GIVEREF(__pyx_tuple__33);
-  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_allow_embedded_url, 482, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 482, __pyx_L1_error)
+  __pyx_tuple__31 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_el, __pyx_n_s_url, __pyx_n_s_parts); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 482, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__31);
+  __Pyx_GIVEREF(__pyx_tuple__31);
+  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_allow_embedded_url, 482, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 482, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":501
+  /* "lxml/html/clean.py":500
  *         return False
  * 
  *     def kill_conditional_comments(self, doc):             # <<<<<<<<<<<<<<
  *         """
  *         IE conditional comments basically embed HTML that the parser
  */
-  __pyx_tuple__35 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_doc, __pyx_n_s_has_conditional_comment); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 501, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__35);
-  __Pyx_GIVEREF(__pyx_tuple__35);
-  __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_kill_conditional_comments, 501, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 501, __pyx_L1_error)
+  __pyx_tuple__33 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_doc, __pyx_n_s_has_conditional_comment); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 500, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__33);
+  __Pyx_GIVEREF(__pyx_tuple__33);
+  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_kill_conditional_comments, 500, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 500, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":512
+  /* "lxml/html/clean.py":511
  *             etree.Comment)
  * 
  *     def _kill_elements(self, doc, condition, iterate=None):             # <<<<<<<<<<<<<<
  *         bad = []
  *         for el in doc.iter(iterate):
  */
-  __pyx_tuple__37 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_doc, __pyx_n_s_condition, __pyx_n_s_iterate, __pyx_n_s_bad, __pyx_n_s_el); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 512, __pyx_L1_error)
+  __pyx_tuple__35 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_doc, __pyx_n_s_condition, __pyx_n_s_iterate, __pyx_n_s_bad, __pyx_n_s_el); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 511, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__35);
+  __Pyx_GIVEREF(__pyx_tuple__35);
+  __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_kill_elements, 511, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 511, __pyx_L1_error)
+  __pyx_tuple__37 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 511, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__37);
   __Pyx_GIVEREF(__pyx_tuple__37);
-  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_kill_elements, 512, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 512, __pyx_L1_error)
-  __pyx_tuple__39 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 512, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__39);
-  __Pyx_GIVEREF(__pyx_tuple__39);
 
-  /* "lxml/html/clean.py":520
+  /* "lxml/html/clean.py":519
  *             el.drop_tree()
  * 
  *     def _remove_javascript_link(self, link):             # <<<<<<<<<<<<<<
  *         # links like "j a v a s c r i p t:" might be interpreted in IE
  *         new = _substitute_whitespace('', unquote_plus(link))
  */
-  __pyx_tuple__40 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_link, __pyx_n_s_new); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 520, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__40);
-  __Pyx_GIVEREF(__pyx_tuple__40);
-  __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 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_html_clean_py, __pyx_n_s_remove_javascript_link, 520, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 520, __pyx_L1_error)
+  __pyx_tuple__38 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_link, __pyx_n_s_new); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__38);
+  __Pyx_GIVEREF(__pyx_tuple__38);
+  __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 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_html_clean_py, __pyx_n_s_remove_javascript_link, 519, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 519, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":530
+  /* "lxml/html/clean.py":529
  *     _substitute_comments = re.compile(r'/\*.*?\*[inserted by cython to avoid comment closer]/', re.S).sub
  * 
  *     def _has_sneaky_javascript(self, style):             # <<<<<<<<<<<<<<
  *         """
  *         Depending on the browser, stuff like ``e x p r e s s i o n(...)``
  */
-  __pyx_tuple__43 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_style); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 530, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__43);
-  __Pyx_GIVEREF(__pyx_tuple__43);
-  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_has_sneaky_javascript, 530, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 530, __pyx_L1_error)
+  __pyx_tuple__41 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_style); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 529, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__41);
+  __Pyx_GIVEREF(__pyx_tuple__41);
+  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_has_sneaky_javascript, 529, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 529, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":559
+  /* "lxml/html/clean.py":558
  *         return False
  * 
  *     def clean_html(self, html):             # <<<<<<<<<<<<<<
  *         result_type = type(html)
  *         if isinstance(html, basestring):
  */
-  __pyx_tuple__45 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_html, __pyx_n_s_result_type, __pyx_n_s_doc); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 559, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__45);
-  __Pyx_GIVEREF(__pyx_tuple__45);
-  __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_clean_html, 559, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 559, __pyx_L1_error)
+  __pyx_tuple__43 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_html, __pyx_n_s_result_type, __pyx_n_s_doc); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 558, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__43);
+  __Pyx_GIVEREF(__pyx_tuple__43);
+  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_clean_html, 558, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 558, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":586
+  /* "lxml/html/clean.py":585
  *     re.compile(r'^localhost', re.I),
  *     re.compile(r'\bexample\.(?:com|org|net)$', re.I),
  *     re.compile(r'^127\.0\.0\.1$'),             # <<<<<<<<<<<<<<
  *     ]
  * 
  */
-  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_s_127_0_0_1); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 586, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__47);
-  __Pyx_GIVEREF(__pyx_tuple__47);
+  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_127_0_0_1); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 585, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__45);
+  __Pyx_GIVEREF(__pyx_tuple__45);
 
-  /* "lxml/html/clean.py":591
+  /* "lxml/html/clean.py":590
  * _avoid_classes = ['nolink']
  * 
  * def autolink(el, link_regexes=_link_regexes,             # <<<<<<<<<<<<<<
  *              avoid_elements=_avoid_elements,
  *              avoid_hosts=_avoid_hosts,
  */
-  __pyx_tuple__48 = PyTuple_Pack(12, __pyx_n_s_el, __pyx_n_s_link_regexes, __pyx_n_s_avoid_elements, __pyx_n_s_avoid_hosts, __pyx_n_s_avoid_classes, __pyx_n_s_class_name, __pyx_n_s_match_class, __pyx_n_s_child, __pyx_n_s_text, __pyx_n_s_tail_children, __pyx_n_s_index, __pyx_n_s_pre_children); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 591, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__48);
-  __Pyx_GIVEREF(__pyx_tuple__48);
-  __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(5, 0, 12, 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_html_clean_py, __pyx_n_s_autolink, 591, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 591, __pyx_L1_error)
+  __pyx_tuple__46 = PyTuple_Pack(12, __pyx_n_s_el, __pyx_n_s_link_regexes, __pyx_n_s_avoid_elements, __pyx_n_s_avoid_hosts, __pyx_n_s_avoid_classes, __pyx_n_s_class_name, __pyx_n_s_match_class, __pyx_n_s_child, __pyx_n_s_text, __pyx_n_s_tail_children, __pyx_n_s_index, __pyx_n_s_pre_children); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 590, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__46);
+  __Pyx_GIVEREF(__pyx_tuple__46);
+  __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(5, 0, 12, 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_html_clean_py, __pyx_n_s_autolink, 590, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 590, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":636
+  /* "lxml/html/clean.py":635
  *             el[:0] = pre_children
  * 
  * def _link_text(text, link_regexes, avoid_hosts, factory):             # <<<<<<<<<<<<<<
  *     leading_text = ''
  *     links = []
  */
-  __pyx_tuple__50 = PyTuple_Pack(19, __pyx_n_s_text, __pyx_n_s_link_regexes, __pyx_n_s_avoid_hosts, __pyx_n_s_factory, __pyx_n_s_leading_text, __pyx_n_s_links, __pyx_n_s_last_pos, __pyx_n_s_best_match, __pyx_n_s_best_pos, __pyx_n_s_regex, __pyx_n_s_regex_pos, __pyx_n_s_match, __pyx_n_s_host, __pyx_n_s_host_regex, __pyx_n_s_link, __pyx_n_s_end, __pyx_n_s_prev_text, __pyx_n_s_anchor, __pyx_n_s_body); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 636, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__50);
-  __Pyx_GIVEREF(__pyx_tuple__50);
-  __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(4, 0, 19, 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_html_clean_py, __pyx_n_s_link_text, 636, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 636, __pyx_L1_error)
+  __pyx_tuple__48 = PyTuple_Pack(19, __pyx_n_s_text, __pyx_n_s_link_regexes, __pyx_n_s_avoid_hosts, __pyx_n_s_factory, __pyx_n_s_leading_text, __pyx_n_s_links, __pyx_n_s_last_pos, __pyx_n_s_best_match, __pyx_n_s_best_pos, __pyx_n_s_regex, __pyx_n_s_regex_pos, __pyx_n_s_match, __pyx_n_s_host, __pyx_n_s_host_regex, __pyx_n_s_link, __pyx_n_s_end, __pyx_n_s_prev_text, __pyx_n_s_anchor, __pyx_n_s_body); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 635, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__48);
+  __Pyx_GIVEREF(__pyx_tuple__48);
+  __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(4, 0, 19, 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_html_clean_py, __pyx_n_s_link_text, 635, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 635, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":694
+  /* "lxml/html/clean.py":693
  *     return leading_text, links
  * 
  * def autolink_html(html, *args, **kw):             # <<<<<<<<<<<<<<
  *     result_type = type(html)
  *     if isinstance(html, basestring):
  */
-  __pyx_tuple__52 = PyTuple_Pack(5, __pyx_n_s_html, __pyx_n_s_args, __pyx_n_s_kw, __pyx_n_s_result_type, __pyx_n_s_doc); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 694, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__52);
-  __Pyx_GIVEREF(__pyx_tuple__52);
-  __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_autolink_html, 694, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 694, __pyx_L1_error)
+  __pyx_tuple__50 = PyTuple_Pack(5, __pyx_n_s_html, __pyx_n_s_args, __pyx_n_s_kw, __pyx_n_s_result_type, __pyx_n_s_doc); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 693, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__50);
+  __Pyx_GIVEREF(__pyx_tuple__50);
+  __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_autolink_html, 693, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 693, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":712
+  /* "lxml/html/clean.py":711
  * _avoid_word_break_classes = ['nobreak']
  * 
  * def word_break(el, max_width=40,             # <<<<<<<<<<<<<<
  *                avoid_elements=_avoid_word_break_elements,
  *                avoid_classes=_avoid_word_break_classes,
  */
-  __pyx_tuple__54 = PyTuple_Pack(9, __pyx_n_s_el, __pyx_n_s_max_width, __pyx_n_s_avoid_elements, __pyx_n_s_avoid_classes, __pyx_n_s_break_character, __pyx_n_s_class_name, __pyx_n_s_dont_break, __pyx_n_s_avoid, __pyx_n_s_child); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 712, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__54);
-  __Pyx_GIVEREF(__pyx_tuple__54);
-  __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(5, 0, 9, 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_html_clean_py, __pyx_n_s_word_break, 712, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(0, 712, __pyx_L1_error)
+  __pyx_tuple__52 = PyTuple_Pack(9, __pyx_n_s_el, __pyx_n_s_max_width, __pyx_n_s_avoid_elements, __pyx_n_s_avoid_classes, __pyx_n_s_break_character, __pyx_n_s_class_name, __pyx_n_s_dont_break, __pyx_n_s_avoid, __pyx_n_s_child); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 711, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__52);
+  __Pyx_GIVEREF(__pyx_tuple__52);
+  __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(5, 0, 9, 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_html_clean_py, __pyx_n_s_word_break, 711, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 711, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":715
+  /* "lxml/html/clean.py":714
  *                avoid_elements=_avoid_word_break_elements,
  *                avoid_classes=_avoid_word_break_classes,
  *                break_character=unichr(0x200b)):             # <<<<<<<<<<<<<<
  *     """
  *     Breaks any long words found in the body of the text (not attributes).
  */
-  __pyx_tuple__56 = PyTuple_Pack(1, __pyx_int_8203); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(0, 715, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__56);
-  __Pyx_GIVEREF(__pyx_tuple__56);
+  __pyx_tuple__54 = PyTuple_Pack(1, __pyx_int_8203); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 714, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__54);
+  __Pyx_GIVEREF(__pyx_tuple__54);
 
-  /* "lxml/html/clean.py":753
+  /* "lxml/html/clean.py":752
  *             child.tail = _break_text(child.tail, max_width, break_character)
  * 
  * def word_break_html(html, *args, **kw):             # <<<<<<<<<<<<<<
  *     result_type = type(html)
  *     doc = fromstring(html)
  */
-  __pyx_tuple__57 = PyTuple_Pack(5, __pyx_n_s_html, __pyx_n_s_args, __pyx_n_s_kw, __pyx_n_s_result_type, __pyx_n_s_doc); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 753, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__57);
-  __Pyx_GIVEREF(__pyx_tuple__57);
-  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_word_break_html, 753, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(0, 753, __pyx_L1_error)
+  __pyx_tuple__55 = PyTuple_Pack(5, __pyx_n_s_html, __pyx_n_s_args, __pyx_n_s_kw, __pyx_n_s_result_type, __pyx_n_s_doc); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 752, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__55);
+  __Pyx_GIVEREF(__pyx_tuple__55);
+  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_word_break_html, 752, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 752, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":759
+  /* "lxml/html/clean.py":758
  *     return _transform_result(result_type, doc)
  * 
  * def _break_text(text, max_width, break_character):             # <<<<<<<<<<<<<<
  *     words = text.split()
  *     for word in words:
  */
-  __pyx_tuple__59 = PyTuple_Pack(6, __pyx_n_s_text, __pyx_n_s_max_width, __pyx_n_s_break_character, __pyx_n_s_words, __pyx_n_s_word, __pyx_n_s_replacement); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 759, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__59);
-  __Pyx_GIVEREF(__pyx_tuple__59);
-  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_break_text, 759, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 759, __pyx_L1_error)
+  __pyx_tuple__57 = PyTuple_Pack(6, __pyx_n_s_text, __pyx_n_s_max_width, __pyx_n_s_break_character, __pyx_n_s_words, __pyx_n_s_word, __pyx_n_s_replacement); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 758, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__57);
+  __Pyx_GIVEREF(__pyx_tuple__57);
+  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_break_text, 758, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(0, 758, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":769
+  /* "lxml/html/clean.py":768
  * _break_prefer_re = re.compile(r'[^a-z]', re.I)
  * 
  * def _insert_break(word, width, break_character):             # <<<<<<<<<<<<<<
  *     orig_word = word
  *     result = ''
  */
-  __pyx_tuple__61 = PyTuple_Pack(8, __pyx_n_s_word, __pyx_n_s_width, __pyx_n_s_break_character, __pyx_n_s_orig_word, __pyx_n_s_result, __pyx_n_s_start, __pyx_n_s_breaks, __pyx_n_s_last_break); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 769, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__61);
-  __Pyx_GIVEREF(__pyx_tuple__61);
-  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_insert_break, 769, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(0, 769, __pyx_L1_error)
+  __pyx_tuple__59 = PyTuple_Pack(8, __pyx_n_s_word, __pyx_n_s_width, __pyx_n_s_break_character, __pyx_n_s_orig_word, __pyx_n_s_result, __pyx_n_s_start, __pyx_n_s_breaks, __pyx_n_s_last_break); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 768, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__59);
+  __Pyx_GIVEREF(__pyx_tuple__59);
+  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_lxml_html_clean_py, __pyx_n_s_insert_break, 768, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 768, __pyx_L1_error)
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -14737,9 +14670,14 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
 }
 
 static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
+  /* AssertionsEnabled.init */
+  __Pyx_init_assertions_enabled();
+
+if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)
+
   __pyx_umethod_PyDict_Type_get.type = (PyObject*)&PyDict_Type;
   __pyx_umethod_PySet_Type_update.type = (PyObject*)&PySet_Type;
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error)
@@ -14791,7 +14729,7 @@ static int __Pyx_modinit_type_init_code(void) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
   /*--- Type init code ---*/
-  if (PyType_Ready(&__pyx_type_4lxml_4html_5clean___pyx_scope_struct__kill_conditional_comments) < 0) __PYX_ERR(0, 501, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_4lxml_4html_5clean___pyx_scope_struct__kill_conditional_comments) < 0) __PYX_ERR(0, 500, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
   __pyx_type_4lxml_4html_5clean___pyx_scope_struct__kill_conditional_comments.tp_print = 0;
   #endif
@@ -15007,7 +14945,7 @@ if (!__Pyx_RefNanny) {
   Py_INCREF(__pyx_b);
   __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
   Py_INCREF(__pyx_cython_runtime);
-  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Initialize various global constants etc. ---*/
   if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
@@ -15840,7 +15778,7 @@ if (!__Pyx_RefNanny) {
  *     r'</?[a-zA-Z]+|\son[a-zA-Z]+\s*=',
  *     *((re.ASCII,) if sys.version_info[0] >= 3 else ())).search
  */
-  __pyx_t_7 = PyNumber_Add(__pyx_tuple__18, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __pyx_t_7 = PyNumber_Add(__pyx_tuple__16, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 72, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 72, __pyx_L1_error)
@@ -16021,7 +15959,7 @@ if (!__Pyx_RefNanny) {
  *     safe_image_urls = 0
  *     for image_type in _find_image_dataurls(s):
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_1_has_javascript_scheme, 0, __pyx_n_s_has_javascript_scheme, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 86, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_1_has_javascript_scheme, 0, __pyx_n_s_has_javascript_scheme, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 86, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_has_javascript_scheme, __pyx_t_7) < 0) __PYX_ERR(0, 86, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -16038,7 +15976,7 @@ if (!__Pyx_RefNanny) {
   __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 94, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 94, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 94, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_sub); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 94, __pyx_L1_error)
@@ -16116,7 +16054,7 @@ if (!__Pyx_RefNanny) {
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_XPath); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 100, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_find_styled_elements, __pyx_t_5) < 0) __PYX_ERR(0, 100, __pyx_L1_error)
@@ -16160,7 +16098,7 @@ if (!__Pyx_RefNanny) {
  *     ("descendant-or-self::a  [normalize-space(@href) and substring(normalize-space(@href),1,1) != '#'] |"
  *      "descendant-or-self::x:a[normalize-space(@href) and substring(normalize-space(@href),1,1) != '#']"),
  */
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__23, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 103, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__21, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -16174,9 +16112,9 @@ if (!__Pyx_RefNanny) {
  *     """
  *     Instances cleans the document of each of the possible offending
  */
-  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__24); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 109, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__22); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_tuple__24, __pyx_n_s_Cleaner, __pyx_n_s_Cleaner, (PyObject *) NULL, __pyx_n_s_lxml_html_clean, __pyx_kp_s_Instances_cleans_the_document_o); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 109, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_tuple__22, __pyx_n_s_Cleaner, __pyx_n_s_Cleaner, (PyObject *) NULL, __pyx_n_s_lxml_html_clean, __pyx_kp_s_Instances_cleans_the_document_o); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
 
   /* "lxml/html/clean.py":204
@@ -16395,7 +16333,7 @@ if (!__Pyx_RefNanny) {
  *         not_an_attribute = object()
  *         for name, value in kw.items():
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_1__init__, 0, __pyx_n_s_Cleaner___init, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 227, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_1__init__, 0, __pyx_n_s_Cleaner___init, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_init, __pyx_t_9) < 0) __PYX_ERR(0, 227, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -16443,7 +16381,7 @@ if (!__Pyx_RefNanny) {
  *         """
  *         Cleans the document.
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_3__call__, 0, __pyx_n_s_Cleaner___call, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 267, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_3__call__, 0, __pyx_n_s_Cleaner___call, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 267, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_call, __pyx_t_9) < 0) __PYX_ERR(0, 267, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -16455,7 +16393,7 @@ if (!__Pyx_RefNanny) {
  *         """
  *         Override to suppress rel="nofollow" on some anchors.
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_5allow_follow, 0, __pyx_n_s_Cleaner_allow_follow, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 452, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_5allow_follow, 0, __pyx_n_s_Cleaner_allow_follow, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 452, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_allow_follow, __pyx_t_9) < 0) __PYX_ERR(0, 452, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -16467,7 +16405,7 @@ if (!__Pyx_RefNanny) {
  *         """
  *         Decide whether an element is configured to be accepted or rejected.
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_7allow_element, 0, __pyx_n_s_Cleaner_allow_element, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 458, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_7allow_element, 0, __pyx_n_s_Cleaner_allow_element, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 458, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_allow_element, __pyx_t_9) < 0) __PYX_ERR(0, 458, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -16479,63 +16417,63 @@ if (!__Pyx_RefNanny) {
  *         """
  *         Decide whether a URL that was found in an element's attributes or text
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_9allow_embedded_url, 0, __pyx_n_s_Cleaner_allow_embedded_url, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 482, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_9allow_embedded_url, 0, __pyx_n_s_Cleaner_allow_embedded_url, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 482, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_allow_embedded_url, __pyx_t_9) < 0) __PYX_ERR(0, 482, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":501
+  /* "lxml/html/clean.py":500
  *         return False
  * 
  *     def kill_conditional_comments(self, doc):             # <<<<<<<<<<<<<<
  *         """
  *         IE conditional comments basically embed HTML that the parser
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_11kill_conditional_comments, 0, __pyx_n_s_Cleaner_kill_conditional_comment_2, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 501, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_11kill_conditional_comments, 0, __pyx_n_s_Cleaner_kill_conditional_comment_2, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 500, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_kill_conditional_comments, __pyx_t_9) < 0) __PYX_ERR(0, 501, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_kill_conditional_comments, __pyx_t_9) < 0) __PYX_ERR(0, 500, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":512
+  /* "lxml/html/clean.py":511
  *             etree.Comment)
  * 
  *     def _kill_elements(self, doc, condition, iterate=None):             # <<<<<<<<<<<<<<
  *         bad = []
  *         for el in doc.iter(iterate):
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_13_kill_elements, 0, __pyx_n_s_Cleaner__kill_elements, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 512, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_13_kill_elements, 0, __pyx_n_s_Cleaner__kill_elements, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 511, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_tuple__39);
-  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_kill_elements, __pyx_t_9) < 0) __PYX_ERR(0, 512, __pyx_L1_error)
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_tuple__37);
+  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_kill_elements, __pyx_t_9) < 0) __PYX_ERR(0, 511, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":520
+  /* "lxml/html/clean.py":519
  *             el.drop_tree()
  * 
  *     def _remove_javascript_link(self, link):             # <<<<<<<<<<<<<<
  *         # links like "j a v a s c r i p t:" might be interpreted in IE
  *         new = _substitute_whitespace('', unquote_plus(link))
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_15_remove_javascript_link, 0, __pyx_n_s_Cleaner__remove_javascript_link, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 520, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_15_remove_javascript_link, 0, __pyx_n_s_Cleaner__remove_javascript_link, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 519, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_remove_javascript_link, __pyx_t_9) < 0) __PYX_ERR(0, 520, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_remove_javascript_link, __pyx_t_9) < 0) __PYX_ERR(0, 519, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":528
+  /* "lxml/html/clean.py":527
  *         return link
  * 
  *     _substitute_comments = re.compile(r'/\*.*?\*[inserted by cython to avoid comment closer]/', re.S).sub             # <<<<<<<<<<<<<<
  * 
  *     def _has_sneaky_javascript(self, style):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_re); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 528, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_re); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_compile); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 528, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_compile); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_re); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 528, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_re); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_S); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 528, __pyx_L1_error)
+  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_S); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = NULL;
@@ -16552,8 +16490,8 @@ if (!__Pyx_RefNanny) {
   }
   #if CYTHON_FAST_PYCALL
   if (PyFunction_Check(__pyx_t_8)) {
-    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_s__42, __pyx_t_11};
-    __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 528, __pyx_L1_error)
+    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_s__40, __pyx_t_11};
+    __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 527, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
@@ -16561,58 +16499,58 @@ if (!__Pyx_RefNanny) {
   #endif
   #if CYTHON_FAST_PYCCALL
   if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
-    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_s__42, __pyx_t_11};
-    __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 528, __pyx_L1_error)
+    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_s__40, __pyx_t_11};
+    __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 527, __pyx_L1_error)
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
   } else
   #endif
   {
-    __pyx_t_12 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 528, __pyx_L1_error)
+    __pyx_t_12 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 527, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_12);
     if (__pyx_t_1) {
       __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_1); __pyx_t_1 = NULL;
     }
-    __Pyx_INCREF(__pyx_kp_s__42);
-    __Pyx_GIVEREF(__pyx_kp_s__42);
-    PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_6, __pyx_kp_s__42);
+    __Pyx_INCREF(__pyx_kp_s__40);
+    __Pyx_GIVEREF(__pyx_kp_s__40);
+    PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_6, __pyx_kp_s__40);
     __Pyx_GIVEREF(__pyx_t_11);
     PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_6, __pyx_t_11);
     __pyx_t_11 = 0;
-    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_12, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 528, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_12, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 527, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
   }
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_sub); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 528, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_sub); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_substitute_comments, __pyx_t_8) < 0) __PYX_ERR(0, 528, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_substitute_comments, __pyx_t_8) < 0) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "lxml/html/clean.py":530
+  /* "lxml/html/clean.py":529
  *     _substitute_comments = re.compile(r'/\*.*?\*[inserted by cython to avoid comment closer]/', re.S).sub
  * 
  *     def _has_sneaky_javascript(self, style):             # <<<<<<<<<<<<<<
  *         """
  *         Depending on the browser, stuff like ``e x p r e s s i o n(...)``
  */
-  __pyx_t_8 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_17_has_sneaky_javascript, 0, __pyx_n_s_Cleaner__has_sneaky_javascript, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 530, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_17_has_sneaky_javascript, 0, __pyx_n_s_Cleaner__has_sneaky_javascript, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 529, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_has_sneaky_javascript, __pyx_t_8) < 0) __PYX_ERR(0, 530, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_has_sneaky_javascript, __pyx_t_8) < 0) __PYX_ERR(0, 529, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "lxml/html/clean.py":559
+  /* "lxml/html/clean.py":558
  *         return False
  * 
  *     def clean_html(self, html):             # <<<<<<<<<<<<<<
  *         result_type = type(html)
  *         if isinstance(html, basestring):
  */
-  __pyx_t_8 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_19clean_html, 0, __pyx_n_s_Cleaner_clean_html, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 559, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7Cleaner_19clean_html, 0, __pyx_n_s_Cleaner_clean_html, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 558, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_clean_html, __pyx_t_8) < 0) __PYX_ERR(0, 559, __pyx_L1_error)
+  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_n_s_clean_html, __pyx_t_8) < 0) __PYX_ERR(0, 558, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
   /* "lxml/html/clean.py":109
@@ -16622,61 +16560,61 @@ if (!__Pyx_RefNanny) {
  *     """
  *     Instances cleans the document of each of the possible offending
  */
-  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_Cleaner, __pyx_tuple__24, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 109, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_Cleaner, __pyx_tuple__22, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_Cleaner, __pyx_t_8) < 0) __PYX_ERR(0, 109, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":568
+  /* "lxml/html/clean.py":567
  *         return _transform_result(result_type, doc)
  * 
  * clean = Cleaner()             # <<<<<<<<<<<<<<
  * clean_html = clean.clean_html
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Cleaner); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 568, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Cleaner); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 567, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 568, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 567, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clean, __pyx_t_5) < 0) __PYX_ERR(0, 568, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clean, __pyx_t_5) < 0) __PYX_ERR(0, 567, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "lxml/html/clean.py":569
+  /* "lxml/html/clean.py":568
  * 
  * clean = Cleaner()
  * clean_html = clean.clean_html             # <<<<<<<<<<<<<<
  * 
  * ############################################################
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_clean); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 569, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_clean); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 568, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_clean_html); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 569, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_clean_html); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 568, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clean_html, __pyx_t_7) < 0) __PYX_ERR(0, 569, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clean_html, __pyx_t_7) < 0) __PYX_ERR(0, 568, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":576
+  /* "lxml/html/clean.py":575
  * 
  * _link_regexes = [
  *     re.compile(r'(?P<body>https?://(?P<host>[a-z0-9._-]+)(?:/[/\-_.,a-z0-9%&?;=~]*)?(?:\([/\-_.,a-z0-9%&?;=~]*\))?)', re.I),             # <<<<<<<<<<<<<<
  *     # This is conservative, but autolinking can be a bit conservative:
  *     re.compile(r'mailto:(?P<body>[a-z0-9._-]+@(?P<host>[a-z0-9_.-]+[a-z]))', re.I),
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 576, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 575, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 576, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 575, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 576, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 575, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_I); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 576, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_I); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 575, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 576, __pyx_L1_error)
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 575, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_kp_s_P_body_https_P_host_a_z0_9);
   __Pyx_GIVEREF(__pyx_kp_s_P_body_https_P_host_a_z0_9);
@@ -16684,29 +16622,29 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_8);
   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_8);
   __pyx_t_8 = 0;
-  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 576, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 575, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":578
+  /* "lxml/html/clean.py":577
  *     re.compile(r'(?P<body>https?://(?P<host>[a-z0-9._-]+)(?:/[/\-_.,a-z0-9%&?;=~]*)?(?:\([/\-_.,a-z0-9%&?;=~]*\))?)', re.I),
  *     # This is conservative, but autolinking can be a bit conservative:
  *     re.compile(r'mailto:(?P<body>[a-z0-9._-]+@(?P<host>[a-z0-9_.-]+[a-z]))', re.I),             # <<<<<<<<<<<<<<
  *     ]
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 578, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 577, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 578, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 577, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 578, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 577, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_I); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 578, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_I); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 577, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 578, __pyx_L1_error)
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 577, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_kp_s_mailto_P_body_a_z0_9___P_host_a);
   __Pyx_GIVEREF(__pyx_kp_s_mailto_P_body_a_z0_9___P_host_a);
@@ -16714,19 +16652,19 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_9);
   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_9);
   __pyx_t_9 = 0;
-  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 578, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 577, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":575
+  /* "lxml/html/clean.py":574
  * ############################################################
  * 
  * _link_regexes = [             # <<<<<<<<<<<<<<
  *     re.compile(r'(?P<body>https?://(?P<host>[a-z0-9._-]+)(?:/[/\-_.,a-z0-9%&?;=~]*)?(?:\([/\-_.,a-z0-9%&?;=~]*\))?)', re.I),
  *     # This is conservative, but autolinking can be a bit conservative:
  */
-  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 575, __pyx_L1_error)
+  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 574, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_8);
   PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);
@@ -16734,17 +16672,17 @@ if (!__Pyx_RefNanny) {
   PyList_SET_ITEM(__pyx_t_7, 1, __pyx_t_9);
   __pyx_t_8 = 0;
   __pyx_t_9 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_link_regexes_2, __pyx_t_7) < 0) __PYX_ERR(0, 575, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_link_regexes_2, __pyx_t_7) < 0) __PYX_ERR(0, 574, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":581
+  /* "lxml/html/clean.py":580
  *     ]
  * 
  * _avoid_elements = ['textarea', 'pre', 'code', 'head', 'select', 'a']             # <<<<<<<<<<<<<<
  * 
  * _avoid_hosts = [
  */
-  __pyx_t_7 = PyList_New(6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 581, __pyx_L1_error)
+  __pyx_t_7 = PyList_New(6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 580, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_n_s_textarea);
   __Pyx_GIVEREF(__pyx_n_s_textarea);
@@ -16764,27 +16702,27 @@ if (!__Pyx_RefNanny) {
   __Pyx_INCREF(__pyx_n_s_a);
   __Pyx_GIVEREF(__pyx_n_s_a);
   PyList_SET_ITEM(__pyx_t_7, 5, __pyx_n_s_a);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_avoid_elements_2, __pyx_t_7) < 0) __PYX_ERR(0, 581, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_avoid_elements_2, __pyx_t_7) < 0) __PYX_ERR(0, 580, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":584
+  /* "lxml/html/clean.py":583
  * 
  * _avoid_hosts = [
  *     re.compile(r'^localhost', re.I),             # <<<<<<<<<<<<<<
  *     re.compile(r'\bexample\.(?:com|org|net)$', re.I),
  *     re.compile(r'^127\.0\.0\.1$'),
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 584, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 584, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 584, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_I); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 584, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_I); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 584, __pyx_L1_error)
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_kp_s_localhost);
   __Pyx_GIVEREF(__pyx_kp_s_localhost);
@@ -16792,29 +16730,29 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_8);
   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_8);
   __pyx_t_8 = 0;
-  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 584, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":585
+  /* "lxml/html/clean.py":584
  * _avoid_hosts = [
  *     re.compile(r'^localhost', re.I),
  *     re.compile(r'\bexample\.(?:com|org|net)$', re.I),             # <<<<<<<<<<<<<<
  *     re.compile(r'^127\.0\.0\.1$'),
  *     ]
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 585, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 585, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 585, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_I); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 585, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_I); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 585, __pyx_L1_error)
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_kp_s_bexample_com_org_net);
   __Pyx_GIVEREF(__pyx_kp_s_bexample_com_org_net);
@@ -16822,35 +16760,35 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_5);
   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 585, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":586
+  /* "lxml/html/clean.py":585
  *     re.compile(r'^localhost', re.I),
  *     re.compile(r'\bexample\.(?:com|org|net)$', re.I),
  *     re.compile(r'^127\.0\.0\.1$'),             # <<<<<<<<<<<<<<
  *     ]
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 586, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 586, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__47, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 586, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":583
+  /* "lxml/html/clean.py":582
  * _avoid_elements = ['textarea', 'pre', 'code', 'head', 'select', 'a']
  * 
  * _avoid_hosts = [             # <<<<<<<<<<<<<<
  *     re.compile(r'^localhost', re.I),
  *     re.compile(r'\bexample\.(?:com|org|net)$', re.I),
  */
-  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 583, __pyx_L1_error)
+  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 582, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_GIVEREF(__pyx_t_8);
   PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
@@ -16861,132 +16799,132 @@ if (!__Pyx_RefNanny) {
   __pyx_t_8 = 0;
   __pyx_t_5 = 0;
   __pyx_t_7 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_avoid_hosts_2, __pyx_t_9) < 0) __PYX_ERR(0, 583, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_avoid_hosts_2, __pyx_t_9) < 0) __PYX_ERR(0, 582, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":589
+  /* "lxml/html/clean.py":588
  *     ]
  * 
  * _avoid_classes = ['nolink']             # <<<<<<<<<<<<<<
  * 
  * def autolink(el, link_regexes=_link_regexes,
  */
-  __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 589, __pyx_L1_error)
+  __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 588, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_INCREF(__pyx_n_s_nolink);
   __Pyx_GIVEREF(__pyx_n_s_nolink);
   PyList_SET_ITEM(__pyx_t_9, 0, __pyx_n_s_nolink);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_avoid_classes_2, __pyx_t_9) < 0) __PYX_ERR(0, 589, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_avoid_classes_2, __pyx_t_9) < 0) __PYX_ERR(0, 588, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":591
+  /* "lxml/html/clean.py":590
  * _avoid_classes = ['nolink']
  * 
  * def autolink(el, link_regexes=_link_regexes,             # <<<<<<<<<<<<<<
  *              avoid_elements=_avoid_elements,
  *              avoid_hosts=_avoid_hosts,
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_3autolink, 0, __pyx_n_s_autolink, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 591, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_3autolink, 0, __pyx_n_s_autolink, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_9, sizeof(__pyx_defaults), 4)) __PYX_ERR(0, 591, __pyx_L1_error)
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_link_regexes_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 591, __pyx_L1_error)
+  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_9, sizeof(__pyx_defaults), 4)) __PYX_ERR(0, 590, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_link_regexes_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_9)->__pyx_arg_link_regexes = __pyx_t_7;
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":592
+  /* "lxml/html/clean.py":591
  * 
  * def autolink(el, link_regexes=_link_regexes,
  *              avoid_elements=_avoid_elements,             # <<<<<<<<<<<<<<
  *              avoid_hosts=_avoid_hosts,
  *              avoid_classes=_avoid_classes):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_avoid_elements_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 592, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_avoid_elements_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 591, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_9)->__pyx_arg_avoid_elements = __pyx_t_7;
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":593
+  /* "lxml/html/clean.py":592
  * def autolink(el, link_regexes=_link_regexes,
  *              avoid_elements=_avoid_elements,
  *              avoid_hosts=_avoid_hosts,             # <<<<<<<<<<<<<<
  *              avoid_classes=_avoid_classes):
  *     """
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_avoid_hosts_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 593, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_avoid_hosts_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 592, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_9)->__pyx_arg_avoid_hosts = __pyx_t_7;
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":594
+  /* "lxml/html/clean.py":593
  *              avoid_elements=_avoid_elements,
  *              avoid_hosts=_avoid_hosts,
  *              avoid_classes=_avoid_classes):             # <<<<<<<<<<<<<<
  *     """
  *     Turn any URLs into links.
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_avoid_classes_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 594, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_avoid_classes_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 593, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_9)->__pyx_arg_avoid_classes = __pyx_t_7;
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
   __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_9, __pyx_pf_4lxml_4html_5clean_16__defaults__);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_autolink, __pyx_t_9) < 0) __PYX_ERR(0, 591, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_autolink, __pyx_t_9) < 0) __PYX_ERR(0, 590, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":636
+  /* "lxml/html/clean.py":635
  *             el[:0] = pre_children
  * 
  * def _link_text(text, link_regexes, avoid_hosts, factory):             # <<<<<<<<<<<<<<
  *     leading_text = ''
  *     links = []
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_5_link_text, 0, __pyx_n_s_link_text, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 636, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_5_link_text, 0, __pyx_n_s_link_text, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 635, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_link_text, __pyx_t_9) < 0) __PYX_ERR(0, 636, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_link_text, __pyx_t_9) < 0) __PYX_ERR(0, 635, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":694
+  /* "lxml/html/clean.py":693
  *     return leading_text, links
  * 
  * def autolink_html(html, *args, **kw):             # <<<<<<<<<<<<<<
  *     result_type = type(html)
  *     if isinstance(html, basestring):
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7autolink_html, 0, __pyx_n_s_autolink_html, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 694, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_7autolink_html, 0, __pyx_n_s_autolink_html, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 693, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_autolink_html, __pyx_t_9) < 0) __PYX_ERR(0, 694, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_autolink_html, __pyx_t_9) < 0) __PYX_ERR(0, 693, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":703
+  /* "lxml/html/clean.py":702
  *     return _transform_result(result_type, doc)
  * 
  * autolink_html.__doc__ = autolink.__doc__             # <<<<<<<<<<<<<<
  * 
  * ############################################################
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_autolink); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 703, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_autolink); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 702, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_doc_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 703, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_doc_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 702, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_autolink_html); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 703, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_autolink_html); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 702, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (__Pyx_PyObject_SetAttrStr(__pyx_t_9, __pyx_n_s_doc_2, __pyx_t_7) < 0) __PYX_ERR(0, 703, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(__pyx_t_9, __pyx_n_s_doc_2, __pyx_t_7) < 0) __PYX_ERR(0, 702, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":709
+  /* "lxml/html/clean.py":708
  * ############################################################
  * 
  * _avoid_word_break_elements = ['pre', 'textarea', 'code']             # <<<<<<<<<<<<<<
  * _avoid_word_break_classes = ['nobreak']
  * 
  */
-  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 709, __pyx_L1_error)
+  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 708, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_INCREF(__pyx_n_s_pre);
   __Pyx_GIVEREF(__pyx_n_s_pre);
@@ -16997,122 +16935,122 @@ if (!__Pyx_RefNanny) {
   __Pyx_INCREF(__pyx_n_s_code);
   __Pyx_GIVEREF(__pyx_n_s_code);
   PyList_SET_ITEM(__pyx_t_9, 2, __pyx_n_s_code);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_avoid_word_break_elements, __pyx_t_9) < 0) __PYX_ERR(0, 709, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_avoid_word_break_elements, __pyx_t_9) < 0) __PYX_ERR(0, 708, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":710
+  /* "lxml/html/clean.py":709
  * 
  * _avoid_word_break_elements = ['pre', 'textarea', 'code']
  * _avoid_word_break_classes = ['nobreak']             # <<<<<<<<<<<<<<
  * 
  * def word_break(el, max_width=40,
  */
-  __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 710, __pyx_L1_error)
+  __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 709, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_INCREF(__pyx_n_s_nobreak);
   __Pyx_GIVEREF(__pyx_n_s_nobreak);
   PyList_SET_ITEM(__pyx_t_9, 0, __pyx_n_s_nobreak);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_avoid_word_break_classes, __pyx_t_9) < 0) __PYX_ERR(0, 710, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_avoid_word_break_classes, __pyx_t_9) < 0) __PYX_ERR(0, 709, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":712
+  /* "lxml/html/clean.py":711
  * _avoid_word_break_classes = ['nobreak']
  * 
  * def word_break(el, max_width=40,             # <<<<<<<<<<<<<<
  *                avoid_elements=_avoid_word_break_elements,
  *                avoid_classes=_avoid_word_break_classes,
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_9word_break, 0, __pyx_n_s_word_break, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__55)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 712, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_9word_break, 0, __pyx_n_s_word_break, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 711, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_9, sizeof(__pyx_defaults1), 3)) __PYX_ERR(0, 712, __pyx_L1_error)
+  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_9, sizeof(__pyx_defaults1), 3)) __PYX_ERR(0, 711, __pyx_L1_error)
 
-  /* "lxml/html/clean.py":713
+  /* "lxml/html/clean.py":712
  * 
  * def word_break(el, max_width=40,
  *                avoid_elements=_avoid_word_break_elements,             # <<<<<<<<<<<<<<
  *                avoid_classes=_avoid_word_break_classes,
  *                break_character=unichr(0x200b)):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_avoid_word_break_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 713, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_avoid_word_break_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 712, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_t_9)->__pyx_arg_avoid_elements = __pyx_t_7;
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":714
+  /* "lxml/html/clean.py":713
  * def word_break(el, max_width=40,
  *                avoid_elements=_avoid_word_break_elements,
  *                avoid_classes=_avoid_word_break_classes,             # <<<<<<<<<<<<<<
  *                break_character=unichr(0x200b)):
  *     """
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_avoid_word_break_classes); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 714, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_avoid_word_break_classes); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 713, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_t_9)->__pyx_arg_avoid_classes = __pyx_t_7;
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":715
+  /* "lxml/html/clean.py":714
  *                avoid_elements=_avoid_word_break_elements,
  *                avoid_classes=_avoid_word_break_classes,
  *                break_character=unichr(0x200b)):             # <<<<<<<<<<<<<<
  *     """
  *     Breaks any long words found in the body of the text (not attributes).
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_unichr); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 715, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_unichr); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 714, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__56, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 715, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__54, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 714, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_t_9)->__pyx_arg_break_character = __pyx_t_5;
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
   __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_9, __pyx_pf_4lxml_4html_5clean_18__defaults__);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_word_break, __pyx_t_9) < 0) __PYX_ERR(0, 712, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_word_break, __pyx_t_9) < 0) __PYX_ERR(0, 711, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":753
+  /* "lxml/html/clean.py":752
  *             child.tail = _break_text(child.tail, max_width, break_character)
  * 
  * def word_break_html(html, *args, **kw):             # <<<<<<<<<<<<<<
  *     result_type = type(html)
  *     doc = fromstring(html)
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_11word_break_html, 0, __pyx_n_s_word_break_html, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__58)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 753, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_11word_break_html, 0, __pyx_n_s_word_break_html, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 752, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_word_break_html, __pyx_t_9) < 0) __PYX_ERR(0, 753, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_word_break_html, __pyx_t_9) < 0) __PYX_ERR(0, 752, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":759
+  /* "lxml/html/clean.py":758
  *     return _transform_result(result_type, doc)
  * 
  * def _break_text(text, max_width, break_character):             # <<<<<<<<<<<<<<
  *     words = text.split()
  *     for word in words:
  */
-  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_13_break_text, 0, __pyx_n_s_break_text, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__60)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 759, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_13_break_text, 0, __pyx_n_s_break_text, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__58)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 758, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_break_text, __pyx_t_9) < 0) __PYX_ERR(0, 759, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_break_text, __pyx_t_9) < 0) __PYX_ERR(0, 758, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-  /* "lxml/html/clean.py":767
+  /* "lxml/html/clean.py":766
  *     return text
  * 
  * _break_prefer_re = re.compile(r'[^a-z]', re.I)             # <<<<<<<<<<<<<<
  * 
  * def _insert_break(word, width, break_character):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_re); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 767, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_re); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 766, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_compile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 767, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_compile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 766, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_re); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 767, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_re); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 766, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_I); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 767, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_I); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 766, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 767, __pyx_L1_error)
+  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 766, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_INCREF(__pyx_kp_s_a_z);
   __Pyx_GIVEREF(__pyx_kp_s_a_z);
@@ -17120,23 +17058,23 @@ if (!__Pyx_RefNanny) {
   __Pyx_GIVEREF(__pyx_t_7);
   PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
   __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 767, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 766, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_break_prefer_re, __pyx_t_7) < 0) __PYX_ERR(0, 767, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_break_prefer_re, __pyx_t_7) < 0) __PYX_ERR(0, 766, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "lxml/html/clean.py":769
+  /* "lxml/html/clean.py":768
  * _break_prefer_re = re.compile(r'[^a-z]', re.I)
  * 
  * def _insert_break(word, width, break_character):             # <<<<<<<<<<<<<<
  *     orig_word = word
  *     result = ''
  */
-  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_15_insert_break, 0, __pyx_n_s_insert_break, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 769, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_4lxml_4html_5clean_15_insert_break, 0, __pyx_n_s_insert_break, NULL, __pyx_n_s_lxml_html_clean, __pyx_d, ((PyObject *)__pyx_codeobj__60)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 768, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_insert_break, __pyx_t_7) < 0) __PYX_ERR(0, 769, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_insert_break, __pyx_t_7) < 0) __PYX_ERR(0, 768, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "lxml/html/clean.py":1
@@ -17151,7 +17089,7 @@ if (!__Pyx_RefNanny) {
 
   /*--- Wrapped vars code ---*/
 
-  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error)
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -17190,16 +17128,17 @@ static CYTHON_SMALL_CODE void __Pyx_CleanupGlobals(void) {
   Py_CLEAR(__pyx_tuple__8);
   Py_CLEAR(__pyx_tuple__9);
   Py_CLEAR(__pyx_tuple__11);
-  Py_CLEAR(__pyx_tuple__13);
-  Py_CLEAR(__pyx_slice__14);
-  Py_CLEAR(__pyx_slice__17);
-  Py_CLEAR(__pyx_tuple__18);
+  Py_CLEAR(__pyx_slice__12);
+  Py_CLEAR(__pyx_slice__15);
+  Py_CLEAR(__pyx_tuple__16);
+  Py_CLEAR(__pyx_tuple__17);
+  Py_CLEAR(__pyx_codeobj__18);
   Py_CLEAR(__pyx_tuple__19);
-  Py_CLEAR(__pyx_codeobj__20);
+  Py_CLEAR(__pyx_tuple__20);
   Py_CLEAR(__pyx_tuple__21);
   Py_CLEAR(__pyx_tuple__22);
   Py_CLEAR(__pyx_tuple__23);
-  Py_CLEAR(__pyx_tuple__24);
+  Py_CLEAR(__pyx_codeobj__24);
   Py_CLEAR(__pyx_tuple__25);
   Py_CLEAR(__pyx_codeobj__26);
   Py_CLEAR(__pyx_tuple__27);
@@ -17213,15 +17152,15 @@ static CYTHON_SMALL_CODE void __Pyx_CleanupGlobals(void) {
   Py_CLEAR(__pyx_tuple__35);
   Py_CLEAR(__pyx_codeobj__36);
   Py_CLEAR(__pyx_tuple__37);
-  Py_CLEAR(__pyx_codeobj__38);
-  Py_CLEAR(__pyx_tuple__39);
-  Py_CLEAR(__pyx_tuple__40);
-  Py_CLEAR(__pyx_codeobj__41);
+  Py_CLEAR(__pyx_tuple__38);
+  Py_CLEAR(__pyx_codeobj__39);
+  Py_CLEAR(__pyx_tuple__41);
+  Py_CLEAR(__pyx_codeobj__42);
   Py_CLEAR(__pyx_tuple__43);
   Py_CLEAR(__pyx_codeobj__44);
   Py_CLEAR(__pyx_tuple__45);
-  Py_CLEAR(__pyx_codeobj__46);
-  Py_CLEAR(__pyx_tuple__47);
+  Py_CLEAR(__pyx_tuple__46);
+  Py_CLEAR(__pyx_codeobj__47);
   Py_CLEAR(__pyx_tuple__48);
   Py_CLEAR(__pyx_codeobj__49);
   Py_CLEAR(__pyx_tuple__50);
@@ -17229,14 +17168,12 @@ static CYTHON_SMALL_CODE void __Pyx_CleanupGlobals(void) {
   Py_CLEAR(__pyx_tuple__52);
   Py_CLEAR(__pyx_codeobj__53);
   Py_CLEAR(__pyx_tuple__54);
-  Py_CLEAR(__pyx_codeobj__55);
-  Py_CLEAR(__pyx_tuple__56);
+  Py_CLEAR(__pyx_tuple__55);
+  Py_CLEAR(__pyx_codeobj__56);
   Py_CLEAR(__pyx_tuple__57);
   Py_CLEAR(__pyx_codeobj__58);
   Py_CLEAR(__pyx_tuple__59);
   Py_CLEAR(__pyx_codeobj__60);
-  Py_CLEAR(__pyx_tuple__61);
-  Py_CLEAR(__pyx_codeobj__62);
   /* CodeObjectCache.cleanup */
   if (__pyx_code_cache.entries) {
       __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
@@ -17908,7 +17845,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
         return __Pyx_PyFunction_FastCall(func, NULL, 0);
     }
 #endif
-#ifdef __Pyx_CyFunction_USED
+#if defined(__Pyx_CyFunction_USED) && defined(NDEBUG)
     if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
 #else
     if (likely(PyCFunction_Check(func)))
@@ -18088,10 +18025,8 @@ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
         Py_DECREF(retval);
         __Pyx_RaiseTooManyValuesError(expected);
         return -1;
-    } else {
-        return __Pyx_IterFinish();
     }
-    return 0;
+    return __Pyx_IterFinish();
 }
 
 /* RaiseNoneIterError */
@@ -18489,13 +18424,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     }
     PyErr_SetObject(type, value);
     if (tb) {
-#if CYTHON_COMPILING_IN_PYPY
-        PyObject *tmp_type, *tmp_value, *tmp_tb;
-        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
-        Py_INCREF(tb);
-        PyErr_Restore(tmp_type, tmp_value, tb);
-        Py_XDECREF(tmp_tb);
-#else
+#if CYTHON_FAST_THREAD_STATE
         PyThreadState *tstate = __Pyx_PyThreadState_Current;
         PyObject* tmp_tb = tstate->curexc_traceback;
         if (tb != tmp_tb) {
@@ -18503,6 +18432,12 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             tstate->curexc_traceback = tb;
             Py_XDECREF(tmp_tb);
         }
+#else
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
 #endif
     }
 bad:
@@ -18553,11 +18488,11 @@ static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction*
         if (flag == METH_O) {
             return (*(cfunc->func))(self, arg);
         } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) {
-            if (PY_VERSION_HEX >= 0x030700A0) {
+            #if PY_VERSION_HEX >= 0x030700A0
                 return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1);
-            } else {
+            #else
                 return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
-            }
+            #endif
         } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) {
             return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
         }
@@ -19085,7 +19020,7 @@ static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t
 /* ObjectGetItem */
 #if CYTHON_USE_TYPE_SLOTS
 static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
-    PyObject *runerr;
+    PyObject *runerr = NULL;
     Py_ssize_t key_value;
     PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
     if (unlikely(!(m && m->sq_item))) {
@@ -19652,9 +19587,14 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P
         self = PyTuple_GetItem(args, 0);
         if (unlikely(!self)) {
             Py_DECREF(new_args);
+#if PY_MAJOR_VERSION > 2
             PyErr_Format(PyExc_TypeError,
                          "unbound method %.200S() needs an argument",
                          cyfunc->func_qualname);
+#else
+            PyErr_SetString(PyExc_TypeError,
+                            "unbound method needs an argument");
+#endif
             return NULL;
         }
         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
@@ -19729,7 +19669,10 @@ static PyTypeObject __pyx_CyFunctionType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
@@ -20466,7 +20409,7 @@ bad:
 
 /* CLineInTraceback */
 #ifndef CYTHON_CLINE_IN_TRACEBACK
-static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
+static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_line) {
     PyObject *use_cline;
     PyObject *ptype, *pvalue, *ptraceback;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -20813,7 +20756,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -21009,7 +20952,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
index e6b0543cd65ef3a9429e93498624fe99a1432608..fcd32a10d3fd5548b8abb9dbad7eddebaddfbe67 100644 (file)
@@ -490,11 +490,10 @@ class Cleaner(object):
         """
         if self.whitelist_tags is not None and el.tag not in self.whitelist_tags:
             return False
-        scheme, netloc, path, query, fragment = urlsplit(url)
-        netloc = netloc.lower().split(':', 1)[0]
-        if scheme not in ('http', 'https'):
+        parts = urlsplit(url)
+        if parts.scheme not in ('http', 'https'):
             return False
-        if netloc in self.host_whitelist:
+        if parts.hostname in self.host_whitelist:
             return True
         return False
 
index 6ad74610a9fee753b4df4b5eaf1b668918998fc2..5805b9f80e01e065f583964931e100c3f33f1b20 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 /* BEGIN: Cython Metadata
 {
@@ -32,8 +32,8 @@ END: Cython Metadata */
 #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_30"
-#define CYTHON_HEX_VERSION 0x001D1EF0
+#define CYTHON_ABI "0_29_36"
+#define CYTHON_HEX_VERSION 0x001D24F0
 #define CYTHON_FUTURE_DIVISION 1
 #include <stddef.h>
 #ifndef offsetof
@@ -72,6 +72,7 @@ END: Cython Metadata */
   #define CYTHON_COMPILING_IN_PYPY 1
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #undef CYTHON_USE_TYPE_SLOTS
   #define CYTHON_USE_TYPE_SLOTS 0
   #undef CYTHON_USE_PYTYPE_LOOKUP
@@ -100,21 +101,26 @@ END: Cython Metadata */
   #define CYTHON_FAST_THREAD_STATE 0
   #undef CYTHON_FAST_PYCALL
   #define CYTHON_FAST_PYCALL 0
-  #undef CYTHON_PEP489_MULTI_PHASE_INIT
-  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #if PY_VERSION_HEX < 0x03090000
+    #undef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
   #undef CYTHON_USE_TP_FINALIZE
-  #define CYTHON_USE_TP_FINALIZE 0
+  #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
   #undef CYTHON_USE_DICT_VERSIONS
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
-    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
 #elif defined(PYSTON_VERSION)
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -155,10 +161,56 @@ END: Cython Metadata */
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
     #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
+#elif defined(PY_NOGIL)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #ifndef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE 1
+  #endif
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -178,7 +230,7 @@ END: Cython Metadata */
     #undef CYTHON_USE_PYLONG_INTERNALS
     #define CYTHON_USE_PYLONG_INTERNALS 0
   #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
-    #define CYTHON_USE_PYLONG_INTERNALS 1
+    #define CYTHON_USE_PYLONG_INTERNALS (PY_VERSION_HEX < 0x030C00A5)
   #endif
   #ifndef CYTHON_USE_PYLIST_INTERNALS
     #define CYTHON_USE_PYLIST_INTERNALS 1
@@ -217,7 +269,7 @@ END: Cython Metadata */
     #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
   #endif
   #ifndef CYTHON_USE_DICT_VERSIONS
-    #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+    #define CYTHON_USE_DICT_VERSIONS ((PY_VERSION_HEX >= 0x030600B1) && (PY_VERSION_HEX < 0x030C00A5))
   #endif
   #if PY_VERSION_HEX >= 0x030B00A4
     #undef CYTHON_USE_EXC_INFO_STACK
@@ -340,9 +392,6 @@ END: Cython Metadata */
   #endif
 #endif
 
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
-  #define Py_OptimizeFlag 0
-#endif
 #define __PYX_BUILD_PY_SSIZE_T "n"
 #define CYTHON_FORMAT_SSIZE_T "z"
 #if PY_MAJOR_VERSION < 3
@@ -420,6 +469,11 @@ END: Cython Metadata */
 #endif
   #define __Pyx_DefaultClassType PyType_Type
 #endif
+#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
+#else
+  #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
+#endif
 #ifndef Py_TPFLAGS_CHECKTYPES
   #define Py_TPFLAGS_CHECKTYPES 0
 #endif
@@ -527,11 +581,11 @@ 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)))
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_READY(op)       (0)
   #else
-  #define __Pyx_PyUnicode_READY(op)       (0)
+    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+                                                0 : _PyUnicode_Ready((PyObject *)(op)))
   #endif
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
@@ -540,14 +594,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
-  #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
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #else
-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
+    #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
   #endif
 #else
   #define CYTHON_PEP393_ENABLED 0
@@ -1125,18 +1179,18 @@ static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UIN
 
 /* GetModuleGlobalName.proto */
 #if CYTHON_USE_DICT_VERSIONS
-#define __Pyx_GetModuleGlobalName(var, name)  {\
+#define __Pyx_GetModuleGlobalName(var, name)  do {\
     static PY_UINT64_T __pyx_dict_version = 0;\
     static PyObject *__pyx_dict_cached_value = NULL;\
     (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
         (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
         __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
-#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
+} while(0)
+#define __Pyx_GetModuleGlobalNameUncached(var, name)  do {\
     PY_UINT64_T __pyx_dict_version;\
     PyObject *__pyx_dict_cached_value;\
     (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
+} while(0)
 static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
 #else
 #define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
@@ -1299,6 +1353,23 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
         PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
         int has_cstart, int has_cstop, int wraparound);
 
+/* AssertionsEnabled.proto */
+#define __Pyx_init_assertions_enabled()
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
+  #define __pyx_assertions_enabled() (1)
+#elif PY_VERSION_HEX < 0x03080000  ||  CYTHON_COMPILING_IN_PYPY  ||  defined(Py_LIMITED_API)
+  #define __pyx_assertions_enabled() (!Py_OptimizeFlag)
+#elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030900A6
+  static int __pyx_assertions_enabled_flag;
+  #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag)
+  #undef __Pyx_init_assertions_enabled
+  static void __Pyx_init_assertions_enabled(void) {
+    __pyx_assertions_enabled_flag = ! _PyInterpreterState_GetConfig(__Pyx_PyThreadState_Current->interp)->optimization_level;
+  }
+#else
+  #define __pyx_assertions_enabled() (!Py_OptimizeFlag)
+#endif
+
 /* ListAppend.proto */
 #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
 static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
@@ -4209,7 +4280,7 @@ static PyObject *__pyx_pf_4lxml_4html_4diff_8copy_annotations(CYTHON_UNUSED PyOb
  *         dest_tok.annotation = src_tok.annotation
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __pyx_t_1 = PyObject_Length(__pyx_v_src); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 100, __pyx_L1_error)
     __pyx_t_2 = PyObject_Length(__pyx_v_dest); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 100, __pyx_L1_error)
     if (unlikely(!((__pyx_t_1 == __pyx_t_2) != 0))) {
@@ -9998,7 +10069,7 @@ static PyObject *__pyx_pf_4lxml_4html_4diff_34locate_unbalanced_start(CYTHON_UNU
  *         if name == finding_name:
  */
     #ifndef CYTHON_WITHOUT_ASSERTIONS
-    if (unlikely(!Py_OptimizeFlag)) {
+    if (unlikely(__pyx_assertions_enabled())) {
       __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_n_u_del_3, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 406, __pyx_L1_error)
       if (unlikely(!__pyx_t_1)) {
 
@@ -13421,7 +13492,7 @@ static PyObject *__pyx_pf_4lxml_4html_4diff_46fixup_chunks(CYTHON_UNUSED PyObjec
  */
       /*else*/ {
         #ifndef CYTHON_WITHOUT_ASSERTIONS
-        if (unlikely(!Py_OptimizeFlag)) {
+        if (unlikely(__pyx_assertions_enabled())) {
           __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_cur_word); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 623, __pyx_L1_error)
           if (unlikely(!__pyx_t_6)) {
 
@@ -13539,7 +13610,7 @@ static PyObject *__pyx_pf_4lxml_4html_4diff_46fixup_chunks(CYTHON_UNUSED PyObjec
  */
     /*else*/ {
       #ifndef CYTHON_WITHOUT_ASSERTIONS
-      if (unlikely(!Py_OptimizeFlag)) {
+      if (unlikely(__pyx_assertions_enabled())) {
         if (unlikely(!0)) {
           PyErr_SetNone(PyExc_AssertionError);
           __PYX_ERR(0, 628, __pyx_L1_error)
@@ -15851,7 +15922,7 @@ static PyObject *__pyx_pf_4lxml_4html_4diff_65serialize_html_fragment(CYTHON_UNU
  *     html = etree.tostring(el, method="html", encoding=_unicode)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
+  if (unlikely(__pyx_assertions_enabled())) {
     __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_basestring); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_2 = PyObject_IsInstance(__pyx_v_el, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 766, __pyx_L1_error)
@@ -17156,7 +17227,7 @@ static PyObject *__pyx_pf_4lxml_4html_4diff_71_move_el_inside_block(CYTHON_UNUSE
  *             _move_el_inside_block(child, tag)
  *             if child.tail:
  */
-      goto __pyx_L9;
+      goto __pyx_L10;
     }
 
     /* "lxml/html/diff.py":822
@@ -17255,7 +17326,7 @@ static PyObject *__pyx_pf_4lxml_4html_4diff_71_move_el_inside_block(CYTHON_UNUSE
  */
       __pyx_t_11 = __Pyx_PyObject_Append(__pyx_v_child_tag, __pyx_v_child); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 824, __pyx_L1_error)
     }
-    __pyx_L9:;
+    __pyx_L10:;
 
     /* "lxml/html/diff.py":813
  *         el[:] = [children_tag]
@@ -18349,7 +18420,7 @@ static PyTypeObject __pyx_type_4lxml_4html_4diff___pyx_scope_struct__markup_seri
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -18482,7 +18553,7 @@ static PyTypeObject __pyx_type_4lxml_4html_4diff___pyx_scope_struct_1_expand_tok
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -18627,7 +18698,7 @@ static PyTypeObject __pyx_type_4lxml_4html_4diff___pyx_scope_struct_2_flatten_el
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -19700,8 +19771,13 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
 }
 
 static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
+  /* AssertionsEnabled.init */
+  __Pyx_init_assertions_enabled();
+
+if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)
+
   __pyx_umethod_PyList_Type_pop.type = (PyObject*)&PyList_Type;
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error)
@@ -19981,7 +20057,7 @@ if (!__Pyx_RefNanny) {
   Py_INCREF(__pyx_b);
   __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
   Py_INCREF(__pyx_cython_runtime);
-  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Initialize various global constants etc. ---*/
   if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
@@ -21460,7 +21536,7 @@ if (!__Pyx_RefNanny) {
 
   /*--- Wrapped vars code ---*/
 
-  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error)
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -22271,10 +22347,8 @@ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
         Py_DECREF(retval);
         __Pyx_RaiseTooManyValuesError(expected);
         return -1;
-    } else {
-        return __Pyx_IterFinish();
     }
-    return 0;
+    return __Pyx_IterFinish();
 }
 
 /* GetItemInt */
@@ -22431,7 +22505,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
         return __Pyx_PyFunction_FastCall(func, NULL, 0);
     }
 #endif
-#ifdef __Pyx_CyFunction_USED
+#if defined(__Pyx_CyFunction_USED) && defined(NDEBUG)
     if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
 #else
     if (likely(PyCFunction_Check(func)))
@@ -23369,13 +23443,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     }
     PyErr_SetObject(type, value);
     if (tb) {
-#if CYTHON_COMPILING_IN_PYPY
-        PyObject *tmp_type, *tmp_value, *tmp_tb;
-        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
-        Py_INCREF(tb);
-        PyErr_Restore(tmp_type, tmp_value, tb);
-        Py_XDECREF(tmp_tb);
-#else
+#if CYTHON_FAST_THREAD_STATE
         PyThreadState *tstate = __Pyx_PyThreadState_Current;
         PyObject* tmp_tb = tstate->curexc_traceback;
         if (tb != tmp_tb) {
@@ -23383,6 +23451,12 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             tstate->curexc_traceback = tb;
             Py_XDECREF(tmp_tb);
         }
+#else
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
 #endif
     }
 bad:
@@ -24023,7 +24097,7 @@ static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_U
 /* ObjectGetItem */
 #if CYTHON_USE_TYPE_SLOTS
 static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
-    PyObject *runerr;
+    PyObject *runerr = NULL;
     Py_ssize_t key_value;
     PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
     if (unlikely(!(m && m->sq_item))) {
@@ -24804,9 +24878,14 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P
         self = PyTuple_GetItem(args, 0);
         if (unlikely(!self)) {
             Py_DECREF(new_args);
+#if PY_MAJOR_VERSION > 2
             PyErr_Format(PyExc_TypeError,
                          "unbound method %.200S() needs an argument",
                          cyfunc->func_qualname);
+#else
+            PyErr_SetString(PyExc_TypeError,
+                            "unbound method needs an argument");
+#endif
             return NULL;
         }
         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
@@ -24881,7 +24960,10 @@ static PyTypeObject __pyx_CyFunctionType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
@@ -25101,7 +25183,7 @@ bad:
 
 /* CLineInTraceback */
 #ifndef CYTHON_CLINE_IN_TRACEBACK
-static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
+static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_line) {
     PyObject *use_cline;
     PyObject *ptype, *pvalue, *ptraceback;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -25448,7 +25530,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -25644,7 +25726,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -26795,7 +26877,10 @@ static PyTypeObject __pyx_GeneratorType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
index 2c785f5631448030614ec2e47a90a939300c2e58..ada0969bc5f4da24203b6a71b5526ddc431ac6fa 100644 (file)
@@ -271,6 +271,26 @@ class CleanerTest(unittest.TestCase):
             expected,
             cleaner.clean_html(html))
 
+    def test_host_whitelist_valid(self):
+        # Frame with valid hostname in src is allowed.
+        html = '<div><iframe src="https://example.com/page"></div>'
+        expected = '<div><iframe src="https://example.com/page"></iframe></div>'
+        cleaner = Cleaner(frames=False, host_whitelist=["example.com"])
+        self.assertEqual(expected, cleaner.clean_html(html))
+
+    def test_host_whitelist_invalid(self):
+        html = '<div><iframe src="https://evil.com/page"></div>'
+        expected = '<div></div>'
+        cleaner = Cleaner(frames=False, host_whitelist=["example.com"])
+        self.assertEqual(expected, cleaner.clean_html(html))
+
+    def test_host_whitelist_sneaky_userinfo(self):
+        # Regression test: Don't be fooled by hostname and colon in userinfo.
+        html = '<div><iframe src="https://example.com:@evil.com/page"></div>'
+        expected = '<div></div>'
+        cleaner = Cleaner(frames=False, host_whitelist=["example.com"])
+        self.assertEqual(expected, cleaner.clean_html(html))
+
 
 def test_suite():
     suite = unittest.TestSuite()
index 56afe98b7c1f365036d8d5a58c7b24f769aef921..57878a5e37852650c3301dc6d71fa1df87a3ba6d 100644 (file)
@@ -1,5 +1,4 @@
 import os
-import imp
 try:
     from StringIO import StringIO
 except ImportError:                     # python 3
@@ -45,7 +44,11 @@ except ImportError:
             return None
 
         def load_module(self, fullname):
-            mod = sys.modules.setdefault(fullname, imp.new_module(fullname))
+            class Cls: pass
+            fake_module = Cls()
+            fake_module.__qualname__ = fullname
+            fake_module.__name__ = fullname.rsplit('.', 1)[-1]
+            mod = sys.modules.setdefault(fullname, fake_module)
             mod.__file__, mod.__loader__, mod.__path__ = "<dummy>", self, []
             mod.__dict__.update(self.mocks[fullname])
             return mod
index e671fa85d0e21c6d7c02da6fff0e2ef10b15f0cf..d42f2158c942c164ef2312774d8646eca1d550b0 100644 (file)
@@ -120,6 +120,16 @@ static PyObject* PyBytes_FromFormat(const char* format, ...) {
 #  define _lx_PySlice_GetIndicesEx(o, l, b, e, s, sl) PySlice_GetIndicesEx(((PySliceObject*)o), l, b, e, s, sl)
 #endif
 
+#if PY_VERSION_HEX >= 0x030B00A1
+/* Python 3.12 doesn't have wstr Unicode strings any more. */
+#undef PyUnicode_GET_DATA_SIZE
+#define PyUnicode_GET_DATA_SIZE(ustr)  (0)
+#undef PyUnicode_AS_DATA
+#define PyUnicode_AS_DATA(ustr)  (NULL)
+#undef PyUnicode_IS_READY
+#define PyUnicode_IS_READY(ustr)  (1)
+#endif
+
 #ifdef WITHOUT_THREADING
 #  undef PyEval_SaveThread
 #  define PyEval_SaveThread() (NULL)
index 11b128eccd8a7b63eece2c3952f7fa76f613e34b..6abaad02fbeab0817b21e573e9f5fe629239f787 100644 (file)
@@ -1,3 +1,3 @@
 #ifndef LXML_VERSION_STRING
-#define LXML_VERSION_STRING "4.9.1"
+#define LXML_VERSION_STRING "4.9.3"
 #endif
index a196e34bd295264294647f0beb1d6619dbcc6448..45acfc846af3dd34fba32b63cf852e71a5eab5b2 100644 (file)
@@ -144,6 +144,7 @@ cdef extern from "libxml/parser.h":
         void* userData
         int* spaceTab
         int spaceMax
+        int nsNr
         bint html
         bint progressive
         int inSubset
index c779ea0e17678443208843cad74bead6638dd106..fb88539324235cea519e7d23a8a899cebb2931ef 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 #ifndef __PYX_HAVE__lxml__etree
 #define __PYX_HAVE__lxml__etree
@@ -13,7 +13,7 @@ struct LxmlElementBase;
 struct LxmlElementClassLookup;
 struct LxmlFallbackElementClassLookup;
 
-/* "lxml/etree.pyx":337
+/* "lxml/etree.pyx":338
  * 
  * # type of a function that steps from node to node
  * ctypedef public xmlNode* (*_node_to_node_function)(xmlNode*)             # <<<<<<<<<<<<<<
@@ -22,7 +22,7 @@ struct LxmlFallbackElementClassLookup;
  */
 typedef xmlNode *(*_node_to_node_function)(xmlNode *);
 
-/* "lxml/etree.pyx":353
+/* "lxml/etree.pyx":354
  * @cython.final
  * @cython.freelist(8)
  * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]:             # <<<<<<<<<<<<<<
@@ -38,7 +38,7 @@ struct LxmlDocument {
   struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
 };
 
-/* "lxml/etree.pyx":702
+/* "lxml/etree.pyx":703
  * 
  * @cython.no_gc_clear
  * cdef public class _Element [ type LxmlElementType, object LxmlElement ]:             # <<<<<<<<<<<<<<
@@ -52,7 +52,7 @@ struct LxmlElement {
   PyObject *_tag;
 };
 
-/* "lxml/etree.pyx":1871
+/* "lxml/etree.pyx":1872
  * 
  * 
  * cdef public class _ElementTree [ type LxmlElementTreeType,             # <<<<<<<<<<<<<<
@@ -66,7 +66,7 @@ struct LxmlElementTree {
   struct LxmlElement *_context_node;
 };
 
-/* "lxml/etree.pyx":2615
+/* "lxml/etree.pyx":2618
  * 
  * 
  * cdef public class _ElementTagMatcher [ object LxmlElementTagMatcher,             # <<<<<<<<<<<<<<
@@ -82,7 +82,7 @@ struct LxmlElementTagMatcher {
   char *_name;
 };
 
-/* "lxml/etree.pyx":2646
+/* "lxml/etree.pyx":2649
  *                 self._name = NULL
  * 
  * cdef public class _ElementIterator(_ElementTagMatcher) [             # <<<<<<<<<<<<<<
index 973005246f488538f1bc6780cf9e63a6a1c5e11b..285ae2e6bc19957a8445321187345fcccfaeb00b 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 #ifndef __PYX_HAVE_API__lxml__etree
 #define __PYX_HAVE_API__lxml__etree
@@ -106,9 +106,9 @@ static xmlNs *(*__pyx_api_f_4lxml_5etree_findOrBuildNodeNsPrefix)(struct LxmlDoc
 #endif
 #endif
 
-#ifndef __PYX_HAVE_RT_ImportFunction
-#define __PYX_HAVE_RT_ImportFunction
-static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
+#ifndef __PYX_HAVE_RT_ImportFunction_0_29_36
+#define __PYX_HAVE_RT_ImportFunction_0_29_36
+static int __Pyx_ImportFunction_0_29_36(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
     PyObject *d = 0;
     PyObject *cobj = 0;
     union {
@@ -164,51 +164,51 @@ static int import_lxml__etree(void) {
   PyObject *module = 0;
   module = PyImport_ImportModule("lxml.etree");
   if (!module) goto bad;
-  if (__Pyx_ImportFunction(module, "deepcopyNodeToDocument", (void (**)(void))&__pyx_api_f_4lxml_5etree_deepcopyNodeToDocument, "struct LxmlElement *(struct LxmlDocument *, xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "elementTreeFactory", (void (**)(void))&__pyx_api_f_4lxml_5etree_elementTreeFactory, "struct LxmlElementTree *(struct LxmlElement *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "newElementTree", (void (**)(void))&__pyx_api_f_4lxml_5etree_newElementTree, "struct LxmlElementTree *(struct LxmlElement *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "adoptExternalDocument", (void (**)(void))&__pyx_api_f_4lxml_5etree_adoptExternalDocument, "struct LxmlElementTree *(xmlDoc *, PyObject *, int)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "elementFactory", (void (**)(void))&__pyx_api_f_4lxml_5etree_elementFactory, "struct LxmlElement *(struct LxmlDocument *, xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "makeElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_makeElement, "struct LxmlElement *(PyObject *, struct LxmlDocument *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "makeSubElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_makeSubElement, "struct LxmlElement *(struct LxmlElement *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "setElementClassLookupFunction", (void (**)(void))&__pyx_api_f_4lxml_5etree_setElementClassLookupFunction, "void (_element_class_lookup_function, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "lookupDefaultElementClass", (void (**)(void))&__pyx_api_f_4lxml_5etree_lookupDefaultElementClass, "PyObject *(PyObject *, PyObject *, xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "lookupNamespaceElementClass", (void (**)(void))&__pyx_api_f_4lxml_5etree_lookupNamespaceElementClass, "PyObject *(PyObject *, PyObject *, xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "callLookupFallback", (void (**)(void))&__pyx_api_f_4lxml_5etree_callLookupFallback, "PyObject *(struct LxmlFallbackElementClassLookup *, struct LxmlDocument *, xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "tagMatches", (void (**)(void))&__pyx_api_f_4lxml_5etree_tagMatches, "int (xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "documentOrRaise", (void (**)(void))&__pyx_api_f_4lxml_5etree_documentOrRaise, "struct LxmlDocument *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "rootNodeOrRaise", (void (**)(void))&__pyx_api_f_4lxml_5etree_rootNodeOrRaise, "struct LxmlElement *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "hasText", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasText, "int (xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "hasTail", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasTail, "int (xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "textOf", (void (**)(void))&__pyx_api_f_4lxml_5etree_textOf, "PyObject *(xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "tailOf", (void (**)(void))&__pyx_api_f_4lxml_5etree_tailOf, "PyObject *(xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "setNodeText", (void (**)(void))&__pyx_api_f_4lxml_5etree_setNodeText, "int (xmlNode *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "setTailText", (void (**)(void))&__pyx_api_f_4lxml_5etree_setTailText, "int (xmlNode *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "attributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_attributeValue, "PyObject *(xmlNode *, xmlAttr *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "attributeValueFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_attributeValueFromNsName, "PyObject *(xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "getAttributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_getAttributeValue, "PyObject *(struct LxmlElement *, PyObject *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "iterattributes", (void (**)(void))&__pyx_api_f_4lxml_5etree_iterattributes, "PyObject *(struct LxmlElement *, int)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "collectAttributes", (void (**)(void))&__pyx_api_f_4lxml_5etree_collectAttributes, "PyObject *(xmlNode *, int)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "setAttributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_setAttributeValue, "int (struct LxmlElement *, PyObject *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "delAttribute", (void (**)(void))&__pyx_api_f_4lxml_5etree_delAttribute, "int (struct LxmlElement *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "delAttributeFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_delAttributeFromNsName, "int (xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "hasChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasChild, "int (xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "findChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChild, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "findChildForwards", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChildForwards, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "findChildBackwards", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChildBackwards, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "nextElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_nextElement, "xmlNode *(xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "previousElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_previousElement, "xmlNode *(xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "appendChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_appendChild, "void (struct LxmlElement *, struct LxmlElement *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "appendChildToElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_appendChildToElement, "int (struct LxmlElement *, struct LxmlElement *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "pyunicode", (void (**)(void))&__pyx_api_f_4lxml_5etree_pyunicode, "PyObject *(const xmlChar *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "utf8", (void (**)(void))&__pyx_api_f_4lxml_5etree_utf8, "PyObject *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "getNsTag", (void (**)(void))&__pyx_api_f_4lxml_5etree_getNsTag, "PyObject *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "getNsTagWithEmptyNs", (void (**)(void))&__pyx_api_f_4lxml_5etree_getNsTagWithEmptyNs, "PyObject *(PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "namespacedName", (void (**)(void))&__pyx_api_f_4lxml_5etree_namespacedName, "PyObject *(xmlNode *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "namespacedNameFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_namespacedNameFromNsName, "PyObject *(const xmlChar *, const xmlChar *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "iteratorStoreNext", (void (**)(void))&__pyx_api_f_4lxml_5etree_iteratorStoreNext, "void (struct LxmlElementIterator *, struct LxmlElement *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "initTagMatch", (void (**)(void))&__pyx_api_f_4lxml_5etree_initTagMatch, "void (struct LxmlElementTagMatcher *, PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "findOrBuildNodeNsPrefix", (void (**)(void))&__pyx_api_f_4lxml_5etree_findOrBuildNodeNsPrefix, "xmlNs *(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "deepcopyNodeToDocument", (void (**)(void))&__pyx_api_f_4lxml_5etree_deepcopyNodeToDocument, "struct LxmlElement *(struct LxmlDocument *, xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "elementTreeFactory", (void (**)(void))&__pyx_api_f_4lxml_5etree_elementTreeFactory, "struct LxmlElementTree *(struct LxmlElement *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "newElementTree", (void (**)(void))&__pyx_api_f_4lxml_5etree_newElementTree, "struct LxmlElementTree *(struct LxmlElement *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "adoptExternalDocument", (void (**)(void))&__pyx_api_f_4lxml_5etree_adoptExternalDocument, "struct LxmlElementTree *(xmlDoc *, PyObject *, int)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "elementFactory", (void (**)(void))&__pyx_api_f_4lxml_5etree_elementFactory, "struct LxmlElement *(struct LxmlDocument *, xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "makeElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_makeElement, "struct LxmlElement *(PyObject *, struct LxmlDocument *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "makeSubElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_makeSubElement, "struct LxmlElement *(struct LxmlElement *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "setElementClassLookupFunction", (void (**)(void))&__pyx_api_f_4lxml_5etree_setElementClassLookupFunction, "void (_element_class_lookup_function, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "lookupDefaultElementClass", (void (**)(void))&__pyx_api_f_4lxml_5etree_lookupDefaultElementClass, "PyObject *(PyObject *, PyObject *, xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "lookupNamespaceElementClass", (void (**)(void))&__pyx_api_f_4lxml_5etree_lookupNamespaceElementClass, "PyObject *(PyObject *, PyObject *, xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "callLookupFallback", (void (**)(void))&__pyx_api_f_4lxml_5etree_callLookupFallback, "PyObject *(struct LxmlFallbackElementClassLookup *, struct LxmlDocument *, xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "tagMatches", (void (**)(void))&__pyx_api_f_4lxml_5etree_tagMatches, "int (xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "documentOrRaise", (void (**)(void))&__pyx_api_f_4lxml_5etree_documentOrRaise, "struct LxmlDocument *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "rootNodeOrRaise", (void (**)(void))&__pyx_api_f_4lxml_5etree_rootNodeOrRaise, "struct LxmlElement *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "hasText", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasText, "int (xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "hasTail", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasTail, "int (xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "textOf", (void (**)(void))&__pyx_api_f_4lxml_5etree_textOf, "PyObject *(xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "tailOf", (void (**)(void))&__pyx_api_f_4lxml_5etree_tailOf, "PyObject *(xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "setNodeText", (void (**)(void))&__pyx_api_f_4lxml_5etree_setNodeText, "int (xmlNode *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "setTailText", (void (**)(void))&__pyx_api_f_4lxml_5etree_setTailText, "int (xmlNode *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "attributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_attributeValue, "PyObject *(xmlNode *, xmlAttr *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "attributeValueFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_attributeValueFromNsName, "PyObject *(xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "getAttributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_getAttributeValue, "PyObject *(struct LxmlElement *, PyObject *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "iterattributes", (void (**)(void))&__pyx_api_f_4lxml_5etree_iterattributes, "PyObject *(struct LxmlElement *, int)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "collectAttributes", (void (**)(void))&__pyx_api_f_4lxml_5etree_collectAttributes, "PyObject *(xmlNode *, int)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "setAttributeValue", (void (**)(void))&__pyx_api_f_4lxml_5etree_setAttributeValue, "int (struct LxmlElement *, PyObject *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "delAttribute", (void (**)(void))&__pyx_api_f_4lxml_5etree_delAttribute, "int (struct LxmlElement *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "delAttributeFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_delAttributeFromNsName, "int (xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "hasChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_hasChild, "int (xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "findChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChild, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "findChildForwards", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChildForwards, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "findChildBackwards", (void (**)(void))&__pyx_api_f_4lxml_5etree_findChildBackwards, "xmlNode *(xmlNode *, Py_ssize_t)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "nextElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_nextElement, "xmlNode *(xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "previousElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_previousElement, "xmlNode *(xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "appendChild", (void (**)(void))&__pyx_api_f_4lxml_5etree_appendChild, "void (struct LxmlElement *, struct LxmlElement *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "appendChildToElement", (void (**)(void))&__pyx_api_f_4lxml_5etree_appendChildToElement, "int (struct LxmlElement *, struct LxmlElement *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "pyunicode", (void (**)(void))&__pyx_api_f_4lxml_5etree_pyunicode, "PyObject *(const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "utf8", (void (**)(void))&__pyx_api_f_4lxml_5etree_utf8, "PyObject *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "getNsTag", (void (**)(void))&__pyx_api_f_4lxml_5etree_getNsTag, "PyObject *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "getNsTagWithEmptyNs", (void (**)(void))&__pyx_api_f_4lxml_5etree_getNsTagWithEmptyNs, "PyObject *(PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "namespacedName", (void (**)(void))&__pyx_api_f_4lxml_5etree_namespacedName, "PyObject *(xmlNode *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "namespacedNameFromNsName", (void (**)(void))&__pyx_api_f_4lxml_5etree_namespacedNameFromNsName, "PyObject *(const xmlChar *, const xmlChar *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "iteratorStoreNext", (void (**)(void))&__pyx_api_f_4lxml_5etree_iteratorStoreNext, "void (struct LxmlElementIterator *, struct LxmlElement *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "initTagMatch", (void (**)(void))&__pyx_api_f_4lxml_5etree_initTagMatch, "void (struct LxmlElementTagMatcher *, PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction_0_29_36(module, "findOrBuildNodeNsPrefix", (void (**)(void))&__pyx_api_f_4lxml_5etree_findOrBuildNodeNsPrefix, "xmlNs *(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *)") < 0) goto bad;
   Py_DECREF(module); module = 0;
   return 0;
   bad:
index 529a2b4bd5fd77bb4cdfd06b42deee291e2908d3..1567db8da8b9fac5d8afa2dd85dd966965f42559 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 /* BEGIN: Cython Metadata
 {
@@ -95,8 +95,8 @@ END: Cython Metadata */
 #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_30"
-#define CYTHON_HEX_VERSION 0x001D1EF0
+#define CYTHON_ABI "0_29_36"
+#define CYTHON_HEX_VERSION 0x001D24F0
 #define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
@@ -135,6 +135,7 @@ END: Cython Metadata */
   #define CYTHON_COMPILING_IN_PYPY 1
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #undef CYTHON_USE_TYPE_SLOTS
   #define CYTHON_USE_TYPE_SLOTS 0
   #undef CYTHON_USE_PYTYPE_LOOKUP
@@ -163,21 +164,26 @@ END: Cython Metadata */
   #define CYTHON_FAST_THREAD_STATE 0
   #undef CYTHON_FAST_PYCALL
   #define CYTHON_FAST_PYCALL 0
-  #undef CYTHON_PEP489_MULTI_PHASE_INIT
-  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #if PY_VERSION_HEX < 0x03090000
+    #undef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
   #undef CYTHON_USE_TP_FINALIZE
-  #define CYTHON_USE_TP_FINALIZE 0
+  #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
   #undef CYTHON_USE_DICT_VERSIONS
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
-    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
 #elif defined(PYSTON_VERSION)
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -218,10 +224,56 @@ END: Cython Metadata */
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
     #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
+#elif defined(PY_NOGIL)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #ifndef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE 1
+  #endif
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -241,7 +293,7 @@ END: Cython Metadata */
     #undef CYTHON_USE_PYLONG_INTERNALS
     #define CYTHON_USE_PYLONG_INTERNALS 0
   #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
-    #define CYTHON_USE_PYLONG_INTERNALS 1
+    #define CYTHON_USE_PYLONG_INTERNALS (PY_VERSION_HEX < 0x030C00A5)
   #endif
   #ifndef CYTHON_USE_PYLIST_INTERNALS
     #define CYTHON_USE_PYLIST_INTERNALS 1
@@ -280,7 +332,7 @@ END: Cython Metadata */
     #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
   #endif
   #ifndef CYTHON_USE_DICT_VERSIONS
-    #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+    #define CYTHON_USE_DICT_VERSIONS ((PY_VERSION_HEX >= 0x030600B1) && (PY_VERSION_HEX < 0x030C00A5))
   #endif
   #if PY_VERSION_HEX >= 0x030B00A4
     #undef CYTHON_USE_EXC_INFO_STACK
@@ -403,9 +455,6 @@ END: Cython Metadata */
   #endif
 #endif
 
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
-  #define Py_OptimizeFlag 0
-#endif
 #define __PYX_BUILD_PY_SSIZE_T "n"
 #define CYTHON_FORMAT_SSIZE_T "z"
 #if PY_MAJOR_VERSION < 3
@@ -483,6 +532,11 @@ END: Cython Metadata */
 #endif
   #define __Pyx_DefaultClassType PyType_Type
 #endif
+#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
+#else
+  #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
+#endif
 #ifndef Py_TPFLAGS_CHECKTYPES
   #define Py_TPFLAGS_CHECKTYPES 0
 #endif
@@ -590,11 +644,11 @@ 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)))
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_READY(op)       (0)
   #else
-  #define __Pyx_PyUnicode_READY(op)       (0)
+    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+                                                0 : _PyUnicode_Ready((PyObject *)(op)))
   #endif
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
@@ -603,14 +657,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
-  #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))
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #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))
+    #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
   #endif
 #else
   #define CYTHON_PEP393_ENABLED 0
@@ -1521,18 +1575,18 @@ static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UIN
 
 /* GetModuleGlobalName.proto */
 #if CYTHON_USE_DICT_VERSIONS
-#define __Pyx_GetModuleGlobalName(var, name)  {\
+#define __Pyx_GetModuleGlobalName(var, name)  do {\
     static PY_UINT64_T __pyx_dict_version = 0;\
     static PyObject *__pyx_dict_cached_value = NULL;\
     (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
         (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
         __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
-#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
+} while(0)
+#define __Pyx_GetModuleGlobalNameUncached(var, name)  do {\
     PY_UINT64_T __pyx_dict_version;\
     PyObject *__pyx_dict_cached_value;\
     (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
+} while(0)
 static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
 #else
 #define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
@@ -1993,14 +2047,22 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam
 #endif
 
 /* TypeImport.proto */
-#ifndef __PYX_HAVE_RT_ImportType_proto
-#define __PYX_HAVE_RT_ImportType_proto
-enum __Pyx_ImportType_CheckSize {
-   __Pyx_ImportType_CheckSize_Error = 0,
-   __Pyx_ImportType_CheckSize_Warn = 1,
-   __Pyx_ImportType_CheckSize_Ignore = 2
+#ifndef __PYX_HAVE_RT_ImportType_proto_0_29_36
+#define __PYX_HAVE_RT_ImportType_proto_0_29_36
+#if __STDC_VERSION__ >= 201112L
+#include <stdalign.h>
+#endif
+#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
+#define __PYX_GET_STRUCT_ALIGNMENT_0_29_36(s) alignof(s)
+#else
+#define __PYX_GET_STRUCT_ALIGNMENT_0_29_36(s) sizeof(void*)
+#endif
+enum __Pyx_ImportType_CheckSize_0_29_36 {
+   __Pyx_ImportType_CheckSize_Error_0_29_36 = 0,
+   __Pyx_ImportType_CheckSize_Warn_0_29_36 = 1,
+   __Pyx_ImportType_CheckSize_Ignore_0_29_36 = 2
 };
-static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size);
+static PyTypeObject *__Pyx_ImportType_0_29_36(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_0_29_36 check_size);
 #endif
 
 /* SetVTable.proto */
@@ -3626,7 +3688,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_set_pytype_attribute_tag(CYTHON_UNUSE
  *             _unicodeAndUtf8(u"http://codespeak.net/lxml/objectify/pytype")
  *         PYTYPE_ATTRIBUTE_NAME, PYTYPE_ATTRIBUTE_NAME_UTF8 = \
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 100, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 100, __pyx_L1_error)
     __Pyx_XGOTREF(__pyx_v_4lxml_9objectify_PYTYPE_NAMESPACE);
     __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify_PYTYPE_NAMESPACE, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
@@ -3676,7 +3738,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_set_pytype_attribute_tag(CYTHON_UNUSE
  *             _unicodeAndUtf8(u"pytype")
  *     else:
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 102, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 102, __pyx_L1_error)
     __Pyx_XGOTREF(__pyx_v_4lxml_9objectify_PYTYPE_ATTRIBUTE_NAME);
     __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify_PYTYPE_ATTRIBUTE_NAME, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
@@ -3745,8 +3807,8 @@ static PyObject *__pyx_pf_4lxml_9objectify_set_pytype_attribute_tag(CYTHON_UNUSE
  *             cetree.getNsTag(attribute_tag)
  *         PYTYPE_NAMESPACE = PYTYPE_NAMESPACE_UTF8.decode('utf8')
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 105, __pyx_L1_error)
-    if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 105, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 105, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 105, __pyx_L1_error)
     __Pyx_XGOTREF(__pyx_v_4lxml_9objectify_PYTYPE_NAMESPACE_UTF8);
     __Pyx_DECREF_SET(__pyx_v_4lxml_9objectify_PYTYPE_NAMESPACE_UTF8, ((PyObject*)__pyx_t_4));
     __Pyx_GIVEREF(__pyx_t_4);
@@ -8940,7 +9002,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setSlice(PyObject *__pyx_v_sliceobjec
  */
   __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_target), __pyx_v_sliceobject); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 532, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 532, __pyx_L1_error)
+  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 532, __pyx_L1_error)
   __pyx_v_del_items = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
@@ -16518,7 +16580,7 @@ static PyObject *__pyx_fuse_0__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
  *     cdef NumberParserState state = NPS_SPACE_PRE
  * 
  *     for c in s:             # <<<<<<<<<<<<<<
- *         if c.isdigit() if (bytes_unicode is unicode) else c in b'0123456789':
+ *         if c in u'0123456789':
  *             if state in (NPS_DIGITS, NPS_FRACTION, NPS_DIGITS_EXP):
  */
   if (unlikely(__pyx_v_s == Py_None)) {
@@ -16536,25 +16598,25 @@ static PyObject *__pyx_fuse_0__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
     /* "lxml/objectify.pyx":979
  * 
  *     for c in s:
- *         if c.isdigit() if (bytes_unicode is unicode) else c in b'0123456789':             # <<<<<<<<<<<<<<
+ *         if c in u'0123456789':             # <<<<<<<<<<<<<<
  *             if state in (NPS_DIGITS, NPS_FRACTION, NPS_DIGITS_EXP):
  *                 pass
  */
     switch (__pyx_v_c) {
-      case '0':
-      case '1':
-      case '2':
-      case '3':
-      case '4':
-      case '5':
-      case '6':
-      case '7':
-      case '8':
-      case '9':
+      case 48:
+      case 49:
+      case 50:
+      case 51:
+      case 52:
+      case 53:
+      case 54:
+      case 55:
+      case 56:
+      case 57:
 
       /* "lxml/objectify.pyx":980
  *     for c in s:
- *         if c.isdigit() if (bytes_unicode is unicode) else c in b'0123456789':
+ *         if c in u'0123456789':
  *             if state in (NPS_DIGITS, NPS_FRACTION, NPS_DIGITS_EXP):             # <<<<<<<<<<<<<<
  *                 pass
  *             elif state in (NPS_SPACE_PRE, NPS_SIGN):
@@ -16664,7 +16726,7 @@ static PyObject *__pyx_fuse_0__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
       /* "lxml/objectify.pyx":979
  * 
  *     for c in s:
- *         if c.isdigit() if (bytes_unicode is unicode) else c in b'0123456789':             # <<<<<<<<<<<<<<
+ *         if c in u'0123456789':             # <<<<<<<<<<<<<<
  *             if state in (NPS_DIGITS, NPS_FRACTION, NPS_DIGITS_EXP):
  *                 pass
  */
@@ -17382,7 +17444,7 @@ static PyObject *__pyx_fuse_1__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
  *     cdef NumberParserState state = NPS_SPACE_PRE
  * 
  *     for c in s:             # <<<<<<<<<<<<<<
- *         if c.isdigit() if (bytes_unicode is unicode) else c in b'0123456789':
+ *         if c in u'0123456789':
  *             if state in (NPS_DIGITS, NPS_FRACTION, NPS_DIGITS_EXP):
  */
   if (unlikely(__pyx_v_s == Py_None)) {
@@ -17399,16 +17461,25 @@ static PyObject *__pyx_fuse_1__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
     /* "lxml/objectify.pyx":979
  * 
  *     for c in s:
- *         if c.isdigit() if (bytes_unicode is unicode) else c in b'0123456789':             # <<<<<<<<<<<<<<
+ *         if c in u'0123456789':             # <<<<<<<<<<<<<<
  *             if state in (NPS_DIGITS, NPS_FRACTION, NPS_DIGITS_EXP):
  *                 pass
  */
-    __pyx_t_8 = Py_UNICODE_ISDIGIT(__pyx_v_c); 
-    if ((__pyx_t_8 != 0)) {
+    switch (__pyx_v_c) {
+      case 48:
+      case 49:
+      case 50:
+      case 51:
+      case 52:
+      case 53:
+      case 54:
+      case 55:
+      case 56:
+      case 57:
 
       /* "lxml/objectify.pyx":980
  *     for c in s:
- *         if c.isdigit() if (bytes_unicode is unicode) else c in b'0123456789':
+ *         if c in u'0123456789':
  *             if state in (NPS_DIGITS, NPS_FRACTION, NPS_DIGITS_EXP):             # <<<<<<<<<<<<<<
  *                 pass
  *             elif state in (NPS_SPACE_PRE, NPS_SIGN):
@@ -17518,28 +17589,19 @@ static PyObject *__pyx_fuse_1__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
       /* "lxml/objectify.pyx":979
  * 
  *     for c in s:
- *         if c.isdigit() if (bytes_unicode is unicode) else c in b'0123456789':             # <<<<<<<<<<<<<<
+ *         if c in u'0123456789':             # <<<<<<<<<<<<<<
  *             if state in (NPS_DIGITS, NPS_FRACTION, NPS_DIGITS_EXP):
  *                 pass
  */
-      goto __pyx_L5;
-    }
+      break;
+      default:
 
-    /* "lxml/objectify.pyx":991
+      /* "lxml/objectify.pyx":991
  *                 state = NPS_ERROR
  *         else:
  *             if c == u'.':             # <<<<<<<<<<<<<<
  *                 if state in (NPS_SPACE_PRE, NPS_SIGN):
  *                     state = NPS_POINT_LEAD
- */
-    /*else*/ {
-
-      /* "lxml/objectify.pyx":1021
- *             elif c in u'aA':
- *                 state = NPS_NAN2 if state == NPS_NAN1 else NPS_ERROR
- *             elif c in u'nN':             # <<<<<<<<<<<<<<
- *                 # Python also allows [+-]NaN, so let's accept that.
- *                 if state in (NPS_SPACE_PRE, NPS_SIGN):
  */
       switch (__pyx_v_c) {
         case 46:
@@ -17820,7 +17882,7 @@ static PyObject *__pyx_fuse_1__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
         if (__pyx_t_10) {
         } else {
           __pyx_t_8 = __pyx_t_10;
-          goto __pyx_L8_bool_binop_done;
+          goto __pyx_L7_bool_binop_done;
         }
         switch (__pyx_v_state) {
           case __pyx_e_4lxml_9objectify_NPS_SPACE_PRE:
@@ -17833,7 +17895,7 @@ static PyObject *__pyx_fuse_1__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
         }
         __pyx_t_11 = (__pyx_t_10 != 0);
         __pyx_t_8 = __pyx_t_11;
-        __pyx_L8_bool_binop_done:;
+        __pyx_L7_bool_binop_done:;
         if (__pyx_t_8) {
           __pyx_t_9 = __pyx_e_4lxml_9objectify_NPS_INF1;
         } else {
@@ -18093,7 +18155,7 @@ static PyObject *__pyx_fuse_1__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
  *                     if state in (NPS_SPACE_PRE, NPS_SPACE_TAIL):
  *                         pass
  */
-          goto __pyx_L10;
+          goto __pyx_L9;
         }
 
         /* "lxml/objectify.pyx":1041
@@ -18106,7 +18168,7 @@ static PyObject *__pyx_fuse_1__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
         /*else*/ {
           __pyx_v_state = __pyx_e_4lxml_9objectify_NPS_ERROR;
         }
-        __pyx_L10:;
+        __pyx_L9:;
         break;
       }
 
@@ -18137,8 +18199,8 @@ static PyObject *__pyx_fuse_1__pyx_f_4lxml_9objectify__checkNumber(PyObject *__p
  * 
  */
       }
+      break;
     }
-    __pyx_L5:;
   }
   __pyx_L4_break:;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -24848,7 +24910,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
   __pyx_t_2 = PyNumber_Multiply(__pyx_kp_u__10, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1524, __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, 1524, __pyx_L1_error)
+  if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1524, __pyx_L1_error)
   __pyx_v_indentstr = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
@@ -31928,11 +31990,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
   if (__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
-    goto __pyx_L43_bool_binop_done;
+    goto __pyx_L44_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, 2150, __pyx_L1_error)
   __pyx_t_2 = __pyx_t_1;
-  __pyx_L43_bool_binop_done:;
+  __pyx_L44_bool_binop_done:;
   if (__pyx_t_2) {
 
     /* "lxml/objectify.pyx":2151
@@ -31947,11 +32009,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
     } else {
       __Pyx_INCREF(__pyx_v__pytype);
       __pyx_t_6 = __pyx_v__pytype;
-      goto __pyx_L45_bool_binop_done;
+      goto __pyx_L46_bool_binop_done;
     }
     __Pyx_INCREF(__pyx_n_u_NoneType);
     __pyx_t_6 = __pyx_n_u_NoneType;
-    __pyx_L45_bool_binop_done:;
+    __pyx_L46_bool_binop_done:;
     __Pyx_DECREF_SET(__pyx_v__pytype, __pyx_t_6);
     __pyx_t_6 = 0;
 
@@ -31972,7 +32034,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
  *         _pytype = _pytype or u"NoneType"
  *         strval = None
  */
-    goto __pyx_L42;
+    goto __pyx_L43;
   }
 
   /* "lxml/objectify.pyx":2153
@@ -32002,7 +32064,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
  *         strval = _value
  *     elif isinstance(_value, bool):
  */
-    goto __pyx_L42;
+    goto __pyx_L43;
   }
 
   /* "lxml/objectify.pyx":2155
@@ -32046,7 +32108,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
  *             strval = u"true"
  *         else:
  */
-      goto __pyx_L47;
+      goto __pyx_L48;
     }
 
     /* "lxml/objectify.pyx":2159
@@ -32060,7 +32122,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_n_u_false);
       __pyx_v_strval = __pyx_n_u_false;
     }
-    __pyx_L47:;
+    __pyx_L48:;
 
     /* "lxml/objectify.pyx":2155
  *     elif python._isString(_value):
@@ -32069,7 +32131,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
  *         if _value:
  *             strval = u"true"
  */
-    goto __pyx_L42;
+    goto __pyx_L43;
   }
 
   /* "lxml/objectify.pyx":2161
@@ -32136,7 +32198,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
     __pyx_v_strval = __pyx_t_7;
     __pyx_t_7 = 0;
   }
-  __pyx_L42:;
+  __pyx_L43:;
 
   /* "lxml/objectify.pyx":2165
  *         strval = stringify(_value)
@@ -32160,11 +32222,11 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
     if (!__pyx_t_1) {
     } else {
       __pyx_t_2 = __pyx_t_1;
-      goto __pyx_L50_bool_binop_done;
+      goto __pyx_L51_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, 2166, __pyx_L1_error)
     __pyx_t_2 = __pyx_t_1;
-    __pyx_L50_bool_binop_done:;
+    __pyx_L51_bool_binop_done:;
     if (__pyx_t_2) {
 
       /* "lxml/objectify.pyx":2167
@@ -32193,7 +32255,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
  *             strval = None
  *             _attributes[XML_SCHEMA_INSTANCE_NIL_ATTR] = u"true"
  */
-      goto __pyx_L49;
+      goto __pyx_L50;
     }
 
     /* "lxml/objectify.pyx":2171
@@ -32293,7 +32355,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34DataElement(CYTHON_UNUSED PyObject
  */
       }
     }
-    __pyx_L49:;
+    __pyx_L50:;
 
     /* "lxml/objectify.pyx":2165
  *         strval = stringify(_value)
@@ -33478,7 +33540,7 @@ static PyObject *__pyx_f_4lxml_9objectify__parse_object_path_string(PyObject *__
  *     if path == u'.':
  */
   /*else*/ {
-    if (!(likely(PyUnicode_CheckExact(__pyx_v__path))||((__pyx_v__path) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v__path)->tp_name), 0))) __PYX_ERR(1, 102, __pyx_L1_error)
+    if (!(likely(PyUnicode_CheckExact(__pyx_v__path))||((__pyx_v__path) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v__path)->tp_name), 0))) __PYX_ERR(1, 102, __pyx_L1_error)
     __pyx_t_1 = __pyx_v__path;
     __Pyx_INCREF(__pyx_t_1);
     __pyx_v_path = ((PyObject*)__pyx_t_1);
@@ -33495,7 +33557,7 @@ static PyObject *__pyx_f_4lxml_9objectify__parse_object_path_string(PyObject *__
  */
   __pyx_t_1 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyUnicode_Type_strip, __pyx_v_path); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 103, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 103, __pyx_L1_error)
+  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 103, __pyx_L1_error)
   __Pyx_DECREF_SET(__pyx_v_path, ((PyObject*)__pyx_t_1));
   __pyx_t_1 = 0;
 
@@ -36962,7 +37024,7 @@ static PyObject *__pyx_tp_new_4lxml_9objectify_ObjectifiedElement(PyTypeObject *
 
 static void __pyx_tp_dealloc_4lxml_9objectify_ObjectifiedElement(PyObject *o) {
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -37126,7 +37188,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_ObjectifiedElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -37222,7 +37284,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_ObjectifiedDataElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -37239,7 +37301,7 @@ static PyObject *__pyx_tp_new_4lxml_9objectify_NumberElement(PyTypeObject *t, Py
 static void __pyx_tp_dealloc_4lxml_9objectify_NumberElement(PyObject *o) {
   struct __pyx_obj_4lxml_9objectify_NumberElement *p = (struct __pyx_obj_4lxml_9objectify_NumberElement *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -37428,7 +37490,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_NumberElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -37681,7 +37743,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_IntElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -37934,7 +37996,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_LongElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -38029,7 +38091,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_FloatElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -38194,7 +38256,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_StringElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -38351,7 +38413,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_NoneElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -38593,7 +38655,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_BoolElement = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -38619,7 +38681,7 @@ static PyObject *__pyx_tp_new_4lxml_9objectify_PyType(PyTypeObject *t, CYTHON_UN
 static void __pyx_tp_dealloc_4lxml_9objectify_PyType(PyObject *o) {
   struct __pyx_obj_4lxml_9objectify_PyType *p = (struct __pyx_obj_4lxml_9objectify_PyType *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -38770,7 +38832,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_PyType = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -38890,7 +38952,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -38917,7 +38979,7 @@ static PyObject *__pyx_tp_new_4lxml_9objectify_ElementMaker(PyTypeObject *t, CYT
 static void __pyx_tp_dealloc_4lxml_9objectify_ElementMaker(PyObject *o) {
   struct __pyx_obj_4lxml_9objectify_ElementMaker *p = (struct __pyx_obj_4lxml_9objectify_ElementMaker *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -39037,7 +39099,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_ElementMaker = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -39055,17 +39117,14 @@ static PyObject *__pyx_tp_new_4lxml_9objectify_ObjectifyElementClassLookup(PyTyp
 static void __pyx_tp_dealloc_4lxml_9objectify_ObjectifyElementClassLookup(PyObject *o) {
   struct __pyx_obj_4lxml_9objectify_ObjectifyElementClassLookup *p = (struct __pyx_obj_4lxml_9objectify_ObjectifyElementClassLookup *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
   Py_CLEAR(p->empty_data_class);
   Py_CLEAR(p->tree_class);
-  #if CYTHON_USE_TYPE_SLOTS
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
+  if (PyType_IS_GC(__pyx_ptype_4lxml_8includes_11etreepublic_ElementClassLookup)) PyObject_GC_Track(o);
   if (likely(__pyx_ptype_4lxml_8includes_11etreepublic_ElementClassLookup)) __pyx_ptype_4lxml_8includes_11etreepublic_ElementClassLookup->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_4lxml_9objectify_ObjectifyElementClassLookup);
 }
 
@@ -39161,7 +39220,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_ObjectifyElementClassLookup = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -39185,7 +39244,7 @@ static PyObject *__pyx_tp_new_4lxml_9objectify_ObjectPath(PyTypeObject *t, CYTHO
 static void __pyx_tp_dealloc_4lxml_9objectify_ObjectPath(PyObject *o) {
   struct __pyx_obj_4lxml_9objectify_ObjectPath *p = (struct __pyx_obj_4lxml_9objectify_ObjectPath *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -39310,7 +39369,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_ObjectPath = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -39406,7 +39465,7 @@ static PyTypeObject __pyx_scope_struct____Pyx_CFunc_bint____object____except____
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -39502,7 +39561,7 @@ static PyTypeObject __pyx_scope_struct____Pyx_CFunc_object____object___to_py = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -39598,7 +39657,7 @@ static PyTypeObject __pyx_scope_struct____Pyx_CFunc_unicode____object___to_py =
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -40851,7 +40910,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
   __pyx_umethod_PyDict_Type_values.type = (PyObject*)&PyDict_Type;
   __pyx_umethod_PyList_Type_remove.type = (PyObject*)&PyList_Type;
   __pyx_umethod_PyUnicode_Type_strip.type = (PyObject*)&PyUnicode_Type;
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error)
@@ -40933,8 +40992,7 @@ static int __Pyx_modinit_type_init_code(void) {
   /*--- Type init code ---*/
   __pyx_t_1 = PyImport_ImportModule("lxml.etree"); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_ptype_4lxml_8includes_11etreepublic_ElementBase = __Pyx_ImportType(__pyx_t_1, "lxml.etree", "ElementBase", sizeof(struct LxmlElementBase), __Pyx_ImportType_CheckSize_Warn);
-   if (!__pyx_ptype_4lxml_8includes_11etreepublic_ElementBase) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_ptype_4lxml_8includes_11etreepublic_ElementBase = __Pyx_ImportType_0_29_36(__pyx_t_1, "lxml.etree", "ElementBase", sizeof(struct LxmlElementBase), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(struct LxmlElementBase),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_4lxml_8includes_11etreepublic_ElementBase) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_type_4lxml_9objectify_ObjectifiedElement.tp_base = __pyx_ptype_4lxml_8includes_11etreepublic_ElementBase;
   if (PyType_Ready(&__pyx_type_4lxml_9objectify_ObjectifiedElement) < 0) __PYX_ERR(0, 136, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
@@ -41118,8 +41176,7 @@ static int __Pyx_modinit_type_init_code(void) {
   if (__Pyx_SetVtable(__pyx_type_4lxml_9objectify_ElementMaker.tp_dict, __pyx_vtabptr_4lxml_9objectify_ElementMaker) < 0) __PYX_ERR(0, 1423, __pyx_L1_error)
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ElementMaker, (PyObject *)&__pyx_type_4lxml_9objectify_ElementMaker) < 0) __PYX_ERR(0, 1423, __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_ptype_4lxml_8includes_11etreepublic_ElementClassLookup = __Pyx_ImportType_0_29_36(__pyx_t_1, "lxml.etree", "ElementClassLookup", sizeof(struct LxmlElementClassLookup), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(struct LxmlElementClassLookup),__Pyx_ImportType_CheckSize_Warn_0_29_36); 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, 1579, __pyx_L1_error)
   #if PY_VERSION_HEX < 0x030800B1
@@ -41202,18 +41259,12 @@ static int __Pyx_modinit_type_import_code(void) {
   /*--- Type import code ---*/
   __pyx_t_1 = PyImport_ImportModule("lxml.etree"); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_ptype_4lxml_8includes_11etreepublic__Document = __Pyx_ImportType(__pyx_t_1, "lxml.etree", "_Document", sizeof(struct LxmlDocument), __Pyx_ImportType_CheckSize_Warn);
-   if (!__pyx_ptype_4lxml_8includes_11etreepublic__Document) __PYX_ERR(3, 30, __pyx_L1_error)
-  __pyx_ptype_4lxml_8includes_11etreepublic__Element = __Pyx_ImportType(__pyx_t_1, "lxml.etree", "_Element", sizeof(struct LxmlElement), __Pyx_ImportType_CheckSize_Warn);
-   if (!__pyx_ptype_4lxml_8includes_11etreepublic__Element) __PYX_ERR(3, 33, __pyx_L1_error)
-  __pyx_ptype_4lxml_8includes_11etreepublic__ElementTree = __Pyx_ImportType(__pyx_t_1, "lxml.etree", "_ElementTree", sizeof(struct LxmlElementTree), __Pyx_ImportType_CheckSize_Warn);
-   if (!__pyx_ptype_4lxml_8includes_11etreepublic__ElementTree) __PYX_ERR(3, 40, __pyx_L1_error)
-  __pyx_ptype_4lxml_8includes_11etreepublic_FallbackElementClassLookup = __Pyx_ImportType(__pyx_t_1, "lxml.etree", "FallbackElementClassLookup", sizeof(struct LxmlFallbackElementClassLookup), __Pyx_ImportType_CheckSize_Warn);
-   if (!__pyx_ptype_4lxml_8includes_11etreepublic_FallbackElementClassLookup) __PYX_ERR(3, 47, __pyx_L1_error)
-  __pyx_ptype_4lxml_8includes_11etreepublic__ElementTagMatcher = __Pyx_ImportType(__pyx_t_1, "lxml.etree", "_ElementTagMatcher", sizeof(struct LxmlElementTagMatcher), __Pyx_ImportType_CheckSize_Warn);
-   if (!__pyx_ptype_4lxml_8includes_11etreepublic__ElementTagMatcher) __PYX_ERR(3, 159, __pyx_L1_error)
-  __pyx_ptype_4lxml_8includes_11etreepublic__ElementIterator = __Pyx_ImportType(__pyx_t_1, "lxml.etree", "_ElementIterator", sizeof(struct LxmlElementIterator), __Pyx_ImportType_CheckSize_Warn);
-   if (!__pyx_ptype_4lxml_8includes_11etreepublic__ElementIterator) __PYX_ERR(3, 168, __pyx_L1_error)
+  __pyx_ptype_4lxml_8includes_11etreepublic__Document = __Pyx_ImportType_0_29_36(__pyx_t_1, "lxml.etree", "_Document", sizeof(struct LxmlDocument), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(struct LxmlDocument),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_4lxml_8includes_11etreepublic__Document) __PYX_ERR(3, 30, __pyx_L1_error)
+  __pyx_ptype_4lxml_8includes_11etreepublic__Element = __Pyx_ImportType_0_29_36(__pyx_t_1, "lxml.etree", "_Element", sizeof(struct LxmlElement), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(struct LxmlElement),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_4lxml_8includes_11etreepublic__Element) __PYX_ERR(3, 33, __pyx_L1_error)
+  __pyx_ptype_4lxml_8includes_11etreepublic__ElementTree = __Pyx_ImportType_0_29_36(__pyx_t_1, "lxml.etree", "_ElementTree", sizeof(struct LxmlElementTree), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(struct LxmlElementTree),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_4lxml_8includes_11etreepublic__ElementTree) __PYX_ERR(3, 40, __pyx_L1_error)
+  __pyx_ptype_4lxml_8includes_11etreepublic_FallbackElementClassLookup = __Pyx_ImportType_0_29_36(__pyx_t_1, "lxml.etree", "FallbackElementClassLookup", sizeof(struct LxmlFallbackElementClassLookup), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(struct LxmlFallbackElementClassLookup),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_4lxml_8includes_11etreepublic_FallbackElementClassLookup) __PYX_ERR(3, 47, __pyx_L1_error)
+  __pyx_ptype_4lxml_8includes_11etreepublic__ElementTagMatcher = __Pyx_ImportType_0_29_36(__pyx_t_1, "lxml.etree", "_ElementTagMatcher", sizeof(struct LxmlElementTagMatcher), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(struct LxmlElementTagMatcher),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_4lxml_8includes_11etreepublic__ElementTagMatcher) __PYX_ERR(3, 159, __pyx_L1_error)
+  __pyx_ptype_4lxml_8includes_11etreepublic__ElementIterator = __Pyx_ImportType_0_29_36(__pyx_t_1, "lxml.etree", "_ElementIterator", sizeof(struct LxmlElementIterator), __PYX_GET_STRUCT_ALIGNMENT_0_29_36(struct LxmlElementIterator),__Pyx_ImportType_CheckSize_Warn_0_29_36); if (!__pyx_ptype_4lxml_8includes_11etreepublic__ElementIterator) __PYX_ERR(3, 168, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_RefNannyFinishContext();
   return 0;
@@ -41408,7 +41459,7 @@ if (!__Pyx_RefNanny) {
   Py_INCREF(__pyx_b);
   __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
   Py_INCREF(__pyx_cython_runtime);
-  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Initialize various global constants etc. ---*/
   if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
@@ -43000,7 +43051,7 @@ if (!__Pyx_RefNanny) {
 
   /*--- Wrapped vars code ---*/
 
-  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error)
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -43742,7 +43793,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
         return __Pyx_PyFunction_FastCall(func, NULL, 0);
     }
 #endif
-#ifdef __Pyx_CyFunction_USED
+#if defined(__Pyx_CyFunction_USED) && defined(NDEBUG)
     if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
 #else
     if (likely(PyCFunction_Check(func)))
@@ -44202,13 +44253,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     }
     PyErr_SetObject(type, value);
     if (tb) {
-#if CYTHON_COMPILING_IN_PYPY
-        PyObject *tmp_type, *tmp_value, *tmp_tb;
-        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
-        Py_INCREF(tb);
-        PyErr_Restore(tmp_type, tmp_value, tb);
-        Py_XDECREF(tmp_tb);
-#else
+#if CYTHON_FAST_THREAD_STATE
         PyThreadState *tstate = __Pyx_PyThreadState_Current;
         PyObject* tmp_tb = tstate->curexc_traceback;
         if (tb != tmp_tb) {
@@ -44216,6 +44261,12 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             tstate->curexc_traceback = tb;
             Py_XDECREF(tmp_tb);
         }
+#else
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
 #endif
     }
 bad:
@@ -44314,7 +44365,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
 /* ObjectGetItem */
 #if CYTHON_USE_TYPE_SLOTS
 static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
-    PyObject *runerr;
+    PyObject *runerr = NULL;
     Py_ssize_t key_value;
     PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
     if (unlikely(!(m && m->sq_item))) {
@@ -44480,11 +44531,11 @@ static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction*
         if (flag == METH_O) {
             return (*(cfunc->func))(self, arg);
         } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) {
-            if (PY_VERSION_HEX >= 0x030700A0) {
+            #if PY_VERSION_HEX >= 0x030700A0
                 return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1);
-            } else {
+            #else
                 return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
-            }
+            #endif
         } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) {
             return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
         }
@@ -44679,7 +44730,7 @@ static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars,
                 padding = PyUnicode_FromOrdinal(padding_char);
                 if (likely(padding) && uoffset > prepend_sign + 1) {
                     PyObject *tmp;
-                    PyObject *repeat = PyInt_FromSize_t(uoffset - prepend_sign);
+                    PyObject *repeat = PyInt_FromSsize_t(uoffset - prepend_sign);
                     if (unlikely(!repeat)) goto done_or_error;
                     tmp = PyNumber_Multiply(padding, repeat);
                     Py_DECREF(repeat);
@@ -45097,10 +45148,8 @@ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
         Py_DECREF(retval);
         __Pyx_RaiseTooManyValuesError(expected);
         return -1;
-    } else {
-        return __Pyx_IterFinish();
     }
-    return 0;
+    return __Pyx_IterFinish();
 }
 
 /* PyIntBinop */
@@ -46342,9 +46391,14 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P
         self = PyTuple_GetItem(args, 0);
         if (unlikely(!self)) {
             Py_DECREF(new_args);
+#if PY_MAJOR_VERSION > 2
             PyErr_Format(PyExc_TypeError,
                          "unbound method %.200S() needs an argument",
                          cyfunc->func_qualname);
+#else
+            PyErr_SetString(PyExc_TypeError,
+                            "unbound method needs an argument");
+#endif
             return NULL;
         }
         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
@@ -46419,7 +46473,10 @@ static PyTypeObject __pyx_CyFunctionType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
@@ -46554,16 +46611,18 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam
 #endif
 
 /* TypeImport */
-#ifndef __PYX_HAVE_RT_ImportType
-#define __PYX_HAVE_RT_ImportType
-static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name,
-    size_t size, enum __Pyx_ImportType_CheckSize check_size)
+#ifndef __PYX_HAVE_RT_ImportType_0_29_36
+#define __PYX_HAVE_RT_ImportType_0_29_36
+static PyTypeObject *__Pyx_ImportType_0_29_36(PyObject *module, const char *module_name, const char *class_name,
+    size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_0_29_36 check_size)
 {
     PyObject *result = 0;
     char warning[200];
     Py_ssize_t basicsize;
+    Py_ssize_t itemsize;
 #ifdef Py_LIMITED_API
     PyObject *py_basicsize;
+    PyObject *py_itemsize;
 #endif
     result = PyObject_GetAttrString(module, class_name);
     if (!result)
@@ -46576,6 +46635,7 @@ static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name,
     }
 #ifndef Py_LIMITED_API
     basicsize = ((PyTypeObject *)result)->tp_basicsize;
+    itemsize = ((PyTypeObject *)result)->tp_itemsize;
 #else
     py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
     if (!py_basicsize)
@@ -46585,22 +46645,37 @@ static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name,
     py_basicsize = 0;
     if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
         goto bad;
+    py_itemsize = PyObject_GetAttrString(result, "__itemsize__");
+    if (!py_itemsize)
+        goto bad;
+    itemsize = PyLong_AsSsize_t(py_itemsize);
+    Py_DECREF(py_itemsize);
+    py_itemsize = 0;
+    if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred())
+        goto bad;
 #endif
-    if ((size_t)basicsize < size) {
+    if (itemsize) {
+        if (size % alignment) {
+            alignment = size % alignment;
+        }
+        if (itemsize < (Py_ssize_t)alignment)
+            itemsize = (Py_ssize_t)alignment;
+    }
+    if ((size_t)(basicsize + itemsize) < size) {
         PyErr_Format(PyExc_ValueError,
             "%.200s.%.200s size changed, may indicate binary incompatibility. "
             "Expected %zd from C header, got %zd from PyObject",
             module_name, class_name, size, basicsize);
         goto bad;
     }
-    if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) {
+    if (check_size == __Pyx_ImportType_CheckSize_Error_0_29_36 && (size_t)basicsize != size) {
         PyErr_Format(PyExc_ValueError,
             "%.200s.%.200s size changed, may indicate binary incompatibility. "
             "Expected %zd from C header, got %zd from PyObject",
             module_name, class_name, size, basicsize);
         goto bad;
     }
-    else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) {
+    else if (check_size == __Pyx_ImportType_CheckSize_Warn_0_29_36 && (size_t)basicsize > size) {
         PyOS_snprintf(warning, sizeof(warning),
             "%s.%s size changed, may indicate binary incompatibility. "
             "Expected %zd from C header, got %zd from PyObject",
@@ -46710,7 +46785,7 @@ bad:
 
 /* CLineInTraceback */
 #ifndef CYTHON_CLINE_IN_TRACEBACK
-static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
+static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_line) {
     PyObject *use_cline;
     PyObject *ptype, *pvalue, *ptraceback;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -47119,7 +47194,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -47419,7 +47494,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
index 376695a8b9289c1586c95f6c94f8784c2d3d7295..791f2cf8c049298f7329c0fcd83cec29f1a12605 100644 (file)
@@ -976,7 +976,7 @@ cdef _checkNumber(bytes_unicode s, bint allow_float):
     cdef NumberParserState state = NPS_SPACE_PRE
 
     for c in s:
-        if c.isdigit() if (bytes_unicode is unicode) else c in b'0123456789':
+        if c in u'0123456789':
             if state in (NPS_DIGITS, NPS_FRACTION, NPS_DIGITS_EXP):
                 pass
             elif state in (NPS_SPACE_PRE, NPS_SIGN):
index f5baf29b9ba15b01d5452b86b23f9aee09a0e08d..f0c8c6b641fbadbe2e3440ff87f9a91c9ea3c038 100644 (file)
@@ -569,6 +569,9 @@ cdef class _ParserContext(_ResolverContext):
                 self._c_ctxt.disableSAX = 0 # work around bug in libxml2
             else:
                 xmlparser.xmlClearParserCtxt(self._c_ctxt)
+                # work around bug in libxml2 [2.9.10 .. 2.9.14]:
+                # https://gitlab.gnome.org/GNOME/libxml2/-/issues/378
+                self._c_ctxt.nsNr = 0
 
     cdef int prepare(self, bint set_document_loader=True) except -1:
         cdef int result
index 0f9a6c0c9ac68b3d74ca76fcfdb8bbf2108cfb6d..44b68ed20284135a03f82c31a550f69f8a2cf134 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.30 */
+/* Generated by Cython 0.29.36 */
 
 /* BEGIN: Cython Metadata
 {
@@ -32,8 +32,8 @@ END: Cython Metadata */
 #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_30"
-#define CYTHON_HEX_VERSION 0x001D1EF0
+#define CYTHON_ABI "0_29_36"
+#define CYTHON_HEX_VERSION 0x001D24F0
 #define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
@@ -72,6 +72,7 @@ END: Cython Metadata */
   #define CYTHON_COMPILING_IN_PYPY 1
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #undef CYTHON_USE_TYPE_SLOTS
   #define CYTHON_USE_TYPE_SLOTS 0
   #undef CYTHON_USE_PYTYPE_LOOKUP
@@ -100,21 +101,26 @@ END: Cython Metadata */
   #define CYTHON_FAST_THREAD_STATE 0
   #undef CYTHON_FAST_PYCALL
   #define CYTHON_FAST_PYCALL 0
-  #undef CYTHON_PEP489_MULTI_PHASE_INIT
-  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #if PY_VERSION_HEX < 0x03090000
+    #undef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
   #undef CYTHON_USE_TP_FINALIZE
-  #define CYTHON_USE_TP_FINALIZE 0
+  #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
   #undef CYTHON_USE_DICT_VERSIONS
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
-    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
 #elif defined(PYSTON_VERSION)
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -155,10 +161,56 @@ END: Cython Metadata */
   #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
     #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
   #endif
+#elif defined(PY_NOGIL)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #ifndef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE 1
+  #endif
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -178,7 +230,7 @@ END: Cython Metadata */
     #undef CYTHON_USE_PYLONG_INTERNALS
     #define CYTHON_USE_PYLONG_INTERNALS 0
   #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
-    #define CYTHON_USE_PYLONG_INTERNALS 1
+    #define CYTHON_USE_PYLONG_INTERNALS (PY_VERSION_HEX < 0x030C00A5)
   #endif
   #ifndef CYTHON_USE_PYLIST_INTERNALS
     #define CYTHON_USE_PYLIST_INTERNALS 1
@@ -217,7 +269,7 @@ END: Cython Metadata */
     #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
   #endif
   #ifndef CYTHON_USE_DICT_VERSIONS
-    #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+    #define CYTHON_USE_DICT_VERSIONS ((PY_VERSION_HEX >= 0x030600B1) && (PY_VERSION_HEX < 0x030C00A5))
   #endif
   #if PY_VERSION_HEX >= 0x030B00A4
     #undef CYTHON_USE_EXC_INFO_STACK
@@ -340,9 +392,6 @@ END: Cython Metadata */
   #endif
 #endif
 
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
-  #define Py_OptimizeFlag 0
-#endif
 #define __PYX_BUILD_PY_SSIZE_T "n"
 #define CYTHON_FORMAT_SSIZE_T "z"
 #if PY_MAJOR_VERSION < 3
@@ -420,6 +469,11 @@ END: Cython Metadata */
 #endif
   #define __Pyx_DefaultClassType PyType_Type
 #endif
+#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
+#else
+  #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
+#endif
 #ifndef Py_TPFLAGS_CHECKTYPES
   #define Py_TPFLAGS_CHECKTYPES 0
 #endif
@@ -527,11 +581,11 @@ 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)))
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_READY(op)       (0)
   #else
-  #define __Pyx_PyUnicode_READY(op)       (0)
+    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+                                                0 : _PyUnicode_Ready((PyObject *)(op)))
   #endif
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
@@ -540,14 +594,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
-  #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
+  #if PY_VERSION_HEX >= 0x030C0000
+    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #else
-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
+    #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
   #endif
 #else
   #define CYTHON_PEP393_ENABLED 0
@@ -1131,18 +1185,18 @@ static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UIN
 
 /* GetModuleGlobalName.proto */
 #if CYTHON_USE_DICT_VERSIONS
-#define __Pyx_GetModuleGlobalName(var, name)  {\
+#define __Pyx_GetModuleGlobalName(var, name)  do {\
     static PY_UINT64_T __pyx_dict_version = 0;\
     static PyObject *__pyx_dict_cached_value = NULL;\
     (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
         (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
         __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
-#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
+} while(0)
+#define __Pyx_GetModuleGlobalNameUncached(var, name)  do {\
     PY_UINT64_T __pyx_dict_version;\
     PyObject *__pyx_dict_cached_value;\
     (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
-}
+} while(0)
 static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
 #else
 #define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
@@ -6580,7 +6634,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_3sax_19ElementTreeProducer__recursi
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_element, __pyx_n_s_nsmap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 208, __pyx_L1_error)
+  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 208, __pyx_L1_error)
   __pyx_v_element_nsmap = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
@@ -8455,7 +8509,7 @@ static PyObject *__pyx_pf_4lxml_3sax_19ElementTreeProducer_6__setstate_cython__(
  * def __setstate_cython__(self, __pyx_state):
  *     __pyx_unpickle_ElementTreeProducer__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
  */
-  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error)
+  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error)
   __pyx_t_1 = __pyx_f_4lxml_3sax___pyx_unpickle_ElementTreeProducer__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -8846,7 +8900,7 @@ static PyObject *__pyx_pf_4lxml_3sax_2__pyx_unpickle_ElementTreeProducer(CYTHON_
  *     return __pyx_result
  * cdef __pyx_unpickle_ElementTreeProducer__set_state(ElementTreeProducer __pyx_result, tuple __pyx_state):
  */
-    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error)
+    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||((void)PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error)
     __pyx_t_4 = __pyx_f_4lxml_3sax___pyx_unpickle_ElementTreeProducer__set_state(((struct __pyx_obj_4lxml_3sax_ElementTreeProducer *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -9081,7 +9135,7 @@ static PyObject *__pyx_tp_new_4lxml_3sax_ElementTreeProducer(PyTypeObject *t, CY
 static void __pyx_tp_dealloc_4lxml_3sax_ElementTreeProducer(PyObject *o) {
   struct __pyx_obj_4lxml_3sax_ElementTreeProducer *p = (struct __pyx_obj_4lxml_3sax_ElementTreeProducer *)o;
   #if CYTHON_USE_TP_FINALIZE
-  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !__Pyx_PyObject_GC_IsFinalized(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -9194,7 +9248,7 @@ static PyTypeObject __pyx_type_4lxml_3sax_ElementTreeProducer = {
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -9703,7 +9757,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
   __pyx_umethod_PyDict_Type_get.type = (PyObject*)&PyDict_Type;
   __pyx_umethod_PyDict_Type_items.type = (PyObject*)&PyDict_Type;
   __pyx_umethod_PyList_Type_pop.type = (PyObject*)&PyList_Type;
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_30712058 = PyInt_FromLong(30712058L); if (unlikely(!__pyx_int_30712058)) __PYX_ERR(0, 1, __pyx_L1_error)
   __pyx_int_171532296 = PyInt_FromLong(171532296L); if (unlikely(!__pyx_int_171532296)) __PYX_ERR(0, 1, __pyx_L1_error)
@@ -9977,7 +10031,7 @@ if (!__Pyx_RefNanny) {
   Py_INCREF(__pyx_b);
   __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
   Py_INCREF(__pyx_cython_runtime);
-  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Initialize various global constants etc. ---*/
   if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
@@ -10470,7 +10524,7 @@ if (!__Pyx_RefNanny) {
 
   /*--- Wrapped vars code ---*/
 
-  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error);
+  if (__Pyx_RegisterCleanup()) __PYX_ERR(0, 1, __pyx_L1_error)
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -11557,7 +11611,7 @@ static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
 /* ObjectGetItem */
 #if CYTHON_USE_TYPE_SLOTS
 static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
-    PyObject *runerr;
+    PyObject *runerr = NULL;
     Py_ssize_t key_value;
     PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
     if (unlikely(!(m && m->sq_item))) {
@@ -11746,7 +11800,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
         return __Pyx_PyFunction_FastCall(func, NULL, 0);
     }
 #endif
-#ifdef __Pyx_CyFunction_USED
+#if defined(__Pyx_CyFunction_USED) && defined(NDEBUG)
     if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
 #else
     if (likely(PyCFunction_Check(func)))
@@ -11886,10 +11940,8 @@ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
         Py_DECREF(retval);
         __Pyx_RaiseTooManyValuesError(expected);
         return -1;
-    } else {
-        return __Pyx_IterFinish();
     }
-    return 0;
+    return __Pyx_IterFinish();
 }
 
 /* GetAttr */
@@ -12182,13 +12234,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     }
     PyErr_SetObject(type, value);
     if (tb) {
-#if CYTHON_COMPILING_IN_PYPY
-        PyObject *tmp_type, *tmp_value, *tmp_tb;
-        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
-        Py_INCREF(tb);
-        PyErr_Restore(tmp_type, tmp_value, tb);
-        Py_XDECREF(tmp_tb);
-#else
+#if CYTHON_FAST_THREAD_STATE
         PyThreadState *tstate = __Pyx_PyThreadState_Current;
         PyObject* tmp_tb = tstate->curexc_traceback;
         if (tb != tmp_tb) {
@@ -12196,6 +12242,12 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             tstate->curexc_traceback = tb;
             Py_XDECREF(tmp_tb);
         }
+#else
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
 #endif
     }
 bad:
@@ -12314,11 +12366,11 @@ static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction*
         if (flag == METH_O) {
             return (*(cfunc->func))(self, arg);
         } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) {
-            if (PY_VERSION_HEX >= 0x030700A0) {
+            #if PY_VERSION_HEX >= 0x030700A0
                 return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1);
-            } else {
+            #else
                 return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
-            }
+            #endif
         } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) {
             return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
         }
@@ -13285,9 +13337,14 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P
         self = PyTuple_GetItem(args, 0);
         if (unlikely(!self)) {
             Py_DECREF(new_args);
+#if PY_MAJOR_VERSION > 2
             PyErr_Format(PyExc_TypeError,
                          "unbound method %.200S() needs an argument",
                          cyfunc->func_qualname);
+#else
+            PyErr_SetString(PyExc_TypeError,
+                            "unbound method needs an argument");
+#endif
             return NULL;
         }
         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
@@ -13362,7 +13419,10 @@ static PyTypeObject __pyx_CyFunctionType_type = {
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+#if PY_VERSION_HEX >= 0x030C0000
+    0,
+#endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
     0,
 #endif
 };
@@ -13476,7 +13536,7 @@ bad:
 
 /* CLineInTraceback */
 #ifndef CYTHON_CLINE_IN_TRACEBACK
-static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
+static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_line) {
     PyObject *use_cline;
     PyObject *ptype, *pvalue, *ptraceback;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -13785,7 +13845,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
@@ -14019,7 +14079,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                     break;
             }
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
index 3e52258ed1351fbc75feb71ec23de1e2527e44d1..0339796d63646328ebaec5d53d048076bc129909 100644 (file)
@@ -241,6 +241,18 @@ class ETreeOnlyTestCase(HelperTestCase):
         a[0].clear(keep_tail=True)
         self.assertEqual(_bytes('<a aa="A"><b/>B2<c ca="C">C1</c>C2</a>'), tostring(a))
 
+    def test_attrib_is_Mapping(self):
+        try:
+            from collections.abc import Mapping, MutableMapping
+        except ImportError:
+            from collections import Mapping, MutableMapping  # Py2
+
+        Element = self.etree.Element
+        root = Element("root")
+
+        self.assertTrue(isinstance(root.attrib, Mapping))
+        self.assertTrue(isinstance(root.attrib, MutableMapping))
+
     def test_attribute_has_key(self):
         # ET in Py 3.x has no "attrib.has_key()" method
         XML = self.etree.XML
@@ -1479,8 +1491,7 @@ class ETreeOnlyTestCase(HelperTestCase):
             # This would be the expected result, because there was no namespace
             pass
         else:
-            # This is a bug in libxml2
-            assert not ns, repr(ns)
+            assert False, "Found unexpected namespace '%s'" % ns
 
     def test_itertext_comment_pi(self):
         # https://bugs.launchpad.net/lxml/+bug/1844674
index f50a34474ebc76f35ea23ebb3e7608507c3dd0ca..a62df85227a0eafb36d9fea0f81f15bf184749c9 100644 (file)
@@ -2663,6 +2663,7 @@ class ObjectifyTestCase(HelperTestCase):
           <s>t</s>
           <s>f</s>
           <s></s>
+          <s>²²²²</s>
           <s>12_34</s>
           <s>1.2_34</s>
           <s>34E</s>
index d483cfa30f8087fea60d753ab3b1851dc8d2601a..559b277bc145ac46a3e879b6107f869b9b36070f 100644 (file)
@@ -353,7 +353,8 @@ cdef class XSLT:
 
     Keyword arguments of the XSLT call:
 
-    - profile_run: enable XSLT profiling (default: False)
+    - profile_run: enable XSLT profiling and make the profile available
+      as XML document in ``result.xslt_profile`` (default: False)
 
     Other keyword arguments of the call are passed to the stylesheet
     as parameters.
diff --git a/tools/pypistats.py b/tools/pypistats.py
new file mode 100644 (file)
index 0000000..31cbc9e
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/env python3
+import json
+from collections import defaultdict
+from urllib.request import urlopen
+import ssl
+
+PACKAGE = "lxml"
+
+
+def get_stats(stats_type, package=PACKAGE, period="month"):
+    stats_url = f"https://www.pypistats.org/api/packages/{package}/{stats_type}?period={period}"
+
+    ctx = ssl.create_default_context()
+    ctx.check_hostname = False
+    ctx.verify_mode = ssl.CERT_NONE
+
+    with urlopen(stats_url, context=ctx) as stats:
+        data = json.load(stats)
+    return data
+
+
+def aggregate(stats):
+    counts = defaultdict(int)
+    days = defaultdict(int)
+    for entry in stats['data']:
+        category = entry['category']
+        counts[category] += entry['downloads']
+        days[category] += 1
+    return {category: counts[category] / days[category] for category in counts}
+
+
+def version_sorter(version_and_count):
+    version = version_and_count[0]
+    return tuple(map(int, version.split("."))) if version.replace(".", "").isdigit() else (2**32,)
+
+
+def system_sorter(name_and_count):
+    order = ('linux', 'windows', 'darwin')
+    system = name_and_count[0]
+    try:
+        return order.index(system.lower())
+    except ValueError:
+        return len(order)
+
+
+def print_agg_stats(stats, sort_key=None):
+    total = sum(stats.values())
+    max_len = max(len(category) for category in stats)
+    agg_sum = 0.0
+    for category, count in sorted(stats.items(), key=sort_key, reverse=True):
+        agg_sum += count
+        print(f"  {category:{max_len}}: {count:-12.1f} / day ({agg_sum / total * 100:-5.1f}%)")
+
+
+def main():
+    import sys
+    package_name = sys.argv[1] if len(sys.argv) > 1 else PACKAGE
+
+    counts = get_stats("python_minor", package=package_name)
+    stats = aggregate(counts)
+    print("Downloads by Python version:")
+    print_agg_stats(stats, sort_key=version_sorter)
+
+    print()
+    counts = get_stats("system", package=package_name)
+    stats = aggregate(counts)
+    print("Downloads by system:")
+    print_agg_stats(stats, sort_key=system_sorter)
+
+    total = sum(stats.values())
+    days = {"month": 30, "week": 7, "day": 1}
+    print(f"Total downloads: {total * days['month']:-12,.1f}")
+
+
+if __name__ == '__main__':
+    main()