"""
创建算子配置 Excel 模板
使用方法:
python create_operator_template.py
生成文件:
operator_config_template.xlsx
"""
import openpyxl
from openpyxl.styles import Font, PatternFill, Alignment
def create_template():
"""创建算子配置 Excel 模板"""
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "算子配置"
ws.column_dimensions['A'].width = 25
ws.column_dimensions['B'].width = 15
ws.column_dimensions['C'].width = 30
ws.column_dimensions['D'].width = 30
ws.column_dimensions['E'].width = 30
ws.column_dimensions['F'].width = 30
ws.column_dimensions['G'].width = 40
headers = ["算子名称", "所属仓", "输入格式", "输入类型", "输出格式", "输出类型", "备注"]
header_font = Font(bold=True, color="FFFFFF")
header_fill = PatternFill(start_color="366092", end_color="366092", fill_type="solid")
header_alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
for col, header in enumerate(headers, start=1):
cell = ws.cell(row=1, column=col, value=header)
cell.font = header_font
cell.fill = header_fill
cell.alignment = header_alignment
examples = [
["Add", "op-arithmetic", "NCHW,ND", "FLOAT16,FLOAT32,INT32", "", "", "支持多种输入格式和类型"],
["Conv2D", "op-nn", "NCHW,NHWC", "FLOAT16,FLOAT32", "NCHW,NHWC", "FLOAT16,FLOAT32", "卷积算子"],
["LayerNorm", "op-nn", "ND", "FLOAT16,FLOAT32", "ND", "FLOAT16,FLOAT32", "归一化算子,需要gamma/beta参数"],
["MatMul", "op-nn", "ND", "FLOAT16,FLOAT32,INT32", "ND", "FLOAT16,FLOAT32", "矩阵乘法"],
["Resize", "op-vision", "NCHW,NHWC", "FLOAT16,FLOAT32,UINT8", "NCHW,NHWC", "FLOAT16,FLOAT32", "图像缩放算子"],
["Cast", "op-conversion", "", "ALL", "", "ALL", "类型转换算子,支持所有类型"],
["Transpose", "op-conversion", "ND", "FLOAT16,FLOAT32,INT32,INT8,UINT8", "ND", "FLOAT16,FLOAT32,INT32,INT8,UINT8", "转置算子"],
]
for row_idx, example in enumerate(examples, start=2):
for col_idx, value in enumerate(example, start=1):
ws.cell(row=row_idx, column=col_idx, value=value)
info_ws = wb.create_sheet("配置说明")
info = [
["算子配置 Excel 说明"],
[""],
["列说明:"],
["A. 算子名称", "算子的标准名称,如 Add, Conv2D 等"],
["B. 所属仓", "算子所属的仓目录,如 op-nn, op-arithmetic 等"],
["C. 输入格式", "支持的输入数据格式,用逗号分隔,如 NCHW,NHWC,ND"],
[" 可选值:", "NCHW, NHWC, ND, NC1KHKWHC0 等"],
[" 留空:", "表示不限制格式"],
["D. 输入类型", "支持的输入数据类型,用逗号分隔,如 FLOAT16,FLOAT32,INT32"],
[" 可选值:", "FLOAT16, FLOAT32, INT32, INT8, UINT8, BOOL, ALL 等"],
[" 留空:", "表示不限制类型"],
["E. 输出格式", "支持的输出数据格式,用逗号分隔"],
["F. 输出类型", "支持的输出数据类型,用逗号分隔"],
["G. 备注", "其他说明信息"],
[""],
["使用示例:"],
["1. 只支持特定格式", "在输入格式列填写: NCHW,NHWC"],
["2. 支持所有类型", "在输入类型列填写: ALL"],
["3. 不限制格式", "将输入格式列留空"],
[""],
["注意事项:"],
["- 格式和类型使用大写"],
["- 多个值用英文逗号分隔"],
["- 确保仓目录名称正确"],
["- 备注信息可以包含使用说明或特殊要求"],
]
for row_idx, row_data in enumerate(info, start=1):
if isinstance(row_data, list):
for col_idx, value in enumerate(row_data, start=1):
cell = info_ws.cell(row=row_idx, column=col_idx, value=value)
if row_idx == 1:
cell.font = Font(bold=True, size=14)
elif row_data[0].endswith(':'):
cell.font = Font(bold=True)
else:
cell = info_ws.cell(row=row_idx, column=1, value=row_data)
info_ws.column_dimensions['A'].width = 20
info_ws.column_dimensions['B'].width = 60
output_file = "operator_config_template.xlsx"
wb.save(output_file)
print(f"✓ 模板已创建: {output_file}")
print(f"\n使用说明:")
print(f" 1. 打开 {output_file}")
print(f" 2. 在 '算子配置' 工作表中填写算子信息")
print(f" 3. 保存为新的配置文件,如 my_operators_config.xlsx")
print(f" 4. 运行替换工具:python op_loge_replace.py --operator-config my_operators_config.xlsx")
return output_file
if __name__ == "__main__":
create_template()