Etash Guha Claude Opus 4.5 commited on
Commit
059012c
·
1 Parent(s): 6e295e3

Add UMAP PaperAgent MCP server

Browse files

- MCP server with 4 tools: umap_reduce_dimensions, umap_parameter_sweep,
umap_compare_metrics, umap_with_labels
- Docker deployment for HuggingFace Spaces
- Sample data (iris, digits datasets)
- Based on McInnes et al. (2018) arXiv:1802.03426

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Dockerfile ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.10-slim
2
+
3
+ WORKDIR /app
4
+
5
+ # Install system dependencies
6
+ RUN apt-get update && apt-get install -y \
7
+ build-essential \
8
+ && rm -rf /var/lib/apt/lists/*
9
+
10
+ # Copy requirements and install
11
+ COPY mcp/requirements.txt .
12
+ RUN pip install --no-cache-dir -r requirements.txt
13
+ RUN pip install --no-cache-dir uvicorn starlette
14
+
15
+ # Copy application code
16
+ COPY . .
17
+
18
+ # Create data directories
19
+ RUN mkdir -p /data/upload /data/tmp_outputs
20
+
21
+ # Set environment variables
22
+ ENV UMAP_OUTPUT_DIR=/data/tmp_outputs
23
+ ENV UMAP_INPUT_DIR=/data/upload
24
+
25
+ # Expose port
26
+ EXPOSE 7860
27
+
28
+ # Run the application
29
+ CMD ["python", "app.py"]
README.md CHANGED
@@ -1,12 +1,38 @@
1
  ---
2
- title: Umap Agent
3
- emoji: 🐠
4
- colorFrom: purple
5
- colorTo: green
6
- sdk: gradio
7
- sdk_version: 6.5.0
8
- app_file: app.py
9
- pinned: false
10
  ---
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: UMAP PaperAgent
3
+ emoji: 🗺️
4
+ colorFrom: blue
5
+ colorTo: purple
6
+ sdk: docker
7
+ app_port: 7860
 
 
8
  ---
9
 
10
+ # UMAP PaperAgent
11
+
12
+ A PaperAgent MCP server for the UMAP dimensionality reduction algorithm.
13
+
14
+ ## Paper Reference
15
+
16
+ McInnes, L., Healy, J., & Melville, J. (2018). **UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction**. [arXiv:1802.03426](https://arxiv.org/abs/1802.03426)
17
+
18
+ ## Available MCP Tools
19
+
20
+ | Tool | Description |
21
+ |------|-------------|
22
+ | `umap_reduce_dimensions` | Basic UMAP dimensionality reduction |
23
+ | `umap_parameter_sweep` | Grid of UMAP results with different parameters |
24
+ | `umap_compare_metrics` | Compare distance metrics |
25
+ | `umap_with_labels` | UMAP with colored class labels |
26
+
27
+ ## Usage with Claude Code
28
+
29
+ ```bash
30
+ claude mcp add --transport http umap "https://EtashGuha-umap-agent.hf.space/mcp"
31
+ ```
32
+
33
+ ## API Endpoints
34
+
35
+ - `GET /` - Server info
36
+ - `POST /upload` - Upload data files
37
+ - `GET /outputs/{filename}` - Download results
38
+ - `POST /mcp` - MCP protocol endpoint
app.py ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ UMAP PaperAgent - HuggingFace Spaces Deployment
3
+
4
+ Based on: McInnes, L., Healy, J., & Melville, J. (2018).
5
+ UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction.
6
+ arXiv:1802.03426
7
+ """
8
+
9
+ import os
10
+ import uuid
11
+ from pathlib import Path
12
+ from starlette.applications import Starlette
13
+ from starlette.routing import Route, Mount
14
+ from starlette.responses import JSONResponse, FileResponse
15
+ from starlette.requests import Request
16
+ from fastmcp.server.http import create_sse_app
17
+
18
+ # Import the MCP server
19
+ import sys
20
+ sys.path.insert(0, str(Path(__file__).parent / "mcp"))
21
+ from umap_mcp import mcp
22
+
23
+ # Setup directories
24
+ UPLOAD_DIR = Path("/data/upload")
25
+ OUTPUT_DIR = Path("/data/tmp_outputs")
26
+ UPLOAD_DIR.mkdir(parents=True, exist_ok=True)
27
+ OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
28
+
29
+ # Update MCP paths
30
+ os.environ["UMAP_OUTPUT_DIR"] = str(OUTPUT_DIR)
31
+ os.environ["UMAP_INPUT_DIR"] = str(UPLOAD_DIR)
32
+
33
+
34
+ async def root(request: Request):
35
+ """Root endpoint with API info."""
36
+ return JSONResponse({
37
+ "name": "UMAP PaperAgent",
38
+ "paper": "McInnes et al. (2018) - UMAP: Uniform Manifold Approximation and Projection",
39
+ "arxiv": "https://arxiv.org/abs/1802.03426",
40
+ "endpoints": {
41
+ "/mcp": "MCP protocol endpoint",
42
+ "/upload": "Upload data files",
43
+ "/outputs/{filename}": "Download output files"
44
+ },
45
+ "tools": [
46
+ "umap_reduce_dimensions",
47
+ "umap_parameter_sweep",
48
+ "umap_compare_metrics",
49
+ "umap_with_labels"
50
+ ]
51
+ })
52
+
53
+
54
+ async def upload_file(request: Request):
55
+ """Upload a file to the server."""
56
+ form = await request.form()
57
+ file = form.get("file")
58
+ if not file:
59
+ return JSONResponse({"error": "No file provided"}, status_code=400)
60
+
61
+ file_id = uuid.uuid4().hex
62
+ ext = Path(file.filename).suffix if file.filename else ".txt"
63
+ save_path = UPLOAD_DIR / f"{file_id}{ext}"
64
+
65
+ content = await file.read()
66
+ with open(save_path, "wb") as f:
67
+ f.write(content)
68
+
69
+ return JSONResponse({"path": str(save_path)})
70
+
71
+
72
+ async def get_output(request: Request):
73
+ """Download an output file."""
74
+ filename = request.path_params["filename"]
75
+ file_path = OUTPUT_DIR / filename
76
+ if file_path.exists():
77
+ return FileResponse(file_path)
78
+ return JSONResponse({"error": "File not found"}, status_code=404)
79
+
80
+
81
+ # Custom routes
82
+ custom_routes = [
83
+ Route("/", root),
84
+ Route("/upload", upload_file, methods=["POST"]),
85
+ Route("/outputs/{filename}", get_output),
86
+ ]
87
+
88
+ # Create the MCP SSE app
89
+ app = create_sse_app(
90
+ mcp,
91
+ message_path="/mcp",
92
+ sse_path="/mcp/sse",
93
+ routes=custom_routes
94
+ )
95
+
96
+
97
+ if __name__ == "__main__":
98
+ import uvicorn
99
+ uvicorn.run(app, host="0.0.0.0", port=7860)
mcp/requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ fastmcp>=2.0.0
2
+ umap-learn>=0.5.0
3
+ pandas>=1.5.0
4
+ numpy>=1.21.0
5
+ matplotlib>=3.5.0
6
+ scikit-learn>=1.0.0
mcp/umap_mcp.py ADDED
@@ -0,0 +1,378 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ UMAP PaperAgent MCP Server
3
+
4
+ Based on: McInnes, L., Healy, J., & Melville, J. (2018).
5
+ UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction.
6
+ arXiv:1802.03426
7
+
8
+ This MCP server provides tools for dimensionality reduction and visualization
9
+ using the UMAP algorithm, following the Paper2Agent framework.
10
+ """
11
+
12
+ from fastmcp import FastMCP
13
+ from typing import Annotated, Literal, Optional, List
14
+ import os
15
+ from pathlib import Path
16
+ from datetime import datetime
17
+
18
+ # Create MCP server
19
+ mcp = FastMCP(name="UMAP")
20
+
21
+ # Project paths
22
+ PROJECT_ROOT = Path(__file__).parent.parent.resolve()
23
+ DEFAULT_OUTPUT_DIR = PROJECT_ROOT / "tmp" / "outputs"
24
+ DEFAULT_INPUT_DIR = PROJECT_ROOT / "tmp" / "inputs"
25
+
26
+ OUTPUT_DIR = Path(os.environ.get("UMAP_OUTPUT_DIR", DEFAULT_OUTPUT_DIR))
27
+ INPUT_DIR = Path(os.environ.get("UMAP_INPUT_DIR", DEFAULT_INPUT_DIR))
28
+
29
+ OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
30
+ INPUT_DIR.mkdir(parents=True, exist_ok=True)
31
+
32
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
33
+
34
+
35
+ @mcp.tool()
36
+ def umap_reduce_dimensions(
37
+ data_path: Annotated[str, "Path to input data file (CSV format with samples as rows, features as columns)"],
38
+ n_neighbors: Annotated[int, "Number of neighbors for local structure (default: 15). Higher values capture more global structure."] = 15,
39
+ min_dist: Annotated[float, "Minimum distance between points in embedding (default: 0.1). Lower values create tighter clusters."] = 0.1,
40
+ n_components: Annotated[int, "Number of dimensions in output embedding (default: 2)"] = 2,
41
+ metric: Annotated[Literal["euclidean", "manhattan", "cosine", "correlation"], "Distance metric to use"] = "euclidean",
42
+ random_state: Annotated[int, "Random seed for reproducibility"] = 42,
43
+ out_prefix: Annotated[Optional[str], "Output file prefix"] = None,
44
+ ) -> dict:
45
+ """
46
+ Perform UMAP dimensionality reduction on high-dimensional data.
47
+
48
+ Input is a CSV file with samples as rows and features as columns.
49
+ Output is the UMAP embedding coordinates and a visualization.
50
+
51
+ Reference: McInnes et al. (2018) arXiv:1802.03426
52
+ """
53
+ import pandas as pd
54
+ import numpy as np
55
+ import umap
56
+ import matplotlib
57
+ matplotlib.use('Agg')
58
+ import matplotlib.pyplot as plt
59
+
60
+ # Load data
61
+ if not os.path.exists(data_path):
62
+ return {"error": f"Data file not found: {data_path}"}
63
+
64
+ df = pd.read_csv(data_path, index_col=0)
65
+ X = df.values
66
+
67
+ # Run UMAP
68
+ reducer = umap.UMAP(
69
+ n_neighbors=n_neighbors,
70
+ min_dist=min_dist,
71
+ n_components=n_components,
72
+ metric=metric,
73
+ random_state=random_state
74
+ )
75
+
76
+ embedding = reducer.fit_transform(X)
77
+
78
+ # Create output prefix
79
+ if out_prefix is None:
80
+ out_prefix = f"umap_{timestamp}"
81
+
82
+ # Save embedding
83
+ embedding_df = pd.DataFrame(
84
+ embedding,
85
+ columns=[f"UMAP{i+1}" for i in range(n_components)],
86
+ index=df.index
87
+ )
88
+ embedding_path = OUTPUT_DIR / f"{out_prefix}_embedding.csv"
89
+ embedding_df.to_csv(embedding_path)
90
+
91
+ # Create visualization (if 2D)
92
+ viz_path = None
93
+ if n_components == 2:
94
+ fig, ax = plt.subplots(figsize=(10, 8))
95
+ scatter = ax.scatter(embedding[:, 0], embedding[:, 1],
96
+ c=range(len(embedding)), cmap='viridis',
97
+ alpha=0.6, s=10)
98
+ ax.set_xlabel('UMAP1', fontsize=12)
99
+ ax.set_ylabel('UMAP2', fontsize=12)
100
+ ax.set_title(f'UMAP Embedding\n(n_neighbors={n_neighbors}, min_dist={min_dist}, metric={metric})',
101
+ fontsize=14)
102
+ plt.colorbar(scatter, ax=ax, label='Sample index')
103
+
104
+ viz_path = OUTPUT_DIR / f"{out_prefix}_visualization.png"
105
+ plt.savefig(viz_path, dpi=150, bbox_inches='tight')
106
+ plt.close()
107
+
108
+ artifacts = [
109
+ {"description": "UMAP embedding coordinates", "path": str(embedding_path)}
110
+ ]
111
+ if viz_path:
112
+ artifacts.append({"description": "UMAP visualization", "path": str(viz_path)})
113
+
114
+ return {
115
+ "message": f"UMAP reduction completed: {X.shape[0]} samples, {X.shape[1]} features -> {n_components} dimensions",
116
+ "reference": "https://arxiv.org/abs/1802.03426",
117
+ "parameters": {
118
+ "n_neighbors": n_neighbors,
119
+ "min_dist": min_dist,
120
+ "n_components": n_components,
121
+ "metric": metric
122
+ },
123
+ "artifacts": artifacts
124
+ }
125
+
126
+
127
+ @mcp.tool()
128
+ def umap_parameter_sweep(
129
+ data_path: Annotated[str, "Path to input data file (CSV format)"],
130
+ n_neighbors_values: Annotated[List[int], "List of n_neighbors values to test"] = [5, 15, 50],
131
+ min_dist_values: Annotated[List[float], "List of min_dist values to test"] = [0.0, 0.1, 0.5],
132
+ metric: Annotated[Literal["euclidean", "manhattan", "cosine", "correlation"], "Distance metric"] = "euclidean",
133
+ random_state: Annotated[int, "Random seed"] = 42,
134
+ out_prefix: Annotated[Optional[str], "Output file prefix"] = None,
135
+ ) -> dict:
136
+ """
137
+ Perform parameter sweep to visualize how UMAP parameters affect the embedding.
138
+
139
+ Creates a grid of UMAP visualizations with different n_neighbors and min_dist values.
140
+ This helps understand the paper's key insight about balancing local vs global structure.
141
+
142
+ Reference: McInnes et al. (2018) arXiv:1802.03426
143
+ """
144
+ import pandas as pd
145
+ import numpy as np
146
+ import umap
147
+ import matplotlib
148
+ matplotlib.use('Agg')
149
+ import matplotlib.pyplot as plt
150
+
151
+ if not os.path.exists(data_path):
152
+ return {"error": f"Data file not found: {data_path}"}
153
+
154
+ df = pd.read_csv(data_path, index_col=0)
155
+ X = df.values
156
+
157
+ if out_prefix is None:
158
+ out_prefix = f"umap_sweep_{timestamp}"
159
+
160
+ n_rows = len(n_neighbors_values)
161
+ n_cols = len(min_dist_values)
162
+
163
+ fig, axes = plt.subplots(n_rows, n_cols, figsize=(4*n_cols, 4*n_rows))
164
+ if n_rows == 1:
165
+ axes = axes.reshape(1, -1)
166
+ if n_cols == 1:
167
+ axes = axes.reshape(-1, 1)
168
+
169
+ for i, n_neighbors in enumerate(n_neighbors_values):
170
+ for j, min_dist in enumerate(min_dist_values):
171
+ reducer = umap.UMAP(
172
+ n_neighbors=n_neighbors,
173
+ min_dist=min_dist,
174
+ n_components=2,
175
+ metric=metric,
176
+ random_state=random_state
177
+ )
178
+ embedding = reducer.fit_transform(X)
179
+
180
+ ax = axes[i, j]
181
+ ax.scatter(embedding[:, 0], embedding[:, 1],
182
+ c=range(len(embedding)), cmap='viridis',
183
+ alpha=0.6, s=5)
184
+ ax.set_title(f'n_neighbors={n_neighbors}\nmin_dist={min_dist}', fontsize=10)
185
+ ax.set_xticks([])
186
+ ax.set_yticks([])
187
+
188
+ fig.suptitle(f'UMAP Parameter Sweep (metric={metric})\n'
189
+ f'Top to bottom: increasing n_neighbors (more global)\n'
190
+ f'Left to right: increasing min_dist (more spread)',
191
+ fontsize=12, y=1.02)
192
+ plt.tight_layout()
193
+
194
+ viz_path = OUTPUT_DIR / f"{out_prefix}_parameter_sweep.png"
195
+ plt.savefig(viz_path, dpi=150, bbox_inches='tight')
196
+ plt.close()
197
+
198
+ return {
199
+ "message": f"Parameter sweep completed: {n_rows}x{n_cols} grid",
200
+ "reference": "https://arxiv.org/abs/1802.03426",
201
+ "parameters_tested": {
202
+ "n_neighbors": n_neighbors_values,
203
+ "min_dist": min_dist_values,
204
+ "metric": metric
205
+ },
206
+ "artifacts": [
207
+ {"description": "Parameter sweep visualization", "path": str(viz_path)}
208
+ ]
209
+ }
210
+
211
+
212
+ @mcp.tool()
213
+ def umap_compare_metrics(
214
+ data_path: Annotated[str, "Path to input data file (CSV format)"],
215
+ metrics: Annotated[List[str], "List of distance metrics to compare"] = ["euclidean", "cosine", "manhattan", "correlation"],
216
+ n_neighbors: Annotated[int, "Number of neighbors"] = 15,
217
+ min_dist: Annotated[float, "Minimum distance"] = 0.1,
218
+ random_state: Annotated[int, "Random seed"] = 42,
219
+ out_prefix: Annotated[Optional[str], "Output file prefix"] = None,
220
+ ) -> dict:
221
+ """
222
+ Compare different distance metrics for UMAP embedding.
223
+
224
+ Visualizes how the choice of distance metric affects the embedding structure.
225
+ This demonstrates the paper's flexibility in supporting various metrics.
226
+
227
+ Reference: McInnes et al. (2018) arXiv:1802.03426
228
+ """
229
+ import pandas as pd
230
+ import numpy as np
231
+ import umap
232
+ import matplotlib
233
+ matplotlib.use('Agg')
234
+ import matplotlib.pyplot as plt
235
+
236
+ if not os.path.exists(data_path):
237
+ return {"error": f"Data file not found: {data_path}"}
238
+
239
+ df = pd.read_csv(data_path, index_col=0)
240
+ X = df.values
241
+
242
+ if out_prefix is None:
243
+ out_prefix = f"umap_metrics_{timestamp}"
244
+
245
+ n_metrics = len(metrics)
246
+ fig, axes = plt.subplots(1, n_metrics, figsize=(4*n_metrics, 4))
247
+ if n_metrics == 1:
248
+ axes = [axes]
249
+
250
+ for i, metric in enumerate(metrics):
251
+ try:
252
+ reducer = umap.UMAP(
253
+ n_neighbors=n_neighbors,
254
+ min_dist=min_dist,
255
+ n_components=2,
256
+ metric=metric,
257
+ random_state=random_state
258
+ )
259
+ embedding = reducer.fit_transform(X)
260
+
261
+ axes[i].scatter(embedding[:, 0], embedding[:, 1],
262
+ c=range(len(embedding)), cmap='viridis',
263
+ alpha=0.6, s=10)
264
+ axes[i].set_title(f'Metric: {metric}', fontsize=12)
265
+ axes[i].set_xlabel('UMAP1')
266
+ axes[i].set_ylabel('UMAP2')
267
+ except Exception as e:
268
+ axes[i].text(0.5, 0.5, f'Error: {str(e)[:30]}',
269
+ ha='center', va='center', transform=axes[i].transAxes)
270
+ axes[i].set_title(f'Metric: {metric} (failed)', fontsize=12)
271
+
272
+ fig.suptitle(f'UMAP Distance Metric Comparison\n(n_neighbors={n_neighbors}, min_dist={min_dist})',
273
+ fontsize=14)
274
+ plt.tight_layout()
275
+
276
+ viz_path = OUTPUT_DIR / f"{out_prefix}_metric_comparison.png"
277
+ plt.savefig(viz_path, dpi=150, bbox_inches='tight')
278
+ plt.close()
279
+
280
+ return {
281
+ "message": f"Metric comparison completed for {n_metrics} metrics",
282
+ "reference": "https://arxiv.org/abs/1802.03426",
283
+ "metrics_compared": metrics,
284
+ "artifacts": [
285
+ {"description": "Metric comparison visualization", "path": str(viz_path)}
286
+ ]
287
+ }
288
+
289
+
290
+ @mcp.tool()
291
+ def umap_with_labels(
292
+ data_path: Annotated[str, "Path to input data file (CSV format)"],
293
+ labels_path: Annotated[str, "Path to labels file (CSV with 'label' column)"],
294
+ n_neighbors: Annotated[int, "Number of neighbors"] = 15,
295
+ min_dist: Annotated[float, "Minimum distance"] = 0.1,
296
+ metric: Annotated[Literal["euclidean", "manhattan", "cosine", "correlation"], "Distance metric"] = "euclidean",
297
+ random_state: Annotated[int, "Random seed"] = 42,
298
+ out_prefix: Annotated[Optional[str], "Output file prefix"] = None,
299
+ ) -> dict:
300
+ """
301
+ Perform UMAP with colored labels to assess cluster separation.
302
+
303
+ Useful for evaluating how well UMAP preserves known class structure.
304
+
305
+ Reference: McInnes et al. (2018) arXiv:1802.03426
306
+ """
307
+ import pandas as pd
308
+ import numpy as np
309
+ import umap
310
+ import matplotlib
311
+ matplotlib.use('Agg')
312
+ import matplotlib.pyplot as plt
313
+
314
+ if not os.path.exists(data_path):
315
+ return {"error": f"Data file not found: {data_path}"}
316
+ if not os.path.exists(labels_path):
317
+ return {"error": f"Labels file not found: {labels_path}"}
318
+
319
+ df = pd.read_csv(data_path, index_col=0)
320
+ labels_df = pd.read_csv(labels_path, index_col=0)
321
+
322
+ X = df.values
323
+ labels = labels_df['label'].values if 'label' in labels_df.columns else labels_df.iloc[:, 0].values
324
+
325
+ if out_prefix is None:
326
+ out_prefix = f"umap_labeled_{timestamp}"
327
+
328
+ reducer = umap.UMAP(
329
+ n_neighbors=n_neighbors,
330
+ min_dist=min_dist,
331
+ n_components=2,
332
+ metric=metric,
333
+ random_state=random_state
334
+ )
335
+ embedding = reducer.fit_transform(X)
336
+
337
+ # Save embedding with labels
338
+ embedding_df = pd.DataFrame(
339
+ embedding,
340
+ columns=['UMAP1', 'UMAP2'],
341
+ index=df.index
342
+ )
343
+ embedding_df['label'] = labels
344
+ embedding_path = OUTPUT_DIR / f"{out_prefix}_embedding.csv"
345
+ embedding_df.to_csv(embedding_path)
346
+
347
+ # Create visualization
348
+ fig, ax = plt.subplots(figsize=(10, 8))
349
+ unique_labels = np.unique(labels)
350
+ colors = plt.cm.tab10(np.linspace(0, 1, len(unique_labels)))
351
+
352
+ for label, color in zip(unique_labels, colors):
353
+ mask = labels == label
354
+ ax.scatter(embedding[mask, 0], embedding[mask, 1],
355
+ c=[color], label=str(label), alpha=0.6, s=15)
356
+
357
+ ax.set_xlabel('UMAP1', fontsize=12)
358
+ ax.set_ylabel('UMAP2', fontsize=12)
359
+ ax.set_title(f'UMAP Embedding with Labels\n(n_neighbors={n_neighbors}, min_dist={min_dist})', fontsize=14)
360
+ ax.legend(title='Label', bbox_to_anchor=(1.05, 1), loc='upper left')
361
+
362
+ viz_path = OUTPUT_DIR / f"{out_prefix}_visualization.png"
363
+ plt.savefig(viz_path, dpi=150, bbox_inches='tight')
364
+ plt.close()
365
+
366
+ return {
367
+ "message": f"UMAP with labels completed: {len(unique_labels)} unique labels",
368
+ "reference": "https://arxiv.org/abs/1802.03426",
369
+ "labels_found": list(map(str, unique_labels)),
370
+ "artifacts": [
371
+ {"description": "UMAP embedding with labels", "path": str(embedding_path)},
372
+ {"description": "Labeled UMAP visualization", "path": str(viz_path)}
373
+ ]
374
+ }
375
+
376
+
377
+ if __name__ == "__main__":
378
+ mcp.run()
tmp/inputs/digits_data.csv ADDED
The diff for this file is too large to render. See raw diff
 
tmp/inputs/digits_labels.csv ADDED
@@ -0,0 +1,1798 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ,label
2
+ digit_0,0
3
+ digit_1,1
4
+ digit_2,2
5
+ digit_3,3
6
+ digit_4,4
7
+ digit_5,5
8
+ digit_6,6
9
+ digit_7,7
10
+ digit_8,8
11
+ digit_9,9
12
+ digit_10,0
13
+ digit_11,1
14
+ digit_12,2
15
+ digit_13,3
16
+ digit_14,4
17
+ digit_15,5
18
+ digit_16,6
19
+ digit_17,7
20
+ digit_18,8
21
+ digit_19,9
22
+ digit_20,0
23
+ digit_21,1
24
+ digit_22,2
25
+ digit_23,3
26
+ digit_24,4
27
+ digit_25,5
28
+ digit_26,6
29
+ digit_27,7
30
+ digit_28,8
31
+ digit_29,9
32
+ digit_30,0
33
+ digit_31,9
34
+ digit_32,5
35
+ digit_33,5
36
+ digit_34,6
37
+ digit_35,5
38
+ digit_36,0
39
+ digit_37,9
40
+ digit_38,8
41
+ digit_39,9
42
+ digit_40,8
43
+ digit_41,4
44
+ digit_42,1
45
+ digit_43,7
46
+ digit_44,7
47
+ digit_45,3
48
+ digit_46,5
49
+ digit_47,1
50
+ digit_48,0
51
+ digit_49,0
52
+ digit_50,2
53
+ digit_51,2
54
+ digit_52,7
55
+ digit_53,8
56
+ digit_54,2
57
+ digit_55,0
58
+ digit_56,1
59
+ digit_57,2
60
+ digit_58,6
61
+ digit_59,3
62
+ digit_60,3
63
+ digit_61,7
64
+ digit_62,3
65
+ digit_63,3
66
+ digit_64,4
67
+ digit_65,6
68
+ digit_66,6
69
+ digit_67,6
70
+ digit_68,4
71
+ digit_69,9
72
+ digit_70,1
73
+ digit_71,5
74
+ digit_72,0
75
+ digit_73,9
76
+ digit_74,5
77
+ digit_75,2
78
+ digit_76,8
79
+ digit_77,2
80
+ digit_78,0
81
+ digit_79,0
82
+ digit_80,1
83
+ digit_81,7
84
+ digit_82,6
85
+ digit_83,3
86
+ digit_84,2
87
+ digit_85,1
88
+ digit_86,7
89
+ digit_87,4
90
+ digit_88,6
91
+ digit_89,3
92
+ digit_90,1
93
+ digit_91,3
94
+ digit_92,9
95
+ digit_93,1
96
+ digit_94,7
97
+ digit_95,6
98
+ digit_96,8
99
+ digit_97,4
100
+ digit_98,3
101
+ digit_99,1
102
+ digit_100,4
103
+ digit_101,0
104
+ digit_102,5
105
+ digit_103,3
106
+ digit_104,6
107
+ digit_105,9
108
+ digit_106,6
109
+ digit_107,1
110
+ digit_108,7
111
+ digit_109,5
112
+ digit_110,4
113
+ digit_111,4
114
+ digit_112,7
115
+ digit_113,2
116
+ digit_114,8
117
+ digit_115,2
118
+ digit_116,2
119
+ digit_117,5
120
+ digit_118,7
121
+ digit_119,9
122
+ digit_120,5
123
+ digit_121,4
124
+ digit_122,8
125
+ digit_123,8
126
+ digit_124,4
127
+ digit_125,9
128
+ digit_126,0
129
+ digit_127,8
130
+ digit_128,9
131
+ digit_129,8
132
+ digit_130,0
133
+ digit_131,1
134
+ digit_132,2
135
+ digit_133,3
136
+ digit_134,4
137
+ digit_135,5
138
+ digit_136,6
139
+ digit_137,7
140
+ digit_138,8
141
+ digit_139,9
142
+ digit_140,0
143
+ digit_141,1
144
+ digit_142,2
145
+ digit_143,3
146
+ digit_144,4
147
+ digit_145,5
148
+ digit_146,6
149
+ digit_147,7
150
+ digit_148,8
151
+ digit_149,9
152
+ digit_150,0
153
+ digit_151,1
154
+ digit_152,2
155
+ digit_153,3
156
+ digit_154,4
157
+ digit_155,5
158
+ digit_156,6
159
+ digit_157,7
160
+ digit_158,8
161
+ digit_159,9
162
+ digit_160,0
163
+ digit_161,9
164
+ digit_162,5
165
+ digit_163,5
166
+ digit_164,6
167
+ digit_165,5
168
+ digit_166,0
169
+ digit_167,9
170
+ digit_168,8
171
+ digit_169,9
172
+ digit_170,8
173
+ digit_171,4
174
+ digit_172,1
175
+ digit_173,7
176
+ digit_174,7
177
+ digit_175,3
178
+ digit_176,5
179
+ digit_177,1
180
+ digit_178,0
181
+ digit_179,0
182
+ digit_180,2
183
+ digit_181,2
184
+ digit_182,7
185
+ digit_183,8
186
+ digit_184,2
187
+ digit_185,0
188
+ digit_186,1
189
+ digit_187,2
190
+ digit_188,6
191
+ digit_189,3
192
+ digit_190,3
193
+ digit_191,7
194
+ digit_192,3
195
+ digit_193,3
196
+ digit_194,4
197
+ digit_195,6
198
+ digit_196,6
199
+ digit_197,6
200
+ digit_198,4
201
+ digit_199,9
202
+ digit_200,1
203
+ digit_201,5
204
+ digit_202,0
205
+ digit_203,9
206
+ digit_204,5
207
+ digit_205,2
208
+ digit_206,8
209
+ digit_207,2
210
+ digit_208,0
211
+ digit_209,0
212
+ digit_210,1
213
+ digit_211,7
214
+ digit_212,6
215
+ digit_213,3
216
+ digit_214,2
217
+ digit_215,1
218
+ digit_216,7
219
+ digit_217,3
220
+ digit_218,1
221
+ digit_219,3
222
+ digit_220,9
223
+ digit_221,1
224
+ digit_222,7
225
+ digit_223,6
226
+ digit_224,8
227
+ digit_225,4
228
+ digit_226,3
229
+ digit_227,1
230
+ digit_228,4
231
+ digit_229,0
232
+ digit_230,5
233
+ digit_231,3
234
+ digit_232,6
235
+ digit_233,9
236
+ digit_234,6
237
+ digit_235,1
238
+ digit_236,7
239
+ digit_237,5
240
+ digit_238,4
241
+ digit_239,4
242
+ digit_240,7
243
+ digit_241,2
244
+ digit_242,8
245
+ digit_243,2
246
+ digit_244,2
247
+ digit_245,5
248
+ digit_246,5
249
+ digit_247,4
250
+ digit_248,8
251
+ digit_249,8
252
+ digit_250,4
253
+ digit_251,9
254
+ digit_252,0
255
+ digit_253,8
256
+ digit_254,9
257
+ digit_255,8
258
+ digit_256,0
259
+ digit_257,1
260
+ digit_258,2
261
+ digit_259,3
262
+ digit_260,4
263
+ digit_261,5
264
+ digit_262,6
265
+ digit_263,7
266
+ digit_264,8
267
+ digit_265,9
268
+ digit_266,0
269
+ digit_267,1
270
+ digit_268,2
271
+ digit_269,3
272
+ digit_270,4
273
+ digit_271,5
274
+ digit_272,6
275
+ digit_273,7
276
+ digit_274,8
277
+ digit_275,9
278
+ digit_276,0
279
+ digit_277,1
280
+ digit_278,2
281
+ digit_279,3
282
+ digit_280,4
283
+ digit_281,5
284
+ digit_282,6
285
+ digit_283,7
286
+ digit_284,8
287
+ digit_285,9
288
+ digit_286,0
289
+ digit_287,9
290
+ digit_288,5
291
+ digit_289,5
292
+ digit_290,6
293
+ digit_291,5
294
+ digit_292,0
295
+ digit_293,9
296
+ digit_294,8
297
+ digit_295,9
298
+ digit_296,8
299
+ digit_297,4
300
+ digit_298,1
301
+ digit_299,7
302
+ digit_300,7
303
+ digit_301,3
304
+ digit_302,5
305
+ digit_303,1
306
+ digit_304,0
307
+ digit_305,0
308
+ digit_306,2
309
+ digit_307,2
310
+ digit_308,7
311
+ digit_309,8
312
+ digit_310,2
313
+ digit_311,0
314
+ digit_312,1
315
+ digit_313,2
316
+ digit_314,6
317
+ digit_315,3
318
+ digit_316,3
319
+ digit_317,7
320
+ digit_318,3
321
+ digit_319,3
322
+ digit_320,4
323
+ digit_321,6
324
+ digit_322,6
325
+ digit_323,6
326
+ digit_324,4
327
+ digit_325,9
328
+ digit_326,1
329
+ digit_327,5
330
+ digit_328,0
331
+ digit_329,9
332
+ digit_330,5
333
+ digit_331,2
334
+ digit_332,8
335
+ digit_333,2
336
+ digit_334,0
337
+ digit_335,0
338
+ digit_336,1
339
+ digit_337,7
340
+ digit_338,6
341
+ digit_339,3
342
+ digit_340,2
343
+ digit_341,1
344
+ digit_342,7
345
+ digit_343,4
346
+ digit_344,6
347
+ digit_345,3
348
+ digit_346,1
349
+ digit_347,3
350
+ digit_348,9
351
+ digit_349,1
352
+ digit_350,7
353
+ digit_351,6
354
+ digit_352,8
355
+ digit_353,4
356
+ digit_354,3
357
+ digit_355,1
358
+ digit_356,4
359
+ digit_357,0
360
+ digit_358,5
361
+ digit_359,3
362
+ digit_360,6
363
+ digit_361,9
364
+ digit_362,6
365
+ digit_363,1
366
+ digit_364,7
367
+ digit_365,5
368
+ digit_366,4
369
+ digit_367,4
370
+ digit_368,7
371
+ digit_369,2
372
+ digit_370,8
373
+ digit_371,2
374
+ digit_372,2
375
+ digit_373,5
376
+ digit_374,7
377
+ digit_375,9
378
+ digit_376,5
379
+ digit_377,4
380
+ digit_378,8
381
+ digit_379,8
382
+ digit_380,4
383
+ digit_381,9
384
+ digit_382,0
385
+ digit_383,8
386
+ digit_384,9
387
+ digit_385,3
388
+ digit_386,0
389
+ digit_387,1
390
+ digit_388,2
391
+ digit_389,3
392
+ digit_390,4
393
+ digit_391,5
394
+ digit_392,6
395
+ digit_393,7
396
+ digit_394,8
397
+ digit_395,9
398
+ digit_396,0
399
+ digit_397,1
400
+ digit_398,2
401
+ digit_399,3
402
+ digit_400,4
403
+ digit_401,5
404
+ digit_402,6
405
+ digit_403,7
406
+ digit_404,8
407
+ digit_405,9
408
+ digit_406,0
409
+ digit_407,1
410
+ digit_408,2
411
+ digit_409,3
412
+ digit_410,4
413
+ digit_411,5
414
+ digit_412,6
415
+ digit_413,7
416
+ digit_414,8
417
+ digit_415,9
418
+ digit_416,0
419
+ digit_417,9
420
+ digit_418,5
421
+ digit_419,5
422
+ digit_420,6
423
+ digit_421,5
424
+ digit_422,0
425
+ digit_423,9
426
+ digit_424,8
427
+ digit_425,9
428
+ digit_426,8
429
+ digit_427,4
430
+ digit_428,1
431
+ digit_429,7
432
+ digit_430,7
433
+ digit_431,3
434
+ digit_432,5
435
+ digit_433,1
436
+ digit_434,0
437
+ digit_435,0
438
+ digit_436,2
439
+ digit_437,2
440
+ digit_438,7
441
+ digit_439,8
442
+ digit_440,2
443
+ digit_441,0
444
+ digit_442,1
445
+ digit_443,2
446
+ digit_444,6
447
+ digit_445,3
448
+ digit_446,3
449
+ digit_447,7
450
+ digit_448,3
451
+ digit_449,3
452
+ digit_450,4
453
+ digit_451,6
454
+ digit_452,6
455
+ digit_453,6
456
+ digit_454,4
457
+ digit_455,9
458
+ digit_456,1
459
+ digit_457,5
460
+ digit_458,0
461
+ digit_459,9
462
+ digit_460,5
463
+ digit_461,2
464
+ digit_462,8
465
+ digit_463,2
466
+ digit_464,0
467
+ digit_465,0
468
+ digit_466,1
469
+ digit_467,7
470
+ digit_468,6
471
+ digit_469,3
472
+ digit_470,2
473
+ digit_471,1
474
+ digit_472,7
475
+ digit_473,4
476
+ digit_474,6
477
+ digit_475,3
478
+ digit_476,1
479
+ digit_477,3
480
+ digit_478,9
481
+ digit_479,1
482
+ digit_480,7
483
+ digit_481,6
484
+ digit_482,8
485
+ digit_483,4
486
+ digit_484,3
487
+ digit_485,1
488
+ digit_486,4
489
+ digit_487,0
490
+ digit_488,5
491
+ digit_489,3
492
+ digit_490,6
493
+ digit_491,9
494
+ digit_492,6
495
+ digit_493,1
496
+ digit_494,7
497
+ digit_495,5
498
+ digit_496,4
499
+ digit_497,4
500
+ digit_498,7
501
+ digit_499,2
502
+ digit_500,8
503
+ digit_501,2
504
+ digit_502,2
505
+ digit_503,5
506
+ digit_504,7
507
+ digit_505,9
508
+ digit_506,5
509
+ digit_507,4
510
+ digit_508,8
511
+ digit_509,8
512
+ digit_510,4
513
+ digit_511,9
514
+ digit_512,0
515
+ digit_513,8
516
+ digit_514,9
517
+ digit_515,8
518
+ digit_516,0
519
+ digit_517,1
520
+ digit_518,2
521
+ digit_519,3
522
+ digit_520,4
523
+ digit_521,5
524
+ digit_522,6
525
+ digit_523,7
526
+ digit_524,8
527
+ digit_525,9
528
+ digit_526,0
529
+ digit_527,1
530
+ digit_528,2
531
+ digit_529,3
532
+ digit_530,4
533
+ digit_531,5
534
+ digit_532,6
535
+ digit_533,7
536
+ digit_534,8
537
+ digit_535,9
538
+ digit_536,0
539
+ digit_537,1
540
+ digit_538,2
541
+ digit_539,3
542
+ digit_540,4
543
+ digit_541,5
544
+ digit_542,6
545
+ digit_543,7
546
+ digit_544,8
547
+ digit_545,9
548
+ digit_546,0
549
+ digit_547,9
550
+ digit_548,5
551
+ digit_549,5
552
+ digit_550,6
553
+ digit_551,5
554
+ digit_552,0
555
+ digit_553,9
556
+ digit_554,8
557
+ digit_555,9
558
+ digit_556,8
559
+ digit_557,4
560
+ digit_558,1
561
+ digit_559,7
562
+ digit_560,7
563
+ digit_561,3
564
+ digit_562,5
565
+ digit_563,1
566
+ digit_564,0
567
+ digit_565,0
568
+ digit_566,2
569
+ digit_567,2
570
+ digit_568,7
571
+ digit_569,8
572
+ digit_570,2
573
+ digit_571,0
574
+ digit_572,1
575
+ digit_573,2
576
+ digit_574,6
577
+ digit_575,3
578
+ digit_576,3
579
+ digit_577,7
580
+ digit_578,3
581
+ digit_579,3
582
+ digit_580,4
583
+ digit_581,6
584
+ digit_582,6
585
+ digit_583,6
586
+ digit_584,4
587
+ digit_585,9
588
+ digit_586,1
589
+ digit_587,5
590
+ digit_588,0
591
+ digit_589,9
592
+ digit_590,5
593
+ digit_591,2
594
+ digit_592,8
595
+ digit_593,2
596
+ digit_594,0
597
+ digit_595,0
598
+ digit_596,1
599
+ digit_597,7
600
+ digit_598,6
601
+ digit_599,3
602
+ digit_600,2
603
+ digit_601,1
604
+ digit_602,7
605
+ digit_603,4
606
+ digit_604,6
607
+ digit_605,3
608
+ digit_606,1
609
+ digit_607,3
610
+ digit_608,9
611
+ digit_609,1
612
+ digit_610,7
613
+ digit_611,6
614
+ digit_612,8
615
+ digit_613,4
616
+ digit_614,3
617
+ digit_615,1
618
+ digit_616,4
619
+ digit_617,0
620
+ digit_618,5
621
+ digit_619,3
622
+ digit_620,6
623
+ digit_621,9
624
+ digit_622,6
625
+ digit_623,1
626
+ digit_624,7
627
+ digit_625,5
628
+ digit_626,4
629
+ digit_627,4
630
+ digit_628,7
631
+ digit_629,2
632
+ digit_630,8
633
+ digit_631,2
634
+ digit_632,2
635
+ digit_633,5
636
+ digit_634,7
637
+ digit_635,9
638
+ digit_636,5
639
+ digit_637,4
640
+ digit_638,8
641
+ digit_639,8
642
+ digit_640,4
643
+ digit_641,9
644
+ digit_642,0
645
+ digit_643,8
646
+ digit_644,9
647
+ digit_645,8
648
+ digit_646,0
649
+ digit_647,1
650
+ digit_648,2
651
+ digit_649,3
652
+ digit_650,4
653
+ digit_651,5
654
+ digit_652,6
655
+ digit_653,7
656
+ digit_654,8
657
+ digit_655,9
658
+ digit_656,0
659
+ digit_657,1
660
+ digit_658,2
661
+ digit_659,3
662
+ digit_660,4
663
+ digit_661,5
664
+ digit_662,6
665
+ digit_663,7
666
+ digit_664,8
667
+ digit_665,9
668
+ digit_666,0
669
+ digit_667,1
670
+ digit_668,2
671
+ digit_669,3
672
+ digit_670,4
673
+ digit_671,5
674
+ digit_672,6
675
+ digit_673,7
676
+ digit_674,8
677
+ digit_675,9
678
+ digit_676,0
679
+ digit_677,9
680
+ digit_678,5
681
+ digit_679,5
682
+ digit_680,6
683
+ digit_681,5
684
+ digit_682,0
685
+ digit_683,9
686
+ digit_684,8
687
+ digit_685,9
688
+ digit_686,8
689
+ digit_687,4
690
+ digit_688,1
691
+ digit_689,7
692
+ digit_690,7
693
+ digit_691,3
694
+ digit_692,5
695
+ digit_693,1
696
+ digit_694,0
697
+ digit_695,0
698
+ digit_696,2
699
+ digit_697,2
700
+ digit_698,7
701
+ digit_699,8
702
+ digit_700,2
703
+ digit_701,0
704
+ digit_702,1
705
+ digit_703,2
706
+ digit_704,6
707
+ digit_705,3
708
+ digit_706,3
709
+ digit_707,7
710
+ digit_708,3
711
+ digit_709,3
712
+ digit_710,4
713
+ digit_711,6
714
+ digit_712,6
715
+ digit_713,6
716
+ digit_714,4
717
+ digit_715,9
718
+ digit_716,1
719
+ digit_717,5
720
+ digit_718,0
721
+ digit_719,9
722
+ digit_720,5
723
+ digit_721,2
724
+ digit_722,8
725
+ digit_723,2
726
+ digit_724,0
727
+ digit_725,0
728
+ digit_726,1
729
+ digit_727,7
730
+ digit_728,6
731
+ digit_729,3
732
+ digit_730,2
733
+ digit_731,1
734
+ digit_732,7
735
+ digit_733,4
736
+ digit_734,6
737
+ digit_735,3
738
+ digit_736,1
739
+ digit_737,3
740
+ digit_738,9
741
+ digit_739,1
742
+ digit_740,7
743
+ digit_741,6
744
+ digit_742,8
745
+ digit_743,4
746
+ digit_744,3
747
+ digit_745,1
748
+ digit_746,4
749
+ digit_747,0
750
+ digit_748,5
751
+ digit_749,3
752
+ digit_750,6
753
+ digit_751,9
754
+ digit_752,6
755
+ digit_753,1
756
+ digit_754,7
757
+ digit_755,5
758
+ digit_756,4
759
+ digit_757,4
760
+ digit_758,7
761
+ digit_759,2
762
+ digit_760,8
763
+ digit_761,2
764
+ digit_762,2
765
+ digit_763,5
766
+ digit_764,7
767
+ digit_765,9
768
+ digit_766,5
769
+ digit_767,4
770
+ digit_768,8
771
+ digit_769,8
772
+ digit_770,4
773
+ digit_771,9
774
+ digit_772,0
775
+ digit_773,8
776
+ digit_774,9
777
+ digit_775,8
778
+ digit_776,0
779
+ digit_777,1
780
+ digit_778,2
781
+ digit_779,3
782
+ digit_780,4
783
+ digit_781,5
784
+ digit_782,6
785
+ digit_783,7
786
+ digit_784,8
787
+ digit_785,9
788
+ digit_786,0
789
+ digit_787,1
790
+ digit_788,2
791
+ digit_789,3
792
+ digit_790,4
793
+ digit_791,5
794
+ digit_792,6
795
+ digit_793,7
796
+ digit_794,8
797
+ digit_795,9
798
+ digit_796,0
799
+ digit_797,1
800
+ digit_798,2
801
+ digit_799,3
802
+ digit_800,4
803
+ digit_801,5
804
+ digit_802,6
805
+ digit_803,7
806
+ digit_804,8
807
+ digit_805,9
808
+ digit_806,0
809
+ digit_807,9
810
+ digit_808,5
811
+ digit_809,5
812
+ digit_810,6
813
+ digit_811,5
814
+ digit_812,0
815
+ digit_813,9
816
+ digit_814,8
817
+ digit_815,9
818
+ digit_816,8
819
+ digit_817,4
820
+ digit_818,1
821
+ digit_819,7
822
+ digit_820,7
823
+ digit_821,3
824
+ digit_822,5
825
+ digit_823,1
826
+ digit_824,0
827
+ digit_825,0
828
+ digit_826,2
829
+ digit_827,2
830
+ digit_828,7
831
+ digit_829,8
832
+ digit_830,2
833
+ digit_831,0
834
+ digit_832,1
835
+ digit_833,2
836
+ digit_834,6
837
+ digit_835,3
838
+ digit_836,3
839
+ digit_837,7
840
+ digit_838,3
841
+ digit_839,3
842
+ digit_840,4
843
+ digit_841,6
844
+ digit_842,6
845
+ digit_843,6
846
+ digit_844,4
847
+ digit_845,9
848
+ digit_846,1
849
+ digit_847,5
850
+ digit_848,0
851
+ digit_849,9
852
+ digit_850,5
853
+ digit_851,2
854
+ digit_852,8
855
+ digit_853,2
856
+ digit_854,0
857
+ digit_855,0
858
+ digit_856,1
859
+ digit_857,7
860
+ digit_858,6
861
+ digit_859,3
862
+ digit_860,2
863
+ digit_861,1
864
+ digit_862,7
865
+ digit_863,4
866
+ digit_864,6
867
+ digit_865,3
868
+ digit_866,1
869
+ digit_867,3
870
+ digit_868,9
871
+ digit_869,1
872
+ digit_870,7
873
+ digit_871,6
874
+ digit_872,8
875
+ digit_873,4
876
+ digit_874,3
877
+ digit_875,1
878
+ digit_876,4
879
+ digit_877,0
880
+ digit_878,5
881
+ digit_879,3
882
+ digit_880,6
883
+ digit_881,9
884
+ digit_882,6
885
+ digit_883,1
886
+ digit_884,7
887
+ digit_885,5
888
+ digit_886,4
889
+ digit_887,4
890
+ digit_888,7
891
+ digit_889,2
892
+ digit_890,8
893
+ digit_891,2
894
+ digit_892,2
895
+ digit_893,5
896
+ digit_894,7
897
+ digit_895,9
898
+ digit_896,5
899
+ digit_897,4
900
+ digit_898,8
901
+ digit_899,8
902
+ digit_900,4
903
+ digit_901,9
904
+ digit_902,0
905
+ digit_903,8
906
+ digit_904,9
907
+ digit_905,8
908
+ digit_906,1
909
+ digit_907,2
910
+ digit_908,3
911
+ digit_909,4
912
+ digit_910,5
913
+ digit_911,6
914
+ digit_912,7
915
+ digit_913,8
916
+ digit_914,9
917
+ digit_915,0
918
+ digit_916,1
919
+ digit_917,2
920
+ digit_918,3
921
+ digit_919,4
922
+ digit_920,5
923
+ digit_921,6
924
+ digit_922,7
925
+ digit_923,8
926
+ digit_924,9
927
+ digit_925,0
928
+ digit_926,1
929
+ digit_927,2
930
+ digit_928,3
931
+ digit_929,4
932
+ digit_930,5
933
+ digit_931,6
934
+ digit_932,7
935
+ digit_933,8
936
+ digit_934,9
937
+ digit_935,0
938
+ digit_936,9
939
+ digit_937,5
940
+ digit_938,5
941
+ digit_939,6
942
+ digit_940,5
943
+ digit_941,0
944
+ digit_942,9
945
+ digit_943,8
946
+ digit_944,9
947
+ digit_945,8
948
+ digit_946,4
949
+ digit_947,1
950
+ digit_948,7
951
+ digit_949,7
952
+ digit_950,3
953
+ digit_951,5
954
+ digit_952,1
955
+ digit_953,2
956
+ digit_954,7
957
+ digit_955,8
958
+ digit_956,2
959
+ digit_957,0
960
+ digit_958,1
961
+ digit_959,2
962
+ digit_960,6
963
+ digit_961,3
964
+ digit_962,3
965
+ digit_963,7
966
+ digit_964,3
967
+ digit_965,3
968
+ digit_966,4
969
+ digit_967,6
970
+ digit_968,6
971
+ digit_969,6
972
+ digit_970,4
973
+ digit_971,9
974
+ digit_972,1
975
+ digit_973,5
976
+ digit_974,0
977
+ digit_975,9
978
+ digit_976,5
979
+ digit_977,2
980
+ digit_978,8
981
+ digit_979,2
982
+ digit_980,0
983
+ digit_981,0
984
+ digit_982,1
985
+ digit_983,7
986
+ digit_984,6
987
+ digit_985,3
988
+ digit_986,2
989
+ digit_987,1
990
+ digit_988,4
991
+ digit_989,6
992
+ digit_990,3
993
+ digit_991,1
994
+ digit_992,3
995
+ digit_993,9
996
+ digit_994,1
997
+ digit_995,7
998
+ digit_996,6
999
+ digit_997,8
1000
+ digit_998,4
1001
+ digit_999,3
1002
+ digit_1000,1
1003
+ digit_1001,4
1004
+ digit_1002,0
1005
+ digit_1003,5
1006
+ digit_1004,3
1007
+ digit_1005,6
1008
+ digit_1006,9
1009
+ digit_1007,6
1010
+ digit_1008,1
1011
+ digit_1009,7
1012
+ digit_1010,5
1013
+ digit_1011,4
1014
+ digit_1012,4
1015
+ digit_1013,7
1016
+ digit_1014,2
1017
+ digit_1015,8
1018
+ digit_1016,2
1019
+ digit_1017,2
1020
+ digit_1018,5
1021
+ digit_1019,7
1022
+ digit_1020,9
1023
+ digit_1021,5
1024
+ digit_1022,4
1025
+ digit_1023,4
1026
+ digit_1024,9
1027
+ digit_1025,0
1028
+ digit_1026,8
1029
+ digit_1027,9
1030
+ digit_1028,8
1031
+ digit_1029,0
1032
+ digit_1030,1
1033
+ digit_1031,2
1034
+ digit_1032,3
1035
+ digit_1033,4
1036
+ digit_1034,5
1037
+ digit_1035,6
1038
+ digit_1036,7
1039
+ digit_1037,8
1040
+ digit_1038,9
1041
+ digit_1039,0
1042
+ digit_1040,1
1043
+ digit_1041,2
1044
+ digit_1042,3
1045
+ digit_1043,4
1046
+ digit_1044,5
1047
+ digit_1045,6
1048
+ digit_1046,7
1049
+ digit_1047,8
1050
+ digit_1048,9
1051
+ digit_1049,0
1052
+ digit_1050,1
1053
+ digit_1051,2
1054
+ digit_1052,3
1055
+ digit_1053,4
1056
+ digit_1054,5
1057
+ digit_1055,6
1058
+ digit_1056,7
1059
+ digit_1057,8
1060
+ digit_1058,9
1061
+ digit_1059,0
1062
+ digit_1060,9
1063
+ digit_1061,5
1064
+ digit_1062,5
1065
+ digit_1063,6
1066
+ digit_1064,5
1067
+ digit_1065,0
1068
+ digit_1066,9
1069
+ digit_1067,8
1070
+ digit_1068,9
1071
+ digit_1069,8
1072
+ digit_1070,4
1073
+ digit_1071,1
1074
+ digit_1072,7
1075
+ digit_1073,7
1076
+ digit_1074,3
1077
+ digit_1075,5
1078
+ digit_1076,1
1079
+ digit_1077,0
1080
+ digit_1078,0
1081
+ digit_1079,7
1082
+ digit_1080,8
1083
+ digit_1081,2
1084
+ digit_1082,0
1085
+ digit_1083,1
1086
+ digit_1084,2
1087
+ digit_1085,6
1088
+ digit_1086,3
1089
+ digit_1087,3
1090
+ digit_1088,7
1091
+ digit_1089,3
1092
+ digit_1090,3
1093
+ digit_1091,4
1094
+ digit_1092,6
1095
+ digit_1093,6
1096
+ digit_1094,6
1097
+ digit_1095,4
1098
+ digit_1096,9
1099
+ digit_1097,1
1100
+ digit_1098,5
1101
+ digit_1099,0
1102
+ digit_1100,9
1103
+ digit_1101,5
1104
+ digit_1102,2
1105
+ digit_1103,8
1106
+ digit_1104,2
1107
+ digit_1105,0
1108
+ digit_1106,0
1109
+ digit_1107,1
1110
+ digit_1108,7
1111
+ digit_1109,6
1112
+ digit_1110,3
1113
+ digit_1111,2
1114
+ digit_1112,1
1115
+ digit_1113,7
1116
+ digit_1114,4
1117
+ digit_1115,6
1118
+ digit_1116,3
1119
+ digit_1117,1
1120
+ digit_1118,3
1121
+ digit_1119,9
1122
+ digit_1120,1
1123
+ digit_1121,7
1124
+ digit_1122,6
1125
+ digit_1123,8
1126
+ digit_1124,4
1127
+ digit_1125,3
1128
+ digit_1126,1
1129
+ digit_1127,4
1130
+ digit_1128,0
1131
+ digit_1129,5
1132
+ digit_1130,3
1133
+ digit_1131,6
1134
+ digit_1132,9
1135
+ digit_1133,6
1136
+ digit_1134,1
1137
+ digit_1135,7
1138
+ digit_1136,5
1139
+ digit_1137,4
1140
+ digit_1138,4
1141
+ digit_1139,7
1142
+ digit_1140,2
1143
+ digit_1141,8
1144
+ digit_1142,2
1145
+ digit_1143,2
1146
+ digit_1144,5
1147
+ digit_1145,7
1148
+ digit_1146,9
1149
+ digit_1147,5
1150
+ digit_1148,4
1151
+ digit_1149,8
1152
+ digit_1150,8
1153
+ digit_1151,4
1154
+ digit_1152,9
1155
+ digit_1153,0
1156
+ digit_1154,8
1157
+ digit_1155,9
1158
+ digit_1156,8
1159
+ digit_1157,0
1160
+ digit_1158,1
1161
+ digit_1159,2
1162
+ digit_1160,3
1163
+ digit_1161,4
1164
+ digit_1162,5
1165
+ digit_1163,6
1166
+ digit_1164,7
1167
+ digit_1165,8
1168
+ digit_1166,9
1169
+ digit_1167,0
1170
+ digit_1168,1
1171
+ digit_1169,2
1172
+ digit_1170,3
1173
+ digit_1171,4
1174
+ digit_1172,5
1175
+ digit_1173,6
1176
+ digit_1174,7
1177
+ digit_1175,8
1178
+ digit_1176,9
1179
+ digit_1177,0
1180
+ digit_1178,1
1181
+ digit_1179,2
1182
+ digit_1180,3
1183
+ digit_1181,4
1184
+ digit_1182,5
1185
+ digit_1183,6
1186
+ digit_1184,7
1187
+ digit_1185,8
1188
+ digit_1186,9
1189
+ digit_1187,0
1190
+ digit_1188,9
1191
+ digit_1189,5
1192
+ digit_1190,5
1193
+ digit_1191,6
1194
+ digit_1192,5
1195
+ digit_1193,0
1196
+ digit_1194,9
1197
+ digit_1195,8
1198
+ digit_1196,9
1199
+ digit_1197,8
1200
+ digit_1198,4
1201
+ digit_1199,1
1202
+ digit_1200,7
1203
+ digit_1201,7
1204
+ digit_1202,3
1205
+ digit_1203,5
1206
+ digit_1204,1
1207
+ digit_1205,0
1208
+ digit_1206,0
1209
+ digit_1207,2
1210
+ digit_1208,2
1211
+ digit_1209,7
1212
+ digit_1210,8
1213
+ digit_1211,2
1214
+ digit_1212,0
1215
+ digit_1213,1
1216
+ digit_1214,2
1217
+ digit_1215,6
1218
+ digit_1216,3
1219
+ digit_1217,3
1220
+ digit_1218,7
1221
+ digit_1219,3
1222
+ digit_1220,3
1223
+ digit_1221,4
1224
+ digit_1222,6
1225
+ digit_1223,6
1226
+ digit_1224,6
1227
+ digit_1225,4
1228
+ digit_1226,9
1229
+ digit_1227,1
1230
+ digit_1228,5
1231
+ digit_1229,0
1232
+ digit_1230,9
1233
+ digit_1231,5
1234
+ digit_1232,2
1235
+ digit_1233,8
1236
+ digit_1234,2
1237
+ digit_1235,0
1238
+ digit_1236,0
1239
+ digit_1237,1
1240
+ digit_1238,7
1241
+ digit_1239,6
1242
+ digit_1240,3
1243
+ digit_1241,2
1244
+ digit_1242,1
1245
+ digit_1243,7
1246
+ digit_1244,4
1247
+ digit_1245,6
1248
+ digit_1246,3
1249
+ digit_1247,1
1250
+ digit_1248,3
1251
+ digit_1249,9
1252
+ digit_1250,1
1253
+ digit_1251,7
1254
+ digit_1252,6
1255
+ digit_1253,8
1256
+ digit_1254,4
1257
+ digit_1255,3
1258
+ digit_1256,1
1259
+ digit_1257,4
1260
+ digit_1258,0
1261
+ digit_1259,5
1262
+ digit_1260,3
1263
+ digit_1261,6
1264
+ digit_1262,9
1265
+ digit_1263,6
1266
+ digit_1264,1
1267
+ digit_1265,7
1268
+ digit_1266,5
1269
+ digit_1267,4
1270
+ digit_1268,4
1271
+ digit_1269,7
1272
+ digit_1270,2
1273
+ digit_1271,8
1274
+ digit_1272,2
1275
+ digit_1273,2
1276
+ digit_1274,5
1277
+ digit_1275,7
1278
+ digit_1276,9
1279
+ digit_1277,5
1280
+ digit_1278,4
1281
+ digit_1279,8
1282
+ digit_1280,8
1283
+ digit_1281,4
1284
+ digit_1282,9
1285
+ digit_1283,0
1286
+ digit_1284,8
1287
+ digit_1285,9
1288
+ digit_1286,8
1289
+ digit_1287,0
1290
+ digit_1288,1
1291
+ digit_1289,2
1292
+ digit_1290,3
1293
+ digit_1291,4
1294
+ digit_1292,5
1295
+ digit_1293,6
1296
+ digit_1294,7
1297
+ digit_1295,8
1298
+ digit_1296,9
1299
+ digit_1297,0
1300
+ digit_1298,1
1301
+ digit_1299,2
1302
+ digit_1300,3
1303
+ digit_1301,4
1304
+ digit_1302,5
1305
+ digit_1303,6
1306
+ digit_1304,7
1307
+ digit_1305,8
1308
+ digit_1306,9
1309
+ digit_1307,0
1310
+ digit_1308,1
1311
+ digit_1309,2
1312
+ digit_1310,3
1313
+ digit_1311,4
1314
+ digit_1312,5
1315
+ digit_1313,6
1316
+ digit_1314,7
1317
+ digit_1315,8
1318
+ digit_1316,9
1319
+ digit_1317,0
1320
+ digit_1318,9
1321
+ digit_1319,5
1322
+ digit_1320,5
1323
+ digit_1321,6
1324
+ digit_1322,5
1325
+ digit_1323,0
1326
+ digit_1324,9
1327
+ digit_1325,8
1328
+ digit_1326,9
1329
+ digit_1327,8
1330
+ digit_1328,4
1331
+ digit_1329,1
1332
+ digit_1330,7
1333
+ digit_1331,7
1334
+ digit_1332,3
1335
+ digit_1333,5
1336
+ digit_1334,1
1337
+ digit_1335,0
1338
+ digit_1336,0
1339
+ digit_1337,2
1340
+ digit_1338,2
1341
+ digit_1339,7
1342
+ digit_1340,8
1343
+ digit_1341,2
1344
+ digit_1342,0
1345
+ digit_1343,1
1346
+ digit_1344,2
1347
+ digit_1345,6
1348
+ digit_1346,3
1349
+ digit_1347,3
1350
+ digit_1348,7
1351
+ digit_1349,3
1352
+ digit_1350,3
1353
+ digit_1351,4
1354
+ digit_1352,6
1355
+ digit_1353,6
1356
+ digit_1354,6
1357
+ digit_1355,4
1358
+ digit_1356,9
1359
+ digit_1357,1
1360
+ digit_1358,5
1361
+ digit_1359,0
1362
+ digit_1360,9
1363
+ digit_1361,5
1364
+ digit_1362,2
1365
+ digit_1363,8
1366
+ digit_1364,2
1367
+ digit_1365,0
1368
+ digit_1366,0
1369
+ digit_1367,1
1370
+ digit_1368,7
1371
+ digit_1369,6
1372
+ digit_1370,3
1373
+ digit_1371,2
1374
+ digit_1372,1
1375
+ digit_1373,7
1376
+ digit_1374,4
1377
+ digit_1375,6
1378
+ digit_1376,3
1379
+ digit_1377,1
1380
+ digit_1378,3
1381
+ digit_1379,9
1382
+ digit_1380,1
1383
+ digit_1381,7
1384
+ digit_1382,6
1385
+ digit_1383,8
1386
+ digit_1384,4
1387
+ digit_1385,3
1388
+ digit_1386,1
1389
+ digit_1387,4
1390
+ digit_1388,0
1391
+ digit_1389,5
1392
+ digit_1390,3
1393
+ digit_1391,6
1394
+ digit_1392,9
1395
+ digit_1393,6
1396
+ digit_1394,1
1397
+ digit_1395,7
1398
+ digit_1396,5
1399
+ digit_1397,4
1400
+ digit_1398,4
1401
+ digit_1399,7
1402
+ digit_1400,2
1403
+ digit_1401,8
1404
+ digit_1402,2
1405
+ digit_1403,2
1406
+ digit_1404,5
1407
+ digit_1405,7
1408
+ digit_1406,9
1409
+ digit_1407,5
1410
+ digit_1408,4
1411
+ digit_1409,8
1412
+ digit_1410,8
1413
+ digit_1411,4
1414
+ digit_1412,9
1415
+ digit_1413,0
1416
+ digit_1414,8
1417
+ digit_1415,0
1418
+ digit_1416,1
1419
+ digit_1417,2
1420
+ digit_1418,3
1421
+ digit_1419,4
1422
+ digit_1420,5
1423
+ digit_1421,6
1424
+ digit_1422,7
1425
+ digit_1423,8
1426
+ digit_1424,9
1427
+ digit_1425,0
1428
+ digit_1426,1
1429
+ digit_1427,2
1430
+ digit_1428,3
1431
+ digit_1429,4
1432
+ digit_1430,5
1433
+ digit_1431,6
1434
+ digit_1432,7
1435
+ digit_1433,8
1436
+ digit_1434,9
1437
+ digit_1435,0
1438
+ digit_1436,1
1439
+ digit_1437,2
1440
+ digit_1438,3
1441
+ digit_1439,4
1442
+ digit_1440,5
1443
+ digit_1441,6
1444
+ digit_1442,7
1445
+ digit_1443,8
1446
+ digit_1444,9
1447
+ digit_1445,0
1448
+ digit_1446,9
1449
+ digit_1447,5
1450
+ digit_1448,5
1451
+ digit_1449,6
1452
+ digit_1450,5
1453
+ digit_1451,0
1454
+ digit_1452,9
1455
+ digit_1453,8
1456
+ digit_1454,9
1457
+ digit_1455,8
1458
+ digit_1456,4
1459
+ digit_1457,1
1460
+ digit_1458,7
1461
+ digit_1459,7
1462
+ digit_1460,3
1463
+ digit_1461,5
1464
+ digit_1462,1
1465
+ digit_1463,0
1466
+ digit_1464,0
1467
+ digit_1465,2
1468
+ digit_1466,2
1469
+ digit_1467,7
1470
+ digit_1468,8
1471
+ digit_1469,2
1472
+ digit_1470,0
1473
+ digit_1471,1
1474
+ digit_1472,2
1475
+ digit_1473,6
1476
+ digit_1474,3
1477
+ digit_1475,3
1478
+ digit_1476,7
1479
+ digit_1477,3
1480
+ digit_1478,3
1481
+ digit_1479,4
1482
+ digit_1480,6
1483
+ digit_1481,6
1484
+ digit_1482,6
1485
+ digit_1483,4
1486
+ digit_1484,9
1487
+ digit_1485,1
1488
+ digit_1486,5
1489
+ digit_1487,0
1490
+ digit_1488,9
1491
+ digit_1489,5
1492
+ digit_1490,2
1493
+ digit_1491,8
1494
+ digit_1492,2
1495
+ digit_1493,0
1496
+ digit_1494,0
1497
+ digit_1495,1
1498
+ digit_1496,7
1499
+ digit_1497,6
1500
+ digit_1498,3
1501
+ digit_1499,2
1502
+ digit_1500,1
1503
+ digit_1501,7
1504
+ digit_1502,4
1505
+ digit_1503,6
1506
+ digit_1504,3
1507
+ digit_1505,1
1508
+ digit_1506,3
1509
+ digit_1507,9
1510
+ digit_1508,1
1511
+ digit_1509,7
1512
+ digit_1510,6
1513
+ digit_1511,8
1514
+ digit_1512,4
1515
+ digit_1513,3
1516
+ digit_1514,1
1517
+ digit_1515,4
1518
+ digit_1516,0
1519
+ digit_1517,5
1520
+ digit_1518,3
1521
+ digit_1519,6
1522
+ digit_1520,9
1523
+ digit_1521,6
1524
+ digit_1522,1
1525
+ digit_1523,7
1526
+ digit_1524,5
1527
+ digit_1525,4
1528
+ digit_1526,4
1529
+ digit_1527,7
1530
+ digit_1528,2
1531
+ digit_1529,8
1532
+ digit_1530,2
1533
+ digit_1531,2
1534
+ digit_1532,5
1535
+ digit_1533,7
1536
+ digit_1534,9
1537
+ digit_1535,5
1538
+ digit_1536,4
1539
+ digit_1537,8
1540
+ digit_1538,8
1541
+ digit_1539,4
1542
+ digit_1540,9
1543
+ digit_1541,0
1544
+ digit_1542,8
1545
+ digit_1543,9
1546
+ digit_1544,8
1547
+ digit_1545,0
1548
+ digit_1546,1
1549
+ digit_1547,2
1550
+ digit_1548,3
1551
+ digit_1549,4
1552
+ digit_1550,5
1553
+ digit_1551,6
1554
+ digit_1552,7
1555
+ digit_1553,8
1556
+ digit_1554,9
1557
+ digit_1555,0
1558
+ digit_1556,1
1559
+ digit_1557,2
1560
+ digit_1558,3
1561
+ digit_1559,4
1562
+ digit_1560,5
1563
+ digit_1561,6
1564
+ digit_1562,9
1565
+ digit_1563,0
1566
+ digit_1564,1
1567
+ digit_1565,2
1568
+ digit_1566,3
1569
+ digit_1567,4
1570
+ digit_1568,5
1571
+ digit_1569,6
1572
+ digit_1570,7
1573
+ digit_1571,8
1574
+ digit_1572,9
1575
+ digit_1573,0
1576
+ digit_1574,9
1577
+ digit_1575,5
1578
+ digit_1576,5
1579
+ digit_1577,6
1580
+ digit_1578,5
1581
+ digit_1579,0
1582
+ digit_1580,9
1583
+ digit_1581,8
1584
+ digit_1582,9
1585
+ digit_1583,8
1586
+ digit_1584,4
1587
+ digit_1585,1
1588
+ digit_1586,7
1589
+ digit_1587,7
1590
+ digit_1588,3
1591
+ digit_1589,5
1592
+ digit_1590,1
1593
+ digit_1591,0
1594
+ digit_1592,0
1595
+ digit_1593,2
1596
+ digit_1594,2
1597
+ digit_1595,7
1598
+ digit_1596,8
1599
+ digit_1597,2
1600
+ digit_1598,0
1601
+ digit_1599,1
1602
+ digit_1600,2
1603
+ digit_1601,6
1604
+ digit_1602,3
1605
+ digit_1603,3
1606
+ digit_1604,7
1607
+ digit_1605,3
1608
+ digit_1606,3
1609
+ digit_1607,4
1610
+ digit_1608,6
1611
+ digit_1609,6
1612
+ digit_1610,6
1613
+ digit_1611,4
1614
+ digit_1612,9
1615
+ digit_1613,1
1616
+ digit_1614,5
1617
+ digit_1615,0
1618
+ digit_1616,9
1619
+ digit_1617,5
1620
+ digit_1618,2
1621
+ digit_1619,8
1622
+ digit_1620,0
1623
+ digit_1621,1
1624
+ digit_1622,7
1625
+ digit_1623,6
1626
+ digit_1624,3
1627
+ digit_1625,2
1628
+ digit_1626,1
1629
+ digit_1627,7
1630
+ digit_1628,4
1631
+ digit_1629,6
1632
+ digit_1630,3
1633
+ digit_1631,1
1634
+ digit_1632,3
1635
+ digit_1633,9
1636
+ digit_1634,1
1637
+ digit_1635,7
1638
+ digit_1636,6
1639
+ digit_1637,8
1640
+ digit_1638,4
1641
+ digit_1639,3
1642
+ digit_1640,1
1643
+ digit_1641,4
1644
+ digit_1642,0
1645
+ digit_1643,5
1646
+ digit_1644,3
1647
+ digit_1645,6
1648
+ digit_1646,9
1649
+ digit_1647,6
1650
+ digit_1648,1
1651
+ digit_1649,7
1652
+ digit_1650,5
1653
+ digit_1651,4
1654
+ digit_1652,4
1655
+ digit_1653,7
1656
+ digit_1654,2
1657
+ digit_1655,2
1658
+ digit_1656,5
1659
+ digit_1657,7
1660
+ digit_1658,9
1661
+ digit_1659,5
1662
+ digit_1660,4
1663
+ digit_1661,4
1664
+ digit_1662,9
1665
+ digit_1663,0
1666
+ digit_1664,8
1667
+ digit_1665,9
1668
+ digit_1666,8
1669
+ digit_1667,0
1670
+ digit_1668,1
1671
+ digit_1669,2
1672
+ digit_1670,3
1673
+ digit_1671,4
1674
+ digit_1672,5
1675
+ digit_1673,6
1676
+ digit_1674,7
1677
+ digit_1675,8
1678
+ digit_1676,9
1679
+ digit_1677,0
1680
+ digit_1678,1
1681
+ digit_1679,2
1682
+ digit_1680,3
1683
+ digit_1681,4
1684
+ digit_1682,5
1685
+ digit_1683,6
1686
+ digit_1684,7
1687
+ digit_1685,8
1688
+ digit_1686,9
1689
+ digit_1687,0
1690
+ digit_1688,1
1691
+ digit_1689,2
1692
+ digit_1690,3
1693
+ digit_1691,4
1694
+ digit_1692,5
1695
+ digit_1693,6
1696
+ digit_1694,7
1697
+ digit_1695,8
1698
+ digit_1696,9
1699
+ digit_1697,0
1700
+ digit_1698,9
1701
+ digit_1699,5
1702
+ digit_1700,5
1703
+ digit_1701,6
1704
+ digit_1702,5
1705
+ digit_1703,0
1706
+ digit_1704,9
1707
+ digit_1705,8
1708
+ digit_1706,9
1709
+ digit_1707,8
1710
+ digit_1708,4
1711
+ digit_1709,1
1712
+ digit_1710,7
1713
+ digit_1711,7
1714
+ digit_1712,3
1715
+ digit_1713,5
1716
+ digit_1714,1
1717
+ digit_1715,0
1718
+ digit_1716,0
1719
+ digit_1717,2
1720
+ digit_1718,2
1721
+ digit_1719,7
1722
+ digit_1720,8
1723
+ digit_1721,2
1724
+ digit_1722,0
1725
+ digit_1723,1
1726
+ digit_1724,2
1727
+ digit_1725,6
1728
+ digit_1726,3
1729
+ digit_1727,3
1730
+ digit_1728,7
1731
+ digit_1729,3
1732
+ digit_1730,3
1733
+ digit_1731,4
1734
+ digit_1732,6
1735
+ digit_1733,6
1736
+ digit_1734,6
1737
+ digit_1735,4
1738
+ digit_1736,9
1739
+ digit_1737,1
1740
+ digit_1738,5
1741
+ digit_1739,0
1742
+ digit_1740,9
1743
+ digit_1741,5
1744
+ digit_1742,2
1745
+ digit_1743,8
1746
+ digit_1744,2
1747
+ digit_1745,0
1748
+ digit_1746,0
1749
+ digit_1747,1
1750
+ digit_1748,7
1751
+ digit_1749,6
1752
+ digit_1750,3
1753
+ digit_1751,2
1754
+ digit_1752,1
1755
+ digit_1753,7
1756
+ digit_1754,4
1757
+ digit_1755,6
1758
+ digit_1756,3
1759
+ digit_1757,1
1760
+ digit_1758,3
1761
+ digit_1759,9
1762
+ digit_1760,1
1763
+ digit_1761,7
1764
+ digit_1762,6
1765
+ digit_1763,8
1766
+ digit_1764,4
1767
+ digit_1765,3
1768
+ digit_1766,1
1769
+ digit_1767,4
1770
+ digit_1768,0
1771
+ digit_1769,5
1772
+ digit_1770,3
1773
+ digit_1771,6
1774
+ digit_1772,9
1775
+ digit_1773,6
1776
+ digit_1774,1
1777
+ digit_1775,7
1778
+ digit_1776,5
1779
+ digit_1777,4
1780
+ digit_1778,4
1781
+ digit_1779,7
1782
+ digit_1780,2
1783
+ digit_1781,8
1784
+ digit_1782,2
1785
+ digit_1783,2
1786
+ digit_1784,5
1787
+ digit_1785,7
1788
+ digit_1786,9
1789
+ digit_1787,5
1790
+ digit_1788,4
1791
+ digit_1789,8
1792
+ digit_1790,8
1793
+ digit_1791,4
1794
+ digit_1792,9
1795
+ digit_1793,0
1796
+ digit_1794,8
1797
+ digit_1795,9
1798
+ digit_1796,8
tmp/inputs/iris_data.csv ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ,sepal length (cm),sepal width (cm),petal length (cm),petal width (cm)
2
+ sample_0,5.1,3.5,1.4,0.2
3
+ sample_1,4.9,3.0,1.4,0.2
4
+ sample_2,4.7,3.2,1.3,0.2
5
+ sample_3,4.6,3.1,1.5,0.2
6
+ sample_4,5.0,3.6,1.4,0.2
7
+ sample_5,5.4,3.9,1.7,0.4
8
+ sample_6,4.6,3.4,1.4,0.3
9
+ sample_7,5.0,3.4,1.5,0.2
10
+ sample_8,4.4,2.9,1.4,0.2
11
+ sample_9,4.9,3.1,1.5,0.1
12
+ sample_10,5.4,3.7,1.5,0.2
13
+ sample_11,4.8,3.4,1.6,0.2
14
+ sample_12,4.8,3.0,1.4,0.1
15
+ sample_13,4.3,3.0,1.1,0.1
16
+ sample_14,5.8,4.0,1.2,0.2
17
+ sample_15,5.7,4.4,1.5,0.4
18
+ sample_16,5.4,3.9,1.3,0.4
19
+ sample_17,5.1,3.5,1.4,0.3
20
+ sample_18,5.7,3.8,1.7,0.3
21
+ sample_19,5.1,3.8,1.5,0.3
22
+ sample_20,5.4,3.4,1.7,0.2
23
+ sample_21,5.1,3.7,1.5,0.4
24
+ sample_22,4.6,3.6,1.0,0.2
25
+ sample_23,5.1,3.3,1.7,0.5
26
+ sample_24,4.8,3.4,1.9,0.2
27
+ sample_25,5.0,3.0,1.6,0.2
28
+ sample_26,5.0,3.4,1.6,0.4
29
+ sample_27,5.2,3.5,1.5,0.2
30
+ sample_28,5.2,3.4,1.4,0.2
31
+ sample_29,4.7,3.2,1.6,0.2
32
+ sample_30,4.8,3.1,1.6,0.2
33
+ sample_31,5.4,3.4,1.5,0.4
34
+ sample_32,5.2,4.1,1.5,0.1
35
+ sample_33,5.5,4.2,1.4,0.2
36
+ sample_34,4.9,3.1,1.5,0.2
37
+ sample_35,5.0,3.2,1.2,0.2
38
+ sample_36,5.5,3.5,1.3,0.2
39
+ sample_37,4.9,3.6,1.4,0.1
40
+ sample_38,4.4,3.0,1.3,0.2
41
+ sample_39,5.1,3.4,1.5,0.2
42
+ sample_40,5.0,3.5,1.3,0.3
43
+ sample_41,4.5,2.3,1.3,0.3
44
+ sample_42,4.4,3.2,1.3,0.2
45
+ sample_43,5.0,3.5,1.6,0.6
46
+ sample_44,5.1,3.8,1.9,0.4
47
+ sample_45,4.8,3.0,1.4,0.3
48
+ sample_46,5.1,3.8,1.6,0.2
49
+ sample_47,4.6,3.2,1.4,0.2
50
+ sample_48,5.3,3.7,1.5,0.2
51
+ sample_49,5.0,3.3,1.4,0.2
52
+ sample_50,7.0,3.2,4.7,1.4
53
+ sample_51,6.4,3.2,4.5,1.5
54
+ sample_52,6.9,3.1,4.9,1.5
55
+ sample_53,5.5,2.3,4.0,1.3
56
+ sample_54,6.5,2.8,4.6,1.5
57
+ sample_55,5.7,2.8,4.5,1.3
58
+ sample_56,6.3,3.3,4.7,1.6
59
+ sample_57,4.9,2.4,3.3,1.0
60
+ sample_58,6.6,2.9,4.6,1.3
61
+ sample_59,5.2,2.7,3.9,1.4
62
+ sample_60,5.0,2.0,3.5,1.0
63
+ sample_61,5.9,3.0,4.2,1.5
64
+ sample_62,6.0,2.2,4.0,1.0
65
+ sample_63,6.1,2.9,4.7,1.4
66
+ sample_64,5.6,2.9,3.6,1.3
67
+ sample_65,6.7,3.1,4.4,1.4
68
+ sample_66,5.6,3.0,4.5,1.5
69
+ sample_67,5.8,2.7,4.1,1.0
70
+ sample_68,6.2,2.2,4.5,1.5
71
+ sample_69,5.6,2.5,3.9,1.1
72
+ sample_70,5.9,3.2,4.8,1.8
73
+ sample_71,6.1,2.8,4.0,1.3
74
+ sample_72,6.3,2.5,4.9,1.5
75
+ sample_73,6.1,2.8,4.7,1.2
76
+ sample_74,6.4,2.9,4.3,1.3
77
+ sample_75,6.6,3.0,4.4,1.4
78
+ sample_76,6.8,2.8,4.8,1.4
79
+ sample_77,6.7,3.0,5.0,1.7
80
+ sample_78,6.0,2.9,4.5,1.5
81
+ sample_79,5.7,2.6,3.5,1.0
82
+ sample_80,5.5,2.4,3.8,1.1
83
+ sample_81,5.5,2.4,3.7,1.0
84
+ sample_82,5.8,2.7,3.9,1.2
85
+ sample_83,6.0,2.7,5.1,1.6
86
+ sample_84,5.4,3.0,4.5,1.5
87
+ sample_85,6.0,3.4,4.5,1.6
88
+ sample_86,6.7,3.1,4.7,1.5
89
+ sample_87,6.3,2.3,4.4,1.3
90
+ sample_88,5.6,3.0,4.1,1.3
91
+ sample_89,5.5,2.5,4.0,1.3
92
+ sample_90,5.5,2.6,4.4,1.2
93
+ sample_91,6.1,3.0,4.6,1.4
94
+ sample_92,5.8,2.6,4.0,1.2
95
+ sample_93,5.0,2.3,3.3,1.0
96
+ sample_94,5.6,2.7,4.2,1.3
97
+ sample_95,5.7,3.0,4.2,1.2
98
+ sample_96,5.7,2.9,4.2,1.3
99
+ sample_97,6.2,2.9,4.3,1.3
100
+ sample_98,5.1,2.5,3.0,1.1
101
+ sample_99,5.7,2.8,4.1,1.3
102
+ sample_100,6.3,3.3,6.0,2.5
103
+ sample_101,5.8,2.7,5.1,1.9
104
+ sample_102,7.1,3.0,5.9,2.1
105
+ sample_103,6.3,2.9,5.6,1.8
106
+ sample_104,6.5,3.0,5.8,2.2
107
+ sample_105,7.6,3.0,6.6,2.1
108
+ sample_106,4.9,2.5,4.5,1.7
109
+ sample_107,7.3,2.9,6.3,1.8
110
+ sample_108,6.7,2.5,5.8,1.8
111
+ sample_109,7.2,3.6,6.1,2.5
112
+ sample_110,6.5,3.2,5.1,2.0
113
+ sample_111,6.4,2.7,5.3,1.9
114
+ sample_112,6.8,3.0,5.5,2.1
115
+ sample_113,5.7,2.5,5.0,2.0
116
+ sample_114,5.8,2.8,5.1,2.4
117
+ sample_115,6.4,3.2,5.3,2.3
118
+ sample_116,6.5,3.0,5.5,1.8
119
+ sample_117,7.7,3.8,6.7,2.2
120
+ sample_118,7.7,2.6,6.9,2.3
121
+ sample_119,6.0,2.2,5.0,1.5
122
+ sample_120,6.9,3.2,5.7,2.3
123
+ sample_121,5.6,2.8,4.9,2.0
124
+ sample_122,7.7,2.8,6.7,2.0
125
+ sample_123,6.3,2.7,4.9,1.8
126
+ sample_124,6.7,3.3,5.7,2.1
127
+ sample_125,7.2,3.2,6.0,1.8
128
+ sample_126,6.2,2.8,4.8,1.8
129
+ sample_127,6.1,3.0,4.9,1.8
130
+ sample_128,6.4,2.8,5.6,2.1
131
+ sample_129,7.2,3.0,5.8,1.6
132
+ sample_130,7.4,2.8,6.1,1.9
133
+ sample_131,7.9,3.8,6.4,2.0
134
+ sample_132,6.4,2.8,5.6,2.2
135
+ sample_133,6.3,2.8,5.1,1.5
136
+ sample_134,6.1,2.6,5.6,1.4
137
+ sample_135,7.7,3.0,6.1,2.3
138
+ sample_136,6.3,3.4,5.6,2.4
139
+ sample_137,6.4,3.1,5.5,1.8
140
+ sample_138,6.0,3.0,4.8,1.8
141
+ sample_139,6.9,3.1,5.4,2.1
142
+ sample_140,6.7,3.1,5.6,2.4
143
+ sample_141,6.9,3.1,5.1,2.3
144
+ sample_142,5.8,2.7,5.1,1.9
145
+ sample_143,6.8,3.2,5.9,2.3
146
+ sample_144,6.7,3.3,5.7,2.5
147
+ sample_145,6.7,3.0,5.2,2.3
148
+ sample_146,6.3,2.5,5.0,1.9
149
+ sample_147,6.5,3.0,5.2,2.0
150
+ sample_148,6.2,3.4,5.4,2.3
151
+ sample_149,5.9,3.0,5.1,1.8
tmp/inputs/iris_labels.csv ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ,label
2
+ sample_0,setosa
3
+ sample_1,setosa
4
+ sample_2,setosa
5
+ sample_3,setosa
6
+ sample_4,setosa
7
+ sample_5,setosa
8
+ sample_6,setosa
9
+ sample_7,setosa
10
+ sample_8,setosa
11
+ sample_9,setosa
12
+ sample_10,setosa
13
+ sample_11,setosa
14
+ sample_12,setosa
15
+ sample_13,setosa
16
+ sample_14,setosa
17
+ sample_15,setosa
18
+ sample_16,setosa
19
+ sample_17,setosa
20
+ sample_18,setosa
21
+ sample_19,setosa
22
+ sample_20,setosa
23
+ sample_21,setosa
24
+ sample_22,setosa
25
+ sample_23,setosa
26
+ sample_24,setosa
27
+ sample_25,setosa
28
+ sample_26,setosa
29
+ sample_27,setosa
30
+ sample_28,setosa
31
+ sample_29,setosa
32
+ sample_30,setosa
33
+ sample_31,setosa
34
+ sample_32,setosa
35
+ sample_33,setosa
36
+ sample_34,setosa
37
+ sample_35,setosa
38
+ sample_36,setosa
39
+ sample_37,setosa
40
+ sample_38,setosa
41
+ sample_39,setosa
42
+ sample_40,setosa
43
+ sample_41,setosa
44
+ sample_42,setosa
45
+ sample_43,setosa
46
+ sample_44,setosa
47
+ sample_45,setosa
48
+ sample_46,setosa
49
+ sample_47,setosa
50
+ sample_48,setosa
51
+ sample_49,setosa
52
+ sample_50,versicolor
53
+ sample_51,versicolor
54
+ sample_52,versicolor
55
+ sample_53,versicolor
56
+ sample_54,versicolor
57
+ sample_55,versicolor
58
+ sample_56,versicolor
59
+ sample_57,versicolor
60
+ sample_58,versicolor
61
+ sample_59,versicolor
62
+ sample_60,versicolor
63
+ sample_61,versicolor
64
+ sample_62,versicolor
65
+ sample_63,versicolor
66
+ sample_64,versicolor
67
+ sample_65,versicolor
68
+ sample_66,versicolor
69
+ sample_67,versicolor
70
+ sample_68,versicolor
71
+ sample_69,versicolor
72
+ sample_70,versicolor
73
+ sample_71,versicolor
74
+ sample_72,versicolor
75
+ sample_73,versicolor
76
+ sample_74,versicolor
77
+ sample_75,versicolor
78
+ sample_76,versicolor
79
+ sample_77,versicolor
80
+ sample_78,versicolor
81
+ sample_79,versicolor
82
+ sample_80,versicolor
83
+ sample_81,versicolor
84
+ sample_82,versicolor
85
+ sample_83,versicolor
86
+ sample_84,versicolor
87
+ sample_85,versicolor
88
+ sample_86,versicolor
89
+ sample_87,versicolor
90
+ sample_88,versicolor
91
+ sample_89,versicolor
92
+ sample_90,versicolor
93
+ sample_91,versicolor
94
+ sample_92,versicolor
95
+ sample_93,versicolor
96
+ sample_94,versicolor
97
+ sample_95,versicolor
98
+ sample_96,versicolor
99
+ sample_97,versicolor
100
+ sample_98,versicolor
101
+ sample_99,versicolor
102
+ sample_100,virginica
103
+ sample_101,virginica
104
+ sample_102,virginica
105
+ sample_103,virginica
106
+ sample_104,virginica
107
+ sample_105,virginica
108
+ sample_106,virginica
109
+ sample_107,virginica
110
+ sample_108,virginica
111
+ sample_109,virginica
112
+ sample_110,virginica
113
+ sample_111,virginica
114
+ sample_112,virginica
115
+ sample_113,virginica
116
+ sample_114,virginica
117
+ sample_115,virginica
118
+ sample_116,virginica
119
+ sample_117,virginica
120
+ sample_118,virginica
121
+ sample_119,virginica
122
+ sample_120,virginica
123
+ sample_121,virginica
124
+ sample_122,virginica
125
+ sample_123,virginica
126
+ sample_124,virginica
127
+ sample_125,virginica
128
+ sample_126,virginica
129
+ sample_127,virginica
130
+ sample_128,virginica
131
+ sample_129,virginica
132
+ sample_130,virginica
133
+ sample_131,virginica
134
+ sample_132,virginica
135
+ sample_133,virginica
136
+ sample_134,virginica
137
+ sample_135,virginica
138
+ sample_136,virginica
139
+ sample_137,virginica
140
+ sample_138,virginica
141
+ sample_139,virginica
142
+ sample_140,virginica
143
+ sample_141,virginica
144
+ sample_142,virginica
145
+ sample_143,virginica
146
+ sample_144,virginica
147
+ sample_145,virginica
148
+ sample_146,virginica
149
+ sample_147,virginica
150
+ sample_148,virginica
151
+ sample_149,virginica