# ๐งน CleanEngine
[](https://github.com/I-invincib1e/CleanEngine)
[](https://github.com/I-invincib1e/CleanEngine)
[](https://github.com/I-invincib1e/CleanEngine/issues)
[](https://badge.fury.io/py/cleanengine)
[](#)
[](./LICENSE)
[](#)
[](https://pypi.org/project/cleanengine/)
> **๐ The Ultimate Data Cleaning & Analysis CLI Tool**
> Transform messy datasets into clean, insights-rich data with intelligent cleaning and advanced ML analysis.
CleanEngine is a powerful command-line toolkit that handles missing values, removes duplicates, detects outliers, and provides comprehensive statistical analysis using machine learning techniques.

### ๐ **Comparison with Other Tools**
| Feature | **CleanEngine** ๐งน | pandas-profiling | Sweetviz | Great Expectations |
|---------|-------------------|------------------|-----------|-------------------|
| **Data Cleaning** | โ
**Complete Pipeline** | โ No | โ No | โ ๏ธ Limited |
| **Profiling & Stats** | โ
**Advanced Analytics** | โ
Yes | โ
Yes | โ ๏ธ Minimal |
| **Correlation Analysis** | โ
**Multi-Method** | โ
Yes | โ
Yes | โ No |
| **Feature Importance** | โ
**ML-Powered** | โ No | โ No | โ No |
| **Clustering & Patterns** | โ
**3 Algorithms** | โ No | โ No | โ No |
| **Anomaly Detection** | โ
**2 Methods** | โ No | โ No | โ No |
| **Rule Engine** | โ
**YAML-Driven** | โ No | โ No | โ
Yes |
| **Interfaces** | โ
**CLI + GUI + Watcher** | CLI/Notebook | Notebook | CLI/Notebook |
| **Automation** | โ
**Folder Watcher** | โ No | โ No | โ
Yes |
---
## ๐ Installation
### Using pip (Recommended)
```bash
pip install cleanengine
```
### From source
```bash
git clone https://github.com/I-invincib1e/CleanEngine.git
cd CleanEngine
pip install -e .
```
### Verify Installation
```bash
cleanengine --help
```
---
## ๐ฏ Quick Start
### Clean a CSV file
```bash
cleanengine clean data.csv
```
### Analyze data without cleaning
```bash
cleanengine analyze data.xlsx
```
### Generate sample data to test
```bash
cleanengine samples
```
### Launch web interface
```bash
cleanengine gui
```
---
## ๐ CLI Commands
### Core Commands
| Command | Flags | Description | Example |
|---------|-------|-------------|---------|
| `clean` | `--output, -o`, `--verbose, -v`, `--force` | Clean a dataset with full pipeline | `cleanengine clean data.csv --output ./cleaned/ --verbose` |
| `analyze` | `--output, -o`, `--verbose, -v` | Analyze data without cleaning | `cleanengine analyze data.csv --output ./analysis/ --verbose` |
| `validate-data` | `--verbose, -v` | Validate data with rules | `cleanengine validate-data data.csv --verbose` |
| `profile` | `--output, -o`, `--verbose, -v` | Generate data profile report | `cleanengine profile data.csv --output ./profile/ --verbose` |
| `clean-only` | `--output, -o`, `--verbose, -v` | Clean without analysis | `cleanengine clean-only data.csv --output ./cleaned/ --verbose` |
| `samples` | `--output, -o`, `--count, -n`, `--verbose, -v` | Create sample datasets | `cleanengine samples --output ./samples/ --count 5 --verbose` |
| `test` | `--verbose, -v`, `--coverage` | Run test suite | `cleanengine test --verbose --coverage` |
| `gui` | `--port, -p`, `--host, -h` | Launch Streamlit web interface | `cleanengine gui --port 8501 --host localhost` |
| `info` | None | Show CleanEngine information | `cleanengine info` |
### Advanced Analysis Commands
| Command | Flags | Description | Example |
|---------|-------|-------------|---------|
| `correlations` | `--method, -m`, `--threshold, -t`, `--output, -o`, `--verbose, -v` | Analyze variable correlations | `cleanengine correlations data.csv --method pearson --threshold 0.7 --verbose` |
| `features` | `--output, -o`, `--verbose, -v` | Analyze feature importance | `cleanengine features data.csv --output ./features/ --verbose` |
| `clusters` | `--method, -m`, `--output, -o`, `--verbose, -v` | Discover data clusters | `cleanengine clusters data.csv --method kmeans --output ./clusters/ --verbose` |
| `anomalies` | `--method, -m`, `--contamination, -c`, `--output, -o`, `--verbose, -v` | Detect anomalies/outliers | `cleanengine anomalies data.csv --method isolation_forest --contamination 0.1 --verbose` |
| `quality` | `--output, -o`, `--verbose, -v` | Assess data quality | `cleanengine quality data.csv --output ./quality/ --verbose` |
| `statistics` | `--output, -o`, `--verbose, -v` | Perform statistical analysis | `cleanengine statistics data.csv --output ./stats/ --verbose` |
---
## ๐ Supported File Formats
- **CSV**: Comma-separated values
- **Excel**: .xlsx and .xls files
- **JSON**: JavaScript Object Notation
- **Parquet**: Columnar storage format
---
## ๐ Output Structure
After processing, CleanEngine creates a `Cleans-<dataset_name>/` folder with:
```
Cleans-data/
โโโ cleaned_data.csv # Your cleaned dataset
โโโ cleaning_report.json # Detailed cleaning summary
โโโ analysis_report.json # Comprehensive analysis results
โโโ visualizations/ # Generated charts and plots
โโโ logs/ # Processing logs
```
---
## โ๏ธ Configuration
### Custom Configuration File
Create a `config.yaml` file in your working directory:
```yaml
cleaning:
missing_values:
strategy: "auto" # auto, mean, median, mode, drop
outliers:
method: "iqr" # iqr, zscore, custom
encoding:
categorical: true
normalize: true
analysis:
correlation:
method: "pearson" # pearson, spearman, kendall
clustering:
method: "kmeans" # kmeans, dbscan, hierarchical
```
---
## ๐จ CLI Features
- **Rich Terminal Output**: Beautiful tables, progress bars, and colors
- **Interactive Help**: `cleanengine --help` and `cleanengine <command> --help`
- **Auto-completion**: Tab completion for commands and file paths
- **Progress Tracking**: Real-time progress bars for long operations
- **Error Handling**: Clear error messages with suggestions
---
## ๐ Performance
- **Small Datasets** (< 1MB): < 1 second
- **Medium Datasets** (1-100MB): 1-30 seconds
- **Large Datasets** (100MB-1GB): 30 seconds - 5 minutes
- **Very Large Datasets** (> 1GB): Configurable chunking
---
## ๐ง Advanced Usage
### Batch Processing Multiple Files
```bash
# Process all CSV files in current directory
for file in *.csv; do cleanengine clean "$file"; done
```
### Custom Output Directory
```bash
cleanengine clean data.csv --output-dir ./my-clean-data/
```
### Configuration File
```bash
cleanengine clean data.csv --config ./my-config.yaml
```
### Verbose Output
```bash
cleanengine clean data.csv --verbose
```
---
## ๐ Python API
For programmatic use:
```python
from cleanengine import DatasetCleaner
# Initialize cleaner
cleaner = DatasetCleaner()
# Clean dataset
cleaned_df = cleaner.clean_dataset('data.csv')
# Get analysis results
analysis_results = cleaner.analyze_dataset('data.csv')
```
---
## ๐ค Contributing
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details on:
- Setting up a development environment
- Code style and standards
- Testing and quality assurance
- Pull request process
---
## ๐ License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
---
## ๐ Acknowledgments
- **pandas** for data manipulation
- **scikit-learn** for machine learning algorithms
- **Typer & Rich** for beautiful CLI interfaces
- **Streamlit** for web interface
---
<div align="center">
**Made with โค๏ธ for data scientists and analysts**
[GitHub](https://github.com/I-invincib1e/CleanEngine) โข
[PyPI](https://pypi.org/project/cleanengine/) โข
[Documentation](https://github.com/I-invincib1e/CleanEngine#readme)
</div>
Raw data
{
"_id": null,
"home_page": "https://github.com/I-invincib1e/CleanEngine",
"name": "cleanengine",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "CleanEngine Community <contact@cleanengine.com>",
"keywords": "data-cleaning, data-analysis, data-profiling, machine-learning, data-science, pandas, scikit-learn, data-validation, rule-engine, cli-tool, data-quality, outlier-detection, clustering, anomaly-detection, correlation-analysis, feature-importance, data-visualization, streamlit, yaml-config, automation",
"author": "CleanEngine Community",
"author_email": "CleanEngine Community <contact@cleanengine.com>",
"download_url": "https://files.pythonhosted.org/packages/00/cd/45c1eb0b56ad52ba46cd88fae1da15279cee8baf887251e921da5e40c98c/cleanengine-0.1.2.tar.gz",
"platform": "any",
"description": "# \ud83e\uddf9 CleanEngine\r\n\r\n[](https://github.com/I-invincib1e/CleanEngine)\r\n[](https://github.com/I-invincib1e/CleanEngine)\r\n[](https://github.com/I-invincib1e/CleanEngine/issues)\r\n[](https://badge.fury.io/py/cleanengine)\r\n[](#)\r\n[](./LICENSE)\r\n[](#)\r\n[](https://pypi.org/project/cleanengine/)\r\n\r\n> **\ud83d\ude80 The Ultimate Data Cleaning & Analysis CLI Tool** \r\n> Transform messy datasets into clean, insights-rich data with intelligent cleaning and advanced ML analysis.\r\n\r\nCleanEngine is a powerful command-line toolkit that handles missing values, removes duplicates, detects outliers, and provides comprehensive statistical analysis using machine learning techniques.\r\n\r\n\r\n\r\n### \ud83d\udcca **Comparison with Other Tools**\r\n\r\n| Feature | **CleanEngine** \ud83e\uddf9 | pandas-profiling | Sweetviz | Great Expectations |\r\n|---------|-------------------|------------------|-----------|-------------------|\r\n| **Data Cleaning** | \u2705 **Complete Pipeline** | \u274c No | \u274c No | \u26a0\ufe0f Limited |\r\n| **Profiling & Stats** | \u2705 **Advanced Analytics** | \u2705 Yes | \u2705 Yes | \u26a0\ufe0f Minimal |\r\n| **Correlation Analysis** | \u2705 **Multi-Method** | \u2705 Yes | \u2705 Yes | \u274c No |\r\n| **Feature Importance** | \u2705 **ML-Powered** | \u274c No | \u274c No | \u274c No |\r\n| **Clustering & Patterns** | \u2705 **3 Algorithms** | \u274c No | \u274c No | \u274c No |\r\n| **Anomaly Detection** | \u2705 **2 Methods** | \u274c No | \u274c No | \u274c No |\r\n| **Rule Engine** | \u2705 **YAML-Driven** | \u274c No | \u274c No | \u2705 Yes |\r\n| **Interfaces** | \u2705 **CLI + GUI + Watcher** | CLI/Notebook | Notebook | CLI/Notebook |\r\n| **Automation** | \u2705 **Folder Watcher** | \u274c No | \u274c No | \u2705 Yes |\r\n\r\n---\r\n\r\n## \ud83d\ude80 Installation\r\n\r\n### Using pip (Recommended)\r\n```bash\r\npip install cleanengine\r\n```\r\n\r\n### From source\r\n```bash\r\ngit clone https://github.com/I-invincib1e/CleanEngine.git\r\ncd CleanEngine\r\npip install -e .\r\n```\r\n\r\n### Verify Installation\r\n```bash\r\ncleanengine --help\r\n```\r\n\r\n---\r\n\r\n## \ud83c\udfaf Quick Start\r\n\r\n### Clean a CSV file\r\n```bash\r\ncleanengine clean data.csv\r\n```\r\n\r\n### Analyze data without cleaning\r\n```bash\r\ncleanengine analyze data.xlsx\r\n```\r\n\r\n### Generate sample data to test\r\n```bash\r\ncleanengine samples\r\n```\r\n\r\n### Launch web interface\r\n```bash\r\ncleanengine gui\r\n```\r\n\r\n---\r\n\r\n## \ud83d\udccb CLI Commands\r\n\r\n### Core Commands\r\n| Command | Flags | Description | Example |\r\n|---------|-------|-------------|---------|\r\n| `clean` | `--output, -o`, `--verbose, -v`, `--force` | Clean a dataset with full pipeline | `cleanengine clean data.csv --output ./cleaned/ --verbose` |\r\n| `analyze` | `--output, -o`, `--verbose, -v` | Analyze data without cleaning | `cleanengine analyze data.csv --output ./analysis/ --verbose` |\r\n| `validate-data` | `--verbose, -v` | Validate data with rules | `cleanengine validate-data data.csv --verbose` |\r\n| `profile` | `--output, -o`, `--verbose, -v` | Generate data profile report | `cleanengine profile data.csv --output ./profile/ --verbose` |\r\n| `clean-only` | `--output, -o`, `--verbose, -v` | Clean without analysis | `cleanengine clean-only data.csv --output ./cleaned/ --verbose` |\r\n| `samples` | `--output, -o`, `--count, -n`, `--verbose, -v` | Create sample datasets | `cleanengine samples --output ./samples/ --count 5 --verbose` |\r\n| `test` | `--verbose, -v`, `--coverage` | Run test suite | `cleanengine test --verbose --coverage` |\r\n| `gui` | `--port, -p`, `--host, -h` | Launch Streamlit web interface | `cleanengine gui --port 8501 --host localhost` |\r\n| `info` | None | Show CleanEngine information | `cleanengine info` |\r\n\r\n### Advanced Analysis Commands\r\n| Command | Flags | Description | Example |\r\n|---------|-------|-------------|---------|\r\n| `correlations` | `--method, -m`, `--threshold, -t`, `--output, -o`, `--verbose, -v` | Analyze variable correlations | `cleanengine correlations data.csv --method pearson --threshold 0.7 --verbose` |\r\n| `features` | `--output, -o`, `--verbose, -v` | Analyze feature importance | `cleanengine features data.csv --output ./features/ --verbose` |\r\n| `clusters` | `--method, -m`, `--output, -o`, `--verbose, -v` | Discover data clusters | `cleanengine clusters data.csv --method kmeans --output ./clusters/ --verbose` |\r\n| `anomalies` | `--method, -m`, `--contamination, -c`, `--output, -o`, `--verbose, -v` | Detect anomalies/outliers | `cleanengine anomalies data.csv --method isolation_forest --contamination 0.1 --verbose` |\r\n| `quality` | `--output, -o`, `--verbose, -v` | Assess data quality | `cleanengine quality data.csv --output ./quality/ --verbose` |\r\n| `statistics` | `--output, -o`, `--verbose, -v` | Perform statistical analysis | `cleanengine statistics data.csv --output ./stats/ --verbose` |\r\n\r\n---\r\n\r\n## \ud83d\udcc1 Supported File Formats\r\n\r\n- **CSV**: Comma-separated values\r\n- **Excel**: .xlsx and .xls files\r\n- **JSON**: JavaScript Object Notation\r\n- **Parquet**: Columnar storage format\r\n\r\n---\r\n\r\n## \ud83d\udcca Output Structure\r\n\r\nAfter processing, CleanEngine creates a `Cleans-<dataset_name>/` folder with:\r\n\r\n```\r\nCleans-data/\r\n\u251c\u2500\u2500 cleaned_data.csv # Your cleaned dataset\r\n\u251c\u2500\u2500 cleaning_report.json # Detailed cleaning summary\r\n\u251c\u2500\u2500 analysis_report.json # Comprehensive analysis results\r\n\u251c\u2500\u2500 visualizations/ # Generated charts and plots\r\n\u2514\u2500\u2500 logs/ # Processing logs\r\n```\r\n\r\n---\r\n\r\n## \u2699\ufe0f Configuration\r\n\r\n### Custom Configuration File\r\nCreate a `config.yaml` file in your working directory:\r\n\r\n```yaml\r\ncleaning:\r\n missing_values:\r\n strategy: \"auto\" # auto, mean, median, mode, drop\r\n outliers:\r\n method: \"iqr\" # iqr, zscore, custom\r\n encoding:\r\n categorical: true\r\n normalize: true\r\n\r\nanalysis:\r\n correlation:\r\n method: \"pearson\" # pearson, spearman, kendall\r\n clustering:\r\n method: \"kmeans\" # kmeans, dbscan, hierarchical\r\n```\r\n\r\n---\r\n\r\n## \ud83c\udfa8 CLI Features\r\n\r\n- **Rich Terminal Output**: Beautiful tables, progress bars, and colors\r\n- **Interactive Help**: `cleanengine --help` and `cleanengine <command> --help`\r\n- **Auto-completion**: Tab completion for commands and file paths\r\n- **Progress Tracking**: Real-time progress bars for long operations\r\n- **Error Handling**: Clear error messages with suggestions\r\n\r\n---\r\n\r\n## \ud83d\udcc8 Performance\r\n\r\n- **Small Datasets** (< 1MB): < 1 second\r\n- **Medium Datasets** (1-100MB): 1-30 seconds\r\n- **Large Datasets** (100MB-1GB): 30 seconds - 5 minutes\r\n- **Very Large Datasets** (> 1GB): Configurable chunking\r\n\r\n---\r\n\r\n## \ud83d\udd27 Advanced Usage\r\n\r\n### Batch Processing Multiple Files\r\n```bash\r\n# Process all CSV files in current directory\r\nfor file in *.csv; do cleanengine clean \"$file\"; done\r\n```\r\n\r\n### Custom Output Directory\r\n```bash\r\ncleanengine clean data.csv --output-dir ./my-clean-data/\r\n```\r\n\r\n### Configuration File\r\n```bash\r\ncleanengine clean data.csv --config ./my-config.yaml\r\n```\r\n\r\n### Verbose Output\r\n```bash\r\ncleanengine clean data.csv --verbose\r\n```\r\n\r\n---\r\n\r\n## \ud83d\udc0d Python API\r\n\r\nFor programmatic use:\r\n\r\n```python\r\nfrom cleanengine import DatasetCleaner\r\n\r\n# Initialize cleaner\r\ncleaner = DatasetCleaner()\r\n\r\n# Clean dataset\r\ncleaned_df = cleaner.clean_dataset('data.csv')\r\n\r\n# Get analysis results\r\nanalysis_results = cleaner.analyze_dataset('data.csv')\r\n```\r\n\r\n---\r\n\r\n## \ud83e\udd1d Contributing\r\n\r\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details on:\r\n\r\n- Setting up a development environment\r\n- Code style and standards\r\n- Testing and quality assurance\r\n- Pull request process\r\n\r\n---\r\n\r\n## \ud83d\udcc4 License\r\n\r\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\r\n\r\n---\r\n\r\n## \ud83d\ude4f Acknowledgments\r\n\r\n- **pandas** for data manipulation\r\n- **scikit-learn** for machine learning algorithms\r\n- **Typer & Rich** for beautiful CLI interfaces\r\n- **Streamlit** for web interface\r\n\r\n---\r\n\r\n<div align=\"center\">\r\n\r\n**Made with \u2764\ufe0f for data scientists and analysts**\r\n\r\n[GitHub](https://github.com/I-invincib1e/CleanEngine) \u2022\r\n[PyPI](https://pypi.org/project/cleanengine/) \u2022\r\n[Documentation](https://github.com/I-invincib1e/CleanEngine#readme)\r\n\r\n</div>\r\n",
"bugtrack_url": null,
"license": null,
"summary": "The Ultimate Data Cleaning & Analysis Toolkit",
"version": "0.1.2",
"project_urls": {
"Bug Tracker": "https://github.com/I-invincib1e/CleanEngine/issues",
"Changelog": "https://github.com/I-invincib1e/CleanEngine/blob/main/CHANGELOG.md",
"Documentation": "https://github.com/I-invincib1e/CleanEngine#readme",
"Download": "https://github.com/I-invincib1e/CleanEngine/archive/v0.1.1.tar.gz",
"Homepage": "https://github.com/I-invincib1e/CleanEngine",
"Repository": "https://github.com/I-invincib1e/CleanEngine"
},
"split_keywords": [
"data-cleaning",
" data-analysis",
" data-profiling",
" machine-learning",
" data-science",
" pandas",
" scikit-learn",
" data-validation",
" rule-engine",
" cli-tool",
" data-quality",
" outlier-detection",
" clustering",
" anomaly-detection",
" correlation-analysis",
" feature-importance",
" data-visualization",
" streamlit",
" yaml-config",
" automation"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "b8bdd9a0b48c3b43f6b58f3e763ac0fb576050a5c815bde6ecc9ae56cd23d4be",
"md5": "d72abb65f0c760198e8bca879f001ab1",
"sha256": "26c9641ae54921a8cebcfc49b85dce490a96aeaf0f44d84311ff0b312ae208ea"
},
"downloads": -1,
"filename": "cleanengine-0.1.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d72abb65f0c760198e8bca879f001ab1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 61636,
"upload_time": "2025-08-24T13:20:29",
"upload_time_iso_8601": "2025-08-24T13:20:29.384037Z",
"url": "https://files.pythonhosted.org/packages/b8/bd/d9a0b48c3b43f6b58f3e763ac0fb576050a5c815bde6ecc9ae56cd23d4be/cleanengine-0.1.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "00cd45c1eb0b56ad52ba46cd88fae1da15279cee8baf887251e921da5e40c98c",
"md5": "26f3ba9112028cb851cec5ede633eb91",
"sha256": "74440b798b33319fd42ce625dac814b34b4da73bf31402a427f86ba2a5bf220c"
},
"downloads": -1,
"filename": "cleanengine-0.1.2.tar.gz",
"has_sig": false,
"md5_digest": "26f3ba9112028cb851cec5ede633eb91",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 80167,
"upload_time": "2025-08-24T13:20:31",
"upload_time_iso_8601": "2025-08-24T13:20:31.359590Z",
"url": "https://files.pythonhosted.org/packages/00/cd/45c1eb0b56ad52ba46cd88fae1da15279cee8baf887251e921da5e40c98c/cleanengine-0.1.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-24 13:20:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "I-invincib1e",
"github_project": "CleanEngine",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "pandas",
"specs": [
[
">=",
"1.5.0"
]
]
},
{
"name": "numpy",
"specs": [
[
">=",
"1.21.0"
]
]
},
{
"name": "scikit-learn",
"specs": [
[
">=",
"1.0.0"
]
]
},
{
"name": "scipy",
"specs": [
[
">=",
"1.7.0"
]
]
},
{
"name": "openpyxl",
"specs": [
[
">=",
"3.0.0"
]
]
},
{
"name": "xlrd",
"specs": [
[
">=",
"2.0.0"
]
]
},
{
"name": "matplotlib",
"specs": [
[
">=",
"3.5.0"
]
]
},
{
"name": "seaborn",
"specs": [
[
">=",
"0.11.0"
]
]
},
{
"name": "watchdog",
"specs": [
[
">=",
"2.1.0"
]
]
},
{
"name": "streamlit",
"specs": [
[
">=",
"1.20.0"
]
]
},
{
"name": "plotly",
"specs": [
[
">=",
"5.0.0"
]
]
},
{
"name": "kaleido",
"specs": [
[
">=",
"0.2.1"
]
]
},
{
"name": "pyyaml",
"specs": [
[
">=",
"6.0.0"
]
]
},
{
"name": "pyarrow",
"specs": [
[
">=",
"10.0.0"
]
]
},
{
"name": "fastparquet",
"specs": [
[
">=",
"0.8.0"
]
]
},
{
"name": "psutil",
"specs": [
[
">=",
"5.9.0"
]
]
},
{
"name": "rich",
"specs": [
[
">=",
"13.7.0"
]
]
},
{
"name": "typer",
"specs": [
[
">=",
"0.12.0"
]
]
},
{
"name": "questionary",
"specs": [
[
">=",
"2.0.1"
]
]
}
],
"lcname": "cleanengine"
}