A set of widgets to help facilitate reuse of large tables across widgets
Project description
ipytablewidgets
NB: End to end tests use Galata framework.
Traitlets and widgets to efficiently data tables (e.g. Pandas DataFrame) using the jupyter notebook
ipytablewidgets is a set of widgets and traitlets to reuse of large tables such as Pandas DataFrames across different widgets, and different packages.
Installation
Using pip:
pip install ipytablewidgets
Development installation
The first step requires the following three commands to be run (requires yarn and jupyterlab>=3):
$ git clone https://github.com/progressivis/ipytablewidgets.git
$ cd ipytablewidgets
$ pip install -e .
The development of extensions for jupyter notebook and jupyter lab requires JavaScript code to be modified in-place. For this reason, lab and notebook extensions need to be configured this way:
- For jupyter notebook:
$ jupyter nbextension install --py --overwrite --symlink --sys-prefix ipytablewidgets $ jupyter nbextension enable --py --sys-prefix ipytablewidgets
- For jupyter lab:
$ jupyter labextension develop . --overwrite
Tables
The main widget for tables is the TableWidget
class. It has a main trait: A
table. This table's main purpose is simply to be a standardized way of transmitting table
data from the kernel to the frontend, and to allow the data to be reused across
any number of other widgets, but with only a single sync across the network.
import pandas as pd
from ipytableidgets import TableWidget, PandasAdapter, serialization
@widgets.register
class MyWidget(DOMWidget):
"""
My widget needing a table
"""
_view_name = Unicode('MyWidgetView').tag(sync=True)
_model_name = Unicode('MyWidgetModel').tag(sync=True)
...
data = Instance(TableWidget).tag(sync=True, **serialization)
def __init__(self, wg, **kwargs):
self.data = wg
super().__init__(**kwargs)
df = pd.DataFrame({'a': [1,2], 'b': [3.5, 4.5], 'c': ['foo','bar'])
table_widget = TableWidget(PandasAdapter(df))
my_widget = MyWidget(table_widget)
You can see EchoTableWidget which is a more realistic example, currently used for end to end testing and demo.
Or, if you prefer to use the TableType traitlet directly:
from ipytablewidgets import serialization, TableType
@widgets.register
class MyWidget(DOMWidget):
"""
My widget needing a table
"""
...
data = TableType(None).tag(sync=True, **serialization)
Developers
Developers should consider using ipytablewidgets because:
- It gives readily accessible syncing of table data using the binary transfer protocol of ipywidgets.
- It gives compression methods speifically suited for columnar data.
- It avoids duplication of common code among different extensions, ensuring that bugs discovered for one extension gets fixed in all.
Overview
The major parts of ipyablewidgets are:
- Traits/Widgets definitions
- Adapters to convert tables to those traits
- Serializers/deserializers to send the data across the network
- Apropriate javascript handling and representation of the data
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for ipytablewidgets-0.3.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a407d8350faca5ca58392eb4a53d9ebfcc2a98e4481f2b6b50bdae87728c24b8 |
|
MD5 | 78a1b75e1a60812b41780ee9fd68ea93 |
|
BLAKE2b-256 | 7f833f7b2eb46c19f3c67c5e6adbe9dfe144a0d91ebe717fd34795870f98a45b |