Hello community,
here is the log from the commit of package python-ipywidgets for
openSUSE:Factory checked in at 2019-08-13 13:10:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ipywidgets (Old)
and /work/SRC/openSUSE:Factory/.python-ipywidgets.new.9556 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ipywidgets"
Tue Aug 13 13:10:39 2019 rev:3 rq:722220 version:7.5.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ipywidgets/python-ipywidgets.changes
2019-07-30 12:36:54.186953403 +0200
+++
/work/SRC/openSUSE:Factory/.python-ipywidgets.new.9556/python-ipywidgets.changes
2019-08-13 13:10:42.537609081 +0200
@@ -1,0 +2,13 @@
+Sun Aug 11 01:36:21 UTC 2019 - Todd R <[email protected]>
+
+- Update to 7.5.1
+ * Add $el to BoxView and ControllerView
+ * Fix setting a selection index when having duplicate values
+ * Fixup build of documentation
+ * Fix controls base dep
+ * Reduce count of deprecation warnings
+ * Update LayoutTemplate example
+ * update html manager
+ * js integrity
+
+-------------------------------------------------------------------
Old:
----
ipywidgets-7.5.0.tar.gz
New:
----
ipywidgets-7.5.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-ipywidgets.spec ++++++
--- /var/tmp/diff_new_pack.ia8IU1/_old 2019-08-13 13:10:43.421608599 +0200
+++ /var/tmp/diff_new_pack.ia8IU1/_new 2019-08-13 13:10:43.425608597 +0200
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-ipywidgets
-Version: 7.5.0
+Version: 7.5.1
Release: 0
Summary: IPython HTML widgets for Jupyter
License: BSD-3-Clause
++++++ ipywidgets-7.5.0.tar.gz -> ipywidgets-7.5.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipywidgets-7.5.0/PKG-INFO
new/ipywidgets-7.5.1/PKG-INFO
--- old/ipywidgets-7.5.0/PKG-INFO 2019-07-02 01:03:33.000000000 +0200
+++ new/ipywidgets-7.5.1/PKG-INFO 2019-07-29 20:54:30.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: ipywidgets
-Version: 7.5.0
+Version: 7.5.1
Summary: IPython HTML widgets for Jupyter
Home-page: http://ipython.org
Author: IPython Development Team
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipywidgets-7.5.0/docs/source/changelog.md
new/ipywidgets-7.5.1/docs/source/changelog.md
--- old/ipywidgets-7.5.0/docs/source/changelog.md 2019-07-02
00:54:05.000000000 +0200
+++ new/ipywidgets-7.5.1/docs/source/changelog.md 2019-07-29
20:37:42.000000000 +0200
@@ -13,7 +13,12 @@
- New `AppLayout` and `GridLayout` templates for positioning interactive
widgets. [#2333](https://github.com/jupyter-widgets/ipywidgets/pull/2333)
- New `FileUpload` widget allowing users to upload files from the browser.
[#2258](https://github.com/jupyter-widgets/ipywidgets/pull/2258)
- New `ComboBox` widget.
[#2390](https://github.com/jupyter-widgets/ipywidgets/pull/2390)
-- JupyterLab CSS variables are now exposed by default even in the case of the
classic notebook.
[2418](https://github.com/jupyter-widgets/ipywidgets/pull/2418)
+- JupyterLab CSS variables are now exposed by default even in the case of the
classic notebook.
[#2418](https://github.com/jupyter-widgets/ipywidgets/pull/2418)
+
+### Updates for Widget Maintainers
+
+Custom widget maintainers will need to update their `@jupyter-widgets/base`
dependency version to work in JupyterLab 1.0. For example, if you had a
dependency on `@jupyter-widgets/base` version `^1.1`, update to `^1.1 || ^2`
for your widget to work in classic notebook, JupyterLab 0.35, and JupyterLab
1.0. See [#2472](https://github.com/jupyter-widgets/ipywidgets/pull/2472) for
background.
+
7.4
---
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipywidgets-7.5.0/docs/source/conf.py
new/ipywidgets-7.5.1/docs/source/conf.py
--- old/ipywidgets-7.5.0/docs/source/conf.py 2019-07-02 00:54:05.000000000
+0200
+++ new/ipywidgets-7.5.1/docs/source/conf.py 2019-07-29 20:37:42.000000000
+0200
@@ -39,7 +39,7 @@
'sphinx.ext.intersphinx',
'sphinx.ext.mathjax',
'nbsphinx',
- 'jupyter_sphinx.embed_widgets',
+ 'jupyter_sphinx.execute',
'IPython.sphinxext.ipython_console_highlighting',
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' "old/ipywidgets-7.5.0/docs/source/examples/Layout
Templates.ipynb" "new/ipywidgets-7.5.1/docs/source/examples/Layout
Templates.ipynb"
--- "old/ipywidgets-7.5.0/docs/source/examples/Layout Templates.ipynb"
2019-07-02 00:54:05.000000000 +0200
+++ "new/ipywidgets-7.5.1/docs/source/examples/Layout Templates.ipynb"
2019-07-29 20:37:42.000000000 +0200
@@ -10,6 +10,29 @@
]
},
{
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Utils widgets\n",
+ "from ipywidgets import Button, Layout, jslink, IntText, IntSlider\n",
+ "\n",
+ "def create_expanded_button(description, button_style):\n",
+ " return Button(description=description, button_style=button_style,
layout=Layout(height='auto', width='auto'))\n",
+ "\n",
+ "top_left_button = create_expanded_button(\"Top left\", 'info')\n",
+ "top_right_button = create_expanded_button(\"Top right\", 'success')\n",
+ "bottom_left_button = create_expanded_button(\"Bottom left\", 'danger')\n",
+ "bottom_right_button = create_expanded_button(\"Bottom right\",
'warning')\n",
+ "\n",
+ "top_left_text = IntText(description='Top left',
layout=Layout(width='auto', height='auto'))\n",
+ "top_right_text = IntText(description='Top right',
layout=Layout(width='auto', height='auto'))\n",
+ "bottom_left_slider = IntSlider(description='Bottom left',
layout=Layout(width='auto', height='auto'))\n",
+ "bottom_right_slider = IntSlider(description='Bottom right',
layout=Layout(width='auto', height='auto'))"
+ ]
+ },
+ {
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -25,96 +48,53 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "834592dc51ca4ea0a905b8cbdbd43e8b",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "TwoByTwoLayout(children=(Button(description='Top left',
layout=Layout(grid_area='top-left'), style=ButtonStyle…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "from ipywidgets import TwoByTwoLayout, Button, Layout\n",
- "\n",
+ "from ipywidgets import TwoByTwoLayout\n",
"\n",
- "TwoByTwoLayout(top_left=Button(description=\"Top left\"),\n",
- " top_right=Button(description=\"Top right\"),\n",
- " bottom_left=Button(description=\"Bottom left\"),\n",
- " bottom_right=Button(description=\"Bottom right\"))"
+ "TwoByTwoLayout(top_left=top_left_button,\n",
+ " top_right=top_right_button,\n",
+ " bottom_left=bottom_left_button,\n",
+ " bottom_right=bottom_right_button)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "If you don't define a widget for some of the slots, the layout will
automatically re-configure itself by merging neighbouring cells (to avoid it,
you can pass `merge=False` in the argument)."
+ "If you don't define a widget for some of the slots, the layout will
automatically re-configure itself by merging neighbouring cells"
]
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "TwoByTwoLayout(top_left=top_left_button,\n",
+ " bottom_left=bottom_left_button,\n",
+ " bottom_right=bottom_right_button)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "c9a9c0c068fb4e8eb8e74e362d9979fc",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "TwoByTwoLayout(children=(Button(description='Top left',
layout=Layout(grid_area='top-left'), style=ButtonStyle…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
"source": [
- "TwoByTwoLayout(top_left=Button(description=\"Top left\"),\n",
- " bottom_left=Button(description=\"Bottom left\"),\n",
- " bottom_right=Button(description=\"Bottom right\",\n",
- " layout=Layout(height='auto'))\n",
- " )"
+ "You can pass `merge=False` in the argument of the `TwoByTwoLayout`
constructor if you don't want this behavior"
]
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "e998151521874ecaa12a73b46e92f31a",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "TwoByTwoLayout(children=(Button(description='Top left',
layout=Layout(grid_area='top-left'), style=ButtonStyle…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "TwoByTwoLayout(top_left=Button(description=\"Top left\"),\n",
- " bottom_left=Button(description=\"Bottom left\"),\n",
- " bottom_right=Button(description=\"Bottom right\",\n",
- " layout=Layout(height='auto')),\n",
- " merge=False\n",
- " )"
+ "TwoByTwoLayout(top_left=top_left_button,\n",
+ " bottom_left=bottom_left_button,\n",
+ " bottom_right=bottom_right_button,\n",
+ " merge=False)"
]
},
{
@@ -126,71 +106,46 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "layout_2x2 = TwoByTwoLayout(top_left=top_left_button,\n",
+ " bottom_left=bottom_left_button,\n",
+ " bottom_right=bottom_right_button)\n",
+ "layout_2x2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "67c298023e584e6daaf2e5c9dcbaac4d",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "TwoByTwoLayout(children=(Button(description='Top left',
layout=Layout(grid_area='top-left'), style=ButtonStyle…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "layout_2x2 = TwoByTwoLayout(top_left=Button(description=\"Top left\"),\n",
- " bottom_left=Button(description=\"Bottom
left\"),\n",
- " bottom_right=Button(description=\"Bottom
right\"))\n",
- " \n",
- "layout_2x2.top_right = Button(description=\"Top right\")\n",
- "display(layout_2x2)"
+ "layout_2x2.top_right = top_right_button"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "You can also use the [linking feature](Widget
Events.ipynb#Linking-Widgets) of widgets to update some property of a widget
based on another widget:"
+ "You can also use the linking feature of widgets to update some property
of a widget based on another widget:"
]
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "d9083e84c3094c8a8dc5128fa6c59b8a",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "TwoByTwoLayout(children=(IntText(value=25,
layout=Layout(grid_area='top-left')), IntText(value=0, layout=Layou…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "from ipywidgets import jslink, IntText, IntSlider\n",
- "\n",
- "app = TwoByTwoLayout(top_left=IntText(), top_right=IntText(),\n",
- " bottom_left=IntSlider(),
bottom_right=IntSlider())\n",
+ "app = TwoByTwoLayout(top_left=top_left_text, top_right=top_right_text,\n",
+ " bottom_left=bottom_left_slider,
bottom_right=bottom_right_slider)\n",
" \n",
"link_left = jslink((app.top_left, 'value'), (app.bottom_left,
'value'))\n",
"link_right = jslink((app.top_right, 'value'), (app.bottom_right,
'value'))\n",
"app.bottom_right.value = 30\n",
"app.top_left.value = 25\n",
- "display(app)"
+ "app"
]
},
{
@@ -202,7 +157,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -212,7 +167,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -232,49 +187,34 @@
"ax_y = bq.Axis(scale=y_sc, tick_format='0.2f', orientation='vertical')\n",
"\n",
"fig = bq.Figure(marks=[bar], axes=[ax_x, ax_y], padding_x=0.025,
padding_y=0.025,\n",
- " layout=Layout(width='auto', height='100%'))"
+ " layout=Layout(width='auto', height='90%'))"
]
},
{
"cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "827ad50fbf01496e9b95d105428af1c8",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "TwoByTwoLayout(children=(FloatSlider(value=0.0, description='Min: ',
layout=Layout(grid_area='top-left', heigh…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"from ipywidgets import FloatSlider\n",
"\n",
"max_slider = FloatSlider(min=0, max=10, default_value=2,
description=\"Max: \",\n",
- " layout=Layout(width='300px', height='20px'))\n",
+ " layout=Layout(width='auto', height='auto'))\n",
"min_slider = FloatSlider(min=-1, max=10, description=\"Min: \",\n",
- " layout=Layout(width='300px', height='20px'))\n",
+ " layout=Layout(width='auto', height='auto'))\n",
"app = TwoByTwoLayout(top_left=min_slider,\n",
" bottom_left=max_slider, \n",
" bottom_right=fig,\n",
- " align_items=\"center\",\n",
- " width='80%', height='300px')\n",
+ " align_items=\"center\", \n",
+ " height='700px')\n",
+ "\n",
"jslink((y_sc, 'max'), (max_slider, 'value'))\n",
"jslink((y_sc, 'min'), (min_slider, 'value'))\n",
"jslink((min_slider, 'max'), (max_slider, 'value'))\n",
"jslink((max_slider, 'min'), (min_slider, 'value'))\n",
+ "\n",
"max_slider.value = 1.5\n",
- "display(app)"
+ "app"
]
},
{
@@ -293,7 +233,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -302,41 +242,28 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "714b034d17384ad7a41febaaae4fdaa0",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(description='Header',
layout=Layout(grid_area='header', height='auto', width='auto'…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "header = Button(description=\"Header\",\n",
- " layout=Layout(width=\"auto\", height=\"auto\"))\n",
- "left_sidebar = Button(description=\"Left Sidebar\",\n",
- " layout=Layout(width=\"auto\", height=\"auto\"))\n",
- "center = Button(description=\"Center\",\n",
- " layout=Layout(width=\"auto\", height=\"auto\"))\n",
- "right_sidebar = Button(description=\"Right Sidebar\", \n",
- " layout=Layout(width=\"auto\", height=\"auto\"))\n",
- "footer = Button(description=\"Footer\", \n",
- " layout=Layout(width=\"auto\", height=\"auto\"))\n",
- "\n",
- "AppLayout(header=header,\n",
- " left_sidebar=left_sidebar,\n",
- " center=center,\n",
- " right_sidebar=right_sidebar,\n",
- " footer=footer)"
+ "header_button = create_expanded_button('Header', 'success')\n",
+ "left_button = create_expanded_button('Left', 'info')\n",
+ "center_button = create_expanded_button('Center', 'warning')\n",
+ "right_button = create_expanded_button('Right', 'info')\n",
+ "footer_button = create_expanded_button('Footer', 'success')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "AppLayout(header=header_button,\n",
+ " left_sidebar=left_button,\n",
+ " center=center_button,\n",
+ " right_sidebar=right_button,\n",
+ " footer=footer_button)"
]
},
{
@@ -348,208 +275,93 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "e11ddd4c7e724a9f88c0ad290adcac14",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(layout=Layout(grid_area='center',
height='auto', width='auto'), style=ButtonStyle()…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "header = Button(layout=Layout(width=\"auto\", height=\"auto\"))\n",
- "left_sidebar = Button(layout=Layout(width=\"auto\", height=\"auto\"))\n",
- "center = Button(layout=Layout(width=\"auto\", height=\"auto\"))\n",
- "right_sidebar = Button(layout=Layout(width=\"auto\", height=\"auto\"))\n",
- "footer = Button(layout=Layout(width=\"auto\", height=\"auto\"))\n",
- "\n",
"AppLayout(header=None,\n",
" left_sidebar=None,\n",
- " center=center,\n",
+ " center=center_button,\n",
" right_sidebar=None,\n",
" footer=None)"
]
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "c03ea61df13e409db3ee2dc0bee4a5a6",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(layout=Layout(grid_area='header',
height='auto', width='auto'), style=ButtonStyle()…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "AppLayout(header=header,\n",
- " left_sidebar=left_sidebar,\n",
- " center=center,\n",
- " right_sidebar=right_sidebar,\n",
+ "AppLayout(header=header_button,\n",
+ " left_sidebar=left_button,\n",
+ " center=center_button,\n",
+ " right_sidebar=right_button,\n",
" footer=None)"
]
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "e565bcd93da842f895edff893e23b491",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(layout=Layout(grid_area='left-sidebar',
height='auto', width='auto'), style=ButtonS…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"AppLayout(header=None,\n",
- " left_sidebar=left_sidebar,\n",
- " center=center,\n",
- " right_sidebar=right_sidebar,\n",
+ " left_sidebar=left_button,\n",
+ " center=center_button,\n",
+ " right_sidebar=right_button,\n",
" footer=None)"
]
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "f9efd1e549084ec48e596f568112dd31",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(layout=Layout(grid_area='header',
height='auto', width='auto'), style=ButtonStyle()…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "AppLayout(header=header,\n",
- " left_sidebar=left_sidebar,\n",
- " center=center,\n",
+ "AppLayout(header=header_button,\n",
+ " left_sidebar=left_button,\n",
+ " center=center_button,\n",
" right_sidebar=None,\n",
- " footer=footer)"
+ " footer=footer_button)"
]
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "529221aa094440cf8e13aa433e85e8f4",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(layout=Layout(grid_area='header',
height='auto', width='auto'), style=ButtonStyle()…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "AppLayout(header=header,\n",
+ "AppLayout(header=header_button,\n",
" left_sidebar=None,\n",
- " center=center,\n",
- " right_sidebar=right_sidebar,\n",
- " footer=footer)"
+ " center=center_button,\n",
+ " right_sidebar=right_button,\n",
+ " footer=footer_button)"
]
},
{
"cell_type": "code",
- "execution_count": 16,
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "e4e83f1bdb7d4786a71e0a2269ac5f59",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(layout=Layout(grid_area='header',
height='auto', width='auto'), style=ButtonStyle()…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
- "AppLayout(header=header,\n",
+ "AppLayout(header=header_button,\n",
" left_sidebar=None,\n",
- " center=center,\n",
+ " center=center_button,\n",
" right_sidebar=None,\n",
- " footer=footer)"
+ " footer=footer_button)"
]
},
{
"cell_type": "code",
- "execution_count": 17,
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "19847fa4c2c94f40b470d444abad1e9b",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(layout=Layout(grid_area='header',
height='auto', width='auto'), style=ButtonStyle()…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
- "AppLayout(header=header,\n",
- " left_sidebar=left_sidebar,\n",
+ "AppLayout(header=header_button,\n",
+ " left_sidebar=left_button,\n",
" center=None,\n",
- " right_sidebar=right_sidebar,\n",
- " footer=footer)"
+ " right_sidebar=right_button,\n",
+ " footer=footer_button)"
]
},
{
@@ -561,32 +373,15 @@
},
{
"cell_type": "code",
- "execution_count": 18,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "6f343ee4f1394f5c9c2d1f0272e2170b",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(layout=Layout(grid_area='header',
height='auto', width='auto'), style=ButtonStyle()…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
- "AppLayout(header=header,\n",
- " left_sidebar=left_sidebar,\n",
- " center=center,\n",
- " right_sidebar=right_sidebar,\n",
- " footer=footer,\n",
+ "AppLayout(header=header_button,\n",
+ " left_sidebar=left_button,\n",
+ " center=center_button,\n",
+ " right_sidebar=right_button,\n",
+ " footer=footer_button,\n",
" pane_widths=[3, 3, 1],\n",
" pane_heights=[1, 5, '60px'])"
]
@@ -609,24 +404,9 @@
},
{
"cell_type": "code",
- "execution_count": 19,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "3644fcf399a1494a8743b47bc4d1dba9",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "GridspecLayout(children=(Button(layout=Layout(grid_area='widget001',
height='auto', width='auto'), style=Butto…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"from ipywidgets import GridspecLayout\n",
"\n",
@@ -634,7 +414,7 @@
"\n",
"for i in range(4):\n",
" for j in range(3):\n",
- " grid[i, j] = Button(layout=Layout(width='auto',
height='auto'))\n",
+ " grid[i, j] = create_expanded_button('Button {} - {}'.format(i,
j), 'warning')\n",
"grid"
]
},
@@ -647,32 +427,15 @@
},
{
"cell_type": "code",
- "execution_count": 20,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "65e2d6841e234c6483f320717bcef6db",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "GridspecLayout(children=(Button(layout=Layout(grid_area='widget001',
height='auto', width='auto'), style=Butto…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"grid = GridspecLayout(4, 3, height='300px')\n",
- "grid[:3, 1:] = Button(layout=Layout(width='auto', height='auto'))\n",
- "grid[:, 0] = Button(layout=Layout(width='auto', height='auto'))\n",
- "grid[3, 1] = Button(layout=Layout(width='auto', height='auto'))\n",
- "grid[3, 2] = Button(layout=Layout(width='auto', height='auto'))\n",
+ "grid[:3, 1:] = create_expanded_button('One', 'success')\n",
+ "grid[:, 0] = create_expanded_button('Two', 'info')\n",
+ "grid[3, 1] = create_expanded_button('Three', 'warning')\n",
+ "grid[3, 2] = create_expanded_button('Four', 'danger')\n",
"grid"
]
},
@@ -685,36 +448,29 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "44c719d7539a484eb3714c970b4568e3",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "GridspecLayout(children=(Button(layout=Layout(grid_area='widget001',
height='auto', width='auto'), style=Butto…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"grid = GridspecLayout(4, 3, height='300px')\n",
- "grid[:3, 1:] = Button(layout=Layout(width='auto', height='auto'))\n",
- "grid[:, 0] = Button(layout=Layout(width='auto', height='auto'))\n",
- "grid[3, 1] = Button(layout=Layout(width='auto', height='auto'))\n",
- "grid[3, 2] = Button(layout=Layout(width='auto', height='auto'))\n",
+ "grid[:3, 1:] = create_expanded_button('One', 'success')\n",
+ "grid[:, 0] = create_expanded_button('Two', 'info')\n",
+ "grid[3, 1] = create_expanded_button('Three', 'warning')\n",
+ "grid[3, 2] = create_expanded_button('Four', 'danger')\n",
"\n",
- "grid[0, 0].description = \"I am a Button\"\n",
"grid"
]
},
{
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "grid[0, 0].description = \"I am the blue one\""
+ ]
+ },
+ {
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -731,37 +487,45 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "6a685dc9bd41492e95ffa9b748b56396",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "GridspecLayout(children=(Button(layout=Layout(grid_area='widget001',
height='auto', width='auto'), style=Butto…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"grid = GridspecLayout(4, 3, height='300px')\n",
- "grid[:3, 1:] = Button(layout=Layout(width='auto', height='auto'))\n",
- "grid[:, 0] = Button(layout=Layout(width='auto', height='auto'))\n",
- "grid[3, 1] = Button(layout=Layout(width='auto', height='auto'))\n",
- "grid[3, 2] = Button(layout=Layout(width='auto', height='auto'))\n",
+ "grid[:3, 1:] = create_expanded_button('One', 'info')\n",
+ "grid[:, 0] = create_expanded_button('Two', 'info')\n",
+ "grid[3, 1] = create_expanded_button('Three', 'info')\n",
+ "grid[3, 2] = create_expanded_button('Four', 'info')\n",
"\n",
- "grid[0, 0] = Button(description=\"New button\",\n",
- " layout=Layout(width='auto', height='auto'))\n",
"grid"
]
},
{
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "grid[3, 1] = create_expanded_button('New button!!', 'danger')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Note**: Slices are supported in this context."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "grid[:3, 1:] = create_expanded_button('I am new too!!!!!', 'warning')"
+ ]
+ },
+ {
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -784,24 +548,9 @@
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "1a10a8ba419b4a988b3a3d394086609c",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "GridspecLayout(children=(Figure(fig_margin={'top': 0, 'bottom': 0,
'left': 0, 'right': 0}, layout=Layout(grid_…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"import bqplot as bq\n",
"import numpy as np\n",
@@ -858,29 +607,14 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "c9aed2be34724a48a70c58d1fbfc3b4e",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(layout=Layout(grid_area='left-sidebar',
height='auto', width='auto'), style=ButtonS…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"AppLayout(header=None,\n",
- " left_sidebar=left_sidebar,\n",
- " center=center,\n",
- " right_sidebar=right_sidebar,\n",
+ " left_sidebar=left_button,\n",
+ " center=center_button,\n",
+ " right_sidebar=right_button,\n",
" footer=None,\n",
" height=\"200px\", width=\"50%\")"
]
@@ -894,29 +628,14 @@
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "561ae8a344474df29a4483f4d5d40fe5",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "AppLayout(children=(Button(layout=Layout(grid_area='left-sidebar',
height='auto', width='auto'), style=ButtonS…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"AppLayout(header=None,\n",
- " left_sidebar=left_sidebar,\n",
- " center=center,\n",
- " right_sidebar=right_sidebar,\n",
+ " left_sidebar=left_button,\n",
+ " center=center_button,\n",
+ " right_sidebar=right_button,\n",
" footer=None,\n",
" height=\"200px\", width=\"50%\",\n",
" grid_gap=\"10px\")"
@@ -931,28 +650,13 @@
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "e413ac0b82b04291b667cd6b9c6be9cd",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "TwoByTwoLayout(children=(Button(layout=Layout(grid_area='top-left'),
style=ButtonStyle()), Button(layout=Layou…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"from ipywidgets import Text, HTML\n",
- "TwoByTwoLayout(top_left=Button(), top_right=Button(),\n",
- " bottom_right=Button(),\n",
+ "TwoByTwoLayout(top_left=top_left_button, top_right=top_right_button,\n",
+ " bottom_right=bottom_right_button,\n",
" justify_items='center',\n",
" width=\"50%\",\n",
" align_items='center')"
@@ -967,27 +671,12 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "55795dcb7daa4f03aec5eb235c540b08",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "TwoByTwoLayout(children=(Button(layout=Layout(grid_area='top-left'),
style=ButtonStyle()), Button(layout=Layou…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "TwoByTwoLayout(top_left=Button(), top_right=Button(),\n",
- " bottom_right=Button(),\n",
+ "TwoByTwoLayout(top_left=top_left_button, top_right=top_right_button,\n",
+ " bottom_right=bottom_right_button,\n",
" justify_items='center',\n",
" width=\"50%\",\n",
" align_items='top')"
@@ -997,24 +686,12 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Example"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
+ "## Example\n",
+ "\n",
"In this [notebook](Layout%20Example.ipynb) you will find a full example
using `AppLayout`.\n",
"\n",
""
]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
}
],
"metadata": {
@@ -1033,7 +710,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.2"
+ "version": "3.7.3"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
@@ -125200,5 +124877,5 @@
}
},
"nbformat": 4,
- "nbformat_minor": 2
+ "nbformat_minor": 4
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' "old/ipywidgets-7.5.0/docs/source/examples/Widget
List.ipynb" "new/ipywidgets-7.5.1/docs/source/examples/Widget List.ipynb"
--- "old/ipywidgets-7.5.0/docs/source/examples/Widget List.ipynb"
2019-07-02 00:54:05.000000000 +0200
+++ "new/ipywidgets-7.5.1/docs/source/examples/Widget List.ipynb"
2019-07-29 20:37:42.000000000 +0200
@@ -1582,6 +1582,25 @@
"cell_type": "markdown",
"metadata": {},
"source": [
+ "### GridBox\n",
+ "\n",
+ "This box uses the HTML Grid specification to lay out its children in two
dimensional grid. The example below lays out the 8 items inside in 3 columns
and as many rows as needed to accommodate the items."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "items = [widgets.Label(str(i)) for i in range(8)]\n",
+ "widgets.GridBox(items,
layout=widgets.Layout(grid_template_columns=\"repeat(3, 100px)\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
"### Accordion"
]
},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipywidgets-7.5.0/ipywidgets/_version.py
new/ipywidgets-7.5.1/ipywidgets/_version.py
--- old/ipywidgets-7.5.0/ipywidgets/_version.py 2019-07-02 01:02:48.000000000
+0200
+++ new/ipywidgets-7.5.1/ipywidgets/_version.py 2019-07-29 20:53:32.000000000
+0200
@@ -1,7 +1,7 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
-version_info = (7, 5, 0, 'final', 0)
+version_info = (7, 5, 1, 'final', 0)
_specifier_ = {'alpha': 'a', 'beta': 'b', 'candidate': 'rc', 'final': ''}
@@ -14,4 +14,4 @@
__jupyter_widgets_controls_version__ = '1.5.0'
# A compatible @jupyter-widgets/html-manager npm package semver range
-__html_manager_version__ = '^0.14.0'
+__html_manager_version__ = '^0.18.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ipywidgets-7.5.0/ipywidgets/widgets/tests/test_widget_selection.py
new/ipywidgets-7.5.1/ipywidgets/widgets/tests/test_widget_selection.py
--- old/ipywidgets-7.5.0/ipywidgets/widgets/tests/test_widget_selection.py
2019-07-02 00:54:05.000000000 +0200
+++ new/ipywidgets-7.5.1/ipywidgets/widgets/tests/test_widget_selection.py
2019-07-29 20:37:42.000000000 +0200
@@ -65,3 +65,32 @@
assert select.value == 4
assert select.label == '4'
assert observations == [0]
+
+ def test_duplicate(self):
+ select = Select(options=['first', 1, 'dup', 'dup'])
+ observations = []
+ def f(change):
+ observations.append(change.new)
+ select.observe(f, 'index')
+ select.index = 3
+ assert select.index == 3
+ assert select.value == 'dup'
+ assert select.label == 'dup'
+ assert observations == [3]
+ select.index = 2
+ assert select.index == 2
+ assert select.value == 'dup'
+ assert select.label == 'dup'
+ assert observations == [3, 2]
+ select.index = 0
+ assert select.index == 0
+ assert select.value == 'first'
+ assert select.label == 'first'
+ assert observations == [3, 2, 0]
+
+ # picks the first matching value
+ select.value = 'dup'
+ assert select.index == 2
+ assert select.value == 'dup'
+ assert select.label == 'dup'
+ assert observations == [3, 2, 0, 2]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipywidgets-7.5.0/ipywidgets/widgets/widget.py
new/ipywidgets-7.5.1/ipywidgets/widgets/widget.py
--- old/ipywidgets-7.5.0/ipywidgets/widgets/widget.py 2019-07-02
00:54:05.000000000 +0200
+++ new/ipywidgets-7.5.1/ipywidgets/widgets/widget.py 2019-07-29
20:37:42.000000000 +0200
@@ -8,12 +8,14 @@
"""
from contextlib import contextmanager
-import collections
-import sys
+try:
+ from collections.abc import Iterable
+except ImportError:
+ # Python 2.7
+ from collections import Iterable
from IPython.core.getipython import get_ipython
from ipykernel.comm import Comm
-from traitlets.utils.importstring import import_item
from traitlets import (
HasTraits, Unicode, Dict, Instance, List, Int, Set, Bytes, observe,
default, Container,
Undefined)
@@ -21,7 +23,7 @@
from IPython.display import display
from json import loads as jsonloads, dumps as jsondumps
-from base64 import standard_b64decode, standard_b64encode
+from base64 import standard_b64encode
from .._version import __protocol_version__, __jupyter_widgets_base_version__
PROTOCOL_VERSION_MAJOR = __protocol_version__.split('.')[0]
@@ -505,7 +507,7 @@
keys = self.keys
elif isinstance(key, string_types):
keys = [key]
- elif isinstance(key, collections.Iterable):
+ elif isinstance(key, Iterable):
keys = key
else:
raise ValueError("key must be a string, an iterable of keys, or
None")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipywidgets-7.5.0/ipywidgets/widgets/widget_link.py
new/ipywidgets-7.5.1/ipywidgets/widgets/widget_link.py
--- old/ipywidgets-7.5.0/ipywidgets/widgets/widget_link.py 2019-07-02
00:54:05.000000000 +0200
+++ new/ipywidgets-7.5.1/ipywidgets/widgets/widget_link.py 2019-07-29
20:37:42.000000000 +0200
@@ -29,7 +29,7 @@
# and throw it away in a new, less informative TraitError
if trait is None:
raise TypeError("No such trait: %s" % trait_repr)
- elif not trait.get_metadata('sync'):
+ elif not trait.metadata.get('sync'):
raise TypeError("%s cannot be synced" % trait_repr)
return value
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ipywidgets-7.5.0/ipywidgets/widgets/widget_selection.py
new/ipywidgets-7.5.1/ipywidgets/widgets/widget_selection.py
--- old/ipywidgets-7.5.0/ipywidgets/widgets/widget_selection.py 2019-07-02
00:54:05.000000000 +0200
+++ new/ipywidgets-7.5.1/ipywidgets/widgets/widget_selection.py 2019-07-29
20:37:42.000000000 +0200
@@ -244,7 +244,12 @@
@observe('value')
def _propagate_value(self, change):
- index = self._options_values.index(change.new) if change.new is not
None else None
+ if change.new is None:
+ index = None
+ elif self.index is not None and self._options_values[self.index] ==
change.new:
+ index = self.index
+ else:
+ index = self._options_values.index(change.new)
if self.index != index:
self.index = index
@@ -256,7 +261,12 @@
@observe('label')
def _propagate_label(self, change):
- index = self._options_labels.index(change.new) if change.new is not
None else None
+ if change.new is None:
+ index = None
+ elif self.index is not None and self._options_labels[self.index] ==
change.new:
+ index = self.index
+ else:
+ index = self._options_labels.index(change.new)
if self.index != index:
self.index = index
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipywidgets-7.5.0/ipywidgets/widgets/widget_upload.py
new/ipywidgets-7.5.1/ipywidgets/widgets/widget_upload.py
--- old/ipywidgets-7.5.0/ipywidgets/widgets/widget_upload.py 2019-07-02
00:54:05.000000000 +0200
+++ new/ipywidgets-7.5.1/ipywidgets/widgets/widget_upload.py 2019-07-29
20:37:42.000000000 +0200
@@ -6,8 +6,9 @@
Represents a file upload button.
"""
-import zlib
-from traitlets import observe, validate, default, Unicode, Dict, List, Int,
Bool, Bytes, TraitError, CaselessStrEnum
+from traitlets import (
+ observe, default, Unicode, Dict, List, Int, Bool, Bytes, CaselessStrEnum
+)
from .widget_description import DescriptionWidget
from .valuewidget import ValueWidget
@@ -25,7 +26,7 @@
return output
-@register()
+@register
class FileUpload(DescriptionWidget, ValueWidget, CoreWidget):
"""
Upload file(s) from browser to Python kernel as bytes
@@ -42,8 +43,10 @@
values=['primary', 'success', 'info', 'warning', 'danger', ''],
default_value='',
help="""Use a predefined styling for the button.""").tag(sync=True)
style = InstanceDict(ButtonStyle).tag(sync=True, **widget_serialization)
- metadata = List(Dict, help='List of file metadata').tag(sync=True)
- data = List(Bytes, help='List of file content (bytes)').tag(sync=True,
from_json=content_from_json)
+ metadata = List(Dict(), help='List of file metadata').tag(sync=True)
+ data = List(Bytes(), help='List of file content (bytes)').tag(
+ sync=True, from_json=content_from_json
+ )
error = Unicode(help='Error message').tag(sync=True)
value = Dict(read_only=True)
++++++ ipywidgets.pdf ++++++
(binary differes)
++++++ ipywidgets.zip ++++++
Binary files /var/tmp/diff_new_pack.ia8IU1/_old and
/var/tmp/diff_new_pack.ia8IU1/_new differ