Metadata-Version: 2.4
Name: exprmat
Version: 0.1.58
Classifier: Programming Language :: Rust
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Dist: leidenalg
Requires-Dist: anndata>=0.8.0
Requires-Dist: multiprocess
Requires-Dist: macs3>=3.0,<3.1
Requires-Dist: natsort
Requires-Dist: numpy
Requires-Dist: pandas>=2.0
Requires-Dist: polars>=1.0,<2.0
Requires-Dist: pooch>=1.6.0,<2.0.0
Requires-Dist: igraph>=0.10.3
Requires-Dist: pyarrow
Requires-Dist: pyfaidx>=0.7.0,<0.8.0
Requires-Dist: rustworkx
Requires-Dist: scipy>=1.11,<2.0.0
Requires-Dist: scikit-learn>=1.1,<2.0.0
Requires-Dist: tqdm>=4.62
Requires-Dist: typeguard>=4.0
Requires-Dist: umap-learn>=0.5.0
Requires-Dist: scvi-tools>=1.3.0
Requires-Dist: scanpy
Requires-Dist: mudata
Requires-Dist: matplotlib
Requires-Dist: seaborn
Requires-Dist: torch>=2.0
Requires-Dist: annoy
Requires-Dist: scikit-image
Requires-Dist: scikit-misc
Requires-Dist: bbknn
Requires-Dist: scanorama
Requires-Dist: harmonypy>=0.2.0
Requires-Dist: pymde
Requires-Dist: datashader
Requires-Dist: fa2-modified
Requires-Dist: pynndescent
Requires-Dist: gseapy
Requires-Dist: metacells
Requires-Dist: sh
Requires-Dist: networkx
Requires-Dist: palantir
Requires-Dist: adjusttext
Requires-Dist: h5py
Requires-Dist: cytoolz
Requires-Dist: frozendict
Requires-Dist: dask
Requires-Dist: boltons
Requires-Dist: multiprocessing-on-dill
Requires-Dist: pysam
Requires-Dist: hdbscan
Requires-Dist: graphtools
Requires-Dist: bincsync>=0.4.0
Requires-Dist: pybigwig
Requires-Dist: spatialdata
Requires-Dist: loompy
Requires-Dist: zarr
Requires-Dist: scikit-image
Requires-Dist: spatial-image
Requires-Dist: multiscale-spatial-image
Requires-Dist: tangram-sc
Requires-Dist: shapely>=2.0.0
Requires-Dist: pyogrio>=0.7.2
Requires-Dist: pyproj>=3.3.0
Requires-Dist: geopandas
Requires-Dist: packaging
Requires-Dist: lightmotif
Requires-Dist: pymemesuite
Requires-Dist: formulaic>=1.0.2
Requires-Dist: formulaic-contrasts>=0.2.0
Requires-Dist: cython
Requires-Dist: pyfastx
Requires-Dist: genomicranges
Requires-Dist: rustworkx
Requires-Dist: xgboost
Requires-Dist: simpleppt
Requires-Dist: elpigraph-python
Requires-Dist: dask-expr>=2.0
Requires-Dist: einops==0.8.1
Requires-Dist: lxml
Requires-Dist: arviz>=0.23
Requires-Dist: cudf-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: dask-cudf-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: cuml-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: cugraph-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: nx-cugraph-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: cuxfilter-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: cucim-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: pylibraft-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: raft-dask-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: cuvs-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: nx-cugraph-cu12==25.8.* ; extra == 'cuda12'
Requires-Dist: cupy-cuda12x ; extra == 'cuda12'
Requires-Dist: rapids-singlecell ; extra == 'cuda12'
Requires-Dist: sphinx ; extra == 'dev'
Requires-Dist: twine ; extra == 'dev'
Requires-Dist: ipykernel ; extra == 'dev'
Requires-Dist: ipytree ; extra == 'dev'
Provides-Extra: cuda12
Provides-Extra: dev
License-File: license
Summary: exprmat: Routines for expression matrices
Author-email: Zheng Yang <xornent@outlook.com>
Requires-Python: >=3.10, <3.14
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Repository, https://github.com/yang-z-03/exprmat


# Exprmat

![wheels](https://img.shields.io/pypi/wheel/exprmat)
![version](https://img.shields.io/pypi/v/exprmat)

Exprmat (short for **expr**ession **mat**rix) is a routine package for manipulation 
of single cell expression matrices. It is built based on commonly accepted python
infrastructures for single cell data management (Scanpy, SnapAtac2, and MuData) and
provides integration and wrappers of common routines for preprocessing, annotating,
clustering, visualizations, and downstream analyses with a common interface.

You may refer to these places:

* [Source code repository](https://github.com/yang-z-03/exprmat)
* [Releases in PyPI](https://pypi.org/project/exprmat)
* [Documentation](https://exprmat.readthedocs.io/en/latest)

### Database installation

The package `exprmat` do not come with its reference database. You need to setup
the database and configure the package to find it properly, or else most of the
features from the package will fail.

This package ships with a tool to fetch database distribution on Alibaba Cloud
object storage service. You will first need to register an account and request
a key-secret pair to authenticate your identity, before starting out to download
specified version of the database distribution using the tool `bsync-fetch` 
installed alongside the `exprmat` package.

```
usage: bsync-fetch [-h] --id ID --secret SECRET 
                        --bucket BUCKET [--endpoint ENDPOINT] --version VERSION

fetch from remote bucket.

options:
  -h, --help           show this help message and exit
  --id ID              The requester access id.
  --secret SECRET      The requester access secret.
  --bucket BUCKET      The name of the bucket.
  --endpoint ENDPOINT  The domain names that other services can use to access OSS.
  --version VERSION    The version to fetch from remote.
```

Suppose you are installing the database version `0.1.50` to `~/database`.

```bash
# enter the intended path of installation
cd ~/database

# download the version 0.1.50 of database distribution
# you must download the same version of the database with the package. the database
# and package content are published strictly synchronically.
bsync-fetch --id <your-id> --secret <your-api-secret> \
            --bucket exprmat-data --endpoint oss-cn-wuhan-lr.aliyuncs.com \
            --version 0.1.50
```

The authentication tokens passed to `--id` and `--secret` is provided by the
Alibaba Cloud service (See the [Documentation](https://help.aliyun.com/zh/ram/user-guide/create-an-accesskey-pair)
for details)

### Licensing

The original part of the source code is licensed under GNU GPLv3.
The database download tool bsync-fetch (developed as a dependency package for
exprmat, in python package `bincsync`) is only allowed for internal use and not
for re-distribution.

```
exprmat - Routines to manipulate expression matrices
Copyright (C) 2025 - 2026 Zheng Yang (杨政) <xornent@outlook.com>

exprmat is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions. 
You should have received a copy of the GNU General Public License
version 3 along with this program. If not, see <http://www.gnu.org/licenses/>.

The GNU General Public License does not permit incorporating 
your program into proprietary programs.
```

I acknowledge the following author(s) for modifying and integrating their work
in the form of source code to this package.

```
parts of the source code under /preprocessing comes from the scanpy project.

  BSD 3-Clause License. For full text of the license, see 
  <https://opensource.org/license/BSD-3-clause>
  Copyright (c) 2025 scverse®
  Copyright (c) 2017 F. Alexander Wolf, P. Angerer, Theis Lab

function embedding_atlas (file /reduction/plot.py) comes from the omicverse project.

  GNU GPLv3. (same as this project)
  Copyright (c) 2024 112 Lab

most of the code from /snapatac2 and /snapatac2-core comes from the SnapATAC
project, including the rust build system and the compiled binaries.

  The MIT license. For full text of the license, see
  <https://opensource.org/license/MIT>
  Copyright (c) 2022-2024 Kai Zhang

file /clustering/sc3.py comes from the sc3s project.

  GNU GPLv3. (same as this project)
  Copyright (c) Quah, F.X. and Hemberg, M. and contributors.

file /clustering/nmf.py comes from cNMF project.

  The MIT license
  Copyright (c) 2019 Dylan Kotliar

directory /cnv comes from infercnvpy project.
  
  BSD 3-Clause License
  Copyright (c) 2022, Gregor Sturm

directory /deconv comes from the TAPE project.

  GNU GPLv3. (same as this project)
  Copyright (c) The contributors.

directory /metacell comes from the MetaQ project.
  
  MIT License
  Copyright (c) 2024 XLearning Group

directory /grn comes from the scenicplus project.

  Academic Non-commercial Software License Agreement.
  For full text of the license, see <https://github.com/aertslab/scenicplus>
  Copyright (c) The contributors.

directory /lr (but not /lr/icnet) comes from the lianapy project

  BSD 3-Clause License
  Copyright (c) 2025, Daniel Dimitrov

directory /peaks/idr.py comes from the idr project

  GNU GPLv2. For copyright details, see <https://github.com/nboley/idr>
  Copyright (c) The contributors

function diffmap comes from the pydiffmap project

  MIT License
  Copyright (c) 2018 Ralf Banisch, Erik Henning Thiede, Zofia Trstanova

principle tree fitting and trajectory analysis comes from the scFates project

  BSD 3-Clause License
  Copyright (c) 2020, Louis Faure

file /trajectory/cytotrace.py comes from the CytoTRACE2 project

  Stanford Non-commercial Software License Agreement
  Copyright (c) The contributors.

rna velocity fitting comes from the scvelo project

  BSD 3-Clause License
  Copyright (c) 2018, Theis Lab

directory /deseq comes from the pyDEseq2 project

  MIT License
  Copyright (c) 2022 Owkin

```

