Metadata-Version: 2.1
Name: capfinder
Version: 0.3.1
Summary: A package for decoding RNA cap types
Home-page: https://adnaniazi.github.io/capfinder
License: MIT
Author: Adnan M. Niazi
Author-email: adnaniazi@gmail.com
Requires-Python: >=3.10,<3.13
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Provides-Extra: cpu
Provides-Extra: gpu
Provides-Extra: tpu
Requires-Dist: biopython (>=1.83,<2.0)
Requires-Dist: bokeh (>=3.3.0,<4.0.0)
Requires-Dist: comet-ml (>=3.39.3,<4.0.0)
Requires-Dist: hpack (>=4.0.0,<5.0.0)
Requires-Dist: httpx (>=0.27.0,<0.28.0)
Requires-Dist: imbalanced-learn (>=0.12.3,<0.13.0)
Requires-Dist: jax ; extra == "cpu" or extra == "gpu" or extra == "tpu"
Requires-Dist: jaxlib (>=0.4.31,<0.5.0)
Requires-Dist: keras (>=3.3.2,<4.0.0)
Requires-Dist: keras-tuner (>=1.4.7,<2.0.0)
Requires-Dist: loguru (>=0.7.2,<0.8.0)
Requires-Dist: matplotlib (>=3.8.0,<4.0.0)
Requires-Dist: mpire (>=2.8.0,<3.0.0)
Requires-Dist: parasail (>=1.3.4,<2.0.0)
Requires-Dist: pod5 (>=0.3.10,<0.4.0)
Requires-Dist: polars (>=0.20.21,<0.21.0)
Requires-Dist: pre-commit (>=3.7.0,<4.0.0)
Requires-Dist: prefect (>=2.18.3,<3.0.0)
Requires-Dist: prefect-dask (>=0.2.8,<0.3.0)
Requires-Dist: pysam (>=0.22.1,<0.23.0)
Requires-Dist: pytest-mock (>=3.11.1,<4.0.0)
Requires-Dist: scikit-learn (>=1.4.2,<2.0.0)
Requires-Dist: tensorflow (>=2.16.1,<3.0.0)
Requires-Dist: toml (>=0.10.2,<0.11.0)
Requires-Dist: tqdm (>=4.66.1,<5.0.0)
Requires-Dist: typer (>=0.12.3,<0.13.0)
Requires-Dist: types-pkg-resources (>=0.1.3,<0.2.0)
Requires-Dist: types-toml (>=0.10.8.7,<0.11.0.0)
Requires-Dist: types-tqdm (>=4.66.0.20240106,<5.0.0.0)
Project-URL: Documentation, https://adnaniazi.github.io/capfinder
Project-URL: Repository, https://github.com/adnaniazi/capfinder
Description-Content-Type: text/markdown

# capfinder

[![PyPI](https://img.shields.io/pypi/v/capfinder?style=flat-square)](https://pypi.python.org/pypi/capfinder/)
[![PyPi Downloads](https://img.shields.io/pypi/dm/capfinder)](https://pypistats.org/packages/capfinder)
[![CI/CD](https://github.com/adnaniazi/capfinder/actions/workflows/release.yml/badge.svg)](https://github.com/adnaniazi/capfinder/actions/workflows/release.yml)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/capfinder?style=flat-square)](https://pypi.python.org/pypi/capfinder/)
[![PyPI - License](https://img.shields.io/pypi/l/capfinder?style=flat-square)](https://pypi.python.org/pypi/capfinder/)


---

**Documentation**: [https://adnaniazi.github.io/capfinder](https://adnaniazi.github.io/capfinder)

**Source Code**: [https://github.com/adnaniazi/capfinder](https://github.com/adnaniazi/capfinder)

**PyPI**: [https://pypi.org/project/capfinder/](https://pypi.org/project/capfinder/)

---

A package for decoding RNA cap types

# Installing Capfinder

## 1. Installing and activate new Python Environment
Please make a fresh conda/micromamba env with required supported Python versions like so:
```sh
micromamba create -n capfinder_env python=3.12
```
Next, activate the newly created conda env:
```sh
micromamba activate capfinder_env
```

## 2. Installing Capfinder package

### CPU installation
```sh
pip install capfinder[cpu]
```

### GPU installation (CUDA 12)
```sh
pip install capfinder[gpu] "jax[cuda12]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
```
Capfinder depends on JAX internally for using GPUS. Jax requires CUDA to work. So the CUDA requierments for capfinder are the same as the CUDA requirements for JAX.
For more information [here](https://jax.readthedocs.io/en/latest/installation.html) on the required CUDA version for JAX.

### TPU installation
```sh
pip install capfinder[tpu] "jax[tpu]" -f https://storage.googleapis.com/jax-releases/libtpu_releases.html
```

# 3. Updating Capfinder

If you are using an older version of Capfinder, and would like to upgrade to the latest version, then please do the following in your activate Python enviorment:
### Updating Capfinder on CPU-based system
```sh
pip install capfinder[cpu]
```

### Updating Capfinder on GPU-based system
```sh
pip install capfinder[gpu]
```

### Updating Capfinder on TPU-based system
```sh
pip install capfinder[tpu]
```


## Development

* Clone this repository
* Requirements:
  * [Poetry](https://python-poetry.org/)
  * Python 3.7+
* Create a virtual environment and install the dependencies

### CPU installation
```sh
poetry install --extras cpu
```

### GPU installation (CUDA 12)
```sh
poetry install --extras gpu
poetry run pip install "jax[cuda12]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
```

### TPU installation
```sh
poetry install --extras tpu
poetry run pip install "jax[tpu]" -f https://storage.googleapis.com/jax-releases/libtpu_releases.html
```

* Activate the virtual environment

```sh
poetry shell
```

### Testing

```sh
pytest
```

### Documentation

The documentation is automatically generated from the content of the [docs directory](./docs) and from the docstrings
 of the public signatures of the source code. The documentation is updated and published as a [Github project page
 ](https://pages.github.com/) automatically as part each release.

### Releasing

Trigger the [Draft release workflow](https://github.com/adnaniazi/capfinder/actions/workflows/draft_release.yml)
(press _Run workflow_). This will update the changelog & version and create a GitHub release which is in _Draft_ state.

Find the draft release from the
[GitHub releases](https://github.com/adnaniazi/capfinder/releases) and publish it. When
 a release is published, it'll trigger [release](https://github.com/adnaniazi/capfinder/blob/master/.github/workflows/release.yml) workflow which creates PyPI
 release and deploys updated documentation.

### Pre-commit

Pre-commit hooks run all the auto-formatters (e.g. `black`, `isort`), linters (e.g. `mypy`, `flake8`), and other quality
 checks to make sure the changeset is in good shape before a commit/push happens.

You can install the hooks with (runs for each commit):

```sh
pre-commit install
```

Or if you want them to run only for each push:

```sh
pre-commit install -t pre-push
```

Or if you want e.g. want to run all checks manually for all files:

```sh
pre-commit run --all-files
```

