openvino_notebooks / .ci /check_notebooks.py
malvika2003's picture
Upload folder using huggingface_hub
db5855f verified
raw
history blame
3.19 kB
import sys
import json
from table_of_content import find_tc_in_cell
from patch_notebooks import DEVICE_WIDGET
from pathlib import Path
NOTEBOOKS_ROOT = Path(__file__).resolve().parents[1]
EXPECTED_NO_DEVICE = [
Path("notebooks/auto-device/auto-device.ipynb"), # auto device expected to be used
Path("notebooks/convert-to-openvino/convert-to-openvino.ipynb"), # device-agnostic
Path("notebooks/convert-to-openvino/legacy-mo-convert-to-openvino.ipynb"), # device-agnostic
Path("notebooks/gpu-device/gpu-device.ipynb"), # gpu device expected to be used
Path("notebooks/hello-npu/hello-npu.ipynb"), # npu device expected to be used
Path("notebooks/model-server/model-server.ipynb"), # can not change device in docker configuration on the fly
Path("notebooks/openvino-tokenizers/openvino-tokenizers.ipynb"), # cpu required for loading extensions
Path("notebooks/sparsity-optimization/sparsity-optimization.ipynb"), # cpu expected to be used
]
def find_device_in_cell(cell):
for line_idx, line in enumerate(cell["source"]):
if DEVICE_WIDGET in line:
return line_idx
return None
def main():
all_passed = True
no_tocs = []
no_device = []
def complain(message):
nonlocal all_passed
all_passed = False
print(message, file=sys.stderr)
for nb_path in NOTEBOOKS_ROOT.glob("notebooks/**/*.ipynb"):
with open(nb_path, "r", encoding="utf-8") as notebook_file:
notebook_json = json.load(notebook_file)
toc_found = False
device_found = False
if nb_path.relative_to(NOTEBOOKS_ROOT) in EXPECTED_NO_DEVICE:
print(f"SKIPPED: {nb_path.relative_to(NOTEBOOKS_ROOT)} for device wdget check")
device_found = True
for cell in notebook_json["cells"]:
if not toc_found and cell["cell_type"] == "markdown":
tc_cell, tc_line = find_tc_in_cell(cell)
if tc_line is not None:
toc_found = True
if not device_found and find_device_in_cell(cell) is not None:
device_found = True
if toc_found and device_found:
break
if not toc_found:
no_tocs.append(str(nb_path.relative_to(NOTEBOOKS_ROOT)))
complain(f"FAILED: {nb_path.relative_to(NOTEBOOKS_ROOT)}: table of content is not found")
if not device_found:
no_device.append(str(nb_path.relative_to(NOTEBOOKS_ROOT)))
complain(f"FAILED: {nb_path.relative_to(NOTEBOOKS_ROOT)}: device widget is not found")
if not all_passed:
print("SUMMARY:")
print("==================================")
if no_tocs:
print("NO TABLE OF CONTENT:")
print("\n".join(no_tocs))
print("==================================")
if no_device:
print("NO DEVICE SELECTION:")
print("\n".join(no_device))
sys.exit(0 if all_passed else 1)
if __name__ == "__main__":
main()