Metadata-Version: 2.4
Name: himena
Version: 0.1.1
Summary: An infinitely extensible and reusable application framework.
Project-URL: Documentation, https://github.com/hanjinliu/himena#readme
Project-URL: Issues, https://github.com/hanjinliu/himena/issues
Project-URL: Source, https://github.com/hanjinliu/himena
Author-email: Hanjin Liu <liuhanjin.sc@gmail.com>
License: BSD 3-Clause License
        
        Copyright (c) 2024, hanjinliu
        All rights reserved.
        
        Redistribution and use in source and binary forms, with or without
        modification, are permitted provided that the following conditions are met:
        
        1. Redistributions of source code must retain the above copyright notice, this
           list of conditions and the following disclaimer.
        
        2. Redistributions in binary form must reproduce the above copyright notice,
           this list of conditions and the following disclaimer in the documentation
           and/or other materials provided with the distribution.
        
        3. Neither the name of the copyright holder nor the names of its
           contributors may be used to endorse or promote products derived from
           this software without specific prior written permission.
        
        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
        AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
        DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
        FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
        SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
        CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
        OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
        OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
License-File: LICENSE
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.10
Requires-Dist: app-model>=0.4.0
Requires-Dist: chardet>=5.2.0
Requires-Dist: cmap>=0.4.0
Requires-Dist: magicgui>=0.10.0
Requires-Dist: numpy>=2.0.0
Requires-Dist: packaging>=24.0
Requires-Dist: pillow>=9.0.0
Requires-Dist: platformdirs>=4.3.6
Requires-Dist: pydantic>=2.10
Requires-Dist: pygments>=2.18.0
Requires-Dist: pyyaml>=6.0.1
Requires-Dist: qtpy>=2.3.1
Requires-Dist: superqt[iconify]>=0.7.3
Requires-Dist: tabulate>=0.9.0
Provides-Extra: all
Requires-Dist: ipython; extra == 'all'
Requires-Dist: matplotlib>=3.8.2; extra == 'all'
Requires-Dist: openpyxl; extra == 'all'
Requires-Dist: qtconsole; extra == 'all'
Requires-Dist: scipy; extra == 'all'
Provides-Extra: docs
Requires-Dist: griffe-fieldz; extra == 'docs'
Requires-Dist: ipython; extra == 'docs'
Requires-Dist: matplotlib>=3.8.2; extra == 'docs'
Requires-Dist: mkdocs; extra == 'docs'
Requires-Dist: mkdocs-autorefs; extra == 'docs'
Requires-Dist: mkdocs-gen-files; extra == 'docs'
Requires-Dist: mkdocs-material; extra == 'docs'
Requires-Dist: mkdocs-material-extensions; extra == 'docs'
Requires-Dist: mkdocstrings; extra == 'docs'
Requires-Dist: mkdocstrings-python; extra == 'docs'
Requires-Dist: openpyxl; extra == 'docs'
Requires-Dist: pyqt6; extra == 'docs'
Requires-Dist: qtconsole; extra == 'docs'
Requires-Dist: scipy; extra == 'docs'
Provides-Extra: pyqt5
Requires-Dist: pyqt5>=5.12.0; extra == 'pyqt5'
Provides-Extra: pyqt6
Requires-Dist: pyqt6; extra == 'pyqt6'
Provides-Extra: recommended
Requires-Dist: ipython; extra == 'recommended'
Requires-Dist: matplotlib>=3.8.2; extra == 'recommended'
Requires-Dist: openpyxl; extra == 'recommended'
Requires-Dist: pyqt6; extra == 'recommended'
Requires-Dist: qtconsole; extra == 'recommended'
Requires-Dist: scipy; extra == 'recommended'
Provides-Extra: testing
Requires-Dist: click!=8.3.0; extra == 'testing'
Requires-Dist: ipython; extra == 'testing'
Requires-Dist: matplotlib>=3.8.2; extra == 'testing'
Requires-Dist: openpyxl; extra == 'testing'
Requires-Dist: pandas; extra == 'testing'
Requires-Dist: polars; extra == 'testing'
Requires-Dist: pyarrow; extra == 'testing'
Requires-Dist: pytest; extra == 'testing'
Requires-Dist: pytest-cov; extra == 'testing'
Requires-Dist: pytest-qt; extra == 'testing'
Requires-Dist: qtconsole; extra == 'testing'
Requires-Dist: scipy; extra == 'testing'
Requires-Dist: xarray; extra == 'testing'
Description-Content-Type: text/markdown

# ![icon](src/himena/resources/icon-36x36.png) Himena

[![PyPI - Version](https://img.shields.io/pypi/v/himena.svg)](https://pypi.org/project/himena)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/himena.svg)](https://pypi.org/project/himena)
[![Python package index download statistics](https://img.shields.io/pypi/dm/himena.svg)](https://pypistats.org/packages/himena)
[![codecov](https://codecov.io/gh/hanjinliu/himena/graph/badge.svg?token=7BS2gF92SL)](https://codecov.io/gh/hanjinliu/himena)

-----

![](images/window.png)

`himena` is an infinitely extensible and reusable applications framework for data
science.

<details><summary><b>Motivation</b></summary>

There are many GUI applications for data science, and many of them use the "plugin
system" to extend their functionality. Even though the plugin system is a good idea,
there are plenty of duplicated works in the third-party plugins.

The reason is that **plugins cannot extend other plugins**. Imagine that you are a
plugin developer and making a plugin that extract features from images as a table. To
make your plugin more useful, you will need to implement not only the table widget, but
filter/sort functions, plotting functions, and I/O functions as well. You will also be
sad to find that these functions cannot readily be used in other plugins.

`himena` is designed so that **plugins developers can cooperate with each other**. The
table widgets you implemented in your plugin can be used by other plugins that return a
tabular data. The plotting functions you implemented in your plugin can be used from
any table widgets implemented in other plugins.

To join this plugin community, please check out the [developer's guide](https://hanjinliu.github.io/himena/dev/).

</details>

### Documentation

Tutorial, developer's guide, and API reference are available at the [documentation site](https://hanjinliu.github.io/himena/).

## Installation

`himena` is available on PyPI.

```shell
pip install himena -U
```

Alternatively, you can install the latest version from GitHub.

```shell
git clone git+https://github.com/hanjinliu/himena
cd himena
pip install -e .
```

## Start application

```shell
himena
```

## Existing Plugins

You can customize `himena` for your needs by installing plugins. Here's some example plugins:

- [himena-image](https://github.com/hanjinliu/himena-image): image processing and analysis
- [himena-stats](https://github.com/hanjinliu/himena-stats): statistical testing and modeling.
- [himena-seaborn](https://github.com/hanjinliu/himena-seaborn): [seaborn](https://github.com/mwaskom/seaborn) plotting.
- [himena-lmfit](https://github.com/hanjinliu/himena-lmfit): Curve fitting and parameter optimization using [lmfit](https://lmfit.github.io/lmfit-py/model.html).
- [himena-bio](https://github.com/hanjinliu/himena-bio): widgets and commands for basic bioinformatics analysis using [biopython](https://github.com/biopython/biopython).
- [napari-himena](https://github.com/hanjinliu/napari-himena): Sending data between `napari` and `himena`.
