# What is `perspective-python` Perspective for Python uses the exact same C++ data engine used by the [WebAssembly version](https://docs.rs/perspective-js/latest/perspective_js/) and [Rust version](https://docs.rs/crate/perspective/latest). The library consists of many of the same abstractions and API as in JavaScript, as well as Python-specific data loading support for [NumPy](https://numpy.org/), [Pandas](https://pandas.pydata.org/) (and [Apache Arrow](https://arrow.apache.org/), as in JavaScript). Additionally, `perspective-python` provides a session manager suitable for integration into server systems such as [Tornado websockets](https://www.tornadoweb.org/en/stable/websocket.html), [AIOHTTP](https://docs.aiohttp.org/en/stable/web_quickstart.html#websockets), or [Starlette](https://www.starlette.io/websockets/)/[FastAPI](https://fastapi.tiangolo.com/advanced/websockets/), which allows fully _virtual_ Perspective tables to be interacted with by multiple `` in a web browser. You can also interact with a Perspective table from python clients, and to that end client libraries are implemented for both Tornado and AIOHTTP. ## Example A simple example which loads an [Apache Arrow](https://arrow.apache.org/) and computes a "Group By" operation, returning a new Arrow. ```python from perspective import Server client = Server().new_local_client() table = client.table(arrow_bytes_data) view = table.view(group_by = ["CounterParty", "Security"]) arrow = view.to_arrow() ``` [More Examples](https://github.com/perspective-dev/perspective/tree/master/examples) are available on GitHub. ## What's included The `perspective` module exports several tools: - `Server` the constructor for a new instance of the Perspective data engine. - The `perspective.widget` module exports `PerspectiveWidget`, the JupyterLab widget for interactive visualization in a notebook cell. - The `perspective.handlers` modules exports web frameworks handlers that interface with a `perspective-client` in JavaScript. - `perspective.handlers.tornado.PerspectiveTornadoHandler` for [Tornado](https://www.tornadoweb.org/) - `perspective.handlers.starlette.PerspectiveStarletteHandler` for [Starlette](https://www.starlette.io/) and [FastAPI](https://fastapi.tiangolo.com) - `perspective.handlers.aiohttp.PerspectiveAIOHTTPHandler` for [AIOHTTP](https://docs.aiohttp.org), ### Virtual UI server As `` or any other Perspective `Client` will only consume the data necessary to render the current screen (or whatever else was requested via the API), this runtime mode allows large datasets without the need to copy them entirely to the Browser, at the expense of network latency on UI interaction/API calls. ### Jupyterlab `PerspectiveWidget` is a JupyterLab widget that implements the same API as ``, allows running such a viewer in [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/) in either server or client (via WebAssembly) mode. `PerspectiveWidget` is compatible with Jupyterlab 3 and Jupyter Notebook 6 via a [prebuilt extension](https://jupyterlab.readthedocs.io/en/stable/extension/extension_dev.html#prebuilt-extensions). To use it, simply install `perspective-python` and the extensions should be available. `perspective-python`'s JupyterLab extension also provides convenient builtin viewers for `csv`, `json`, or `arrow` files. Simply right-click on a file with this extension and choose the appropriate `Perpective` option from the context menu.