Metadata-Version: 2.4
Name: trendify
Version: 2.0.2
Summary: Tools for generating data products, storing, and interacting with them
Project-URL: Homepage, https://github.com/talbotknighton/trendify
Project-URL: Documentation, https://talbotknighton.github.io/trendify/
Project-URL: Repository, https://github.com/talbotknighton/trendify
Project-URL: Issues, https://github.com/talbotknighton/trendify/issues
Project-URL: PyPI, https://pypi.org/project/trendify/
Author-email: Talbot Knighton <talbotknighton@gmail.com>, David Gable <david@david-gable.com>
Maintainer-email: Talbot Knighton <talbotknighton@gmail.com>, David Gable <david@david-gable.com>
License: MIT
License-File: LICENSE.txt
Keywords: Dashboard,Data,Database,Matplotlib,Plotly,Plotting,Post,Process,Products,Trends,Visualization
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: Visualization
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: fastapi>=0.134.0
Requires-Dist: matplotlib>=3.11.0
Requires-Dist: numpy>=2.4.1
Requires-Dist: numpydantic>=1.7.0
Requires-Dist: plotly>=6.8.0
Requires-Dist: polars>=1.39.0
Requires-Dist: pydantic>=2.12.5
Requires-Dist: rich>=14.3.3
Requires-Dist: typer>=0.24.1
Requires-Dist: uvicorn>=0.41.0
Description-Content-Type: text/markdown

<p align="center">
    <img alt="Trendify" src="https://raw.githubusercontent.com/TalbotKnighton/trendify/refs/heads/main/docs/assets/read-me-banner.png" style="width: 100%">
</p>

# trendify: Efficient Plotting and Table Building

<p align="center">
  <a href="https://pypi.org/project/trendify/" class="badge-link">
    <img src="https://img.shields.io/pypi/v/trendify.svg?cacheSeconds=300" alt="PyPI version">
  </a>
  <a href="https://pypi.org/project/trendify/" class="badge-link">
    <img src="https://img.shields.io/pypi/pyversions/trendify.svg?cacheSeconds=86400" alt="Python versions">
  </a>
  <a href="https://github.com/talbotknighton/trendify/actions/workflows/publish.yml" class="badge-link">
    <img src="https://github.com/talbotknighton/trendify/actions/workflows/publish.yml/badge.svg?branch=main" alt="Tests & Release Status">
  </a>
  <a href="https://github.com/talbotknighton/trendify/actions/workflows/workflow.yml" class="badge-link">
    <img src="https://raw.githubusercontent.com/talbotknighton/trendify/refs/heads/main/docs/assets/coverage-badge.svg" alt="Coverage">
  </a>
  <a href="https://github.com/astral-sh/ruff" class="badge-link">
    <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff">
  </a>
  <a href="https://docs.pydantic.dev/latest/" class="badge-link">
    <img src="https://img.shields.io/badge/Pydantic-v2-FF43A1?logo=pydantic&logoColor=white" alt="Pydantic v2">
  </a>
  <a href="https://opensource.org/licenses/MIT" class="badge-link">
    <img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License">
  </a>
  <a href="https://talbotknighton.github.io/trendify/" class="badge-link">
    <img src="https://img.shields.io/badge/docs-GitHub_Pages-blue.svg" alt="Documentation">
  </a>
</p>

---

## Installation

Install the package via your preferred manager:

```bash linenums="0"
uv add trendify
```

or with `pip`:

```bash linenums="0"
pip install trendify
```

---

## Core Features

- **Built to scale**: process thousands of runs without holding every run's data in memory at once. Throughput stays flat whether you have dozens of runs or tens of thousands.
- **Typed records, no migrations**: points, traces, tables, and histograms are validated [Pydantic](https://docs.pydantic.dev/latest/) models. Add your own record types anytime without writing a schema migration.
- **Parallelizable**: `trendify generate` can fan your processing function out across multiple CPU cores with `--n-procs`, with multiprocessing-safe logging that funnels every worker's output through a single queue.
- **Static assets or a live dashboard**: render tagged data straight to Matplotlib images and CSV tables with `trendify render`, or launch an interactive FastAPI dashboard with `trendify viewer` to browse tags, tables, and interactive plots in the browser.

---

## Why use `trendify`?

- **Scalable.** Throughput stays flat whether you're processing dozens of runs or tens of thousands.
- **Memory efficient.** Each run is processed once and cached on disk, nothing needs to stay open or held in memory for the whole sweep. This is critical for processing large amounts of data with less memory than is available when batch processing.
- **Flexible output.** Render static Matplotlib images and CSV tables for a report, or browse the same data interactively in a live dashboard.
