diff --git a/apps/consulting/public/nebari-services/confluency-logo.png b/apps/consulting/public/nebari-services/confluency-logo.png index 1cd33f126..bf8b503cf 100644 Binary files a/apps/consulting/public/nebari-services/confluency-logo.png and b/apps/consulting/public/nebari-services/confluency-logo.png differ diff --git a/apps/consulting/public/nebari-services/earth-big-data-logo.png b/apps/consulting/public/nebari-services/earth-big-data-logo.png index 93cadabec..cb7c58256 100644 Binary files a/apps/consulting/public/nebari-services/earth-big-data-logo.png and b/apps/consulting/public/nebari-services/earth-big-data-logo.png differ diff --git a/apps/consulting/public/nebari-services/esip-logo.png b/apps/consulting/public/nebari-services/esip-logo.png index 0aa46b42b..ce6315bb3 100644 Binary files a/apps/consulting/public/nebari-services/esip-logo.png and b/apps/consulting/public/nebari-services/esip-logo.png differ diff --git a/apps/consulting/public/nebari-services/morningstar-logo.png b/apps/consulting/public/nebari-services/morningstar-logo.png index b077fb791..ed47d7690 100644 Binary files a/apps/consulting/public/nebari-services/morningstar-logo.png and b/apps/consulting/public/nebari-services/morningstar-logo.png differ diff --git a/apps/consulting/public/posts/acceleration-in-python-which-is-right-for-your-project/acceleration-img-1.jpg b/apps/consulting/public/posts/acceleration-in-python-which-is-right-for-your-project/acceleration-img-1.jpg index 12e90b361..6da4ab95c 100644 Binary files a/apps/consulting/public/posts/acceleration-in-python-which-is-right-for-your-project/acceleration-img-1.jpg and b/apps/consulting/public/posts/acceleration-in-python-which-is-right-for-your-project/acceleration-img-1.jpg differ diff --git a/apps/consulting/public/posts/acceleration-in-python-which-is-right-for-your-project/pythonacc.png b/apps/consulting/public/posts/acceleration-in-python-which-is-right-for-your-project/pythonacc.png index 31940a2ab..cb7dcc8eb 100644 Binary files a/apps/consulting/public/posts/acceleration-in-python-which-is-right-for-your-project/pythonacc.png and b/apps/consulting/public/posts/acceleration-in-python-which-is-right-for-your-project/pythonacc.png differ diff --git a/apps/consulting/public/posts/announcing-qhub/qhub-img-1.png b/apps/consulting/public/posts/announcing-qhub/qhub-img-1.png index b1b11700a..85bd1d54b 100644 Binary files a/apps/consulting/public/posts/announcing-qhub/qhub-img-1.png and b/apps/consulting/public/posts/announcing-qhub/qhub-img-1.png differ diff --git a/apps/consulting/public/posts/announcing-qhub/qhub-img-2.png b/apps/consulting/public/posts/announcing-qhub/qhub-img-2.png index a62a01997..c54f70fec 100644 Binary files a/apps/consulting/public/posts/announcing-qhub/qhub-img-2.png and b/apps/consulting/public/posts/announcing-qhub/qhub-img-2.png differ diff --git a/apps/consulting/public/posts/announcing-qhub/qhub-img-3.png b/apps/consulting/public/posts/announcing-qhub/qhub-img-3.png index de64892d0..eca1341d6 100644 Binary files a/apps/consulting/public/posts/announcing-qhub/qhub-img-3.png and b/apps/consulting/public/posts/announcing-qhub/qhub-img-3.png differ diff --git a/apps/consulting/public/posts/announcing-qhub/qhub-img-5.png b/apps/consulting/public/posts/announcing-qhub/qhub-img-5.png index e310b129a..79909dd56 100644 Binary files a/apps/consulting/public/posts/announcing-qhub/qhub-img-5.png and b/apps/consulting/public/posts/announcing-qhub/qhub-img-5.png differ diff --git a/apps/consulting/public/posts/announcing-qhub/qhub-img-6.png b/apps/consulting/public/posts/announcing-qhub/qhub-img-6.png index 7e6affa85..a561e4783 100644 Binary files a/apps/consulting/public/posts/announcing-qhub/qhub-img-6.png and b/apps/consulting/public/posts/announcing-qhub/qhub-img-6.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/panellogo4x3.png b/apps/consulting/public/posts/building-a-panel-pipeline/panellogo4x3.png index 7b21b73ab..8594d34e5 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/panellogo4x3.png and b/apps/consulting/public/posts/building-a-panel-pipeline/panellogo4x3.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-1.png b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-1.png index 27ada697d..5ec798e41 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-1.png and b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-1.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-10.png b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-10.png index 994cc9aac..372505529 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-10.png and b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-10.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-2.png b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-2.png index d2b75f15e..8b9fdf020 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-2.png and b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-2.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-3.png b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-3.png index a3dbdbf9a..8dc0a8797 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-3.png and b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-3.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-4.png b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-4.png index b1b370083..f6751b422 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-4.png and b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-4.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-5.png b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-5.png index eacab8434..b58a99f0d 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-5.png and b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-5.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-6.png b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-6.png index 4deb5efd2..f7f1cca27 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-6.png and b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-6.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-7.png b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-7.png index 1a89d1cfb..ea3d44df3 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-7.png and b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-7.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-8.png b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-8.png index edecbcb96..ea8eef47f 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-8.png and b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-8.png differ diff --git a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-9.png b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-9.png index 97cb2f119..a1b222a22 100644 Binary files a/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-9.png and b/apps/consulting/public/posts/building-a-panel-pipeline/pipeline-img-9.png differ diff --git a/apps/consulting/public/posts/dash-voila-panel-streamlit-our-thoughts-on-the-big-four-dashboarding-tools/big-four-img-3.png b/apps/consulting/public/posts/dash-voila-panel-streamlit-our-thoughts-on-the-big-four-dashboarding-tools/big-four-img-3.png index d475c7f7e..8e15b9c53 100644 Binary files a/apps/consulting/public/posts/dash-voila-panel-streamlit-our-thoughts-on-the-big-four-dashboarding-tools/big-four-img-3.png and b/apps/consulting/public/posts/dash-voila-panel-streamlit-our-thoughts-on-the-big-four-dashboarding-tools/big-four-img-3.png differ diff --git a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-1.png b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-1.png index 6ecea9d09..e31995cb9 100644 Binary files a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-1.png and b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-1.png differ diff --git a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-10.png b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-10.png index 79ceba180..f92a6074f 100644 Binary files a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-10.png and b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-10.png differ diff --git a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-2.png b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-2.png index 84103abf7..4d40cad4c 100644 Binary files a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-2.png and b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-2.png differ diff --git a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-3.png b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-3.png index 8ab2b35d6..054b393dd 100644 Binary files a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-3.png and b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-3.png differ diff --git a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-4.png b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-4.png index 8318bfc42..27f52a617 100644 Binary files a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-4.png and b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-4.png differ diff --git a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-5.png b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-5.png index a4bc6c5a1..6c052c0e5 100644 Binary files a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-5.png and b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-5.png differ diff --git a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-6.png b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-6.png index 33c4b4ef7..6d8250943 100644 Binary files a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-6.png and b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-6.png differ diff --git a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-7.png b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-7.png index 8fc1c6621..fad380001 100644 Binary files a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-7.png and b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-7.png differ diff --git a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-8.png b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-8.png index 773e769d8..914d17641 100644 Binary files a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-8.png and b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-8.png differ diff --git a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-9.png b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-9.png index ab71d9138..2a35c3d8c 100644 Binary files a/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-9.png and b/apps/consulting/public/posts/dask-on-coiled/daskoncoiled-img-9.png differ diff --git a/apps/consulting/public/posts/evolving-qhub-to-nebari/3-nebari-how-to-contribute.png b/apps/consulting/public/posts/evolving-qhub-to-nebari/3-nebari-how-to-contribute.png index 972e37717..e5f926ee8 100644 Binary files a/apps/consulting/public/posts/evolving-qhub-to-nebari/3-nebari-how-to-contribute.png and b/apps/consulting/public/posts/evolving-qhub-to-nebari/3-nebari-how-to-contribute.png differ diff --git a/apps/consulting/public/posts/evolving-qhub-to-nebari/4-nebari-concept-composite.jpg b/apps/consulting/public/posts/evolving-qhub-to-nebari/4-nebari-concept-composite.jpg index 5d3d1e9f5..481651789 100644 Binary files a/apps/consulting/public/posts/evolving-qhub-to-nebari/4-nebari-concept-composite.jpg and b/apps/consulting/public/posts/evolving-qhub-to-nebari/4-nebari-concept-composite.jpg differ diff --git a/apps/consulting/public/posts/evolving-qhub-to-nebari/5-nebari-logo-tbcrop.png b/apps/consulting/public/posts/evolving-qhub-to-nebari/5-nebari-logo-tbcrop.png index cdc52cbe1..21eee69a5 100644 Binary files a/apps/consulting/public/posts/evolving-qhub-to-nebari/5-nebari-logo-tbcrop.png and b/apps/consulting/public/posts/evolving-qhub-to-nebari/5-nebari-logo-tbcrop.png differ diff --git a/apps/consulting/public/posts/evolving-qhub-to-nebari/5-nebari-logo.png b/apps/consulting/public/posts/evolving-qhub-to-nebari/5-nebari-logo.png index 9124ec7a6..72c1c0cc0 100644 Binary files a/apps/consulting/public/posts/evolving-qhub-to-nebari/5-nebari-logo.png and b/apps/consulting/public/posts/evolving-qhub-to-nebari/5-nebari-logo.png differ diff --git a/apps/consulting/public/posts/evolving-qhub-to-nebari/6-nebari-help.png b/apps/consulting/public/posts/evolving-qhub-to-nebari/6-nebari-help.png index ad5167189..ead437270 100644 Binary files a/apps/consulting/public/posts/evolving-qhub-to-nebari/6-nebari-help.png and b/apps/consulting/public/posts/evolving-qhub-to-nebari/6-nebari-help.png differ diff --git a/apps/consulting/public/posts/evolving-qhub-to-nebari/7-nebari-contributor-graph.png b/apps/consulting/public/posts/evolving-qhub-to-nebari/7-nebari-contributor-graph.png index 72d001649..649bf4ed2 100644 Binary files a/apps/consulting/public/posts/evolving-qhub-to-nebari/7-nebari-contributor-graph.png and b/apps/consulting/public/posts/evolving-qhub-to-nebari/7-nebari-contributor-graph.png differ diff --git a/apps/consulting/public/posts/exploring-reinforcement-learning/reinf_learning.png b/apps/consulting/public/posts/exploring-reinforcement-learning/reinf_learning.png index 54a7c3da5..7a3ee7445 100644 Binary files a/apps/consulting/public/posts/exploring-reinforcement-learning/reinf_learning.png and b/apps/consulting/public/posts/exploring-reinforcement-learning/reinf_learning.png differ diff --git a/apps/consulting/public/posts/extending-numba-types-for-clean-fast-code/numba-logo.jpg b/apps/consulting/public/posts/extending-numba-types-for-clean-fast-code/numba-logo.jpg index 59204f439..ffcbed13f 100644 Binary files a/apps/consulting/public/posts/extending-numba-types-for-clean-fast-code/numba-logo.jpg and b/apps/consulting/public/posts/extending-numba-types-for-clean-fast-code/numba-logo.jpg differ diff --git a/apps/consulting/public/posts/logos/pytorch_logo_large.png b/apps/consulting/public/posts/logos/pytorch_logo_large.png index 1a26f2b4f..61efa12ad 100644 Binary files a/apps/consulting/public/posts/logos/pytorch_logo_large.png and b/apps/consulting/public/posts/logos/pytorch_logo_large.png differ diff --git a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-1.png b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-1.png index 93b2ed01c..a5c85a041 100644 Binary files a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-1.png and b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-1.png differ diff --git a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-2.png b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-2.png index 9cdade424..8bcdb6b7b 100644 Binary files a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-2.png and b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-2.png differ diff --git a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-3.png b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-3.png index 8a0f89060..47b2db887 100644 Binary files a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-3.png and b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-3.png differ diff --git a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-4.png b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-4.png index 4fc74d0ce..398557fb6 100644 Binary files a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-4.png and b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-4.png differ diff --git a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-5.png b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-5.png index 8c7bfd079..82a394851 100644 Binary files a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-5.png and b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-5.png differ diff --git a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-6.png b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-6.png index 43cc5c03b..1a6d87723 100644 Binary files a/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-6.png and b/apps/consulting/public/posts/open-source-natural-language-processing-libraries-to-get-you-started/nlp-img-6.png differ diff --git a/apps/consulting/public/posts/openai-pseudocode/pseudocode-screenshot.png b/apps/consulting/public/posts/openai-pseudocode/pseudocode-screenshot.png index ce0ecfae6..ce2760ad8 100644 Binary files a/apps/consulting/public/posts/openai-pseudocode/pseudocode-screenshot.png and b/apps/consulting/public/posts/openai-pseudocode/pseudocode-screenshot.png differ diff --git a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-1.png b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-1.png index a07a2c57a..dbf7e11bd 100644 Binary files a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-1.png and b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-1.png differ diff --git a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-2.png b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-2.png index 3ff498592..e9fcdc06b 100644 Binary files a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-2.png and b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-2.png differ diff --git a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-3.png b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-3.png index 193fe47d2..3749a8ebd 100644 Binary files a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-3.png and b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-3.png differ diff --git a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-4.png b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-4.png index 23100affd..274035829 100644 Binary files a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-4.png and b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-4.png differ diff --git a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-5.png b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-5.png index 23100affd..638457a03 100644 Binary files a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-5.png and b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-5.png differ diff --git a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-6.png b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-6.png index 73ae75d5f..eb92a6177 100644 Binary files a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-6.png and b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-6.png differ diff --git a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-7.png b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-7.png index f825317ba..baa0284e2 100644 Binary files a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-7.png and b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-7.png differ diff --git a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-8.png b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-8.png index 0f29897f0..c86003066 100644 Binary files a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-8.png and b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-8.png differ diff --git a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-9.png b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-9.png index b653b83dc..44fee191c 100644 Binary files a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-9.png and b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholo-img-9.png differ diff --git a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholoviewsblog.png b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholoviewsblog.png index 53d77908d..5b9ad0d99 100644 Binary files a/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholoviewsblog.png and b/apps/consulting/public/posts/panel-holoviews-learning-aid/panelholoviewsblog.png differ diff --git a/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-1.png b/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-1.png index 4b83363dc..ff83853ee 100644 Binary files a/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-1.png and b/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-1.png differ diff --git a/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-2.png b/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-2.png index 4522c5cd9..d7daa3edb 100644 Binary files a/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-2.png and b/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-2.png differ diff --git a/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-3.png b/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-3.png index 254874337..1591a988d 100644 Binary files a/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-3.png and b/apps/consulting/public/posts/performance-for-image-processing-with-cucim/image-processing-img-3.png differ diff --git a/apps/consulting/public/posts/python-forever/python-1-img-1.jpg b/apps/consulting/public/posts/python-forever/python-1-img-1.jpg index 9238f6845..da3d6aa70 100644 Binary files a/apps/consulting/public/posts/python-forever/python-1-img-1.jpg and b/apps/consulting/public/posts/python-forever/python-1-img-1.jpg differ diff --git a/apps/consulting/public/posts/python-forever/python-1-img-gallery.png b/apps/consulting/public/posts/python-forever/python-1-img-gallery.png index b1007f18c..78ded3dfc 100644 Binary files a/apps/consulting/public/posts/python-forever/python-1-img-gallery.png and b/apps/consulting/public/posts/python-forever/python-1-img-gallery.png differ diff --git a/apps/consulting/public/posts/quick-dashboarding-with-panel/panel-dashboard-img-1.png b/apps/consulting/public/posts/quick-dashboarding-with-panel/panel-dashboard-img-1.png index b5a7979fb..01e210182 100644 Binary files a/apps/consulting/public/posts/quick-dashboarding-with-panel/panel-dashboard-img-1.png and b/apps/consulting/public/posts/quick-dashboarding-with-panel/panel-dashboard-img-1.png differ diff --git a/apps/consulting/public/posts/quick-dashboarding-with-panel/panellogo4x3.png b/apps/consulting/public/posts/quick-dashboarding-with-panel/panellogo4x3.png index 7b21b73ab..78e1c742c 100644 Binary files a/apps/consulting/public/posts/quick-dashboarding-with-panel/panellogo4x3.png and b/apps/consulting/public/posts/quick-dashboarding-with-panel/panellogo4x3.png differ diff --git a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/anscombe_3_57pct_adj.png b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/anscombe_3_57pct_adj.png index e6445fe57..d9b2a9c0d 100644 Binary files a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/anscombe_3_57pct_adj.png and b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/anscombe_3_57pct_adj.png differ diff --git a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/bean-machine-code.png b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/bean-machine-code.png index 61c5c7868..163b277e2 100644 Binary files a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/bean-machine-code.png and b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/bean-machine-code.png differ diff --git a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/bean-machine-equations_75pct.png b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/bean-machine-equations_75pct.png index ef2466a6a..f27da78bd 100644 Binary files a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/bean-machine-equations_75pct.png and b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/bean-machine-equations_75pct.png differ diff --git a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/epicycle-final-frame-2.png b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/epicycle-final-frame-2.png index ea126e93d..1c6a1417c 100644 Binary files a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/epicycle-final-frame-2.png and b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/epicycle-final-frame-2.png differ diff --git a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/matura_composite_67pct_adj.png b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/matura_composite_67pct_adj.png index 148a1b304..d2f74dcc6 100644 Binary files a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/matura_composite_67pct_adj.png and b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/matura_composite_67pct_adj.png differ diff --git a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/mauna_loa_adj_800px.png b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/mauna_loa_adj_800px.png index 3426dd2c4..9a070dcb4 100644 Binary files a/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/mauna_loa_adj_800px.png and b/apps/consulting/public/posts/robust-predictions-and-increased-interpretability-through-domain-directed-modeling/mauna_loa_adj_800px.png differ diff --git a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-1.png b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-1.png index 485422819..9748e2c91 100644 Binary files a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-1.png and b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-1.png differ diff --git a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-10.png b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-10.png index 161f6193f..e2fd22b5b 100644 Binary files a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-10.png and b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-10.png differ diff --git a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-11.png b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-11.png index 0289c01a9..ef634f1ab 100644 Binary files a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-11.png and b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-11.png differ diff --git a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-4.png b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-4.png index 7c6e81925..ad8d88247 100644 Binary files a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-4.png and b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-4.png differ diff --git a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-5.png b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-5.png index 1ad77c772..0a4127dd8 100644 Binary files a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-5.png and b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-5.png differ diff --git a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-6.png b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-6.png index c9dee8e29..a77e26ca9 100644 Binary files a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-6.png and b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-6.png differ diff --git a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-7.png b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-7.png index 25bffedc1..633b6fcab 100644 Binary files a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-7.png and b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-7.png differ diff --git a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-8.png b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-8.png index 7a46a11cc..0df3ee0b1 100644 Binary files a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-8.png and b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-8.png differ diff --git a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-9.png b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-9.png index f3516c1c9..319af50b8 100644 Binary files a/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-9.png and b/apps/consulting/public/posts/spatial-filtering-at-scale-with-dask-and-spatialpandas/spacialpandas-img-9.png differ diff --git a/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-1.png b/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-1.png index 91f155df0..eecb0a183 100644 Binary files a/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-1.png and b/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-1.png differ diff --git a/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-2.png b/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-2.png index 2037a9fec..4b50d6eae 100644 Binary files a/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-2.png and b/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-2.png differ diff --git a/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-3.png b/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-3.png index 4a47e6026..c66480e83 100644 Binary files a/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-3.png and b/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-3.png differ diff --git a/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-4.png b/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-4.png index a689c8e7a..aababa45d 100644 Binary files a/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-4.png and b/apps/consulting/public/posts/up-and-running-with-prefect/prefect-img-4.png differ diff --git a/apps/consulting/public/posts/why-we-are-excited-about-jupyterlab-3-0-dynamic-extensions/lab_logo_tng.png b/apps/consulting/public/posts/why-we-are-excited-about-jupyterlab-3-0-dynamic-extensions/lab_logo_tng.png index 33c0f512d..89f6a3cb2 100644 Binary files a/apps/consulting/public/posts/why-we-are-excited-about-jupyterlab-3-0-dynamic-extensions/lab_logo_tng.png and b/apps/consulting/public/posts/why-we-are-excited-about-jupyterlab-3-0-dynamic-extensions/lab_logo_tng.png differ diff --git a/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-1.png b/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-1.png index 70a437034..37187ff7c 100644 Binary files a/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-1.png and b/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-1.png differ diff --git a/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-2.png b/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-2.png index 2ddca902a..c1f74eff5 100644 Binary files a/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-2.png and b/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-2.png differ diff --git a/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-3.png b/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-3.png index e035cfc89..b2d76794e 100644 Binary files a/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-3.png and b/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/ipywidgets-img-3.png differ diff --git a/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/panellogo4x3.png b/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/panellogo4x3.png index 7b21b73ab..017a75770 100644 Binary files a/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/panellogo4x3.png and b/apps/consulting/public/posts/working-across-panel-and-ipywidgets-ecosystems/panellogo4x3.png differ diff --git a/apps/labs/posts/numba-dynamic-exceptions.md b/apps/labs/posts/numba-dynamic-exceptions.md new file mode 100644 index 000000000..77a9e6355 --- /dev/null +++ b/apps/labs/posts/numba-dynamic-exceptions.md @@ -0,0 +1,174 @@ +--- +title: 'Numba Dynamic Exceptions' +published: June 27, 2023 +author: guilherme-leobas +description: 'In the following blogpost, we will explore the newly added feature in Numba: Dynamic exception support. We will discuss the previous limitations and explain how Numba was enhanced to handle runtime exceptions.' +category: [PyData ecosystem] +featuredImage: + src: /posts/enhancements-to-numba-guvectorize-decorator/blog_feature_var1.svg + alt: 'An illustration of a brown and a dark brown hand coming towards each other to pass a business card with the logo of Quansight Labs.' +hero: + imageSrc: /posts/enhancements-to-numba-guvectorize-decorator/blog_hero_org.svg + imageAlt: 'An illustration of a brown hand holding up a microphone, with some graphical elements highlighting the top of the microphone.' +--- + + +[Numba 0.57](https://numba.readthedocs.io/en/stable/release-notes.html#version-0-57-0-1-may-2023) was recently released, and it added an important feature: dynamic exceptions. Numba now supports exceptions with runtime arguments. Since [version 0.13.2](https://numba.readthedocs.io/en/stable/release-notes.html#version-0-13-2), Numba had limited support for exceptions: arguments had to be compile-time constants. + +Although Numba's focus is on compiling Python into fast machine code, there is still value in providing better support for exceptions. Improving support means that exception messages can now include more comprehensive content - for example, an `IndexError` can now include the index in the exception message. + +## Past, present and future + +Before Numba 0.57, exceptions were limited to compile-time constants only. This means that users could only raise exceptions in the following form: + +```python +from numba import njit + +@njit +def getitem(lst: list[int], idx: int): + if idx >= len(lst): + raise IndexError('list index out of range') + return lst[idx] +``` + +Attempting to raise an exception with runtime values in versions prior to 0.57 would result in a compilation error: + +```python +from numba import njit + +@njit +def getitem(lst: list[int], index: int): + if index >= len(lst): + raise IndexError(f'list index "{index}" out of range') + return lst[index] +``` + +```bash +$ python -c 'import numba; print(numba.__version__)' +0.56.4 + +$ python example.py +Traceback (most recent call last): + File "/Users/guilhermeleobas/git/blog/example.py", line 13, in + print(getitem(lst, index)) + File "/Users/guilhermeleobas/miniconda3/envs/numba056/lib/python3.10/site-packages/numba/core/dispatcher.py", line 480, in _compile_for_args + error_rewrite(e, 'constant_inference') + File "/Users/guilhermeleobas/miniconda3/envs/numba056/lib/python3.10/site-packages/numba/core/dispatcher.py", line 409, in error_rewrite + raise e.with_traceback(None) +numba.core.errors.ConstantInferenceError: Failed in nopython mode pipeline (step: nopython rewrites) +Constant inference not possible for: $24build_string.6 + $const22.5 + +File "example.py", line 7: +def getitem(lst: list[int], index: int): + + if index >= len(lst): + raise IndexError(f'list index "{index}" out of range') + ^ +``` + +This example works just fine in the latest release. + +```python +$ python -c 'import numba; print(numba.__version__)' +0.57.0 + +$ python example.py +Traceback (most recent call last): + File "/Users/guilhermeleobas/git/blog/example.py", line 13, in + print(getitem(lst, index)) + File "/Users/guilhermeleobas/git/blog/example.py", line 7, in getitem + raise IndexError(f'list index "{index}" out of range') +IndexError: list index "4" out of range +``` + +In the future, Numba users can expect better exception messages raised from Numba overloads and compiled code. + +## How does it work? + +Numba is a JIT compiler that translates a subset of Python into machine code. This translation step is done using [LLVM](https://llvm.org/). When Numba compiled code raises an exception, it must signal to the interpreter and propagate any required information back. The calling convention for **CPU** targets specifies how signaling is done: + +```c +retcode_t (*, excinfo_t **, ... ) +``` + +The return code is one of the `RETCODE_*` constants in the [callconv.py](https://github.com/numba/numba/blob/main/numba/core/callconv.py#L47-L55) file. + +

+ Control flow of execution when an exception is raised +
Figure contains a high-level illustration of the control flow + when a Numba function raises an exception. +

+ +### Static Exceptions + +When an exception is raised, the struct `excinfo_t**` is filled with a pointer to a struct describing the raised exception. Before Numba 0.57, this struct contained three fields: + +- A pointer (`i8*`) to a pickled string. +- String size (`i32`). +- Hash (`i8*`) of this same string. + +Take for instance the following snippet of code: + +```python +@jit(nopython=True) +def func(): + raise ValueError('exc message') +``` + +The triple `(ValueError, 'exc message', location)` is pickled and serialized to the [LLVM module](https://llvm.org/docs/LangRef.html#module-structure) as a constant string. When the exception is raised, this same serialized string is unpickled by the interpreter (1) and a frame is created for the exception (2). + +### Dynamic Exceptions + +To support dynamic exceptions, we reuse all the existing fields and introduce two new ones. + +- A pointer (`i8*`) to a pickled string containing static information. +- String size (`i32`). +- The third argument (`i8*`), which was previously used for hashing is now used to hold a list of native values. +- A pointer to a function (`i8*`) that knows how to convert native values back to Python values. This is called [boxing](https://numba.pydata.org/numba-doc/dev/extending/interval-example.html#boxing-and-unboxing). +- A flag (`i32`) to signal whether an exception is static or dynamic. A value greater than zero not only indicates whether it is a dynamic exception, but also the number of runtime arguments. + +Using Python code, dynamic exceptions work as follows: + +```python +@jit(nopython=True) +def dyn_exc_func(s: str): + raise TypeError('error', s, len(s)) +``` + +For each dynamic exception, Numba will generate a function that boxes native values into Python types. In the example above, `__exc_conv` will be generated automatically: + +```python +def __exc_conv(s: native_string, i: int64) -> Tuple[str, int]: + # convert + py_string: str = box(s) + py_int: int = box(i) + return (py_string, py_int) +``` + +The code mentioned earlier is used for illustrative purposes. However, in practice, `__exc_conv` is implemented as native code. + +The `excinfo` struct will be filled with: + +- Pickled string of compile-time information: (exception type, static arguments, location). +- String size. +- A list of dynamic arguments: `[native string, int64]`. +- A pointer to `__exc_conv`. +- Number of dynamic arguments: `2`. + +During runtime, just before the control flow is returned to the interpreter, function `__exc_conv` is invoked to convert native `string/int` values into their equivalent Python `str/int` types. At this stage, the interpreter also unpickles constant information, and both static and dynamic arguments are combined into a unified list (3). + +I encourage anyone interested in further details to read the comments left on `callconv.py::CPUCallConv` ([ref](https://github.com/numba/numba/blob/c9cc06ba1410aff242764ffde8387a1bef2180ae/numba/core/callconv.py#L411-L444)). + +## Limitations and future work + +Numba has a [page](https://numba.readthedocs.io/en/stable/reference/pysupported.html#exception-handling) describing what is supported in exception handling. Some work still needs to be done to support exceptions to their full extent. + +We would like to thank [Bodo](https://bodo.ai) for sponsoring this work and the Numba core developers and community for reviewing this work and the useful insights given during code review. + +## References + +* (1) [`numba/core/serialize.py::_numba_unpickle`](https://github.com/numba/numba/blob/82d3cbb8818b43dc66e5dd4bb38355eaf25131be/numba/core/serialize.py#L30-L49) +* (2) [`numba/_helperlib.c::numba_do_raise`](https://github.com/numba/numba/blob/39fc546dda0a21b90432e60f3c5e8c34f7892024/numba/_helperlib.c#L995-L1025) +* (3) [`numba/core/serialize.py::runtime_build_excinfo_struct`](https://github.com/numba/numba/blob/82d3cbb8818b43dc66e5dd4bb38355eaf25131be/numba/core/serialize.py#L64-L73) diff --git a/apps/labs/posts/pycon-us-2023-an-action-packed-week.md b/apps/labs/posts/pycon-us-2023-an-action-packed-week.md new file mode 100644 index 000000000..303476911 --- /dev/null +++ b/apps/labs/posts/pycon-us-2023-an-action-packed-week.md @@ -0,0 +1,97 @@ +--- +title: 'PyCon US 2023 - An action-packed week' +published: June 28, 2023 +author: lysandros-nikolaou +description: "In this post I'm sharing my experience of traveling to the US for PyCon US 2023" +category: [Community, OSS Experience] +featuredImage: + src: /posts/quansight-at-scipy2019/blog_feature_org.svg + alt: 'An illustration of a brown and a white hand coming towards each other to pass a business card with the logo of Quansight Labs.' +hero: + imageSrc: /posts/quansight-at-scipy2019/blog_hero_var2.svg + imageAlt: 'An illustration of a dark brown hand holding up a microphone, with some graphical elements highlighting the top of the microphone.' +--- + +A few weeks ago, I had the great opportunity of traveling to Salt Lake City, +UT to attend the biggest worldwide Python conference, PyCon US. After about +20 hours of traveling from Berlin to Utah through Frankfurt and Denver, I arrived +at one of the conference hotels on Tuesday evening with just enough time to rest +before a week full of summits, talks, volunteering, and talking to great people. + +First item on the agenda on Wednesday was the Language Summit, an annual all-day +gathering of CPython core developers, triagers, documentarians, and guests working +on various Python implementations or projects that are closely related to them +such as HPy. The discussions centered around the C API, the GIL and all of the +work toward removing it, and how to recognize, prevent and tackle burnout. I won’t +go into too much detail, but anyone that’s interested can read [Alex Waygood’s blog +posts on the Language Summit](https://pyfound.blogspot.com/2023/05/the-python-language-summit-2023_29.html). +He really did an amazing job in summing up all of the talks and discussions. I will, +however, mention one personal highlight from the Language Summit. Before the first +talk, Pablo Galindo Salgado, Python 3.10 & 3.11 release manager and fellow compiler +front-end co-conspirator, went up to the podium and, in front of everyone, merged +[PR #102855](https://github.com/python/cpython/pull/102855), the implementation of +PEP 701, which marked a significant milestone in our work toward standardizing and +improving f-strings. + +The next few days passed by quickly. On Thursday I attended the opening reception. +It was the first time we got to see the expo hall with all the different companies +and sponsors of PyCon US, which also included [Quansight](https://quansight.com/) and +our sister company [OpenTeams](https://www.openteams.com/). Friday was the first day +of talks. It started off with a great keynote on how to go about talking to people by +Ned Batchelder. It really helped me put into perspective a lot of my own open-source +interactions and how to guard against common pitfalls when engaging with open source +communities. After that and for the rest of the day I attended a lot of exciting +talks on topics ranging from WASM and PyScript to Python 3.11’s specializing +adaptive interpreter. I’m also very happy that, this year, for the first time, +I volunteered as a session chair. This session included three amazing presentations +on mutation testing by Dave Aronson, molecular simulation by Iván Pulido, and one +of the killer-features of Python 3.12, the per-interpreter GIL by Eric Snow. + +Saturday was another first for me. Attending the [Mentored Sprints for Diverse +Beginners](https://mentored-sprints.netlify.app/), an event that aims at introducing +open-source to anyone that might be facing barriers while contributing. This event +was an incredible experience. It included working together with three people that +were interested in opening their first PR to CPython. At the end of the event, +they’d all succeeded in doing so, which marked a very successful day. I also attended +the Steering Council panel, the Diversity & Inclusion Panel, and, of course, the +one-of-its-kind keynote on Python expertise (or rather the lack thereof) by James +Powell. A round of talks followed, on topics such as WASM (yes, WASM again), syntactic +sugar in Python, and object-oriented programming. In the evening, it was time for +the PyLadies Auction. One of the most fun moments in all of PyCon, the PyLadies +Auction is a unique event that aims to bring people together in supporting [PyLadies](https://pyladies.com/). + +Sunday, like any last day of a conference, was a bit bitter-sweet. Everyone was +excited to attend the last round of talks and keynotes, but, at the same time, a +bit sad that the main part of the conference was slowly coming to an end. Yes, +some people were going to stay around for the sprints the following week, but the +sound of all the people rushing to their talks, talking with each other and having +fun is not the same. The day started with a round of lightning talks and an +eye-opening keynote by Margaret Mitchell on data, bias, and all the things we should +be watching out for in the AI era, and it ended with three truly special keynotes. +In the first one, Carol Willing talked about Python’s global network and how there are +three basic elements to it: connection, communication, and scale. The second one was +Deb Nicholson’s update on the PSF and the giving of Community Service Awards. The +last talk of the day, which also marked the end of the 20th PyCon US, was a trip down +memory lane by Guido van Rossum, who told us stories about the first Python conferences, +the ones that started it all. + +The following three days were mostly about coming together to sprint on a variety of +projects. A lot of different projects were part of the event this year, one of them +being CPython. During the three days I was there, I spent most of my time working on +PEP 701-related firefighting and (mostly unsuccessfully) mentoring some awesome people +to contribute to CPython. A personal highlight during these three days was witnessing +Russel Keith-Magee managing sprinters on some of the projects he created, such as +[BeeWare](https://beeware.org/). The amount of preparation, mentoring, encouragement +toward beginners, and recognition of contributors with stickers and applause was a +true learning experience. + +For all of the great keynotes, talks, summits and sprints, there’s one aspect of PyCon +that really is irreplaceable, the hallway track! The ability to talk to Python greats, +meet old open-source friends and get to know new awesome people alike, really is what +makes this conference the unforgettable experience it is. A big thanks to all of the +people that made me enjoy this conference so much and, of course, to Quansight for +sponsoring me and enabling me to be there! + + +> I don't know about the rest of you... I came for the language, but I stayed for the community. +_~ Brett Cannon_ diff --git a/apps/labs/public/posts/announcing-labs-annual-report-2022/annual-report-infographic.jpg b/apps/labs/public/posts/announcing-labs-annual-report-2022/annual-report-infographic.jpg index 5404e5866..02797a5ac 100644 Binary files a/apps/labs/public/posts/announcing-labs-annual-report-2022/annual-report-infographic.jpg and b/apps/labs/public/posts/announcing-labs-annual-report-2022/annual-report-infographic.jpg differ diff --git a/apps/labs/public/posts/array-libraries-interoperability/feature.png b/apps/labs/public/posts/array-libraries-interoperability/feature.png index e96d38d54..c52be4a6d 100644 Binary files a/apps/labs/public/posts/array-libraries-interoperability/feature.png and b/apps/labs/public/posts/array-libraries-interoperability/feature.png differ diff --git a/apps/labs/public/posts/array-libraries-interoperability/hero.png b/apps/labs/public/posts/array-libraries-interoperability/hero.png index 5e0f9cc18..95679f8ec 100644 Binary files a/apps/labs/public/posts/array-libraries-interoperability/hero.png and b/apps/labs/public/posts/array-libraries-interoperability/hero.png differ diff --git a/apps/labs/public/posts/numba-dynamic-exceptions/diagram.png b/apps/labs/public/posts/numba-dynamic-exceptions/diagram.png new file mode 100644 index 000000000..552eec232 Binary files /dev/null and b/apps/labs/public/posts/numba-dynamic-exceptions/diagram.png differ diff --git a/apps/labs/public/posts/putting-out-the-fire/featured_jlabaccess2.png b/apps/labs/public/posts/putting-out-the-fire/featured_jlabaccess2.png index 40b102b09..ee20debf7 100644 Binary files a/apps/labs/public/posts/putting-out-the-fire/featured_jlabaccess2.png and b/apps/labs/public/posts/putting-out-the-fire/featured_jlabaccess2.png differ diff --git a/apps/labs/public/posts/putting-out-the-fire/hero_jlabaccess2.png b/apps/labs/public/posts/putting-out-the-fire/hero_jlabaccess2.png index a63cf744d..25d0dcc9a 100644 Binary files a/apps/labs/public/posts/putting-out-the-fire/hero_jlabaccess2.png and b/apps/labs/public/posts/putting-out-the-fire/hero_jlabaccess2.png differ diff --git a/apps/labs/public/posts/pycon-us-2023-an-action-packed-week/blog_feature_org.svg b/apps/labs/public/posts/pycon-us-2023-an-action-packed-week/blog_feature_org.svg new file mode 100644 index 000000000..09a64ff38 --- /dev/null +++ b/apps/labs/public/posts/pycon-us-2023-an-action-packed-week/blog_feature_org.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/labs/public/posts/pycon-us-2023-an-action-packed-week/blog_hero_var2.svg b/apps/labs/public/posts/pycon-us-2023-an-action-packed-week/blog_hero_var2.svg new file mode 100644 index 000000000..a1767f80c --- /dev/null +++ b/apps/labs/public/posts/pycon-us-2023-an-action-packed-week/blog_hero_var2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/labs/public/posts/versioned-hdf5-performance/feature.png b/apps/labs/public/posts/versioned-hdf5-performance/feature.png index 7b3010ecb..51c62a180 100644 Binary files a/apps/labs/public/posts/versioned-hdf5-performance/feature.png and b/apps/labs/public/posts/versioned-hdf5-performance/feature.png differ