Blame benchmark/bench_xpath.py

Packit Service b74dd5
from itertools import *
Packit Service b74dd5
Packit Service b74dd5
import benchbase
Packit Service b74dd5
from benchbase import onlylib, children, nochange
Packit Service b74dd5
Packit Service b74dd5
############################################################
Packit Service b74dd5
# Benchmarks
Packit Service b74dd5
############################################################
Packit Service b74dd5
Packit Service b74dd5
class XPathBenchMark(benchbase.TreeBenchMark):
Packit Service b74dd5
    @nochange
Packit Service b74dd5
    @onlylib('lxe')
Packit Service b74dd5
    @children
Packit Service b74dd5
    def bench_xpath_class(self, children):
Packit Service b74dd5
        xpath = self.etree.XPath("./*[1]")
Packit Service b74dd5
        for child in children:
Packit Service b74dd5
            xpath(child)
Packit Service b74dd5
Packit Service b74dd5
    @nochange
Packit Service b74dd5
    @onlylib('lxe')
Packit Service b74dd5
    @children
Packit Service b74dd5
    def bench_xpath_class_repeat(self, children):
Packit Service b74dd5
        for child in children:
Packit Service b74dd5
            xpath = self.etree.XPath("./*[1]")
Packit Service b74dd5
            xpath(child)
Packit Service b74dd5
Packit Service b74dd5
    @nochange
Packit Service b74dd5
    @onlylib('lxe')
Packit Service b74dd5
    def bench_xpath_element(self, root):
Packit Service b74dd5
        xpath = self.etree.XPathElementEvaluator(root)
Packit Service b74dd5
        for child in root:
Packit Service b74dd5
            xpath.evaluate("./*[1]")
Packit Service b74dd5
Packit Service b74dd5
    @nochange
Packit Service b74dd5
    @onlylib('lxe')
Packit Service b74dd5
    @children
Packit Service b74dd5
    def bench_xpath_method(self, children):
Packit Service b74dd5
        for child in children:
Packit Service b74dd5
            child.xpath("./*[1]")
Packit Service b74dd5
Packit Service b74dd5
    @nochange
Packit Service b74dd5
    @onlylib('lxe')
Packit Service b74dd5
    @children
Packit Service b74dd5
    def bench_multiple_xpath_or(self, children):
Packit Service b74dd5
        xpath = self.etree.XPath(".//p:a00001|.//p:b00001|.//p:c00001",
Packit Service b74dd5
                                 namespaces={'p':'cdefg'})
Packit Service b74dd5
        for child in children:
Packit Service b74dd5
            xpath(child)
Packit Service b74dd5
Packit Service b74dd5
    @nochange
Packit Service b74dd5
    @onlylib('lxe')
Packit Service b74dd5
    @children
Packit Service b74dd5
    def bench_multiple_iter_tag(self, children):
Packit Service b74dd5
        for child in children:
Packit Service b74dd5
            list(child.iter("{cdefg}a00001"))
Packit Service b74dd5
            list(child.iter("{cdefg}b00001"))
Packit Service b74dd5
            list(child.iter("{cdefg}c00001"))
Packit Service b74dd5
Packit Service b74dd5
    @nochange
Packit Service b74dd5
    @onlylib('lxe')
Packit Service b74dd5
    @children
Packit Service b74dd5
    def bench_xpath_old_extensions(self, children):
Packit Service b74dd5
        def return_child(_, elements):
Packit Service b74dd5
            if elements:
Packit Service b74dd5
                return elements[0][0]
Packit Service b74dd5
            else:
Packit Service b74dd5
                return ()
Packit Service b74dd5
        extensions = {("test", "child") : return_child}
Packit Service b74dd5
        xpath = self.etree.XPath("t:child(.)", namespaces={"t":"test"},
Packit Service b74dd5
                                 extensions=extensions)
Packit Service b74dd5
        for child in children:
Packit Service b74dd5
            xpath(child)
Packit Service b74dd5
Packit Service b74dd5
    @nochange
Packit Service b74dd5
    @onlylib('lxe')
Packit Service b74dd5
    @children
Packit Service b74dd5
    def bench_xpath_extensions(self, children):
Packit Service b74dd5
        def return_child(_, elements):
Packit Service b74dd5
            if elements:
Packit Service b74dd5
                return elements[0][0]
Packit Service b74dd5
            else:
Packit Service b74dd5
                return ()
Packit Service b74dd5
        self.etree.FunctionNamespace("testns")["t"] = return_child
Packit Service b74dd5
Packit Service b74dd5
        try:
Packit Service b74dd5
            xpath = self.etree.XPath("test:t(.)", namespaces={"test":"testns"})
Packit Service b74dd5
            for child in children:
Packit Service b74dd5
                xpath(child)
Packit Service b74dd5
        finally:
Packit Service b74dd5
            del self.etree.FunctionNamespace("testns")["t"]
Packit Service b74dd5
Packit Service b74dd5
if __name__ == '__main__':
Packit Service b74dd5
    benchbase.main(XPathBenchMark)