Metadata-Version: 2.1
Name: synthyverse
Version: 0.2.0
Summary: Synthetic data generation and evaluation library
Home-page: https://github.com/synthyverse/synthyverse
Author: Jim Achterberg, Saif Ul Islam, Zia Ur Rehman
Author-email: 
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pandas
Requires-Dist: numpy
Requires-Dist: scikit-learn
Provides-Extra: arf
Requires-Dist: pandas; extra == "arf"
Requires-Dist: numpy; extra == "arf"
Requires-Dist: scikit-learn; extra == "arf"
Requires-Dist: arfpy; extra == "arf"
Provides-Extra: base
Requires-Dist: pandas; extra == "base"
Requires-Dist: numpy; extra == "base"
Requires-Dist: scikit-learn; extra == "base"
Provides-Extra: bn
Requires-Dist: pandas; extra == "bn"
Requires-Dist: numpy; extra == "bn"
Requires-Dist: scikit-learn; extra == "bn"
Requires-Dist: synthcity==0.2.12; extra == "bn"
Requires-Dist: opacus==1.5.3; extra == "bn"
Provides-Extra: cdtd
Requires-Dist: pandas; extra == "cdtd"
Requires-Dist: numpy; extra == "cdtd"
Requires-Dist: scikit-learn; extra == "cdtd"
Requires-Dist: torch; extra == "cdtd"
Requires-Dist: torch-ema; extra == "cdtd"
Requires-Dist: einops; extra == "cdtd"
Requires-Dist: tqdm; extra == "cdtd"
Provides-Extra: ctgan
Requires-Dist: pandas; extra == "ctgan"
Requires-Dist: numpy; extra == "ctgan"
Requires-Dist: scikit-learn; extra == "ctgan"
Requires-Dist: ctgan==0.10.0; extra == "ctgan"
Provides-Extra: eval
Requires-Dist: torch; extra == "eval"
Requires-Dist: geomloss; extra == "eval"
Requires-Dist: pykeops; extra == "eval"
Requires-Dist: pandas; extra == "eval"
Requires-Dist: numpy; extra == "eval"
Requires-Dist: scikit-learn; extra == "eval"
Requires-Dist: xgboost; extra == "eval"
Requires-Dist: optuna; extra == "eval"
Requires-Dist: seaborn; extra == "eval"
Provides-Extra: full
Requires-Dist: ctgan==0.10.0; extra == "full"
Requires-Dist: xgboost; extra == "full"
Requires-Dist: scikit-learn; extra == "full"
Requires-Dist: geomloss; extra == "full"
Requires-Dist: pykeops; extra == "full"
Requires-Dist: numpy; extra == "full"
Requires-Dist: torch-ema; extra == "full"
Requires-Dist: seaborn; extra == "full"
Requires-Dist: mostlyai-engine; extra == "full"
Requires-Dist: imbalanced-learn; extra == "full"
Requires-Dist: synthcity==0.2.12; extra == "full"
Requires-Dist: einops; extra == "full"
Requires-Dist: tqdm; extra == "full"
Requires-Dist: arfpy; extra == "full"
Requires-Dist: optuna; extra == "full"
Requires-Dist: pandas; extra == "full"
Requires-Dist: scipy; extra == "full"
Requires-Dist: opacus==1.5.3; extra == "full"
Requires-Dist: torch; extra == "full"
Provides-Extra: smote
Requires-Dist: pandas; extra == "smote"
Requires-Dist: numpy; extra == "smote"
Requires-Dist: scikit-learn; extra == "smote"
Requires-Dist: imbalanced-learn; extra == "smote"
Provides-Extra: tabargn
Requires-Dist: pandas; extra == "tabargn"
Requires-Dist: numpy; extra == "tabargn"
Requires-Dist: scikit-learn; extra == "tabargn"
Requires-Dist: mostlyai-engine; extra == "tabargn"
Provides-Extra: tabddpm
Requires-Dist: pandas; extra == "tabddpm"
Requires-Dist: numpy; extra == "tabddpm"
Requires-Dist: scikit-learn; extra == "tabddpm"
Requires-Dist: synthcity==0.2.12; extra == "tabddpm"
Requires-Dist: opacus==1.5.3; extra == "tabddpm"
Provides-Extra: tabsyn
Requires-Dist: pandas; extra == "tabsyn"
Requires-Dist: numpy; extra == "tabsyn"
Requires-Dist: scikit-learn; extra == "tabsyn"
Requires-Dist: torch; extra == "tabsyn"
Requires-Dist: tqdm; extra == "tabsyn"
Requires-Dist: scipy; extra == "tabsyn"
Provides-Extra: tvae
Requires-Dist: pandas; extra == "tvae"
Requires-Dist: numpy; extra == "tvae"
Requires-Dist: scikit-learn; extra == "tvae"
Requires-Dist: ctgan==0.10.0; extra == "tvae"
Provides-Extra: univariate
Requires-Dist: pandas; extra == "univariate"
Requires-Dist: numpy; extra == "univariate"
Requires-Dist: scikit-learn; extra == "univariate"

<table align="center" border="0">
<tr>
<td align="center">

<img src="https://raw.githubusercontent.com/synthyverse/synthyverse/main/logo/logo.png" alt="Synthyverse logo" width="250" height="auto">

<br/>
<br/>

Welcome to the synthyverse!

An extensive ecosystem for synthetic data generation and evaluation in Python.

[Read the docs](https://synthyverse.readthedocs.io) for in-depth usage.

_The synthyverse is a work in progress. Please provide any suggestions through a GitHub Issue._

</td>
</tr>
</table>

<div style="clear: both;"></div>

# Features
- **Modular installation.** Install only the generator and evaluation extras you need for a given environment.
- **Tabular synthetic data generators.** Use low-level generators directly, or wrap them with shared preprocessing through `SynthyverseGenerator`.
- **Evaluation metrics.** Compare synthetic data with fidelity, utility, and privacy metrics through individual metric classes or `TabularMetricEvaluator`.
- **Benchmarking workflows.** Train, sample, evaluate, and save benchmark artifacts with `TabularSynthesisBenchmark`.
- **Shared preprocessing.** Reuse `DataProcessor` for missing-value handling, schema restoration, and column constraints.

# Installation
The core package installs the shared tabular data dependencies used by the base generator and preprocessing APIs. Optional extras install dependencies for specific generators or for the evaluation module.

Install only the extras you need for a run. Some generator dependencies are heavy or may conflict with each other, so separate virtual environments are recommended when combining many extras.

## Available Installation Templates

The following installation templates are available:

| Template Name | Category | Installation Command |
|---------------|----------|----------------------|
| `arf` | Generator | `pip install synthyverse[arf]` |
| `bn` | Generator | `pip install synthyverse[bn]` |
| `cdtd` | Generator | `pip install synthyverse[cdtd]` |
| `ctgan` | Generator | `pip install synthyverse[ctgan]` |
| `smote` | Generator | `pip install synthyverse[smote]` |
| `tabargn` | Generator | `pip install synthyverse[tabargn]` |
| `tabddpm` | Generator | `pip install synthyverse[tabddpm]` |
| `tabsyn` | Generator | `pip install synthyverse[tabsyn]` |
| `tvae` | Generator | `pip install synthyverse[tvae]` |
| `univariate` | Generator | `pip install synthyverse[univariate]` |
| `base` | Generator | `pip install synthyverse[base]` |
| `eval` | Evaluation | `pip install synthyverse[eval]` |
| `full` | All | `pip install synthyverse[full]` |

**Note:** You can install multiple templates by separating them with commas, e.g., `pip install synthyverse[ctgan,eval]`
### General Installation Template

```bash
pip install synthyverse[template]
```

### Installation Examples
```bash
pip install synthyverse[ctgan]
```


```bash
pip install synthyverse[arf,bn,ctgan,tvae]
```

```bash
pip install synthyverse[ctgan,eval]
```

# Usage

Use a high-level wrapper when you want preprocessing and schema restoration handled for you:

```python
from synthyverse.generators import SynthyverseGenerator

generator = SynthyverseGenerator(
    "ctgan",
    generator_params={"epochs": 300},
    missing_imputation_method="median",
    random_state=42,
)
generator.fit(X, discrete_features=["category", "target"])
X_syn = generator.generate(1000)
```

Use the lower-level APIs when you want explicit control over preprocessing, generator fitting, metrics, or benchmarking. See the [docs](https://synthyverse.readthedocs.io) for complete examples.


