1*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates. 2*523fa7a6SAndroid Build Coastguard Worker# All rights reserved. 3*523fa7a6SAndroid Build Coastguard Worker# 4*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 5*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 6*523fa7a6SAndroid Build Coastguard Worker 7*523fa7a6SAndroid Build Coastguard Workerfrom xml.etree import ElementTree as ET 8*523fa7a6SAndroid Build Coastguard Worker 9*523fa7a6SAndroid Build Coastguard Workerfrom executorch.exir.verification.interpreter import Interpreter 10*523fa7a6SAndroid Build Coastguard Worker 11*523fa7a6SAndroid Build Coastguard Worker 12*523fa7a6SAndroid Build Coastguard Workerdef get_header(name): 13*523fa7a6SAndroid Build Coastguard Worker h2 = ET.Element("h2") 14*523fa7a6SAndroid Build Coastguard Worker span = ET.Element("span") 15*523fa7a6SAndroid Build Coastguard Worker span.text = name 16*523fa7a6SAndroid Build Coastguard Worker h2.append(span) 17*523fa7a6SAndroid Build Coastguard Worker 18*523fa7a6SAndroid Build Coastguard Worker return h2 19*523fa7a6SAndroid Build Coastguard Worker 20*523fa7a6SAndroid Build Coastguard Worker 21*523fa7a6SAndroid Build Coastguard Workerdef iterable_to_html(s): 22*523fa7a6SAndroid Build Coastguard Worker res = ET.Element("span") 23*523fa7a6SAndroid Build Coastguard Worker val_node = ET.SubElement(res, "p") 24*523fa7a6SAndroid Build Coastguard Worker 25*523fa7a6SAndroid Build Coastguard Worker for e in s: 26*523fa7a6SAndroid Build Coastguard Worker br = ET.SubElement(val_node, "br") 27*523fa7a6SAndroid Build Coastguard Worker br.text = str(e) 28*523fa7a6SAndroid Build Coastguard Worker return res 29*523fa7a6SAndroid Build Coastguard Worker 30*523fa7a6SAndroid Build Coastguard Worker 31*523fa7a6SAndroid Build Coastguard Workerdef gen_html(program): 32*523fa7a6SAndroid Build Coastguard Worker test = Interpreter(program) 33*523fa7a6SAndroid Build Coastguard Worker prog_opset = set(test.get_operators_list()) 34*523fa7a6SAndroid Build Coastguard Worker 35*523fa7a6SAndroid Build Coastguard Worker prog_vals = test.get_constant_tensors() 36*523fa7a6SAndroid Build Coastguard Worker html = ET.Element("html") 37*523fa7a6SAndroid Build Coastguard Worker 38*523fa7a6SAndroid Build Coastguard Worker head = ET.Element("head") 39*523fa7a6SAndroid Build Coastguard Worker html.append(head) 40*523fa7a6SAndroid Build Coastguard Worker 41*523fa7a6SAndroid Build Coastguard Worker title = ET.Element("title") 42*523fa7a6SAndroid Build Coastguard Worker head.append(title) 43*523fa7a6SAndroid Build Coastguard Worker title.text = "Model" 44*523fa7a6SAndroid Build Coastguard Worker 45*523fa7a6SAndroid Build Coastguard Worker body = ET.Element("body") 46*523fa7a6SAndroid Build Coastguard Worker html.append(body) 47*523fa7a6SAndroid Build Coastguard Worker div = ET.Element( 48*523fa7a6SAndroid Build Coastguard Worker "div", 49*523fa7a6SAndroid Build Coastguard Worker attrib={ 50*523fa7a6SAndroid Build Coastguard Worker "id": "main_content", 51*523fa7a6SAndroid Build Coastguard Worker "style": "position: absolute; width: 99%; height: 100%; overflow: scroll;", 52*523fa7a6SAndroid Build Coastguard Worker }, 53*523fa7a6SAndroid Build Coastguard Worker ) 54*523fa7a6SAndroid Build Coastguard Worker body.append(div) 55*523fa7a6SAndroid Build Coastguard Worker 56*523fa7a6SAndroid Build Coastguard Worker # Header: Operator List 57*523fa7a6SAndroid Build Coastguard Worker div.append(get_header("Operator List")) 58*523fa7a6SAndroid Build Coastguard Worker 59*523fa7a6SAndroid Build Coastguard Worker # Burn in data 60*523fa7a6SAndroid Build Coastguard Worker div.append(iterable_to_html(prog_opset)) 61*523fa7a6SAndroid Build Coastguard Worker 62*523fa7a6SAndroid Build Coastguard Worker # Header: Constant Tensor List 63*523fa7a6SAndroid Build Coastguard Worker div.append(get_header("Constant Tensor List")) 64*523fa7a6SAndroid Build Coastguard Worker 65*523fa7a6SAndroid Build Coastguard Worker # Burn in data 66*523fa7a6SAndroid Build Coastguard Worker div.append(iterable_to_html(prog_vals)) 67*523fa7a6SAndroid Build Coastguard Worker 68*523fa7a6SAndroid Build Coastguard Worker return ET.tostring(html) 69