Files
shap--shap/scripts/run_notebooks_timeouts.py
2026-07-13 13:22:52 +08:00

105 lines
6.0 KiB
Python

import time
from pathlib import Path
import nbformat
from jupyter_client import kernelspec
from jupyter_client.manager import KernelManager
from nbconvert.preprocessors import CellExecutionError, ExecutePreprocessor
TIMEOUT = 30 # seconds
allow_to_fail = [
Path("api_examples/explainers/GPUTree.ipynb"),
Path("api_examples/plots/decision_plot.ipynb"),
Path("benchmarks/others/Benchmark Debug Mode.ipynb"),
Path("benchmarks/text/Abstractive Summarization Benchmark Demo.ipynb"),
Path("benchmarks/text/Text Emotion Multiclass Classification Benchmark Demo.ipynb"),
Path("genomic_examples/DeepExplainer Genomics Example.ipynb"),
Path("image_examples/image_captioning/Image Captioning using Azure Cognitive Services.ipynb"),
Path("image_examples/image_captioning/Image Captioning using Open Source.ipynb"),
Path("image_examples/image_classification/Image Multi Class.ipynb"),
Path("overviews/An introduction to explainable AI with Shapley values.ipynb"),
Path("overviews/Be careful when interpreting predictive models in search of causal insights.ipynb"),
Path("overviews/Explaining quantitative measures of fairness.ipynb"),
Path("tabular_examples/model_agnostic/Multioutput Regression SHAP.ipynb"),
Path("tabular_examples/neural_networks/Census income classification with Keras.ipynb"),
Path("tabular_examples/tree_based_models/League of Legends Win Prediction with XGBoost.ipynb"),
Path("tabular_examples/tree_based_models/Perfomance Comparison.ipynb"),
Path("tabular_examples/tree_based_models/tree_shap_paper/Figure 6 - Supervised Clustering R-squared.ipynb"),
Path("tabular_examples/tree_based_models/tree_shap_paper/Figure 7 - Airline Tweet Sentiment Analysis.ipynb"),
Path("tabular_examples/tree_based_models/tree_shap_paper/Figures 8-11 NHANES I Survival Model-Copy1.ipynb"),
Path("tabular_examples/tree_based_models/tree_shap_paper/Figures 8-11 NHANES I Survival Model.ipynb"),
Path("tabular_examples/tree_based_models/tree_shap_paper/Performance comparison copy.ipynb"),
Path("tabular_examples/tree_based_models/tree_shap_paper/Performance comparison.ipynb"),
Path("tabular_examples/tree_based_models/tree_shap_paper/Tree SHAP in Python.ipynb"),
]
allow_to_timeout = [
Path("api_examples/plots/beeswarm.ipynb"),
Path("api_examples/plots/image.ipynb"),
Path("api_examples/plots/text.ipynb"),
Path("api_examples/plots/waterfall.ipynb"),
Path("benchmarks/image/Image Multiclass Classification Benchmark Demo.ipynb"),
Path("benchmarks/tabular/Benchmark XGBoost explanations.ipynb"),
Path("benchmarks/tabular/Tabular Prediction Benchmark Demo.ipynb"),
Path("benchmarks/text/Machine Translation Benchmark Demo.ipynb"),
Path("image_examples/image_classification/Explain MobilenetV2 using the Partition explainer (PyTorch).ipynb"),
Path("image_examples/image_classification/Explain ResNet50 using the Partition explainer.ipynb"),
Path("image_examples/image_classification/Explain an Intermediate Layer of VGG16 on ImageNet (PyTorch).ipynb"),
Path("image_examples/image_classification/Explain an Intermediate Layer of VGG16 on ImageNet.ipynb"),
Path("image_examples/image_classification/Front Page DeepExplainer MNIST Example.ipynb"),
Path("image_examples/image_classification/Multi-class ResNet50 on ImageNet (TensorFlow)-checkpoint.ipynb"),
Path("image_examples/image_classification/Multi-class ResNet50 on ImageNet (TensorFlow).ipynb"),
Path("image_examples/image_classification/Multi-input Gradient Explainer MNIST Example.ipynb"),
Path("tabular_examples/linear_models/Explaining a model that uses standardized features.ipynb"),
Path("tabular_examples/model_agnostic/Census income classification with scikit-learn.ipynb"),
Path("tabular_examples/tree_based_models/Census income classification with XGBoost.ipynb"),
Path("tabular_examples/tree_based_models/NHANES I Survival Model.ipynb"),
Path("text_examples/language_modelling/Language Modeling Explanation Demo.ipynb"),
Path("text_examples/question_answering/Explaining a Question Answering Transformers Model.ipynb"),
Path("text_examples/sentiment_analysis/Emotion classification multiclass example.ipynb"),
Path("text_examples/sentiment_analysis/Keras LSTM for IMDB Sentiment Classification.ipynb"),
Path("text_examples/sentiment_analysis/Using custom functions and tokenizers.ipynb"),
Path("text_examples/summarization/Abstractive Summarization Explanation Demo.ipynb"),
Path("text_examples/text_entailment/Textual Entailment Explanation Demo.ipynb"),
Path("text_examples/text_generation/Open Ended GPT2 Text Generation Explanations.ipynb"),
Path("text_examples/translation/Machine Translation Explanations.ipynb"),
]
def main():
notebooks_directory = Path("notebooks")
notebooks_to_run = (
set(notebooks_directory.rglob("*.ipynb"))
- set([notebooks_directory / nb for nb in allow_to_fail])
- set([notebooks_directory / nb for nb in allow_to_timeout])
)
ep = ExecutePreprocessor(timeout=TIMEOUT, log_level=40)
kernel_name = list(kernelspec.find_kernel_specs())[0]
km = KernelManager(kernel_name=kernel_name)
encountered_failure = False
for notebook_path in notebooks_to_run:
with open(notebook_path) as f:
nb = nbformat.read(f, as_version=4)
start_time = time.time()
try:
ep.preprocess(nb, resources={"metadata": {"path": str(notebook_path.parent)}}, km=km)
print(f"Executed notebook {notebook_path} in {time.time() - start_time:.2f} seconds.")
except CellExecutionError as e:
print(f"FAILED: {notebook_path}:\n{e}")
encountered_failure = True
except TimeoutError:
print(f"TIMED OUT: Execution of {notebook_path} timed out after {TIMEOUT} seconds.")
encountered_failure = True
if encountered_failure:
raise RuntimeError("Not all notebooks executed successfully.")
else:
print("All notebooks executed successfully.")
if __name__ == "__main__":
main()