marimo-flow 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- marimo_flow-0.1.0/LICENSE +21 -0
- marimo_flow-0.1.0/PKG-INFO +213 -0
- marimo_flow-0.1.0/README.md +175 -0
- marimo_flow-0.1.0/marimo_flow.egg-info/PKG-INFO +213 -0
- marimo_flow-0.1.0/marimo_flow.egg-info/SOURCES.txt +9 -0
- marimo_flow-0.1.0/marimo_flow.egg-info/dependency_links.txt +1 -0
- marimo_flow-0.1.0/marimo_flow.egg-info/not-zip-safe +1 -0
- marimo_flow-0.1.0/marimo_flow.egg-info/requires.txt +14 -0
- marimo_flow-0.1.0/marimo_flow.egg-info/top_level.txt +1 -0
- marimo_flow-0.1.0/pyproject.toml +155 -0
- marimo_flow-0.1.0/setup.cfg +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Bjรถrn Bethge
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: marimo-flow
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Marimo Flow - Interactive ML notebooks with MLflow integration
|
|
5
|
+
Author-email: Bjรถrn Bethge <bjorn.bethge@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/bjoernbethge/marimo-flow
|
|
8
|
+
Project-URL: Documentation, https://marimo-flow.readthedocs.io
|
|
9
|
+
Project-URL: Repository, https://github.com/bjoernbethge/marimo-flow
|
|
10
|
+
Project-URL: Issues, https://github.com/bjoernbethge/marimo-flow/issues
|
|
11
|
+
Keywords: marimo,mlflow,machine-learning,notebooks,interactive
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: marimo[lsp,recommended,sql]>=0.13.15
|
|
26
|
+
Requires-Dist: mlflow>=2.22.1
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: pytest>=7.4.0; extra == "dev"
|
|
29
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
30
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
31
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
32
|
+
Requires-Dist: mypy>=1.5.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
|
|
34
|
+
Provides-Extra: docs
|
|
35
|
+
Requires-Dist: sphinx>=7.0.0; extra == "docs"
|
|
36
|
+
Requires-Dist: sphinx-rtd-theme>=1.3.0; extra == "docs"
|
|
37
|
+
Dynamic: license-file
|
|
38
|
+
|
|
39
|
+
# Marimo Flow ๐
|
|
40
|
+
|
|
41
|
+
[](https://python.org)
|
|
42
|
+
[](https://marimo.io)
|
|
43
|
+
[](https://mlflow.org)
|
|
44
|
+
[](https://docker.com)
|
|
45
|
+
[](LICENSE)
|
|
46
|
+
[](https://github.com/psf/black)
|
|
47
|
+
|
|
48
|
+
**Modern reactive ML development with Marimo notebooks and MLflow experiment tracking**
|
|
49
|
+
|
|
50
|
+
## Why Marimo Flow is Powerful ๐
|
|
51
|
+
|
|
52
|
+
**Marimo Flow** combines the best of reactive notebook development with robust ML experiment tracking:
|
|
53
|
+
|
|
54
|
+
- **๐ Reactive Development**: Marimo's dataflow graph ensures your notebooks are always consistent - change a parameter and watch your entire pipeline update automatically
|
|
55
|
+
- **๐ค AI-Enhanced Workflow**: Built-in GitHub Copilot support and AI assistants accelerate your ML development
|
|
56
|
+
- **๐ Seamless ML Pipeline**: MLflow integration tracks every experiment, model, and metric without breaking your flow
|
|
57
|
+
|
|
58
|
+
This combination eliminates the reproducibility issues of traditional notebooks while providing enterprise-grade experiment tracking.
|
|
59
|
+
|
|
60
|
+
## Features โจ
|
|
61
|
+
|
|
62
|
+
- **๐ Marimo Reactive Notebooks**: Git-friendly `.py` notebooks with automatic dependency tracking
|
|
63
|
+
- **๐ฌ MLflow Experiment Tracking**: Complete ML lifecycle management with model registry
|
|
64
|
+
- **๐ณ Docker Deployment**: One-command setup with docker-compose
|
|
65
|
+
- **๐พ SQLite Backend**: Lightweight, file-based storage for experiments
|
|
66
|
+
- **๐ฏ Interactive ML Development**: Real-time parameter tuning with instant feedback
|
|
67
|
+
|
|
68
|
+
## Quick Start ๐โโ๏ธ
|
|
69
|
+
|
|
70
|
+
### With Docker (Recommended)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Clone and start services
|
|
74
|
+
git clone <repository-url>
|
|
75
|
+
cd marimo-flow
|
|
76
|
+
docker-compose up -d
|
|
77
|
+
|
|
78
|
+
# Access services
|
|
79
|
+
# Marimo: http://localhost:2718
|
|
80
|
+
# MLflow: http://localhost:5000
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Local Development
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Install dependencies
|
|
87
|
+
uv sync
|
|
88
|
+
|
|
89
|
+
# Start MLflow server
|
|
90
|
+
uv run mlflow server --host 0.0.0.0 --port 5000 --backend-store-uri sqlite:///data/mlflow/db/mlflow.db --default-artifact-root ./data/mlflow/artifacts
|
|
91
|
+
|
|
92
|
+
# Start Marimo (in another terminal)
|
|
93
|
+
uv run marimo edit examples/
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Example Notebooks ๐
|
|
97
|
+
|
|
98
|
+
Explore our focused, production-ready notebooks:
|
|
99
|
+
|
|
100
|
+
### ๐ [Basic ML Workflow](examples/01_basic_ml_workflow.py)
|
|
101
|
+
- Simple classification with Random Forest
|
|
102
|
+
- Real-time parameter tuning
|
|
103
|
+
- MLflow experiment tracking
|
|
104
|
+
- Interactive visualizations
|
|
105
|
+
|
|
106
|
+
### ๐ [Model Comparison](examples/02_model_comparison.py)
|
|
107
|
+
- Compare multiple algorithms (RF, GB, LR, SVM)
|
|
108
|
+
- Cross-validation analysis
|
|
109
|
+
- Performance benchmarking
|
|
110
|
+
- Built-in datasets (Wine, Iris, Breast Cancer)
|
|
111
|
+
|
|
112
|
+
### ๐ [Data Exploration](examples/03_data_exploration.py)
|
|
113
|
+
- Interactive statistical analysis
|
|
114
|
+
- Correlation heatmaps
|
|
115
|
+
- Distribution visualizations
|
|
116
|
+
- PCA and t-SNE dimensionality reduction
|
|
117
|
+
|
|
118
|
+
Each notebook demonstrates reactive development principles and follows Marimo best practices for maintainable, reproducible ML code.
|
|
119
|
+
|
|
120
|
+
## Project Structure ๐
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
marimo-flow/
|
|
124
|
+
โโโ examples/ # Marimo notebooks
|
|
125
|
+
โ โโโ 01_basic_ml_workflow.py # Basic ML pipeline
|
|
126
|
+
โ โโโ 02_model_comparison.py # Multi-model comparison
|
|
127
|
+
โ โโโ 03_data_exploration.py # Interactive data analysis
|
|
128
|
+
โโโ data/
|
|
129
|
+
โ โโโ mlflow/ # MLflow storage
|
|
130
|
+
โ โโโ artifacts/ # Model artifacts
|
|
131
|
+
โ โโโ db/ # SQLite database
|
|
132
|
+
โ โโโ prompts/ # Prompt templates
|
|
133
|
+
โโโ docker-compose.yaml # Service orchestration
|
|
134
|
+
โโโ Dockerfile # Container definition
|
|
135
|
+
โโโ pyproject.toml # Dependencies
|
|
136
|
+
โโโ README.md # This file
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Configuration โ๏ธ
|
|
140
|
+
|
|
141
|
+
### Environment Variables
|
|
142
|
+
|
|
143
|
+
- `MLFLOW_TRACKING_URI`: MLflow server URL (default: `http://localhost:5000`)
|
|
144
|
+
- `MLFLOW_BACKEND_STORE_URI`: Database connection string
|
|
145
|
+
- `MLFLOW_DEFAULT_ARTIFACT_ROOT`: Artifact storage location
|
|
146
|
+
|
|
147
|
+
### Docker Services
|
|
148
|
+
|
|
149
|
+
- **Marimo**: Port 2718 - Interactive notebook environment
|
|
150
|
+
- **MLflow**: Port 5000 - Experiment tracking UI
|
|
151
|
+
|
|
152
|
+
## Pre-installed ML & Data Science Stack ๐ฆ
|
|
153
|
+
|
|
154
|
+
### Machine Learning & Scientific Computing
|
|
155
|
+
- **[scikit-learn](https://scikit-learn.org/)** `^1.5.2` - Machine learning library
|
|
156
|
+
- **[NumPy](https://numpy.org/)** `^2.1.3` - Numerical computing
|
|
157
|
+
- **[pandas](https://pandas.pydata.org/)** `^2.2.3` - Data manipulation and analysis
|
|
158
|
+
- **[PyArrow](https://arrow.apache.org/docs/python/)** `^18.0.0` - Columnar data processing
|
|
159
|
+
- **[SciPy](https://scipy.org/)** `^1.14.1` - Scientific computing
|
|
160
|
+
- **[matplotlib](https://matplotlib.org/)** `^3.9.2` - Plotting library
|
|
161
|
+
|
|
162
|
+
### High-Performance Data Processing
|
|
163
|
+
- **[Polars](https://pola.rs/)** `^1.12.0` - Lightning-fast DataFrame library
|
|
164
|
+
- **[DuckDB](https://duckdb.org/)** `^1.1.3` - In-process analytical database
|
|
165
|
+
- **[Altair](https://altair-viz.github.io/)** `^5.4.1` - Declarative statistical visualization
|
|
166
|
+
|
|
167
|
+
### AI & LLM Integration
|
|
168
|
+
- **[OpenAI](https://platform.openai.com/docs/)** `^1.54.4` - GPT API integration
|
|
169
|
+
- **[FastAPI](https://fastapi.tiangolo.com/)** `^0.115.4` - Modern web framework
|
|
170
|
+
- **[Pydantic](https://docs.pydantic.dev/)** `^2.10.2` - Data validation
|
|
171
|
+
|
|
172
|
+
### Database & Storage
|
|
173
|
+
- **[SQLAlchemy](https://www.sqlalchemy.org/)** `^2.0.36` - SQL toolkit and ORM
|
|
174
|
+
- **[Alembic](https://alembic.sqlalchemy.org/)** `^1.14.0` - Database migrations
|
|
175
|
+
- **[SQLGlot](https://sqlglot.com/)** `^25.30.2` - SQL parser and transpiler
|
|
176
|
+
|
|
177
|
+
### Web & API
|
|
178
|
+
- **[Starlette](https://www.starlette.io/)** `^0.41.2` - ASGI framework
|
|
179
|
+
- **[Uvicorn](https://www.uvicorn.org/)** `^0.32.0` - ASGI server
|
|
180
|
+
- **[httpx](https://www.python-httpx.org/)** `^0.27.2` - HTTP client
|
|
181
|
+
|
|
182
|
+
### Development Tools
|
|
183
|
+
- **[Black](https://black.readthedocs.io/)** `^24.10.0` - Code formatter
|
|
184
|
+
- **[Ruff](https://docs.astral.sh/ruff/)** `^0.7.4` - Fast Python linter
|
|
185
|
+
- **[pytest](https://docs.pytest.org/)** `^8.3.3` - Testing framework
|
|
186
|
+
- **[MyPy](https://mypy.readthedocs.io/)** `^1.13.0` - Static type checker
|
|
187
|
+
|
|
188
|
+
## API Endpoints ๐
|
|
189
|
+
|
|
190
|
+
### MLflow REST API
|
|
191
|
+
- **Experiments**: `GET /api/2.0/mlflow/experiments/list`
|
|
192
|
+
- **Runs**: `GET /api/2.0/mlflow/runs/search`
|
|
193
|
+
- **Models**: `GET /api/2.0/mlflow/registered-models/list`
|
|
194
|
+
|
|
195
|
+
### Marimo Server
|
|
196
|
+
- **Notebooks**: `GET /` - File browser and editor
|
|
197
|
+
- **Apps**: `GET /run/<notebook>` - Run notebook as web app
|
|
198
|
+
|
|
199
|
+
## Contributing ๐ค
|
|
200
|
+
|
|
201
|
+
1. Fork the repository
|
|
202
|
+
2. Create a feature branch: `git checkout -b feature-name`
|
|
203
|
+
3. Make your changes following the coding standards
|
|
204
|
+
4. Test your changes: `uv run pytest`
|
|
205
|
+
5. Submit a pull request
|
|
206
|
+
|
|
207
|
+
## License ๐
|
|
208
|
+
|
|
209
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
**Built with โค๏ธ using Marimo and MLflow**
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Marimo Flow ๐
|
|
2
|
+
|
|
3
|
+
[](https://python.org)
|
|
4
|
+
[](https://marimo.io)
|
|
5
|
+
[](https://mlflow.org)
|
|
6
|
+
[](https://docker.com)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://github.com/psf/black)
|
|
9
|
+
|
|
10
|
+
**Modern reactive ML development with Marimo notebooks and MLflow experiment tracking**
|
|
11
|
+
|
|
12
|
+
## Why Marimo Flow is Powerful ๐
|
|
13
|
+
|
|
14
|
+
**Marimo Flow** combines the best of reactive notebook development with robust ML experiment tracking:
|
|
15
|
+
|
|
16
|
+
- **๐ Reactive Development**: Marimo's dataflow graph ensures your notebooks are always consistent - change a parameter and watch your entire pipeline update automatically
|
|
17
|
+
- **๐ค AI-Enhanced Workflow**: Built-in GitHub Copilot support and AI assistants accelerate your ML development
|
|
18
|
+
- **๐ Seamless ML Pipeline**: MLflow integration tracks every experiment, model, and metric without breaking your flow
|
|
19
|
+
|
|
20
|
+
This combination eliminates the reproducibility issues of traditional notebooks while providing enterprise-grade experiment tracking.
|
|
21
|
+
|
|
22
|
+
## Features โจ
|
|
23
|
+
|
|
24
|
+
- **๐ Marimo Reactive Notebooks**: Git-friendly `.py` notebooks with automatic dependency tracking
|
|
25
|
+
- **๐ฌ MLflow Experiment Tracking**: Complete ML lifecycle management with model registry
|
|
26
|
+
- **๐ณ Docker Deployment**: One-command setup with docker-compose
|
|
27
|
+
- **๐พ SQLite Backend**: Lightweight, file-based storage for experiments
|
|
28
|
+
- **๐ฏ Interactive ML Development**: Real-time parameter tuning with instant feedback
|
|
29
|
+
|
|
30
|
+
## Quick Start ๐โโ๏ธ
|
|
31
|
+
|
|
32
|
+
### With Docker (Recommended)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Clone and start services
|
|
36
|
+
git clone <repository-url>
|
|
37
|
+
cd marimo-flow
|
|
38
|
+
docker-compose up -d
|
|
39
|
+
|
|
40
|
+
# Access services
|
|
41
|
+
# Marimo: http://localhost:2718
|
|
42
|
+
# MLflow: http://localhost:5000
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Local Development
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Install dependencies
|
|
49
|
+
uv sync
|
|
50
|
+
|
|
51
|
+
# Start MLflow server
|
|
52
|
+
uv run mlflow server --host 0.0.0.0 --port 5000 --backend-store-uri sqlite:///data/mlflow/db/mlflow.db --default-artifact-root ./data/mlflow/artifacts
|
|
53
|
+
|
|
54
|
+
# Start Marimo (in another terminal)
|
|
55
|
+
uv run marimo edit examples/
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Example Notebooks ๐
|
|
59
|
+
|
|
60
|
+
Explore our focused, production-ready notebooks:
|
|
61
|
+
|
|
62
|
+
### ๐ [Basic ML Workflow](examples/01_basic_ml_workflow.py)
|
|
63
|
+
- Simple classification with Random Forest
|
|
64
|
+
- Real-time parameter tuning
|
|
65
|
+
- MLflow experiment tracking
|
|
66
|
+
- Interactive visualizations
|
|
67
|
+
|
|
68
|
+
### ๐ [Model Comparison](examples/02_model_comparison.py)
|
|
69
|
+
- Compare multiple algorithms (RF, GB, LR, SVM)
|
|
70
|
+
- Cross-validation analysis
|
|
71
|
+
- Performance benchmarking
|
|
72
|
+
- Built-in datasets (Wine, Iris, Breast Cancer)
|
|
73
|
+
|
|
74
|
+
### ๐ [Data Exploration](examples/03_data_exploration.py)
|
|
75
|
+
- Interactive statistical analysis
|
|
76
|
+
- Correlation heatmaps
|
|
77
|
+
- Distribution visualizations
|
|
78
|
+
- PCA and t-SNE dimensionality reduction
|
|
79
|
+
|
|
80
|
+
Each notebook demonstrates reactive development principles and follows Marimo best practices for maintainable, reproducible ML code.
|
|
81
|
+
|
|
82
|
+
## Project Structure ๐
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
marimo-flow/
|
|
86
|
+
โโโ examples/ # Marimo notebooks
|
|
87
|
+
โ โโโ 01_basic_ml_workflow.py # Basic ML pipeline
|
|
88
|
+
โ โโโ 02_model_comparison.py # Multi-model comparison
|
|
89
|
+
โ โโโ 03_data_exploration.py # Interactive data analysis
|
|
90
|
+
โโโ data/
|
|
91
|
+
โ โโโ mlflow/ # MLflow storage
|
|
92
|
+
โ โโโ artifacts/ # Model artifacts
|
|
93
|
+
โ โโโ db/ # SQLite database
|
|
94
|
+
โ โโโ prompts/ # Prompt templates
|
|
95
|
+
โโโ docker-compose.yaml # Service orchestration
|
|
96
|
+
โโโ Dockerfile # Container definition
|
|
97
|
+
โโโ pyproject.toml # Dependencies
|
|
98
|
+
โโโ README.md # This file
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Configuration โ๏ธ
|
|
102
|
+
|
|
103
|
+
### Environment Variables
|
|
104
|
+
|
|
105
|
+
- `MLFLOW_TRACKING_URI`: MLflow server URL (default: `http://localhost:5000`)
|
|
106
|
+
- `MLFLOW_BACKEND_STORE_URI`: Database connection string
|
|
107
|
+
- `MLFLOW_DEFAULT_ARTIFACT_ROOT`: Artifact storage location
|
|
108
|
+
|
|
109
|
+
### Docker Services
|
|
110
|
+
|
|
111
|
+
- **Marimo**: Port 2718 - Interactive notebook environment
|
|
112
|
+
- **MLflow**: Port 5000 - Experiment tracking UI
|
|
113
|
+
|
|
114
|
+
## Pre-installed ML & Data Science Stack ๐ฆ
|
|
115
|
+
|
|
116
|
+
### Machine Learning & Scientific Computing
|
|
117
|
+
- **[scikit-learn](https://scikit-learn.org/)** `^1.5.2` - Machine learning library
|
|
118
|
+
- **[NumPy](https://numpy.org/)** `^2.1.3` - Numerical computing
|
|
119
|
+
- **[pandas](https://pandas.pydata.org/)** `^2.2.3` - Data manipulation and analysis
|
|
120
|
+
- **[PyArrow](https://arrow.apache.org/docs/python/)** `^18.0.0` - Columnar data processing
|
|
121
|
+
- **[SciPy](https://scipy.org/)** `^1.14.1` - Scientific computing
|
|
122
|
+
- **[matplotlib](https://matplotlib.org/)** `^3.9.2` - Plotting library
|
|
123
|
+
|
|
124
|
+
### High-Performance Data Processing
|
|
125
|
+
- **[Polars](https://pola.rs/)** `^1.12.0` - Lightning-fast DataFrame library
|
|
126
|
+
- **[DuckDB](https://duckdb.org/)** `^1.1.3` - In-process analytical database
|
|
127
|
+
- **[Altair](https://altair-viz.github.io/)** `^5.4.1` - Declarative statistical visualization
|
|
128
|
+
|
|
129
|
+
### AI & LLM Integration
|
|
130
|
+
- **[OpenAI](https://platform.openai.com/docs/)** `^1.54.4` - GPT API integration
|
|
131
|
+
- **[FastAPI](https://fastapi.tiangolo.com/)** `^0.115.4` - Modern web framework
|
|
132
|
+
- **[Pydantic](https://docs.pydantic.dev/)** `^2.10.2` - Data validation
|
|
133
|
+
|
|
134
|
+
### Database & Storage
|
|
135
|
+
- **[SQLAlchemy](https://www.sqlalchemy.org/)** `^2.0.36` - SQL toolkit and ORM
|
|
136
|
+
- **[Alembic](https://alembic.sqlalchemy.org/)** `^1.14.0` - Database migrations
|
|
137
|
+
- **[SQLGlot](https://sqlglot.com/)** `^25.30.2` - SQL parser and transpiler
|
|
138
|
+
|
|
139
|
+
### Web & API
|
|
140
|
+
- **[Starlette](https://www.starlette.io/)** `^0.41.2` - ASGI framework
|
|
141
|
+
- **[Uvicorn](https://www.uvicorn.org/)** `^0.32.0` - ASGI server
|
|
142
|
+
- **[httpx](https://www.python-httpx.org/)** `^0.27.2` - HTTP client
|
|
143
|
+
|
|
144
|
+
### Development Tools
|
|
145
|
+
- **[Black](https://black.readthedocs.io/)** `^24.10.0` - Code formatter
|
|
146
|
+
- **[Ruff](https://docs.astral.sh/ruff/)** `^0.7.4` - Fast Python linter
|
|
147
|
+
- **[pytest](https://docs.pytest.org/)** `^8.3.3` - Testing framework
|
|
148
|
+
- **[MyPy](https://mypy.readthedocs.io/)** `^1.13.0` - Static type checker
|
|
149
|
+
|
|
150
|
+
## API Endpoints ๐
|
|
151
|
+
|
|
152
|
+
### MLflow REST API
|
|
153
|
+
- **Experiments**: `GET /api/2.0/mlflow/experiments/list`
|
|
154
|
+
- **Runs**: `GET /api/2.0/mlflow/runs/search`
|
|
155
|
+
- **Models**: `GET /api/2.0/mlflow/registered-models/list`
|
|
156
|
+
|
|
157
|
+
### Marimo Server
|
|
158
|
+
- **Notebooks**: `GET /` - File browser and editor
|
|
159
|
+
- **Apps**: `GET /run/<notebook>` - Run notebook as web app
|
|
160
|
+
|
|
161
|
+
## Contributing ๐ค
|
|
162
|
+
|
|
163
|
+
1. Fork the repository
|
|
164
|
+
2. Create a feature branch: `git checkout -b feature-name`
|
|
165
|
+
3. Make your changes following the coding standards
|
|
166
|
+
4. Test your changes: `uv run pytest`
|
|
167
|
+
5. Submit a pull request
|
|
168
|
+
|
|
169
|
+
## License ๐
|
|
170
|
+
|
|
171
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
**Built with โค๏ธ using Marimo and MLflow**
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: marimo-flow
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Marimo Flow - Interactive ML notebooks with MLflow integration
|
|
5
|
+
Author-email: Bjรถrn Bethge <bjorn.bethge@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/bjoernbethge/marimo-flow
|
|
8
|
+
Project-URL: Documentation, https://marimo-flow.readthedocs.io
|
|
9
|
+
Project-URL: Repository, https://github.com/bjoernbethge/marimo-flow
|
|
10
|
+
Project-URL: Issues, https://github.com/bjoernbethge/marimo-flow/issues
|
|
11
|
+
Keywords: marimo,mlflow,machine-learning,notebooks,interactive
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: marimo[lsp,recommended,sql]>=0.13.15
|
|
26
|
+
Requires-Dist: mlflow>=2.22.1
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: pytest>=7.4.0; extra == "dev"
|
|
29
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
30
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
31
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
32
|
+
Requires-Dist: mypy>=1.5.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
|
|
34
|
+
Provides-Extra: docs
|
|
35
|
+
Requires-Dist: sphinx>=7.0.0; extra == "docs"
|
|
36
|
+
Requires-Dist: sphinx-rtd-theme>=1.3.0; extra == "docs"
|
|
37
|
+
Dynamic: license-file
|
|
38
|
+
|
|
39
|
+
# Marimo Flow ๐
|
|
40
|
+
|
|
41
|
+
[](https://python.org)
|
|
42
|
+
[](https://marimo.io)
|
|
43
|
+
[](https://mlflow.org)
|
|
44
|
+
[](https://docker.com)
|
|
45
|
+
[](LICENSE)
|
|
46
|
+
[](https://github.com/psf/black)
|
|
47
|
+
|
|
48
|
+
**Modern reactive ML development with Marimo notebooks and MLflow experiment tracking**
|
|
49
|
+
|
|
50
|
+
## Why Marimo Flow is Powerful ๐
|
|
51
|
+
|
|
52
|
+
**Marimo Flow** combines the best of reactive notebook development with robust ML experiment tracking:
|
|
53
|
+
|
|
54
|
+
- **๐ Reactive Development**: Marimo's dataflow graph ensures your notebooks are always consistent - change a parameter and watch your entire pipeline update automatically
|
|
55
|
+
- **๐ค AI-Enhanced Workflow**: Built-in GitHub Copilot support and AI assistants accelerate your ML development
|
|
56
|
+
- **๐ Seamless ML Pipeline**: MLflow integration tracks every experiment, model, and metric without breaking your flow
|
|
57
|
+
|
|
58
|
+
This combination eliminates the reproducibility issues of traditional notebooks while providing enterprise-grade experiment tracking.
|
|
59
|
+
|
|
60
|
+
## Features โจ
|
|
61
|
+
|
|
62
|
+
- **๐ Marimo Reactive Notebooks**: Git-friendly `.py` notebooks with automatic dependency tracking
|
|
63
|
+
- **๐ฌ MLflow Experiment Tracking**: Complete ML lifecycle management with model registry
|
|
64
|
+
- **๐ณ Docker Deployment**: One-command setup with docker-compose
|
|
65
|
+
- **๐พ SQLite Backend**: Lightweight, file-based storage for experiments
|
|
66
|
+
- **๐ฏ Interactive ML Development**: Real-time parameter tuning with instant feedback
|
|
67
|
+
|
|
68
|
+
## Quick Start ๐โโ๏ธ
|
|
69
|
+
|
|
70
|
+
### With Docker (Recommended)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Clone and start services
|
|
74
|
+
git clone <repository-url>
|
|
75
|
+
cd marimo-flow
|
|
76
|
+
docker-compose up -d
|
|
77
|
+
|
|
78
|
+
# Access services
|
|
79
|
+
# Marimo: http://localhost:2718
|
|
80
|
+
# MLflow: http://localhost:5000
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Local Development
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Install dependencies
|
|
87
|
+
uv sync
|
|
88
|
+
|
|
89
|
+
# Start MLflow server
|
|
90
|
+
uv run mlflow server --host 0.0.0.0 --port 5000 --backend-store-uri sqlite:///data/mlflow/db/mlflow.db --default-artifact-root ./data/mlflow/artifacts
|
|
91
|
+
|
|
92
|
+
# Start Marimo (in another terminal)
|
|
93
|
+
uv run marimo edit examples/
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Example Notebooks ๐
|
|
97
|
+
|
|
98
|
+
Explore our focused, production-ready notebooks:
|
|
99
|
+
|
|
100
|
+
### ๐ [Basic ML Workflow](examples/01_basic_ml_workflow.py)
|
|
101
|
+
- Simple classification with Random Forest
|
|
102
|
+
- Real-time parameter tuning
|
|
103
|
+
- MLflow experiment tracking
|
|
104
|
+
- Interactive visualizations
|
|
105
|
+
|
|
106
|
+
### ๐ [Model Comparison](examples/02_model_comparison.py)
|
|
107
|
+
- Compare multiple algorithms (RF, GB, LR, SVM)
|
|
108
|
+
- Cross-validation analysis
|
|
109
|
+
- Performance benchmarking
|
|
110
|
+
- Built-in datasets (Wine, Iris, Breast Cancer)
|
|
111
|
+
|
|
112
|
+
### ๐ [Data Exploration](examples/03_data_exploration.py)
|
|
113
|
+
- Interactive statistical analysis
|
|
114
|
+
- Correlation heatmaps
|
|
115
|
+
- Distribution visualizations
|
|
116
|
+
- PCA and t-SNE dimensionality reduction
|
|
117
|
+
|
|
118
|
+
Each notebook demonstrates reactive development principles and follows Marimo best practices for maintainable, reproducible ML code.
|
|
119
|
+
|
|
120
|
+
## Project Structure ๐
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
marimo-flow/
|
|
124
|
+
โโโ examples/ # Marimo notebooks
|
|
125
|
+
โ โโโ 01_basic_ml_workflow.py # Basic ML pipeline
|
|
126
|
+
โ โโโ 02_model_comparison.py # Multi-model comparison
|
|
127
|
+
โ โโโ 03_data_exploration.py # Interactive data analysis
|
|
128
|
+
โโโ data/
|
|
129
|
+
โ โโโ mlflow/ # MLflow storage
|
|
130
|
+
โ โโโ artifacts/ # Model artifacts
|
|
131
|
+
โ โโโ db/ # SQLite database
|
|
132
|
+
โ โโโ prompts/ # Prompt templates
|
|
133
|
+
โโโ docker-compose.yaml # Service orchestration
|
|
134
|
+
โโโ Dockerfile # Container definition
|
|
135
|
+
โโโ pyproject.toml # Dependencies
|
|
136
|
+
โโโ README.md # This file
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Configuration โ๏ธ
|
|
140
|
+
|
|
141
|
+
### Environment Variables
|
|
142
|
+
|
|
143
|
+
- `MLFLOW_TRACKING_URI`: MLflow server URL (default: `http://localhost:5000`)
|
|
144
|
+
- `MLFLOW_BACKEND_STORE_URI`: Database connection string
|
|
145
|
+
- `MLFLOW_DEFAULT_ARTIFACT_ROOT`: Artifact storage location
|
|
146
|
+
|
|
147
|
+
### Docker Services
|
|
148
|
+
|
|
149
|
+
- **Marimo**: Port 2718 - Interactive notebook environment
|
|
150
|
+
- **MLflow**: Port 5000 - Experiment tracking UI
|
|
151
|
+
|
|
152
|
+
## Pre-installed ML & Data Science Stack ๐ฆ
|
|
153
|
+
|
|
154
|
+
### Machine Learning & Scientific Computing
|
|
155
|
+
- **[scikit-learn](https://scikit-learn.org/)** `^1.5.2` - Machine learning library
|
|
156
|
+
- **[NumPy](https://numpy.org/)** `^2.1.3` - Numerical computing
|
|
157
|
+
- **[pandas](https://pandas.pydata.org/)** `^2.2.3` - Data manipulation and analysis
|
|
158
|
+
- **[PyArrow](https://arrow.apache.org/docs/python/)** `^18.0.0` - Columnar data processing
|
|
159
|
+
- **[SciPy](https://scipy.org/)** `^1.14.1` - Scientific computing
|
|
160
|
+
- **[matplotlib](https://matplotlib.org/)** `^3.9.2` - Plotting library
|
|
161
|
+
|
|
162
|
+
### High-Performance Data Processing
|
|
163
|
+
- **[Polars](https://pola.rs/)** `^1.12.0` - Lightning-fast DataFrame library
|
|
164
|
+
- **[DuckDB](https://duckdb.org/)** `^1.1.3` - In-process analytical database
|
|
165
|
+
- **[Altair](https://altair-viz.github.io/)** `^5.4.1` - Declarative statistical visualization
|
|
166
|
+
|
|
167
|
+
### AI & LLM Integration
|
|
168
|
+
- **[OpenAI](https://platform.openai.com/docs/)** `^1.54.4` - GPT API integration
|
|
169
|
+
- **[FastAPI](https://fastapi.tiangolo.com/)** `^0.115.4` - Modern web framework
|
|
170
|
+
- **[Pydantic](https://docs.pydantic.dev/)** `^2.10.2` - Data validation
|
|
171
|
+
|
|
172
|
+
### Database & Storage
|
|
173
|
+
- **[SQLAlchemy](https://www.sqlalchemy.org/)** `^2.0.36` - SQL toolkit and ORM
|
|
174
|
+
- **[Alembic](https://alembic.sqlalchemy.org/)** `^1.14.0` - Database migrations
|
|
175
|
+
- **[SQLGlot](https://sqlglot.com/)** `^25.30.2` - SQL parser and transpiler
|
|
176
|
+
|
|
177
|
+
### Web & API
|
|
178
|
+
- **[Starlette](https://www.starlette.io/)** `^0.41.2` - ASGI framework
|
|
179
|
+
- **[Uvicorn](https://www.uvicorn.org/)** `^0.32.0` - ASGI server
|
|
180
|
+
- **[httpx](https://www.python-httpx.org/)** `^0.27.2` - HTTP client
|
|
181
|
+
|
|
182
|
+
### Development Tools
|
|
183
|
+
- **[Black](https://black.readthedocs.io/)** `^24.10.0` - Code formatter
|
|
184
|
+
- **[Ruff](https://docs.astral.sh/ruff/)** `^0.7.4` - Fast Python linter
|
|
185
|
+
- **[pytest](https://docs.pytest.org/)** `^8.3.3` - Testing framework
|
|
186
|
+
- **[MyPy](https://mypy.readthedocs.io/)** `^1.13.0` - Static type checker
|
|
187
|
+
|
|
188
|
+
## API Endpoints ๐
|
|
189
|
+
|
|
190
|
+
### MLflow REST API
|
|
191
|
+
- **Experiments**: `GET /api/2.0/mlflow/experiments/list`
|
|
192
|
+
- **Runs**: `GET /api/2.0/mlflow/runs/search`
|
|
193
|
+
- **Models**: `GET /api/2.0/mlflow/registered-models/list`
|
|
194
|
+
|
|
195
|
+
### Marimo Server
|
|
196
|
+
- **Notebooks**: `GET /` - File browser and editor
|
|
197
|
+
- **Apps**: `GET /run/<notebook>` - Run notebook as web app
|
|
198
|
+
|
|
199
|
+
## Contributing ๐ค
|
|
200
|
+
|
|
201
|
+
1. Fork the repository
|
|
202
|
+
2. Create a feature branch: `git checkout -b feature-name`
|
|
203
|
+
3. Make your changes following the coding standards
|
|
204
|
+
4. Test your changes: `uv run pytest`
|
|
205
|
+
5. Submit a pull request
|
|
206
|
+
|
|
207
|
+
## License ๐
|
|
208
|
+
|
|
209
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
**Built with โค๏ธ using Marimo and MLflow**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77.0.3", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "marimo-flow"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Marimo Flow - Interactive ML notebooks with MLflow integration"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "Bjรถrn Bethge", email = "bjorn.bethge@gmail.com"},
|
|
14
|
+
]
|
|
15
|
+
keywords = ["marimo", "mlflow", "machine-learning", "notebooks", "interactive"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 3 - Alpha",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"Intended Audience :: Science/Research",
|
|
20
|
+
"License :: OSI Approved :: MIT License",
|
|
21
|
+
"Operating System :: OS Independent",
|
|
22
|
+
"Programming Language :: Python :: 3",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
26
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
27
|
+
]
|
|
28
|
+
dependencies = [
|
|
29
|
+
"marimo[lsp,recommended,sql]>=0.13.15",
|
|
30
|
+
"mlflow>=2.22.1",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
[project.optional-dependencies]
|
|
34
|
+
dev = [
|
|
35
|
+
"pytest>=7.4.0",
|
|
36
|
+
"pytest-cov>=4.1.0",
|
|
37
|
+
"black>=23.0.0",
|
|
38
|
+
"ruff>=0.1.0",
|
|
39
|
+
"mypy>=1.5.0",
|
|
40
|
+
"pre-commit>=3.0.0",
|
|
41
|
+
]
|
|
42
|
+
docs = [
|
|
43
|
+
"sphinx>=7.0.0",
|
|
44
|
+
"sphinx-rtd-theme>=1.3.0",
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
[project.urls]
|
|
48
|
+
Homepage = "https://github.com/bjoernbethge/marimo-flow"
|
|
49
|
+
Documentation = "https://marimo-flow.readthedocs.io"
|
|
50
|
+
Repository = "https://github.com/bjoernbethge/marimo-flow"
|
|
51
|
+
Issues = "https://github.com/bjoernbethge/marimo-flow/issues"
|
|
52
|
+
|
|
53
|
+
[tool.setuptools]
|
|
54
|
+
include-package-data = true
|
|
55
|
+
zip-safe = false
|
|
56
|
+
|
|
57
|
+
[tool.setuptools.packages.find]
|
|
58
|
+
where = ["."]
|
|
59
|
+
include = ["marimo_flow*"]
|
|
60
|
+
exclude = ["tests*", "docs*", "examples*"]
|
|
61
|
+
|
|
62
|
+
[tool.setuptools.package-data]
|
|
63
|
+
marimo_flow = ["py.typed", "*.yaml", "*.yml", "*.json"]
|
|
64
|
+
|
|
65
|
+
[tool.uv]
|
|
66
|
+
link-mode = "copy"
|
|
67
|
+
|
|
68
|
+
[tool.black]
|
|
69
|
+
line-length = 88
|
|
70
|
+
target-version = ["py311"]
|
|
71
|
+
include = '\.pyi?$'
|
|
72
|
+
extend-exclude = '''
|
|
73
|
+
/(
|
|
74
|
+
# directories
|
|
75
|
+
\.eggs
|
|
76
|
+
| \.git
|
|
77
|
+
| \.hg
|
|
78
|
+
| \.mypy_cache
|
|
79
|
+
| \.tox
|
|
80
|
+
| \.venv
|
|
81
|
+
| build
|
|
82
|
+
| dist
|
|
83
|
+
)/
|
|
84
|
+
'''
|
|
85
|
+
|
|
86
|
+
[tool.ruff]
|
|
87
|
+
target-version = "py311"
|
|
88
|
+
line-length = 88
|
|
89
|
+
select = [
|
|
90
|
+
"E", # pycodestyle errors
|
|
91
|
+
"W", # pycodestyle warnings
|
|
92
|
+
"F", # pyflakes
|
|
93
|
+
"I", # isort
|
|
94
|
+
"B", # flake8-bugbear
|
|
95
|
+
"C4", # flake8-comprehensions
|
|
96
|
+
"UP", # pyupgrade
|
|
97
|
+
]
|
|
98
|
+
ignore = [
|
|
99
|
+
"E501", # line too long, handled by black
|
|
100
|
+
"B008", # do not perform function calls in argument defaults
|
|
101
|
+
"C901", # too complex
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
[tool.ruff.per-file-ignores]
|
|
105
|
+
"__init__.py" = ["F401"]
|
|
106
|
+
|
|
107
|
+
[tool.mypy]
|
|
108
|
+
python_version = "3.11"
|
|
109
|
+
check_untyped_defs = true
|
|
110
|
+
disallow_any_generics = true
|
|
111
|
+
disallow_incomplete_defs = true
|
|
112
|
+
disallow_untyped_defs = true
|
|
113
|
+
no_implicit_optional = true
|
|
114
|
+
warn_redundant_casts = true
|
|
115
|
+
warn_unused_ignores = true
|
|
116
|
+
|
|
117
|
+
[tool.pytest.ini_options]
|
|
118
|
+
testpaths = ["tests"]
|
|
119
|
+
python_files = ["test_*.py", "*_test.py"]
|
|
120
|
+
python_classes = ["Test*"]
|
|
121
|
+
python_functions = ["test_*"]
|
|
122
|
+
addopts = [
|
|
123
|
+
"--strict-markers",
|
|
124
|
+
"--strict-config",
|
|
125
|
+
"--cov=marimo_flow",
|
|
126
|
+
"--cov-report=term-missing",
|
|
127
|
+
"--cov-report=html",
|
|
128
|
+
"--cov-report=xml",
|
|
129
|
+
]
|
|
130
|
+
markers = [
|
|
131
|
+
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
|
|
132
|
+
"integration: marks tests as integration tests",
|
|
133
|
+
]
|
|
134
|
+
|
|
135
|
+
[tool.coverage.run]
|
|
136
|
+
source = ["marimo_flow"]
|
|
137
|
+
omit = [
|
|
138
|
+
"*/tests/*",
|
|
139
|
+
"*/test_*",
|
|
140
|
+
"*/__pycache__/*",
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
[tool.coverage.report]
|
|
144
|
+
exclude_lines = [
|
|
145
|
+
"pragma: no cover",
|
|
146
|
+
"def __repr__",
|
|
147
|
+
"if self.debug:",
|
|
148
|
+
"if settings.DEBUG",
|
|
149
|
+
"raise AssertionError",
|
|
150
|
+
"raise NotImplementedError",
|
|
151
|
+
"if 0:",
|
|
152
|
+
"if __name__ == .__main__.:",
|
|
153
|
+
"class .*\\bProtocol\\):",
|
|
154
|
+
"@(abc\\.)?abstractmethod",
|
|
155
|
+
]
|