Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
probml
GitHub Repository: probml/pyprobml
Path: blob/master/internal/add_chapterwise_readme.ipynb
1191 views
Kernel: Python [conda env:root] *
import re from glob import glob import requests import pandas as pd import os from probml_utils.url_utils import is_dead_url,make_url_from_chapter_no_and_script_name, extract_scripts_name_from_caption from TexSoup import TexSoup

Get chapter names

chap_names = {} for chap_no in range(1,24): suppl = f"../../pml-book/pml1/supplements/chap{chap_no}.md" with open(suppl, "r") as fp: text = fp.read() names = re.findall(r"Chapter.+?[(](.+)[)]",text) chap_names[chap_no] = names[0] print(chap_no, names)
1 ['Introduction'] 2 ['Probability: univariate models'] 3 ['Probability: multivariate models'] 4 ['Statistics'] 5 ['Decision theory'] 6 ['Information theory'] 7 ['Linear algebra'] 8 ['Optimization'] 9 ['Linear discriminant analysis'] 10 ['Logistic regression'] 11 ['Linear regression'] 12 ['Generalized linear models'] 13 ['Neural networks for unstructured data'] 14 ['Neural networks for images'] 15 ['Neural networks for sequences'] 16 ['Exemplar-based methods'] 17 ['Kernel methods'] 18 ['Trees'] 19 ['Learning with fewer labeled examples'] 20 ['Dimensionality reduction'] 21 ['Clustering'] 22 ['Recommender systems'] 23 ['Graph embeddings']
df = pd.DataFrame(chap_names.items(), columns=["chap_no","chap_name"]) df
df.to_csv("chapter_no_to_name_mapping.csv", index=None)

Create a Readme.md

content = ''' # "Probabilistic Machine Learning: An Introduction" ## Chapters |Chapter|Name| Notebooks| |-|-|-| ''' for chap_no in range(1,24): chap_url = f"https://github.com/probml/pyprobml/tree/master/notebooks/book1/{chap_no:02d}" content+=f"| {chap_no} | {chap_names[chap_no]} | [{chap_no:02d}/]({chap_no:02d}/) |\n" content
'\n# "Probabilistic Machine Learning: An Introduction"\n\n## Chapters\n|Chapter|Name| Notebooks|\n|-|-|-|\n| 1 | Introduction | [01/](01/) |\n| 2 | Probability: univariate models | [02/](02/) |\n| 3 | Probability: multivariate models | [03/](03/) |\n| 4 | Statistics | [04/](04/) |\n| 5 | Decision theory | [05/](05/) |\n| 6 | Information theory | [06/](06/) |\n| 7 | Linear algebra | [07/](07/) |\n| 8 | Optimization | [08/](08/) |\n| 9 | Linear discriminant analysis | [09/](09/) |\n| 10 | Logistic regression | [10/](10/) |\n| 11 | Linear regression | [11/](11/) |\n| 12 | Generalized linear models | [12/](12/) |\n| 13 | Neural networks for unstructured data | [13/](13/) |\n| 14 | Neural networks for images | [14/](14/) |\n| 15 | Neural networks for sequences | [15/](15/) |\n| 16 | Exemplar-based methods | [16/](16/) |\n| 17 | Kernel methods | [17/](17/) |\n| 18 | Trees | [18/](18/) |\n| 19 | Learning with fewer labeled examples | [19/](19/) |\n| 20 | Dimensionality reduction | [20/](20/) |\n| 21 | Clustering | [21/](21/) |\n| 22 | Recommender systems | [22/](22/) |\n| 23 | Graph embeddings | [23/](23/) |\n'
readme_file = "../notebooks/book1/README.md" with open(readme_file,"w") as fp: fp.write(content)

Chapterwise README.md

with open("pml1.lof") as fp: LoF_File_Contents = fp.read() soup = TexSoup(LoF_File_Contents) # create mapping of fig_no to list of script_name url_mapping = {} for caption in soup.find_all("numberline"): fig_no = str(caption.contents[0]) extracted_scripts = extract_scripts_name_from_caption(str(caption)) if len(extracted_scripts) == 1: url_mapping[fig_no] = extracted_scripts[0]+"" elif len(extracted_scripts) > 1: url_mapping[fig_no] = "fig_"+fig_no.replace(".","_")+".ipynb" else: url_mapping[fig_no] = ""
url_mapping
{'1.1': '', '1.2': '', '1.3': 'iris_plot.ipynb', '1.4': 'iris_dtree.ipynb', '1.5': 'linreg_residuals_plot.ipynb', '1.6': 'linreg_2d_surface_demo.ipynb', '1.7': 'linreg_poly_vs_degree.ipynb', '1.8': 'iris_kmeans.ipynb', '1.9': 'iris_pca.ipynb', '1.10': '', '1.11': '', '1.12': 'fig_1_12.ipynb', '1.13': 'fig_1_13.ipynb', '1.14': '', '1.15': '', '2.1': 'discrete_prob_dist_plot.ipynb', '2.2': 'fig_2_2.ipynb', '2.3': '', '2.4': 'bimodal_dist_plot.ipynb', '2.5': 'anscombes_quartet.ipynb', '2.6': 'datasaurus_dozen.ipynb', '2.7': '', '2.8': '', '2.9': 'binom_dist_plot.ipynb', '2.10': 'activation_fun_plot.ipynb', '2.11': 'iris_logreg.ipynb', '2.12': 'softmax_plot.ipynb', '2.13': 'iris_logreg.ipynb', '2.14': 'linreg_1d_hetero_tfp.ipynb', '2.15': 'student_laplace_pdf_plot.ipynb', '2.16': 'robust_pdf_plot.ipynb', '2.17': 'fig_2_17.ipynb', '2.18': '', '2.19': '', '2.20': '', '2.21': '', '2.22': '', '2.23': 'centralLimitDemo.ipynb', '2.24': 'change_of_vars_demo1d.ipynb', '3.1': '', '3.2': '', '3.3': 'simpsons_paradox.ipynb', '3.4': '', '3.5': 'gauss_plot_2d.ipynb', '3.6': 'gauss_plot_2d.ipynb', '3.7': 'gauss_imputation_known_params_demo.ipynb', '3.8': 'gauss_infer_1d.ipynb', '3.9': 'gauss_infer_2d.ipynb', '3.10': 'sensor_fusion_2d.ipynb', '3.11': 'gmm_plot_demo.ipynb', '3.12': 'gmm_2d.ipynb', '3.13': 'mix_bernoulli_em_mnist.ipynb', '3.14': '', '3.15': '', '3.16': '', '3.17': '', '4.1': 'iris_cov_mat.ipynb', '4.2': 'hinge_loss_plot.ipynb', '4.3': 'ema_demo.ipynb', '4.4': 'shrinkcov_plots.ipynb', '4.5': 'linreg_poly_ridge.ipynb', '4.6': '', '4.7': 'polyfitRidgeCV.ipynb', '4.8': 'imdb_mlp_bow_tf.ipynb', '4.9': 'linreg_poly_vs_n.ipynb', '4.10': 'beta_binom_post_plot.ipynb', '4.11': '', '4.12': 'beta_binom_post_pred_plot.ipynb', '4.13': 'mixbetademo.ipynb', '4.14': 'fig_4_14.ipynb', '4.15': 'dirichlet_samples_plot.ipynb', '4.16': 'gauss_infer_1d.ipynb', '4.17': 'gauss_infer_2d.ipynb', '4.18': 'betaHPD.ipynb', '4.19': 'postDensityIntervals.ipynb', '4.20': 'fig_4_20.ipynb', '4.21': '', '4.22': 'laplace_approx_beta_binom_jax.ipynb', '4.23': 'bootstrapDemoBer.ipynb', '4.24': 'samplingDistributionGaussianShrinkage.ipynb', '4.25': 'biasVarModelComplexity3.ipynb', '4.26': '', '5.1': '', '5.2': 'fig_5_2.ipynb', '5.3': 'huberLossPlot.ipynb', '5.4': 'coins_model_sel_demo.ipynb', '5.5': 'linreg_eb_modelsel_vs_n.ipynb', '5.6': 'linreg_eb_modelsel_vs_n.ipynb', '5.7': '', '5.8': 'riskFnGauss.ipynb', '5.9': '', '5.10': 'fig_5_10.ipynb', '5.11': '', '6.1': 'bernoulli_entropy_fig.ipynb', '6.2': 'seq_logo_demo.ipynb', '6.3': 'KLfwdReverseMixGauss.ipynb', '6.4': '', '6.5': '', '6.6': 'MIC_correlation_2d.ipynb', '6.7': '', '7.1': '', '7.2': '', '7.3': '', '7.4': '', '7.5': '', '7.6': 'gaussEvec.ipynb', '7.7': 'height_weight_whiten_plot.ipynb', '7.8': '', '7.9': 'svd_image_demo.ipynb', '7.10': 'svd_image_demo.ipynb', '7.11': '', '7.12': '', '8.1': 'fig_8_1.ipynb', '8.2': '', '8.3': '', '8.4': '', '8.5': '', '8.6': '', '8.7': 'smooth-vs-nonsmooth-1d.ipynb', '8.8': '', '8.9': '', '8.10': '', '8.11': 'steepestDescentDemo.ipynb', '8.12': 'lineSearchConditionNum.ipynb', '8.13': '', '8.14': 'fig_8_14.ipynb', '8.15': '', '8.16': 'lms_demo.ipynb', '8.17': 'lrschedule_tf.ipynb', '8.18': 'learning_rate_plot.ipynb', '8.19': '', '8.20': '', '8.21': '', '8.22': '', '8.23': 'emLogLikelihoodMax.ipynb', '8.24': '', '8.25': 'mix_gauss_demo_faithful.ipynb', '8.26': 'fig_8_26.ipynb', '8.27': 'gmm_lik_surface_plot.ipynb', '9.1': 'discrim_analysis_dboundaries_plot2.ipynb', '9.2': 'discrim_analysis_dboundaries_plot2.ipynb', '9.3': '', '9.4': 'fisher_lda_demo.ipynb', '9.5': 'fisher_discrim_vowel.ipynb', '9.6': 'naive_bayes_mnist_jax.ipynb', '9.7': 'naive_bayes_mnist_jax.ipynb', '9.8': 'generativeVsDiscrim.ipynb', '10.1': 'iris_logreg.ipynb', '10.2': 'sigmoid_2d_plot.ipynb', '10.3': '', '10.4': 'logreg_poly_demo.ipynb', '10.5': 'iris_logreg_loss_surface.ipynb', '10.6': 'logreg_poly_demo.ipynb', '10.7': 'logreg_multiclass_demo.ipynb', '10.8': '', '10.9': '', '10.10': 'logreg_iris_bayes_robust_1d_pymc3.ipynb', '10.11': '', '10.12': '', '10.13': 'logreg_laplace_demo.ipynb', '10.14': 'logreg_laplace_demo.ipynb', '10.15': '', '11.1': 'linreg_poly_vs_degree.ipynb', '11.2': 'linreg_contours_sse_plot.ipynb', '11.3': '', '11.4': 'linregOnlineDemo.ipynb', '11.5': 'linreg_poly_vs_degree.ipynb', '11.6': 'linreg_poly_vs_degree.ipynb', '11.7': 'geom_ridge.ipynb', '11.8': '', '11.9': '', '11.10': 'fig_11_10.ipynb', '11.11': 'prostate_comparison.ipynb', '11.12': 'prostate_comparison.ipynb', '11.13': 'sparse_sensing_demo.ipynb', '11.14': 'groupLassoDemo.ipynb', '11.15': 'groupLassoDemo.ipynb', '11.16': 'splines_basis_weighted.ipynb', '11.17': 'splines_basis_heatmap.ipynb', '11.18': 'splines_cherry_blossoms.ipynb', '11.19': 'fig_11_19.ipynb', '11.20': 'linreg_2d_bayes_demo.ipynb', '11.21': 'linreg_post_pred_plot.ipynb', '11.22': 'linreg_2d_bayes_centering_pymc3.ipynb', '11.23': 'multi_collinear_legs_numpyro.ipynb', '11.24': 'multi_collinear_legs_numpyro.ipynb', '12.1': 'poisson_regression_insurance.ipynb', '12.2': 'poisson_regression_insurance.ipynb', '13.1': 'xor_heaviside.ipynb', '13.2': 'activation_fun_plot.ipynb', '13.3': '', '13.4': 'mlp_mnist_tf.ipynb', '13.5': '', '13.6': 'mlp_1d_regression_hetero_tfp.ipynb', '13.7': '', '13.8': '', '13.9': '', '13.10': '', '13.11': '', '13.12': '', '13.13': '', '13.14': 'activation_fun_deriv_jax.ipynb', '13.15': '', '13.16': '', '13.17': 'sparse_mlp.ipynb', '13.18': '', '13.19': '', '13.20': 'sgd_minima_variance.ipynb', '13.21': 'logregXorDemo.ipynb', '13.22': 'linregRbfDemo.ipynb', '13.23': 'mixexpDemoOneToMany.ipynb', '13.24': '', '13.25': '', '14.1': '', '14.2': '', '14.3': '', '14.4': '', '14.5': 'conv2d_jax.ipynb', '14.6': '', '14.7': '', '14.8': '', '14.9': 'conv2d_jax.ipynb', '14.10': '', '14.11': '', '14.12': '', '14.13': '', '14.14': '', '14.15': '', '14.16': '', '14.17': 'cnn_mnist_tf.ipynb', '14.18': '', '14.19': '', '14.20': '', '14.21': '', '14.22': '', '14.23': '', '14.24': '', '14.25': '', '14.26': '', '14.27': '', '14.28': '', '14.29': '', '14.30': '', '14.31': '', '14.32': '', '14.33': '', '14.34': '', '14.35': '', '14.36': '', '14.37': '', '14.38': '', '14.39': '', '14.40': '', '14.41': '', '15.1': '', '15.2': 'rnn_jax.ipynb', '15.3': '', '15.4': '', '15.5': '', '15.6': '', '15.7': '', '15.8': '', '15.9': '', '15.10': '', '15.11': '', '15.12': '', '15.13': '', '15.14': '', '15.15': '', '15.16': '', '15.17': 'kernel_regression_attention.ipynb', '15.18': '', '15.19': '', '15.20': '', '15.21': '', '15.22': '', '15.23': '', '15.24': '', '15.25': 'positional_encoding_jax.ipynb', '15.26': '', '15.27': '', '15.28': '', '15.29': '', '15.30': '', '15.31': '', '15.32': '', '15.33': '', '15.34': '', '15.35': '', '15.36': '', '16.1': 'knn_voronoi_plot.ipynb', '16.2': 'knn_classify_demo.ipynb', '16.3': 'curse_dimensionality_plot.ipynb', '16.4': '', '16.5': '', '16.6': '', '16.7': '', '16.8': 'smoothingKernelPlot.ipynb', '16.9': 'parzen_window_demo2.ipynb', '16.10': 'kernelRegressionDemo.ipynb', '17.1': 'gprDemoArd.ipynb', '17.2': 'gpKernelPlot.ipynb', '17.3': 'gpKernelPlot.ipynb', '17.4': '', '17.5': '', '17.6': '', '17.7': 'gprDemoNoiseFree.ipynb', '17.8': 'gprDemoChangeHparams.ipynb', '17.9': 'gpr_demo_marglik.ipynb', '17.10': 'gp_classify_iris_1d_pymc3.ipynb', '17.11': 'gp_classify_spaceflu_1d_pymc3.ipynb', '17.12': '', '17.13': '', '17.14': 'svm_classifier_feature_scaling.ipynb', '17.15': '', '17.16': '', '17.17': 'svm_classifier_2d.ipynb', '17.18': 'svmCgammaDemo.ipynb', '17.19': 'huberLossPlot.ipynb', '17.20': 'svm_regression_1d.ipynb', '17.21': 'kernelBinaryClassifDemo.ipynb', '17.22': 'rvm_regression_1d.ipynb', '17.23': 'rvm_regression_1d.ipynb', '18.1': 'regtreeSurfaceDemo.ipynb', '18.2': '', '18.3': 'dtree_sensitivity.ipynb', '18.4': 'fig_18_4.ipynb', '18.5': 'spam_tree_ensemble_compare.ipynb', '18.6': 'boosted_regr_trees.ipynb', '18.7': 'hinge_loss_plot.ipynb', '18.8': 'rf_feature_importance_mnist.ipynb', '18.9': 'spam_tree_ensemble_interpret.ipynb', '18.10': 'spam_tree_ensemble_interpret.ipynb', '19.1': 'image_augmentation_jax.ipynb', '19.2': '', '19.3': '', '19.4': '', '19.5': '', '19.6': '', '19.7': '', '19.8': '', '19.9': '', '19.10': '', '19.11': '', '19.12': '', '19.13': '', '19.14': 'hbayes_maml.ipynb', '19.15': '', '19.16': '', '20.1': 'pcaDemo2d.ipynb', '20.2': 'pca_digits.ipynb', '20.3': 'pcaImageDemo.ipynb', '20.4': 'pca_projected_variance.ipynb', '20.5': 'pcaStandardization.ipynb', '20.6': 'pcaOverfitDemo.ipynb', '20.7': 'pcaOverfitDemo.ipynb', '20.8': 'pcaOverfitDemo.ipynb', '20.9': '', '20.10': 'pcaEmStepByStep.ipynb', '20.11': '', '20.12': 'mixPpcaDemo.ipynb', '20.13': 'binary_fa_demo.ipynb', '20.14': '', '20.15': '', '20.16': '', '20.17': 'ae_mnist_tf.ipynb', '20.18': 'ae_mnist_tf.ipynb', '20.19': 'ae_mnist_tf.ipynb', '20.20': '', '20.21': 'ae_mnist_tf.ipynb', '20.22': '', '20.23': '', '20.24': 'fig_20_24.ipynb', '20.25': 'fig_20_25.ipynb', '20.26': 'fig_20_26.ipynb', '20.27': 'vae_mnist_conv_lightning.ipynb', '20.28': '', '20.29': '', '20.30': 'fig_20_30.ipynb', '20.31': 'fig_20_31.ipynb', '20.32': '', '20.33': 'fig_20_33.ipynb', '20.34': 'manifold_swiss_sklearn.ipynb', '20.35': 'kpcaScholkopf.ipynb', '20.36': 'fig_20_36.ipynb', '20.37': 'fig_20_37.ipynb', '20.38': 'fig_20_38.ipynb', '20.39': '', '20.40': '', '20.41': 'fig_20_41.ipynb', '20.42': '', '20.43': '', '20.44': '', '20.45': '', '21.1': '', '21.2': 'agglomDemo.ipynb', '21.3': '', '21.4': 'hclust_yeast_demo.ipynb', '21.5': 'yeast_data_viz.ipynb', '21.6': 'hclust_yeast_demo.ipynb', '21.7': 'kmeans_voronoi.ipynb', '21.8': 'kmeans_yeast_demo.ipynb', '21.9': 'vqDemo.ipynb', '21.10': 'kmeans_minibatch.ipynb', '21.11': 'fig_21_11.ipynb', '21.12': 'kmeans_silhouette.ipynb', '21.13': 'kmeans_silhouette.ipynb', '21.14': 'gmm_2d.ipynb', '21.15': 'gmm_identifiability_pymc3.ipynb', '21.16': 'gmm_identifiability_pymc3.ipynb', '21.17': 'gmm_chooseK_pymc3.ipynb', '21.18': 'gmm_chooseK_pymc3.ipynb', '21.19': 'spectral_clustering_demo.ipynb', '21.20': '', '21.21': '', '21.22': '', '22.1': '', '22.2': '', '22.3': 'matrix_factorization_recommender.ipynb', '22.4': 'matrix_factorization_recommender.ipynb', '22.5': '', '22.6': '', '23.1': '', '23.2': '', '23.3': '', '23.4': '', '23.5': '', '23.6': '', '23.7': '', '23.8': '', '23.9': ''}
chapter_wise_mappping = {} for fig_no in url_mapping: chap_no = int(fig_no.split(".")[0]) if chap_no not in chapter_wise_mappping: chapter_wise_mappping[chap_no] = {} chapter_wise_mappping[chap_no][fig_no] = url_mapping[fig_no] chapter_wise_mappping
{1: {'1.1': '', '1.2': '', '1.3': 'iris_plot.ipynb', '1.4': 'iris_dtree.ipynb', '1.5': 'linreg_residuals_plot.ipynb', '1.6': 'linreg_2d_surface_demo.ipynb', '1.7': 'linreg_poly_vs_degree.ipynb', '1.8': 'iris_kmeans.ipynb', '1.9': 'iris_pca.ipynb', '1.10': '', '1.11': '', '1.12': 'fig_1_12.ipynb', '1.13': 'fig_1_13.ipynb', '1.14': '', '1.15': ''}, 2: {'2.1': 'discrete_prob_dist_plot.ipynb', '2.2': 'fig_2_2.ipynb', '2.3': '', '2.4': 'bimodal_dist_plot.ipynb', '2.5': 'anscombes_quartet.ipynb', '2.6': 'datasaurus_dozen.ipynb', '2.7': '', '2.8': '', '2.9': 'binom_dist_plot.ipynb', '2.10': 'activation_fun_plot.ipynb', '2.11': 'iris_logreg.ipynb', '2.12': 'softmax_plot.ipynb', '2.13': 'iris_logreg.ipynb', '2.14': 'linreg_1d_hetero_tfp.ipynb', '2.15': 'student_laplace_pdf_plot.ipynb', '2.16': 'robust_pdf_plot.ipynb', '2.17': 'fig_2_17.ipynb', '2.18': '', '2.19': '', '2.20': '', '2.21': '', '2.22': '', '2.23': 'centralLimitDemo.ipynb', '2.24': 'change_of_vars_demo1d.ipynb'}, 3: {'3.1': '', '3.2': '', '3.3': 'simpsons_paradox.ipynb', '3.4': '', '3.5': 'gauss_plot_2d.ipynb', '3.6': 'gauss_plot_2d.ipynb', '3.7': 'gauss_imputation_known_params_demo.ipynb', '3.8': 'gauss_infer_1d.ipynb', '3.9': 'gauss_infer_2d.ipynb', '3.10': 'sensor_fusion_2d.ipynb', '3.11': 'gmm_plot_demo.ipynb', '3.12': 'gmm_2d.ipynb', '3.13': 'mix_bernoulli_em_mnist.ipynb', '3.14': '', '3.15': '', '3.16': '', '3.17': ''}, 4: {'4.1': 'iris_cov_mat.ipynb', '4.2': 'hinge_loss_plot.ipynb', '4.3': 'ema_demo.ipynb', '4.4': 'shrinkcov_plots.ipynb', '4.5': 'linreg_poly_ridge.ipynb', '4.6': '', '4.7': 'polyfitRidgeCV.ipynb', '4.8': 'imdb_mlp_bow_tf.ipynb', '4.9': 'linreg_poly_vs_n.ipynb', '4.10': 'beta_binom_post_plot.ipynb', '4.11': '', '4.12': 'beta_binom_post_pred_plot.ipynb', '4.13': 'mixbetademo.ipynb', '4.14': 'fig_4_14.ipynb', '4.15': 'dirichlet_samples_plot.ipynb', '4.16': 'gauss_infer_1d.ipynb', '4.17': 'gauss_infer_2d.ipynb', '4.18': 'betaHPD.ipynb', '4.19': 'postDensityIntervals.ipynb', '4.20': 'fig_4_20.ipynb', '4.21': '', '4.22': 'laplace_approx_beta_binom_jax.ipynb', '4.23': 'bootstrapDemoBer.ipynb', '4.24': 'samplingDistributionGaussianShrinkage.ipynb', '4.25': 'biasVarModelComplexity3.ipynb', '4.26': ''}, 5: {'5.1': '', '5.2': 'fig_5_2.ipynb', '5.3': 'huberLossPlot.ipynb', '5.4': 'coins_model_sel_demo.ipynb', '5.5': 'linreg_eb_modelsel_vs_n.ipynb', '5.6': 'linreg_eb_modelsel_vs_n.ipynb', '5.7': '', '5.8': 'riskFnGauss.ipynb', '5.9': '', '5.10': 'fig_5_10.ipynb', '5.11': ''}, 6: {'6.1': 'bernoulli_entropy_fig.ipynb', '6.2': 'seq_logo_demo.ipynb', '6.3': 'KLfwdReverseMixGauss.ipynb', '6.4': '', '6.5': '', '6.6': 'MIC_correlation_2d.ipynb', '6.7': ''}, 7: {'7.1': '', '7.2': '', '7.3': '', '7.4': '', '7.5': '', '7.6': 'gaussEvec.ipynb', '7.7': 'height_weight_whiten_plot.ipynb', '7.8': '', '7.9': 'svd_image_demo.ipynb', '7.10': 'svd_image_demo.ipynb', '7.11': '', '7.12': ''}, 8: {'8.1': 'fig_8_1.ipynb', '8.2': '', '8.3': '', '8.4': '', '8.5': '', '8.6': '', '8.7': 'smooth-vs-nonsmooth-1d.ipynb', '8.8': '', '8.9': '', '8.10': '', '8.11': 'steepestDescentDemo.ipynb', '8.12': 'lineSearchConditionNum.ipynb', '8.13': '', '8.14': 'fig_8_14.ipynb', '8.15': '', '8.16': 'lms_demo.ipynb', '8.17': 'lrschedule_tf.ipynb', '8.18': 'learning_rate_plot.ipynb', '8.19': '', '8.20': '', '8.21': '', '8.22': '', '8.23': 'emLogLikelihoodMax.ipynb', '8.24': '', '8.25': 'mix_gauss_demo_faithful.ipynb', '8.26': 'fig_8_26.ipynb', '8.27': 'gmm_lik_surface_plot.ipynb'}, 9: {'9.1': 'discrim_analysis_dboundaries_plot2.ipynb', '9.2': 'discrim_analysis_dboundaries_plot2.ipynb', '9.3': '', '9.4': 'fisher_lda_demo.ipynb', '9.5': 'fisher_discrim_vowel.ipynb', '9.6': 'naive_bayes_mnist_jax.ipynb', '9.7': 'naive_bayes_mnist_jax.ipynb', '9.8': 'generativeVsDiscrim.ipynb'}, 10: {'10.1': 'iris_logreg.ipynb', '10.2': 'sigmoid_2d_plot.ipynb', '10.3': '', '10.4': 'logreg_poly_demo.ipynb', '10.5': 'iris_logreg_loss_surface.ipynb', '10.6': 'logreg_poly_demo.ipynb', '10.7': 'logreg_multiclass_demo.ipynb', '10.8': '', '10.9': '', '10.10': 'logreg_iris_bayes_robust_1d_pymc3.ipynb', '10.11': '', '10.12': '', '10.13': 'logreg_laplace_demo.ipynb', '10.14': 'logreg_laplace_demo.ipynb', '10.15': ''}, 11: {'11.1': 'linreg_poly_vs_degree.ipynb', '11.2': 'linreg_contours_sse_plot.ipynb', '11.3': '', '11.4': 'linregOnlineDemo.ipynb', '11.5': 'linreg_poly_vs_degree.ipynb', '11.6': 'linreg_poly_vs_degree.ipynb', '11.7': 'geom_ridge.ipynb', '11.8': '', '11.9': '', '11.10': 'fig_11_10.ipynb', '11.11': 'prostate_comparison.ipynb', '11.12': 'prostate_comparison.ipynb', '11.13': 'sparse_sensing_demo.ipynb', '11.14': 'groupLassoDemo.ipynb', '11.15': 'groupLassoDemo.ipynb', '11.16': 'splines_basis_weighted.ipynb', '11.17': 'splines_basis_heatmap.ipynb', '11.18': 'splines_cherry_blossoms.ipynb', '11.19': 'fig_11_19.ipynb', '11.20': 'linreg_2d_bayes_demo.ipynb', '11.21': 'linreg_post_pred_plot.ipynb', '11.22': 'linreg_2d_bayes_centering_pymc3.ipynb', '11.23': 'multi_collinear_legs_numpyro.ipynb', '11.24': 'multi_collinear_legs_numpyro.ipynb'}, 12: {'12.1': 'poisson_regression_insurance.ipynb', '12.2': 'poisson_regression_insurance.ipynb'}, 13: {'13.1': 'xor_heaviside.ipynb', '13.2': 'activation_fun_plot.ipynb', '13.3': '', '13.4': 'mlp_mnist_tf.ipynb', '13.5': '', '13.6': 'mlp_1d_regression_hetero_tfp.ipynb', '13.7': '', '13.8': '', '13.9': '', '13.10': '', '13.11': '', '13.12': '', '13.13': '', '13.14': 'activation_fun_deriv_jax.ipynb', '13.15': '', '13.16': '', '13.17': 'sparse_mlp.ipynb', '13.18': '', '13.19': '', '13.20': 'sgd_minima_variance.ipynb', '13.21': 'logregXorDemo.ipynb', '13.22': 'linregRbfDemo.ipynb', '13.23': 'mixexpDemoOneToMany.ipynb', '13.24': '', '13.25': ''}, 14: {'14.1': '', '14.2': '', '14.3': '', '14.4': '', '14.5': 'conv2d_jax.ipynb', '14.6': '', '14.7': '', '14.8': '', '14.9': 'conv2d_jax.ipynb', '14.10': '', '14.11': '', '14.12': '', '14.13': '', '14.14': '', '14.15': '', '14.16': '', '14.17': 'cnn_mnist_tf.ipynb', '14.18': '', '14.19': '', '14.20': '', '14.21': '', '14.22': '', '14.23': '', '14.24': '', '14.25': '', '14.26': '', '14.27': '', '14.28': '', '14.29': '', '14.30': '', '14.31': '', '14.32': '', '14.33': '', '14.34': '', '14.35': '', '14.36': '', '14.37': '', '14.38': '', '14.39': '', '14.40': '', '14.41': ''}, 15: {'15.1': '', '15.2': 'rnn_jax.ipynb', '15.3': '', '15.4': '', '15.5': '', '15.6': '', '15.7': '', '15.8': '', '15.9': '', '15.10': '', '15.11': '', '15.12': '', '15.13': '', '15.14': '', '15.15': '', '15.16': '', '15.17': 'kernel_regression_attention.ipynb', '15.18': '', '15.19': '', '15.20': '', '15.21': '', '15.22': '', '15.23': '', '15.24': '', '15.25': 'positional_encoding_jax.ipynb', '15.26': '', '15.27': '', '15.28': '', '15.29': '', '15.30': '', '15.31': '', '15.32': '', '15.33': '', '15.34': '', '15.35': '', '15.36': ''}, 16: {'16.1': 'knn_voronoi_plot.ipynb', '16.2': 'knn_classify_demo.ipynb', '16.3': 'curse_dimensionality_plot.ipynb', '16.4': '', '16.5': '', '16.6': '', '16.7': '', '16.8': 'smoothingKernelPlot.ipynb', '16.9': 'parzen_window_demo2.ipynb', '16.10': 'kernelRegressionDemo.ipynb'}, 17: {'17.1': 'gprDemoArd.ipynb', '17.2': 'gpKernelPlot.ipynb', '17.3': 'gpKernelPlot.ipynb', '17.4': '', '17.5': '', '17.6': '', '17.7': 'gprDemoNoiseFree.ipynb', '17.8': 'gprDemoChangeHparams.ipynb', '17.9': 'gpr_demo_marglik.ipynb', '17.10': 'gp_classify_iris_1d_pymc3.ipynb', '17.11': 'gp_classify_spaceflu_1d_pymc3.ipynb', '17.12': '', '17.13': '', '17.14': 'svm_classifier_feature_scaling.ipynb', '17.15': '', '17.16': '', '17.17': 'svm_classifier_2d.ipynb', '17.18': 'svmCgammaDemo.ipynb', '17.19': 'huberLossPlot.ipynb', '17.20': 'svm_regression_1d.ipynb', '17.21': 'kernelBinaryClassifDemo.ipynb', '17.22': 'rvm_regression_1d.ipynb', '17.23': 'rvm_regression_1d.ipynb'}, 18: {'18.1': 'regtreeSurfaceDemo.ipynb', '18.2': '', '18.3': 'dtree_sensitivity.ipynb', '18.4': 'fig_18_4.ipynb', '18.5': 'spam_tree_ensemble_compare.ipynb', '18.6': 'boosted_regr_trees.ipynb', '18.7': 'hinge_loss_plot.ipynb', '18.8': 'rf_feature_importance_mnist.ipynb', '18.9': 'spam_tree_ensemble_interpret.ipynb', '18.10': 'spam_tree_ensemble_interpret.ipynb'}, 19: {'19.1': 'image_augmentation_jax.ipynb', '19.2': '', '19.3': '', '19.4': '', '19.5': '', '19.6': '', '19.7': '', '19.8': '', '19.9': '', '19.10': '', '19.11': '', '19.12': '', '19.13': '', '19.14': 'hbayes_maml.ipynb', '19.15': '', '19.16': ''}, 20: {'20.1': 'pcaDemo2d.ipynb', '20.2': 'pca_digits.ipynb', '20.3': 'pcaImageDemo.ipynb', '20.4': 'pca_projected_variance.ipynb', '20.5': 'pcaStandardization.ipynb', '20.6': 'pcaOverfitDemo.ipynb', '20.7': 'pcaOverfitDemo.ipynb', '20.8': 'pcaOverfitDemo.ipynb', '20.9': '', '20.10': 'pcaEmStepByStep.ipynb', '20.11': '', '20.12': 'mixPpcaDemo.ipynb', '20.13': 'binary_fa_demo.ipynb', '20.14': '', '20.15': '', '20.16': '', '20.17': 'ae_mnist_tf.ipynb', '20.18': 'ae_mnist_tf.ipynb', '20.19': 'ae_mnist_tf.ipynb', '20.20': '', '20.21': 'ae_mnist_tf.ipynb', '20.22': '', '20.23': '', '20.24': 'fig_20_24.ipynb', '20.25': 'fig_20_25.ipynb', '20.26': 'fig_20_26.ipynb', '20.27': 'vae_mnist_conv_lightning.ipynb', '20.28': '', '20.29': '', '20.30': 'fig_20_30.ipynb', '20.31': 'fig_20_31.ipynb', '20.32': '', '20.33': 'fig_20_33.ipynb', '20.34': 'manifold_swiss_sklearn.ipynb', '20.35': 'kpcaScholkopf.ipynb', '20.36': 'fig_20_36.ipynb', '20.37': 'fig_20_37.ipynb', '20.38': 'fig_20_38.ipynb', '20.39': '', '20.40': '', '20.41': 'fig_20_41.ipynb', '20.42': '', '20.43': '', '20.44': '', '20.45': ''}, 21: {'21.1': '', '21.2': 'agglomDemo.ipynb', '21.3': '', '21.4': 'hclust_yeast_demo.ipynb', '21.5': 'yeast_data_viz.ipynb', '21.6': 'hclust_yeast_demo.ipynb', '21.7': 'kmeans_voronoi.ipynb', '21.8': 'kmeans_yeast_demo.ipynb', '21.9': 'vqDemo.ipynb', '21.10': 'kmeans_minibatch.ipynb', '21.11': 'fig_21_11.ipynb', '21.12': 'kmeans_silhouette.ipynb', '21.13': 'kmeans_silhouette.ipynb', '21.14': 'gmm_2d.ipynb', '21.15': 'gmm_identifiability_pymc3.ipynb', '21.16': 'gmm_identifiability_pymc3.ipynb', '21.17': 'gmm_chooseK_pymc3.ipynb', '21.18': 'gmm_chooseK_pymc3.ipynb', '21.19': 'spectral_clustering_demo.ipynb', '21.20': '', '21.21': '', '21.22': ''}, 22: {'22.1': '', '22.2': '', '22.3': 'matrix_factorization_recommender.ipynb', '22.4': 'matrix_factorization_recommender.ipynb', '22.5': '', '22.6': ''}, 23: {'23.1': '', '23.2': '', '23.3': '', '23.4': '', '23.5': '', '23.6': '', '23.7': '', '23.8': '', '23.9': ''}}
book1_figures = os.listdir("../../pml-book/book1-figures/") image_mapping = {} for each in book1_figures: fig_no = re.findall(r"\d+\.\d+", each)[0] try: image_mapping[fig_no].append(each) except: image_mapping[fig_no] = [each] image_mapping
{'14.27': ['Figure_14.27_A.jpg', 'Figure_14.27_B.png'], '21.18': ['Figure_21.18.png'], '15.22': ['Figure_15.22_A.png', 'Figure_15.22_B.png'], '8.5': ['Figure_8.5_A.png', 'Figure_8.5_B.png'], '4.6': ['Figure_4.6.png'], '19.8': ['Figure_19.8_B.png', 'Figure_19.8_A.png'], '11.9': ['Figure_11.9_B.png', 'Figure_11.9_A.png'], '7.8': ['Figure_7.8_B.png', 'Figure_7.8_A.png'], '8.17': ['Figure_8.17.png'], '19.13': ['Figure_19.13.png'], '14.13': ['Figure_14.13.png'], '16.5': ['Figure_16.5_A.png', 'Figure_16.5_B.png'], '23.3': ['Figure_23.3.png'], '20.26': ['Figure_20.26_B.png', 'Figure_20.26_A.png'], '13.13': ['Figure_13.13.png'], '13.15': ['Figure_13.15_A.png', 'Figure_13.15_B.png'], '14.16': ['Figure_14.16_B.png', 'Figure_14.16_A.png'], '15.6': ['Figure_15.6.png'], '7.2': ['Figure_7.2_A.png', 'Figure_7.2_B.png'], '15.3': ['Figure_15.3.png'], '21.21': ['Figure_21.21_B.png', 'Figure_21.21_A.png'], '14.17': ['Figure_14.17_B.png', 'Figure_14.17_A.png'], '13.6': ['Figure_13.6_B.png', 'Figure_13.6_A.png'], '20.22': ['Figure_20.22.png'], '12.2': ['Figure_12.2.png'], '1.10': ['Figure_1.10_B.png', 'Figure_1.10_A.png'], '6.4': ['Figure_6.4.png'], '19.6': ['Figure_19.6_B.png', 'Figure_19.6_A.png'], '4.21': ['Figure_4.21.png'], '2.3': ['Figure_2.3.png'], '11.8': ['Figure_11.8.png'], '19.14': ['Figure_19.14.png'], '10.9': ['Figure_10.9_A.png', 'Figure_10.9_B.png'], '20.21': ['Figure_20.21_D.png', 'Figure_20.21_I.png', 'Figure_20.21_A.png', 'Figure_20.21_H.png', 'Figure_20.21_E.png', 'Figure_20.21_C.png', 'Figure_20.21_F.png', 'Figure_20.21_B.png', 'Figure_20.21_G.png'], '11.3': ['Figure_11.3.png'], '3.17': ['Figure_3.17.png'], '22.3': ['Figure_22.3_B.png', 'Figure_22.3_A.png'], '20.18': ['Figure_20.18_A.png', 'Figure_20.18_B.png'], '15.5': ['Figure_15.5_A.png', 'Figure_15.5_B.png'], '21.1': ['Figure_21.1.png'], '20.29': ['Figure_20.29_B.png', 'Figure_20.29_A.png', 'Figure_20.29_C.png'], '13.24': ['Figure_13.24.png'], '15.31': ['Figure_15.31.png'], '15.32': ['Figure_15.32.png'], '14.40': ['Figure_14.40.png'], '8.21': ['Figure_8.21.png'], '14.22': ['Figure_14.22_B.png', 'Figure_14.22_A.png'], '13.7': ['Figure_13.7_B.png', 'Figure_13.7_A.png'], '1.2': ['Figure_1.2.png'], '13.14': ['Figure_13.14_A.png', 'Figure_13.14_B.png'], '13.4': ['Figure_13.4_A.png', 'Figure_13.4_B.png'], '10.15': ['Figure_10.15_A.png', 'Figure_10.15_B.png'], '14.37': ['Figure_14.37_C.jpg', 'Figure_14.37_B.jpg', 'Figure_14.37_A.jpg'], '15.14': ['Figure_15.14.png'], '15.8': ['Figure_15.8_A.png', 'Figure_15.8_B.png'], '15.28': ['Figure_15.28.png'], '13.18': ['Figure_13.18_B.png', 'Figure_13.18_A.png'], '14.18': ['Figure_14.18.png'], '8.15': ['Figure_8.15.png'], '8.13': ['Figure_8.13.pdf'], '14.15': ['Figure_14.15.png'], '19.10': ['Figure_19.10_A.png', 'Figure_19.10_B.png'], '20.17': ['Figure_20.17_B.png', 'Figure_20.17_A.png'], '3.16': ['Figure_3.16.png'], '15.19': ['Figure_15.19_A.png', 'Figure_15.19_B.png'], '21.3': ['Figure_21.3_B.png', 'Figure_21.3_A.png', 'Figure_21.3_C.png'], '20.43': ['Figure_20.43.jpg'], '3.1': ['Figure_3.1.png'], '23.8': ['Figure_23.8.png'], '1.1': ['Figure_1.1_A.png', 'Figure_1.1_C.png', 'Figure_1.1_B.png'], '22.5': ['Figure_22.5.png'], '7.3': ['Figure_7.3_B.png', 'Figure_7.3_A.png'], '20.25': ['Figure_20.25_A.png', 'Figure_20.25_B.png'], '14.28': ['Figure_14.28.png'], '5.7': ['Figure_5.7.png'], '23.5': ['Figure_23.5.png'], '4.26': ['Figure_4.26.png'], '13.11': ['Figure_13.11.png'], '14.12': ['Figure_14.12.png'], '13.20': ['Figure_13.20_A.png', 'Figure_13.20_B.png'], '20.32': ['Figure_20.32_B.png', 'Figure_20.32_A.png'], '3.3': ['Figure_3.3_B.png', 'Figure_3.3_A.png'], '19.11': ['Figure_19.11.png'], '8.24': ['Figure_8.24.png'], '8.3': ['Figure_8.3.png'], '5.1': ['Figure_5.1.png'], '14.39': ['Figure_14.39_B.png', 'Figure_14.39_C.png', 'Figure_14.39_D.png', 'Figure_14.39_F.png', 'Figure_14.39_H.png', 'Figure_14.39_A.png', 'Figure_14.39_G.png', 'Figure_14.39_E.png'], '8.6': ['Figure_8.6.png'], '13.8': ['Figure_13.8.png'], '17.13': ['Figure_17.13_B.png', 'Figure_17.13_A.png'], '15.20': ['Figure_15.20.png'], '21.20': ['Figure_21.20.png'], '9.6': ['Figure_9.6.png'], '14.26': ['Figure_14.26.png'], '16.6': ['Figure_16.6_B.png', 'Figure_16.6_A.png'], '14.19': ['Figure_14.19.png'], '6.5': ['Figure_6.5.png'], '15.10': ['Figure_15.10.png'], '19.2': ['Figure_19.2.png'], '3.14': ['Figure_3.14.png'], '14.1': ['Figure_14.1.png'], '19.16': ['Figure_19.16.png'], '20.45': ['Figure_20.45.png'], '14.31': ['Figure_14.31.png'], '12.1': ['Figure_12.1.png'], '15.25': ['Figure_15.25_A.png', 'Figure_15.25_B.png'], '7.11': ['Figure_7.11_A.png', 'Figure_7.11_B.png'], '3.4': ['Figure_3.4_A.png', 'Figure_3.4_B.png'], '6.7': ['Figure_6.7.png'], '4.11': ['Figure_4.11.png'], '15.26': ['Figure_15.26.png'], '2.7': ['Figure_2.7.png'], '15.11': ['Figure_15.11.png'], '13.25': ['Figure_13.25.png'], '14.34': ['Figure_14.34_C.png', 'Figure_14.34_A.jpg', 'Figure_14.34_B.png'], '7.4': ['Figure_7.4.png'], '14.29': ['Figure_14.29.png'], '23.7': ['Figure_23.7.png'], '22.2': ['Figure_22.2.png'], '17.4': ['Figure_17.4.png'], '23.6': ['Figure_23.6_A.png', 'Figure_23.6_B.png'], '14.9': ['Figure_14.9.png'], '15.27': ['Figure_15.27.png'], '15.4': ['Figure_15.4_A.png', 'Figure_15.4_B.png'], '10.11': ['Figure_10.11_B.png', 'Figure_10.11_A.png'], '14.25': ['Figure_14.25.png'], '17.5': ['Figure_17.5.png'], '15.29': ['Figure_15.29.pdf'], '10.8': ['Figure_10.8.png'], '23.2': ['Figure_23.2.png'], '3.2': ['Figure_3.2.jpg'], '15.30': ['Figure_15.30.png'], '14.7': ['Figure_14.7.png'], '21.17': ['Figure_21.17.png'], '20.9': ['Figure_20.9.png'], '15.17': ['Figure_15.17_B.png', 'Figure_15.17_A.png'], '8.2': ['Figure_8.2.png'], '15.12': ['Figure_15.12_B.png', 'Figure_15.12_A.png'], '15.13': ['Figure_15.13.png'], '14.2': ['Figure_14.2.png'], '3.15': ['Figure_3.15_B.png', 'Figure_3.15_A.png'], '20.14': ['Figure_20.14_B.png', 'Figure_20.14_A.png'], '15.34': ['Figure_15.34.png'], '20.39': ['Figure_20.39.png'], '9.3': ['Figure_9.3.png'], '20.20': ['Figure_20.20.png'], '13.19': ['Figure_13.19.png'], '14.38': ['Figure_14.38_A.jpg', 'Figure_14.38_C.png', 'Figure_14.38_B.jpg'], '2.19': ['Figure_2.19_B.png', 'Figure_2.19_A.png'], '15.35': ['Figure_15.35_B.png', 'Figure_15.35_A.png', 'Figure_15.35_D.png', 'Figure_15.35_C.png'], '8.8': ['Figure_8.8.png'], '15.21': ['Figure_15.21.png'], '20.16': ['Figure_20.16.png'], '13.9': ['Figure_13.9.png'], '22.4': ['Figure_22.4_B.png', 'Figure_22.4_A.png'], '15.18': ['Figure_15.18.png'], '14.41': ['Figure_14.41.png'], '20.11': ['Figure_20.11.png'], '15.36': ['Figure_15.36.png'], '10.3': ['Figure_10.3.png'], '23.1': ['Figure_23.1_B.png', 'Figure_23.1_A.png'], '8.4': ['Figure_8.4_B.png', 'Figure_8.4_A.pdf'], '20.44': ['Figure_20.44_B.png', 'Figure_20.44_A.png'], '20.27': ['Figure_20.27_A.png', 'Figure_20.27_B.png'], '14.6': ['Figure_14.6.png'], '15.33': ['Figure_15.33_B.png', 'Figure_15.33_A.png'], '20.42': ['Figure_20.42.png'], '14.21': ['Figure_14.21.png'], '14.10': ['Figure_14.10.png'], '13.16': ['Figure_13.16.png'], '13.3': ['Figure_13.3.png'], '18.2': ['Figure_18.2_A.png', 'Figure_18.2_B.png'], '23.9': ['Figure_23.9.png'], '17.6': ['Figure_17.6.png'], '1.4': ['Figure_1.4_A.png', 'Figure_1.4_B.png'], '13.17': ['Figure_13.17_B.png', 'Figure_13.17_A.png'], '20.24': ['Figure_20.24_A.png', 'Figure_20.24_B.png'], '13.5': ['Figure_13.5.png'], '19.4': ['Figure_19.4_A.png', 'Figure_19.4_B.png'], '17.15': ['Figure_17.15.png'], '17.16': ['Figure_17.16_B.png', 'Figure_17.16_A.png'], '7.12': ['Figure_7.12.png'], '1.11': ['Figure_1.11.png'], '8.22': ['Figure_8.22.png'], '2.21': ['Figure_2.21.png'], '15.23': ['Figure_15.23.png'], '19.12': ['Figure_19.12.png'], '1.14': ['Figure_1.14_B.png', 'Figure_1.14_A.png'], '15.16': ['Figure_15.16.pdf'], '8.9': ['Figure_8.9.png'], '14.4': ['Figure_14.4.png'], '14.35': ['Figure_14.35.png'], '1.15': ['Figure_1.15.png'], '2.18': ['Figure_2.18_B.png', 'Figure_2.18_A.png'], '19.15': ['Figure_19.15.png'], '13.10': ['Figure_13.10.png'], '19.3': ['Figure_19.3_B.png', 'Figure_19.3_A.png'], '15.7': ['Figure_15.7.png'], '22.1': ['Figure_22.1.png'], '16.7': ['Figure_16.7.png'], '14.32': ['Figure_14.32.png'], '2.22': ['Figure_2.22.png'], '20.40': ['Figure_20.40.png'], '19.9': ['Figure_19.9.png'], '22.6': ['Figure_22.6.png'], '14.20': ['Figure_14.20.png'], '20.15': ['Figure_20.15.png'], '5.11': ['Figure_5.11.png'], '14.36': ['Figure_14.36.jpg'], '13.12': ['Figure_13.12.png'], '14.23': ['Figure_14.23.png'], '14.11': ['Figure_14.11.png'], '9.7': ['Figure_9.7.png'], '2.8': ['Figure_2.8.png'], '20.28': ['Figure_20.28.png'], '20.19': ['Figure_20.19_A.png', 'Figure_20.19_B.png'], '17.12': ['Figure_17.12.png'], '14.5': ['Figure_14.5.png'], '2.20': ['Figure_2.20.png'], '19.1': ['Figure_19.1.png'], '8.20': ['Figure_8.20_A.png'], '14.33': ['Figure_14.33.jpg'], '8.19': ['Figure_8.19_B.png', 'Figure_8.19_A.png'], '14.8': ['Figure_14.8_A.png', 'Figure_14.8_B.png'], '6.6': ['Figure_6.6.png'], '14.14': ['Figure_14.14.png'], '19.7': ['Figure_19.7_A.png', 'Figure_19.7_B.png'], '15.15': ['Figure_15.15.png'], '10.12': ['Figure_10.12.png'], '21.22': ['Figure_21.22.png'], '8.10': ['Figure_8.10.png'], '15.1': ['Figure_15.1.png'], '15.9': ['Figure_15.9.png'], '7.5': ['Figure_7.5.png'], '14.30': ['Figure_14.30.png'], '23.4': ['Figure_23.4.png'], '15.24': ['Figure_15.24.png'], '20.23': ['Figure_20.23.png'], '5.9': ['Figure_5.9.png'], '14.24': ['Figure_14.24.png'], '16.4': ['Figure_16.4.png'], '7.1': ['Figure_7.1.png']}
def get_figure_text(fig_no): if fig_no not in image_mapping: return "-" url = "https://github.com/probml/pml-book/blob/main/book1-figures/" text = "" for fig in image_mapping[fig_no]: text += f"[{fig}]({os.path.join(url,fig)})<br/>" return text
def extract_url(line): links = re.findall(r"(https.+)?\)" ,line) if links: return links return None
dead = [] for chap_no in chapter_wise_mappping: if chap_no == 23: continue #not present in pyprobml content = f''' # Chapter {chap_no}: {chap_names[chap_no]} ## Figures |Figure No. | Notebook | Figure | |--|--|--| ''' for fig_no in chapter_wise_mappping[chap_no]: notebook_link = f"[{chapter_wise_mappping[chap_no][fig_no]}]({chapter_wise_mappping[chap_no][fig_no]})" if chapter_wise_mappping[chap_no][fig_no] != "" else "-" content += f"| {fig_no} | {notebook_link} " content+= f"| {get_figure_text(fig_no)} |\n" # append supplementary suppl = f"../../pml-book/pml1/supplements/chap{chap_no}.md" with open(suppl, "r") as fp: text = fp.read() print(chap_no,len(text.split("\n"))) if len(text.split("\n")) > 3: content += "## Supplementary material\n" text = "\n".join(text.split("\n")[1:]) #change tutorial location from probml_notebooks to pyprobml text = text.replace("https://github.com/probml/probml-notebooks/blob/main/markdown/","https://github.com/probml/pyprobml/tree/master/tutorials/") content+=text #print(content) # save this as README.md readme_file = f"../notebooks/book1/{chap_no:02d}/README.md" with open(readme_file,"w") as fp: fp.write(content)
1 12 2 4 3 4 4 5 5 5 6 3 7 4 8 9 9 3 10 6 11 9 12 3 13 13 14 17 15 20 16 4 17 3 18 5 19 6 20 10 21 3 22 5
# for line in lines: # links = extract_url(line) # if links: # for link in links: # if "http" in link and is_dead_url(link): # print(link) # dead.append(link) # text = "\n".join(lines) # content+=text