Metadata-Version: 2.4
Name: featuremesh
Version: 0.2.0
Summary: FeatureQL local transpiler and client for managed FeatureMesh infrastructure.
Project-URL: Homepage, https://featuremesh.com
Project-URL: Documentation, https://featuremesh.com/docs
Author-email: FeatureMesh <info@featuremesh.com>
License-Expression: LicenseRef-Proprietary
License-File: src/featuremesh/LICENCE
Keywords: bigquery,data,duckdb,feature-store,featuremesh,featureql,local,query,sql,transpiler,trino
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: <4.0,>=3.12
Requires-Dist: antlr4-python3-runtime<5,>=4.12.0
Requires-Dist: duckdb<2,>=1.3.2
Requires-Dist: ipython>=7.0.0
Requires-Dist: jinja2<4,>=3.1.2
Requires-Dist: numpy>=1.26.0
Requires-Dist: opentelemetry-api>=1.0.0
Requires-Dist: pandas>=2.1.0
Requires-Dist: pydantic-settings>=2.13.1
Requires-Dist: pydantic>=2.10.2
Requires-Dist: requests>=2.31.0
Requires-Dist: returns>=0.26.0
Requires-Dist: sqlalchemy>=2.0.43
Requires-Dist: sqlmodel>=0.0.22
Requires-Dist: structlog>=25.4.0
Provides-Extra: all
Requires-Dist: duckdb>=1.0.0; extra == 'all'
Requires-Dist: google-cloud-bigquery>=3.0.0; extra == 'all'
Requires-Dist: trino>=0.320.0; extra == 'all'
Provides-Extra: bigquery
Requires-Dist: google-cloud-bigquery>=3.0.0; extra == 'bigquery'
Provides-Extra: dev
Requires-Dist: cython>=3.0.0; extra == 'dev'
Requires-Dist: mypy>=1.11.0; extra == 'dev'
Requires-Dist: pre-commit>=4.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
Requires-Dist: pytest-cov>=6.0.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff>=0.8.0; extra == 'dev'
Requires-Dist: setuptools>=75.0.0; extra == 'dev'
Requires-Dist: types-requests>=2.31.0; extra == 'dev'
Provides-Extra: trino
Requires-Dist: trino>=0.320.0; extra == 'trino'
Description-Content-Type: text/markdown

# FeatureMesh

FeatureQL transpiler and client. Translate and execute [FeatureQL](https://featuremesh.com/docs) queries locally or via managed FeatureMesh infrastructure.

## Quick Start

Works immediately after install -- no server, no account, no config:

```bash
pip install featuremesh
```

```python
from featuremesh import BatchClient

client = BatchClient()

result = client.query("""
    SELECT
        F1 := 1,
        F2 := 2,
        F3 := F1 + F2;
""")

print(result.dataframe)
#    F1  F2  F3
# 0   1   2   3
```

For common patterns and discovery commands, run `featuremesh.help()` in a Python shell.

## How It Works

FeatureMesh has two independent axes:

**Transpilation + Persistence** -- where FeatureQL is translated and feature definitions are stored:
- **Local** (default): bundled engine + SQLite. No network, no account.
- **Managed**: FeatureMesh infrastructure. Requires an access token.

**Execution** -- who runs the final SQL:
- **BatchClient**: your database runs it (DuckDB, Trino, BigQuery, DataFusion). For analytics, ETL, experimentation.
- **ServingClient**: FeatureMesh's engine runs it (DataFusion). For real-time serving. Managed-only.

## Managed Mode

For team collaboration with shared feature definitions and access control:

```python
from featuremesh import BatchClient, Registry, set_default

set_default("registry", Registry.MANAGED)

client = BatchClient(
    access_token="your_access_token",  # from https://console.featuremesh.com
    sql_executor=your_sql_executor,
)
```

## Real-Time Serving

For low-latency feature serving via FeatureMesh's managed engine:

```python
from featuremesh import Registry, ServingClient, set_default

set_default("registry", Registry.MANAGED)
client = ServingClient(access_token="your_access_token")
result = client.query("SELECT ...")
```

## Jupyter Notebooks

```python
%load_ext featuremesh

from featuremesh import BatchClient, set_default
set_default("client", BatchClient())
```

Then use `%%featureql` in cells. Options: `--show-sql`, `--debug`, `--hide-dataframe`, `--show-slt`, `--hook VARIABLE`.

## Result Objects

| Method | Returns | Key fields |
|--------|---------|------------|
| `client.query(fql)` | `QueryResult` | `.dataframe`, `.sql`, `.success`, `.errors`, `.warnings` |
| `client.translate(fql)` | `TranslateResult` | `.sql`, `.success`, `.errors`, `.warnings` |

## More

- **Documentation**: [featuremesh.com/docs](https://featuremesh.com/docs)
- **Quick reference**: `featuremesh.help()` in Python
- **FeatureQL discovery**: `SHOW FUNCTION SIGNATURES`, `SHOW DOCS`, `SHOW FUNCTION TESTS` (run as queries)
- **Support**: info@featuremesh.com

## License

FeatureMesh Proprietary License 1.0
Copyright (c) 2026 FeatureMesh
