<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Jupyter Blog - Bartosz Telenczuk</title><link href="https://jasongrout.github.io/medium-archive/pelican/" rel="alternate"/><link href="https://jasongrout.github.io/medium-archive/pelican/feeds/author-bartosz-telenczuk.atom.xml" rel="self"/><id>https://jasongrout.github.io/medium-archive/pelican/</id><updated>2019-11-11T14:03:00+00:00</updated><subtitle>The Project Jupyter blog: news, releases, and community stories, archived from blog.jupyter.org.</subtitle><entry><title>Configure your dashboards with Voilà gridstack template</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2019/voila-gridstack-template/" rel="alternate"/><published>2019-11-11T14:03:00+00:00</published><updated>2019-11-11T14:03:00+00:00</updated><author><name>Bartosz Telenczuk</name></author><id>tag:jasongrout.github.io,2019-11-11:/medium-archive/pelican/posts/2019/voila-gridstack-template/</id><summary type="html">&lt;p&gt;The new Voilà gridstack template simplifies creating dynamic and flexible dashboard layouts.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Voilà is a new dashboarding solution from Jupyter ecosystem. It provides an easy-to-use tool to convert your Jupyter notebooks into standalone web applications. If you have not used it before, you can learn more about Voilà from this &lt;a href="/posts/2019/and-voila/"&gt;blog post.&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="and-voila-the-dashboard-templates"&gt;And voilà… the dashboard templates&lt;/h3&gt;
&lt;p&gt;To create interactive and engaging dashboards, you can add &lt;a href="https://github.com/bloomberg/bqplot"&gt;graphs&lt;/a&gt;, &lt;a href="https://github.com/jupyter-widgets/ipywidgets"&gt;interactive widgets&lt;/a&gt;, &lt;a href="https://github.com/jupyter-widgets/ipyleaflet"&gt;maps&lt;/a&gt; etc. to your notebook. Voilà will turn them into interactive applications by stripping any code and displaying the outputs in the order they appear in the notebook. If you need more flexibility over the position of the cell outputs, you can use one of the &lt;a href="/posts/2019/introducing-templates-for-jupyter-widget-layouts/"&gt;widget layout templates&lt;/a&gt; defined in the ipywidgets library. If this is not enough, with Voilà you can even turn your notebooks into &lt;a href="/posts/2019/a-slideshow-template-for-voila-apps/"&gt;interactive presentations.&lt;/a&gt; Would you also like to re-configure your dashboards the drag-and-drop way? Et voilà, the gridstack template.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2019/voila-gridstack-template/images/001-1_Pl6z5oPeFixFjxMEYzEpIA.mp4" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h3 id="creating-ad-hoc-dashboards-with-gridstack"&gt;Creating ad-hoc dashboards with gridstack&lt;/h3&gt;
&lt;p&gt;If you have never used layout templates and just want to use Voilà with your existing notebooks, you can consider the new &lt;a href="https://github.com/voila-dashboards/voila-gridstack"&gt;gridstack template&lt;/a&gt; for Voilà dashboards. Simply run the following command with the path to your notebook:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;voila --template=gridstack my_notebook.ipynb --VoilaConfiguration.resources=&amp;#39;{“gridstack”: {“show_handles”: True}}&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will open a dashboard created from your notebook in a brower. By default the output cells of the notebook are laid out vertically. But you can move and resize them freely by dragging one of the handles in the corners of the cells.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="An example notebook rendered with Voilà gridstack template. The layout was configured by dragging and resizing the cells of the notebook. The notebook was downloaded from LIGO project:" src="https://jasongrout.github.io/medium-archive/pelican/posts/2019/voila-gridstack-template/images/002-1_J_f7YGDoufB7bBw_Ik7HuA.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;An example notebook rendered with Voilà gridstack template. The layout was configured by dragging and resizing the cells of the notebook. The notebook was downloaded from LIGO project: &lt;a href="https://github.com/losc-tutorial/Data_Guide"&gt;https://github.com/losc-tutorial/Data_Guide&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="positioning-widgets-with-metadata"&gt;Positioning widgets with metadata&lt;/h3&gt;
&lt;p&gt;When you are done with configuring your dashboard, Voilà enables you to persist it and a create static layout of the widgets. To achieve that you will need to edit manually the notebook metadata, but we are also planning to release a tool that will simplify the process.&lt;/p&gt;
&lt;p&gt;For example, you can add the following attributes to one of the cells (to edit the cell metadata, you need to activate the “Edit metadata” button from the View -&amp;gt; Cell toolbar menu of your notebook):&lt;/p&gt;
&lt;figure&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;extensions&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;jupyter_dashboards&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;version&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;views&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;grid_default&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;col&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;height&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;row&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;report_default&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;trusted&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;figcaption&gt;
&lt;p&gt;Example metadata&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In Jupyter lab ≥ 1.0 you can edit the metadata using “Advanced Tools” section of “Notebook tools” sidebar (wrench icon).&lt;/p&gt;
&lt;p&gt;Then you can start Voilà with the following command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voila --template=gridstack my_notebook.ipynb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This should open your dashboard with cells in the specified positions and of specified sizes.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Final layout of the dashboard configured with cell metadata. The cells are not movable in this dashboard." src="https://jasongrout.github.io/medium-archive/pelican/posts/2019/voila-gridstack-template/images/003-1_-mUCyFUfu2JxnuzTMK0aNg.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Final layout of the dashboard configured with cell metadata. The cells are not movable in this dashboard.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="supporting-legacy-notebooks"&gt;Supporting legacy notebooks&lt;/h3&gt;
&lt;p&gt;The metadata follow the &lt;a href="https://jupyter-dashboards-layout.readthedocs.io/en/latest/metadata.html"&gt;specification&lt;/a&gt; of the legacy &lt;em&gt;jupyter-dashboards&lt;/em&gt; project, which was an earlier solution for creating interactive dashboards. Unfortunately, the project is not maintained any more and it won’t work with the recent installations of Jupyter. However, you can open your notebooks created with &lt;em&gt;jupyter-dashboards&lt;/em&gt; &lt;strong&gt;without changes&lt;/strong&gt; with Voilà gridstack template to achieve identical rendering and give a second life to your Jupyter dashboards.&lt;/p&gt;
&lt;p&gt;(To compare the outputs, you can open the notebook with &lt;a href="https://mybinder.org/v2/gh/btel/jupyter-dashboards-binder/master"&gt;binder&lt;/a&gt; that provisions the &lt;em&gt;jupyter-dashboards&lt;/em&gt; ecosystem installed in an old version of Anaconda (2017). You can also use its design tool to lay out your widgets visually and save the cell metadata usable with Voilà gridstack template).&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Design tool implemented in legacy jupyter-dashboards project." src="https://jasongrout.github.io/medium-archive/pelican/posts/2019/voila-gridstack-template/images/004-1_NNMhrJSc49KE-AF5HoFGTw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Design tool implemented in legacy jupyter-dashboards project.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="how-to-install"&gt;How to install&lt;/h3&gt;
&lt;p&gt;If you want to try out the template yourself, please install it now with:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install voila-gridstack&lt;/code&gt; (for pip users) or&lt;/p&gt;
&lt;p&gt;&lt;code&gt;conda install voila-gridstack&lt;/code&gt; (for conda/anaconda users).&lt;/p&gt;
&lt;p&gt;You can also try out the interactive examples with our &lt;a href="https://mybinder.org/v2/gh/voila-dashboards/voila-gridstack/master?urlpath=/voila/tree/examples"&gt;gridstack binder&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And if you have any questions or want to share your experience please reach out on our &lt;a href="https://gitter.im/QuantStack/Lobby"&gt;Gitter chat.&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="credits"&gt;Credits&lt;/h3&gt;
&lt;p&gt;The development Voilà and gridstack template was initiated by the amazing team at &lt;a href="https://github.com/QuantStack"&gt;QuantStack&lt;/a&gt; that also provided financial and brain-power support.&lt;/p&gt;
&lt;h3 id="about-the-author"&gt;About the author&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://datascience.telenczuk.pl"&gt;Bartosz Telenczuk&lt;/a&gt; is a seasoned Python developer and a data scientist. He is an ardent user of Jupyter ecosystem and frequent contributor to open source software; among his projects is the &lt;a href="https://svgutils.readthedocs.io/en/latest/"&gt;svgutils&lt;/a&gt; library for composing SVG files in Python.&lt;/p&gt;
</content><category term="dashboards"/><category term="Voilà"/></entry><entry><title>Introducing templates for Jupyter widgets layouts</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2019/introducing-templates-for-jupyter-widget-layouts/" rel="alternate"/><published>2019-07-04T09:41:00+00:00</published><updated>2019-07-04T09:41:00+00:00</updated><author><name>Bartosz Telenczuk</name></author><id>tag:jasongrout.github.io,2019-07-04:/medium-archive/pelican/posts/2019/introducing-templates-for-jupyter-widget-layouts/</id><summary type="html">&lt;p&gt;Creating complex layouts of widgets (button, sliders, maps, graphs etc.) can be cumbersome. New layout templates make this task a breeze.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Notebooks come alive with Jupyter widgets, which allow users to produce interactive GUIs inline in the Jupyter notebook or JupyterLab.&lt;/p&gt;
&lt;p&gt;You can either use them to add a few interactive controls and plots in notebooks or to create fully-fledged applications and interactive dashboards. Both can be built with components from the core &lt;a href="https://ipywidgets.readthedocs.io/en/stable/examples/Widget%20List.html"&gt;built-in widgets&lt;/a&gt; such as buttons, sliders, and dropdowns, or with the rich ecosystem of custom widget libraries that built upon the Jupyter widgets framework, such as interactive maps with &lt;a href="https://github.com/jupyter-widgets/ipyleaflet"&gt;ipyleaflet&lt;/a&gt; or 2-D plots with &lt;a href="https://github.com/bloomberg/bqplot"&gt;bqplot&lt;/a&gt;. You can also combine several types of widgets together to create even richer applications.&lt;/p&gt;
&lt;p&gt;Have you ever tried creating complex widget layouts with multiple widgets placed at specific locations? The preferred approach so far has been to use nested HBox and VBox widgets to compose your layout, which can make creating complex applications a tedious task. We now have a more flexible solution: the &lt;em&gt;layout templates&lt;/em&gt;, which just landed with the latest release of the ipywidgets package.&lt;/p&gt;
&lt;h2 id="the-power-of-css-the-simplicity-of-python"&gt;The power of CSS, the simplicity of Python&lt;/h2&gt;
&lt;p&gt;Layout templates are a set of predefined layouts that allow you to combine multiple widgets on a single screen and arrange them visually. They leverage the powerful &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout"&gt;CSS Grid Layout specification&lt;/a&gt;, which is supported on most current browsers (yes, we are looking at you IE).&lt;/p&gt;
&lt;p&gt;While the CSS Grid properties were first introduced in ipywidgets 7.3, they were tricky to use as they were transparently reflecting the CSS Grid Spec API and required the knowledge of the CSS. The new layout templates of ipywidgets wrap the CSS properties with a pythonic interface and sensible defaults, so they never expose the user to the nasty CSS spec. However, they inherit all the advantages of the Grid being fully responsive (they adapt to the screen size) and super easy to use!&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Comparing the Python code with the generated CSS layout." src="https://jasongrout.github.io/medium-archive/pelican/posts/2019/introducing-templates-for-jupyter-widget-layouts/images/001-1_0AvTf0rheCJJeNjOKIw27w.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Comparing the Python code with the generated CSS layout.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="application-like-uis-in-jupyter"&gt;Application-like UIs in Jupyter&lt;/h2&gt;
&lt;figure&gt;
&lt;img alt="AppLayout consists of a header, two side panes, a central pane, and a footer." src="https://jasongrout.github.io/medium-archive/pelican/posts/2019/introducing-templates-for-jupyter-widget-layouts/images/002-1_nJ6g6rhPRdp8xfIq36Z-mw.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;&lt;strong&gt;AppLayout&lt;/strong&gt; consists of a header, two side panes, a central pane, and a footer.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;If you want to create a simple application-like layout, you can use &lt;code&gt;AppLayout&lt;/code&gt;, which consists of a header, a footer, two side panes, and a central pane. You can create the layout and populate it with widgets in a single command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;AppLayout(header=header,
          left_sidebar=prev_button,
          center=image,
          right_sidebar=next_button,
          footer=footer,
          grid_gap=&amp;#39;20px&amp;#39;,
          justify_items=&amp;#39;center&amp;#39;,
          align_items=&amp;#39;center&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2019/introducing-templates-for-jupyter-widget-layouts/images/003-1_YQrJiSx2g6GfhkIqK24RUw.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Importantly, if your application does not need all the panes defined by &lt;code&gt;AppLayout&lt;/code&gt;, the layout has also some sensible defaults so that it can automatically merge widget locations that were not assigned.&lt;/p&gt;
&lt;h2 id="widgets-on-a-grid"&gt;Widgets on a grid&lt;/h2&gt;
&lt;figure&gt;
&lt;img alt="GridspecLayout places widgets on a rectangular grid. A single widget can span several rows or columns (or both)." src="https://jasongrout.github.io/medium-archive/pelican/posts/2019/introducing-templates-for-jupyter-widget-layouts/images/004-1_W1gbrgs8aDSs2ZezDQ5v7Q.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;&lt;strong&gt;GridspecLayout&lt;/strong&gt; places widgets on a rectangular grid. A single widget can span several rows or columns (or both).&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;If you require more flexibility to arrange widgets, you can also try &lt;code&gt;GridLayout&lt;/code&gt;. First, you define the dimensions of a rectangular grid. Then you can place widgets on the grid either in a single cell of the grid or spanning several rows or columns (or both). This is easily achieved using the same slice-based API that you already use to select items from a NumPy array (or Python lists). If you already know matplotlib’s &lt;code&gt;GridSpec&lt;/code&gt; feature, the syntax may look familiar:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# create a 10x2 grid layout
grid = GridspecLayout(10, 2)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="gh"&gt;#&lt;/span&gt; fill it in with widgets
grid[:, 0] = map
grid[0, 1] = zoom_slider
grid[1, 1] = basemap_selector
grid[2:, 1] = fig
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# set the widget properties
grid[:, 0].layout.height = &amp;#39;auto&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2019/introducing-templates-for-jupyter-widget-layouts/images/005-1_Bf8ZF5xTHU68f5OdrPBLtA.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="style-me-up"&gt;Style me up&lt;/h2&gt;
&lt;p&gt;The layouts are very configurable and can be easily tuned to the needs of your application. To change the sizes of the layout and the grid intervals, you can use style attributes, such as &lt;code&gt;height&lt;/code&gt; , &lt;code&gt;width&lt;/code&gt;, and &lt;code&gt;gap-size&lt;/code&gt; options:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;AppLayout(grid_gap=&amp;#39;20px&amp;#39;,
          height=&amp;quot;200px&amp;quot;,
          width=&amp;quot;50%&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The size units are directly inherited from the CSS standard. More examples of style attributes can be found in the &lt;a href="https://ipywidgets.readthedocs.io/en/latest/examples/Layout%20Templates.html"&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So please go ahead and install the pre-release of ipywidgets that includes this new feature (&lt;code&gt;pip install --upgrade ipywidgets&lt;/code&gt;) and take the new layout templates for a spin. We are looking forward to your feedback!&lt;/p&gt;
&lt;h2 id="acknowledgments"&gt;Acknowledgments&lt;/h2&gt;
&lt;p&gt;The author is a seasoned Python developer and a data scientist. He loves contributing to open source software; among others he is the creator and maintainer of the &lt;a href="https://svgutils.readthedocs.io/en/latest/"&gt;svgutils&lt;/a&gt; library.&lt;/p&gt;
&lt;p&gt;The development of the ipywidgets layout templates was kindly supported by &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt;.&lt;/p&gt;
</content><category term="dashboards"/><category term="widgets"/></entry></feed>