mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 21:14:14 +08:00
See https://github.com/pytorch/pytorch/pull/129751#issue-2380881501. Most changes are auto-generated by linter. You can review these PRs via: ```bash git diff --ignore-all-space --ignore-blank-lines HEAD~1 ``` Pull Request resolved: https://github.com/pytorch/pytorch/pull/129752 Approved by: https://github.com/ezyang, https://github.com/malfet
137 lines
3.5 KiB
Python
137 lines
3.5 KiB
Python
import functools
|
|
import os
|
|
import warnings
|
|
|
|
|
|
try:
|
|
import lxml.etree
|
|
|
|
p = lxml.etree.XMLParser(huge_tree=True)
|
|
parse = functools.partial(lxml.etree.parse, parser=p)
|
|
except ImportError:
|
|
import xml.etree.ElementTree as ET
|
|
|
|
parse = ET.parse
|
|
warnings.warn(
|
|
"lxml was not found. `pip install lxml` to make this script run much faster"
|
|
)
|
|
|
|
|
|
def open_test_results(directory):
|
|
xmls = []
|
|
for root, _, files in os.walk(directory):
|
|
for file in files:
|
|
if file.endswith(".xml"):
|
|
tree = parse(f"{root}/{file}")
|
|
xmls.append(tree)
|
|
return xmls
|
|
|
|
|
|
def get_testcases(xmls):
|
|
testcases = []
|
|
for xml in xmls:
|
|
root = xml.getroot()
|
|
testcases.extend(list(root.iter("testcase")))
|
|
return testcases
|
|
|
|
|
|
def find(testcase, condition):
|
|
children = list(testcase.iter())
|
|
assert children[0] is testcase
|
|
children = children[1:]
|
|
return condition(children)
|
|
|
|
|
|
def skipped_test(testcase):
|
|
def condition(children):
|
|
return "skipped" in {child.tag for child in children}
|
|
|
|
return find(testcase, condition)
|
|
|
|
|
|
def passed_test(testcase):
|
|
def condition(children):
|
|
if len(children) == 0:
|
|
return True
|
|
tags = {child.tag for child in children}
|
|
return "skipped" not in tags and "failed" not in tags
|
|
|
|
return find(testcase, condition)
|
|
|
|
|
|
def key(testcase):
|
|
file = testcase.attrib.get("file", "UNKNOWN")
|
|
classname = testcase.attrib["classname"]
|
|
name = testcase.attrib["name"]
|
|
return "::".join([file, classname, name])
|
|
|
|
|
|
def get_passed_testcases(xmls):
|
|
testcases = get_testcases(xmls)
|
|
passed_testcases = [testcase for testcase in testcases if passed_test(testcase)]
|
|
return passed_testcases
|
|
|
|
|
|
def get_excluded_testcases(xmls):
|
|
testcases = get_testcases(xmls)
|
|
excluded_testcases = [t for t in testcases if excluded_testcase(t)]
|
|
return excluded_testcases
|
|
|
|
|
|
def excluded_testcase(testcase):
|
|
def condition(children):
|
|
for child in children:
|
|
if child.tag == "skipped":
|
|
if "Policy: we don't run" in child.attrib["message"]:
|
|
return True
|
|
return False
|
|
|
|
return find(testcase, condition)
|
|
|
|
|
|
def is_unexpected_success(testcase):
|
|
def condition(children):
|
|
for child in children:
|
|
if child.tag != "failure":
|
|
continue
|
|
is_unexpected_success = (
|
|
"unexpected success" in child.attrib["message"].lower()
|
|
)
|
|
if is_unexpected_success:
|
|
return True
|
|
return False
|
|
|
|
return find(testcase, condition)
|
|
|
|
|
|
MSG = "This test passed, maybe we can remove the skip from dynamo_test_failures.py"
|
|
|
|
|
|
def is_passing_skipped_test(testcase):
|
|
def condition(children):
|
|
for child in children:
|
|
if child.tag != "skipped":
|
|
continue
|
|
has_passing_skipped_test_msg = MSG in child.attrib["message"]
|
|
if has_passing_skipped_test_msg:
|
|
return True
|
|
return False
|
|
|
|
return find(testcase, condition)
|
|
|
|
|
|
# NB: not an unexpected success
|
|
def is_failure(testcase):
|
|
def condition(children):
|
|
for child in children:
|
|
if child.tag != "failure":
|
|
continue
|
|
is_unexpected_success = (
|
|
"unexpected success" in child.attrib["message"].lower()
|
|
)
|
|
if not is_unexpected_success:
|
|
return True
|
|
return False
|
|
|
|
return find(testcase, condition)
|