Metadata-Version: 2.1
Name: panel
Version: 0.14.2
Summary: A high level app and dashboarding solution for Python.
Home-page: http://panel.holoviz.org
Author: HoloViz
Author-email: developers@holoviz.org
Maintainer: HoloViz
Maintainer-email: developers@holoviz.org
License: BSD
Project-URL: Source, https://github.com/holoviz/panel
Platform: Windows
Platform: Mac OS X
Platform: Linux
Classifier: License :: OSI Approved :: BSD License
Classifier: Development Status :: 5 - Production/Stable
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Intended Audience :: Healthcare Industry
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: Legal Industry
Classifier: Intended Audience :: Other Audience
Classifier: Intended Audience :: Science/Research
Classifier: Natural Language :: English
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Visualization
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Topic :: Office/Business
Classifier: Topic :: Office/Business :: Financial
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: bokeh (<2.5.0,>=2.4.0)
Requires-Dist: param (>=1.12.0)
Requires-Dist: pyviz-comms (>=0.7.4)
Requires-Dist: markdown
Requires-Dist: requests
Requires-Dist: tqdm (>=4.48.0)
Requires-Dist: pyct (>=0.4.4)
Requires-Dist: bleach
Requires-Dist: setuptools (>=42)
Requires-Dist: typing-extensions
Provides-Extra: all
Requires-Dist: aiohttp ; extra == 'all'
Requires-Dist: altair ; extra == 'all'
Requires-Dist: channels ; extra == 'all'
Requires-Dist: croniter ; extra == 'all'
Requires-Dist: datashader ; extra == 'all'
Requires-Dist: diskcache ; extra == 'all'
Requires-Dist: django (<4) ; extra == 'all'
Requires-Dist: flake8 ; extra == 'all'
Requires-Dist: flaky ; extra == 'all'
Requires-Dist: folium ; extra == 'all'
Requires-Dist: graphviz ; extra == 'all'
Requires-Dist: holoviews ; extra == 'all'
Requires-Dist: holoviews (>1.14.1) ; extra == 'all'
Requires-Dist: hvplot ; extra == 'all'
Requires-Dist: ipyleaflet ; extra == 'all'
Requires-Dist: ipympl ; extra == 'all'
Requires-Dist: ipython (>=7.0) ; extra == 'all'
Requires-Dist: ipyvolume ; extra == 'all'
Requires-Dist: ipyvuetify ; extra == 'all'
Requires-Dist: ipywidgets ; extra == 'all'
Requires-Dist: ipywidgets-bokeh ; extra == 'all'
Requires-Dist: jupyter-bokeh (>=3.0.2) ; extra == 'all'
Requires-Dist: jupyterlab ; extra == 'all'
Requires-Dist: lxml ; extra == 'all'
Requires-Dist: markdown-it-py ; extra == 'all'
Requires-Dist: matplotlib ; extra == 'all'
Requires-Dist: nbsite (>=0.7.2rc2) ; extra == 'all'
Requires-Dist: nbval ; extra == 'all'
Requires-Dist: networkx (>=2.5) ; extra == 'all'
Requires-Dist: pandas (>=1.3) ; extra == 'all'
Requires-Dist: parameterized ; extra == 'all'
Requires-Dist: pillow ; extra == 'all'
Requires-Dist: playwright ; extra == 'all'
Requires-Dist: plotly ; extra == 'all'
Requires-Dist: plotly (>=4.0) ; extra == 'all'
Requires-Dist: pre-commit ; extra == 'all'
Requires-Dist: pydata-sphinx-theme (<=0.9.0) ; extra == 'all'
Requires-Dist: pydeck ; extra == 'all'
Requires-Dist: pygraphviz ; extra == 'all'
Requires-Dist: pyinstrument (>=4.0) ; extra == 'all'
Requires-Dist: pytest ; extra == 'all'
Requires-Dist: pytest-cov ; extra == 'all'
Requires-Dist: pytest-playwright ; extra == 'all'
Requires-Dist: pytest-xdist ; extra == 'all'
Requires-Dist: python-graphviz ; extra == 'all'
Requires-Dist: pyvista (<0.33) ; extra == 'all'
Requires-Dist: reacton ; extra == 'all'
Requires-Dist: scikit-learn ; extra == 'all'
Requires-Dist: scipy ; extra == 'all'
Requires-Dist: seaborn ; extra == 'all'
Requires-Dist: sphinx-copybutton ; extra == 'all'
Requires-Dist: sphinx-design ; extra == 'all'
Requires-Dist: streamz ; extra == 'all'
Requires-Dist: twine ; extra == 'all'
Requires-Dist: vega-datasets ; extra == 'all'
Requires-Dist: vtk (==9.0.1) ; extra == 'all'
Requires-Dist: xarray ; extra == 'all'
Requires-Dist: xgboost ; extra == 'all'
Provides-Extra: build
Requires-Dist: param (>=1.9.2) ; extra == 'build'
Requires-Dist: pyct (>=0.4.4) ; extra == 'build'
Requires-Dist: setuptools (>=42) ; extra == 'build'
Requires-Dist: bokeh (<2.5.0,>=2.4.3) ; extra == 'build'
Requires-Dist: pyviz-comms (>=0.7.4) ; extra == 'build'
Requires-Dist: requests ; extra == 'build'
Requires-Dist: packaging ; extra == 'build'
Requires-Dist: bleach ; extra == 'build'
Requires-Dist: tqdm (>=4.48.0) ; extra == 'build'
Provides-Extra: doc
Requires-Dist: jupyterlab ; extra == 'doc'
Requires-Dist: holoviews (>1.14.1) ; extra == 'doc'
Requires-Dist: matplotlib ; extra == 'doc'
Requires-Dist: pillow ; extra == 'doc'
Requires-Dist: plotly ; extra == 'doc'
Requires-Dist: nbsite (>=0.7.2rc2) ; extra == 'doc'
Requires-Dist: pydata-sphinx-theme (<=0.9.0) ; extra == 'doc'
Requires-Dist: sphinx-copybutton ; extra == 'doc'
Requires-Dist: sphinx-design ; extra == 'doc'
Provides-Extra: examples
Requires-Dist: hvplot ; extra == 'examples'
Requires-Dist: plotly (>=4.0) ; extra == 'examples'
Requires-Dist: altair ; extra == 'examples'
Requires-Dist: streamz ; extra == 'examples'
Requires-Dist: vega-datasets ; extra == 'examples'
Requires-Dist: vtk (==9.0.1) ; extra == 'examples'
Requires-Dist: scikit-learn ; extra == 'examples'
Requires-Dist: datashader ; extra == 'examples'
Requires-Dist: jupyter-bokeh (>=3.0.2) ; extra == 'examples'
Requires-Dist: django (<4) ; extra == 'examples'
Requires-Dist: channels ; extra == 'examples'
Requires-Dist: pyvista (<0.33) ; extra == 'examples'
Requires-Dist: ipywidgets ; extra == 'examples'
Requires-Dist: ipywidgets-bokeh ; extra == 'examples'
Requires-Dist: ipyvolume ; extra == 'examples'
Requires-Dist: ipyleaflet ; extra == 'examples'
Requires-Dist: ipympl ; extra == 'examples'
Requires-Dist: folium ; extra == 'examples'
Requires-Dist: xarray ; extra == 'examples'
Requires-Dist: pyinstrument (>=4.0) ; extra == 'examples'
Requires-Dist: aiohttp ; extra == 'examples'
Requires-Dist: croniter ; extra == 'examples'
Requires-Dist: graphviz ; extra == 'examples'
Requires-Dist: networkx (>=2.5) ; extra == 'examples'
Requires-Dist: pygraphviz ; extra == 'examples'
Requires-Dist: seaborn ; extra == 'examples'
Requires-Dist: pydeck ; extra == 'examples'
Requires-Dist: lxml ; extra == 'examples'
Requires-Dist: python-graphviz ; extra == 'examples'
Requires-Dist: xgboost ; extra == 'examples'
Requires-Dist: ipyvuetify ; extra == 'examples'
Requires-Dist: reacton ; extra == 'examples'
Provides-Extra: recommended
Requires-Dist: jupyterlab ; extra == 'recommended'
Requires-Dist: holoviews (>1.14.1) ; extra == 'recommended'
Requires-Dist: matplotlib ; extra == 'recommended'
Requires-Dist: pillow ; extra == 'recommended'
Requires-Dist: plotly ; extra == 'recommended'
Provides-Extra: tests
Requires-Dist: flake8 ; extra == 'tests'
Requires-Dist: parameterized ; extra == 'tests'
Requires-Dist: pytest ; extra == 'tests'
Requires-Dist: nbval ; extra == 'tests'
Requires-Dist: flaky ; extra == 'tests'
Requires-Dist: pytest-xdist ; extra == 'tests'
Requires-Dist: pytest-cov ; extra == 'tests'
Requires-Dist: pre-commit ; extra == 'tests'
Requires-Dist: folium ; extra == 'tests'
Requires-Dist: ipympl ; extra == 'tests'
Requires-Dist: scipy ; extra == 'tests'
Requires-Dist: twine ; extra == 'tests'
Requires-Dist: pandas (>=1.3) ; extra == 'tests'
Requires-Dist: ipython (>=7.0) ; extra == 'tests'
Requires-Dist: holoviews ; extra == 'tests'
Requires-Dist: diskcache ; extra == 'tests'
Requires-Dist: markdown-it-py ; extra == 'tests'
Requires-Dist: ipyvuetify ; extra == 'tests'
Requires-Dist: reacton ; extra == 'tests'
Requires-Dist: lxml ; extra == 'tests'
Provides-Extra: ui
Requires-Dist: playwright ; extra == 'ui'
Requires-Dist: pytest-playwright ; extra == 'ui'

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://github.com/holoviz/panel/raw/master/doc/_static/logo_horizontal_dark_theme.png">
  <img src="https://github.com/holoviz/panel/raw/master/doc/_static/logo_horizontal_light_theme.png" alt="Panel logo -- text is white in dark theme and black in light theme" width=400/>
</picture>

-----------------

# A high-level app and dashboarding solution for Python

|    |    |
| --- | --- |
| Build Status | [![Linux/MacOS Build Status](https://github.com/holoviz/panel/workflows/pytest/badge.svg?query=branch%3Amaster)](https://github.com/holoviz/panel/actions/workflows/test.yaml?query=branch%3Amaster)
| Coverage | [![codecov](https://codecov.io/gh/holoviz/panel/branch/master/graph/badge.svg)](https://codecov.io/gh/holoviz/panel) |
| Latest dev release | [![Github tag](https://img.shields.io/github/v/tag/holoviz/panel.svg?label=tag&colorB=11ccbb)](https://github.com/holoviz/panel/tags) [![dev-site](https://img.shields.io/website-up-down-green-red/https/pyviz-dev.github.io/panel.svg?label=dev%20website)](https://pyviz-dev.github.io/panel/) |
| Latest release | [![Github release](https://img.shields.io/github/release/holoviz/panel.svg?label=tag&colorB=11ccbb)](https://github.com/holoviz/panel/releases) [![PyPI version](https://img.shields.io/pypi/v/panel.svg?colorB=cc77dd)](https://pypi.python.org/pypi/panel) [![panel version](https://img.shields.io/conda/v/pyviz/panel.svg?colorB=4488ff&style=flat)](https://anaconda.org/pyviz/panel) [![conda-forge version](https://img.shields.io/conda/v/conda-forge/panel.svg?label=conda%7Cconda-forge&colorB=4488ff)](https://anaconda.org/conda-forge/panel) [![defaults version](https://img.shields.io/conda/v/anaconda/panel.svg?label=conda%7Cdefaults&style=flat&colorB=4488ff)](https://anaconda.org/anaconda/panel) |
| Docs | [![gh-pages](https://img.shields.io/github/last-commit/holoviz/panel/gh-pages.svg)](https://github.com/holoviz/panel/tree/gh-pages) [![site](https://img.shields.io/website-up-down-green-red/https/panel.holoviz.org.svg)](https://panel.holoviz.org) |
| Binder | [![Binder](https://img.shields.io/badge/launch%20v0.14.1-binder-579aca.svg?logo=data:image/png;base64,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)](https://mybinder.org/v2/gh/holoviz/panel/v0.14.1?urlpath=lab/tree/examples) |
| Support | [![Discourse](https://img.shields.io/discourse/status?server=https%3A%2F%2Fdiscourse.holoviz.org)](https://discourse.holoviz.org/) |

## What is it?

[Panel](https://panel.holoviz.org/) provides tools for easily composing widgets, plots, tables, and other viewable objects and controls into custom analysis tools, apps, and dashboards. Panel works with visualizations from [Altair](https://altair-viz.github.io/), [Bokeh](https://bokeh.pydata.org), [HoloViews](https://holoviews.org), [Matplotlib](https://matplotlib.org/), [Plotly](https://plotly.com/), [pydeck](https://pydeck.gl/), [PyVista](https://docs.pyvista.org/) and many other Python plotting libraries, making them instantly viewable either individually or when combined with interactive widgets that control them.

Panel works equally well in [Jupyter Notebooks](http://jupyter.org), for creating quick data-exploration tools, or as standalone deployed apps and dashboards, and allows you to easily switch between those contexts as needed.

Panel makes it simple to make:

- Plots with user-defined controls
- Property sheets for editing parameters of objects in a workflow
- Control panels for simulations or experiments
- Custom data-exploration tools
- Dashboards reporting key performance indicators (KPIs) and trends
- Streaming applications
- Data-rich Python-backed web servers
- and anything in between

Panel objects are reactive, immediately updating to reflect changes to their state, which makes it simple to compose viewable objects and link them into simple, one-off apps to do a specific exploratory task.  The same objects can then be reused in more complex combinations to build more ambitious apps, while always sharing the same code that works well on its own.

   <table>
     <tr>
       <td border=1><a href="https://examples.pyviz.org/attractors/attractors_panel.html"><b>Attractors</b></a><br><a href="https://attractors.pyviz.demo.anaconda.com/attractors_panel"><img src="http://assets.holoviews.org/panel/thumbnails/index/attractors.png" /></a></td>
       <td border=1><a href="https://examples.pyviz.org/gapminders/gapminders.html"><b>Gapminders</b></a><br><a href="https://gapminders.pyviz.demo.anaconda.com"><img src="http://assets.holoviews.org/panel/thumbnails/index/gapminders.png" /></a></td>
       <td border=1><a href="https://examples.pyviz.org/nyc_taxi/dashboard.html"><b>NYC Taxi</b></a><br><a href="https://nyc-taxi.pyviz.demo.anaconda.com"><img src="http://assets.holoviews.org/panel/thumbnails/index/nyc_taxi.png" /></a></td>
       <td border=1><a href="https://examples.pyviz.org/glaciers/glaciers.html"><b>Glaciers</b></a><br><a href="https://glaciers.pyviz.demo.anaconda.com"><img src="http://assets.holoviews.org/panel/thumbnails/index/glaciers.png" /></a></td>
       <td border=1><a href="https://examples.pyviz.org/portfolio_optimizer/portfolio.html"><b>Portfolio Optimizer</b></a><br><a href="https://portfolio-optimizer.pyviz.demo.anaconda.com"><img src="http://assets.holoviews.org/panel/thumbnails/index/portfolio_optimizer.png" /></a></td>
     <tr>
   </table>

## Using Panel for declarative, reactive programming

Panel can also be used with the separate [Param](https://param.pyviz.org) project to create interactively configurable objects with or without associated visualizations, in a fully [declarative](https://en.wikipedia.org/wiki/Declarative_programming) way. With this approach, you declare your configurable object using the pure-Python, zero-dependency `param` library, annotating your code with parameter ranges, documentation, and dependencies between parameters and your code.  Using this information, you can make all of your domain-specific code be optionally configurable in a GUI, with optional visual displays and debugging information if you like, all with just a few lines of declarations. With this approach, you don't ever have to commit to whether your code will be used in a notebook, in a GUI app, or completely behind the scenes in batch processing or reports -- the same code can support all of these cases equally well, once you declare the associated parameters and constraints. This approach lets you completely separate your domain-specific code from anything to do with web browsers, GUI toolkits, or other volatile technologies that would otherwise make your hard work become obsolete as they change over time.

## Usage

Panel can be used in a wide range of development environments:

### Editor + Server


You can edit your Panel code as a `.py` file in any text editor, marking the objects you want to render as ``.servable()``, then launch a server with:

```bash
panel serve my_script.py --show --autoreload
```

to open a browser tab showing your app or dashboard and backed by a live Python process. The `--autoreload` flag ensures that the app reloads whenever you make a change to the Python source.

### JupyterLab and Classic notebook

In the classic Jupyter notebook environment and JupyterLab, first make sure to load the ``pn.extension()``. Panel objects will then render themselves if they are the last item in a notebook cell. For versions of ``jupyterlab>=3.0`` the necessary extension is automatically bundled in the ``pyviz_comms`` package, which must be >=2.0. However note that for version of ``jupyterlab<3.0`` you must also manually install the JupyterLab extension with:

```bash
jupyter labextension install @pyviz/jupyterlab_pyviz
```

### Google Colab

In the Google Colaboratory notebook, first make sure to load the `pn.extension()`. Panel objects will then render themselves if they are the last item in a notebook cell. Please note that in Colab rendering for each notebook cell is isolated, which means that every cell must reload the Panel extension code separately. This will result in somewhat slower and larger notebook than with other notebook technologies.

### VSCode notebook

Visual Studio Code (VSCode) versions 2020.4.74986 and later support ipywidgets, and Panel objects can be used as ipywidgets since Panel 0.10 thanks to `jupyter_bokeh`, which means that you can now use Panel components interactively in VSCode. Ensure you install `jupyter_bokeh` with `pip install jupyter_bokeh` or `conda install -c bokeh jupyter_bokeh` and then enable the extension with `pn.extension()`.

### nteract and other ipywidgets notebooks

In other notebook environments that support rendering ipywidgets interactively, such as nteract, you can use the same underlying ipywidgets support as for vscode: Install `jupyter_bokeh` and then use `pn.extension(comms='ipywidgets')`.

### Other environments

If your development environment offers embedded Python processes but does not support ipywidgets or Jupyter "comms" (communication channels), you will notice that some or all interactive functionality is missing. Some widgets that operate only in JavaScript will work fine, but others require communication channels between JavaScript and Python. In such cases you can either request ipywidgets or Panel support from the editor or environment, or else use the Editor + Server approach above.

## Sponsors

The Panel project is grateful for the sponsorship by the organizations and companies below:

<table align="center">
<tr>
  <td>
    <a href="https://www.anaconda.com/">
      <img src="https://static.bokeh.org/sponsor/anaconda.png"
         alt="Anaconda Logo" width="200"/>
	 </a>
  </td>
  <td colspan="2">
    <a href="https://www.blackstone.com/the-firm/">
    <img src="https://static.bokeh.org/sponsor/blackstone.png"
         alt="Blackstone Logo" width="400"/>
    </a>
  </td>
</tr>
</table>
