matplotly 0.1.2__tar.gz → 0.1.3__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.
Files changed (56) hide show
  1. {matplotly-0.1.2 → matplotly-0.1.3}/PKG-INFO +17 -1
  2. {matplotly-0.1.2 → matplotly-0.1.3}/README.md +11 -0
  3. {matplotly-0.1.2 → matplotly-0.1.3}/examples/demo_bar.ipynb +2 -2
  4. {matplotly-0.1.2 → matplotly-0.1.3}/examples/demo_plot.ipynb +57 -30
  5. matplotly-0.1.3/matplotly/_ai_extract.py +1172 -0
  6. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/_api.py +5 -1
  7. matplotly-0.1.3/matplotly/_profiles.py +228 -0
  8. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_global.py +13 -7
  9. {matplotly-0.1.2 → matplotly-0.1.3}/pyproject.toml +7 -1
  10. matplotly-0.1.3/tests/test_ai_extract.py +375 -0
  11. matplotly-0.1.2/matplotly/_profiles.py +0 -241
  12. matplotly-0.1.2/matplotly/_style_import.py +0 -155
  13. {matplotly-0.1.2 → matplotly-0.1.3}/.github/workflows/publish.yml +0 -0
  14. {matplotly-0.1.2 → matplotly-0.1.3}/.github/workflows/tests.yml +0 -0
  15. {matplotly-0.1.2 → matplotly-0.1.3}/.gitignore +0 -0
  16. {matplotly-0.1.2 → matplotly-0.1.3}/.readthedocs.yaml +0 -0
  17. {matplotly-0.1.2 → matplotly-0.1.3}/CHANGELOG.md +0 -0
  18. {matplotly-0.1.2 → matplotly-0.1.3}/LICENSE +0 -0
  19. {matplotly-0.1.2 → matplotly-0.1.3}/demo_box.ipynb +0 -0
  20. {matplotly-0.1.2 → matplotly-0.1.3}/demo_plot.ipynb +0 -0
  21. {matplotly-0.1.2 → matplotly-0.1.3}/demo_scatter.ipynb +0 -0
  22. {matplotly-0.1.2 → matplotly-0.1.3}/docs/api.rst +0 -0
  23. {matplotly-0.1.2 → matplotly-0.1.3}/docs/changelog.rst +0 -0
  24. {matplotly-0.1.2 → matplotly-0.1.3}/docs/conf.py +0 -0
  25. {matplotly-0.1.2 → matplotly-0.1.3}/docs/examples/index.rst +0 -0
  26. {matplotly-0.1.2 → matplotly-0.1.3}/docs/index.rst +0 -0
  27. {matplotly-0.1.2 → matplotly-0.1.3}/docs/installation.rst +0 -0
  28. {matplotly-0.1.2 → matplotly-0.1.3}/docs/quickstart.rst +0 -0
  29. {matplotly-0.1.2 → matplotly-0.1.3}/docs/requirements.txt +0 -0
  30. {matplotly-0.1.2 → matplotly-0.1.3}/examples/demo_box.ipynb +0 -0
  31. {matplotly-0.1.2 → matplotly-0.1.3}/examples/demo_errorbar.ipynb +0 -0
  32. {matplotly-0.1.2 → matplotly-0.1.3}/examples/demo_heatmap.ipynb +0 -0
  33. {matplotly-0.1.2 → matplotly-0.1.3}/examples/demo_hist.ipynb +0 -0
  34. {matplotly-0.1.2 → matplotly-0.1.3}/examples/demo_scatter.ipynb +0 -0
  35. {matplotly-0.1.2 → matplotly-0.1.3}/examples/matplotly_demo.ipynb +0 -0
  36. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/__init__.py +0 -0
  37. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/_code_gen.py +0 -0
  38. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/_commands.py +0 -0
  39. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/_introspect.py +0 -0
  40. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/_renderer.py +0 -0
  41. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/_types.py +0 -0
  42. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/__init__.py +0 -0
  43. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_bar.py +0 -0
  44. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_base.py +0 -0
  45. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_color_utils.py +0 -0
  46. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_distribution.py +0 -0
  47. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_errorbar.py +0 -0
  48. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_fill.py +0 -0
  49. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_heatmap.py +0 -0
  50. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_histogram.py +0 -0
  51. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_line.py +0 -0
  52. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_marginal.py +0 -0
  53. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_scatter.py +0 -0
  54. {matplotly-0.1.2 → matplotly-0.1.3}/matplotly/panels/_subplot.py +0 -0
  55. {matplotly-0.1.2 → matplotly-0.1.3}/requirements.txt +0 -0
  56. {matplotly-0.1.2 → matplotly-0.1.3}/tests/test_code_gen.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matplotly
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Jupyter-native interactive matplotlib figure editor
5
5
  Project-URL: Homepage, https://github.com/p-koo/matplotly
6
6
  Project-URL: Documentation, https://matplotly.readthedocs.io
@@ -24,6 +24,11 @@ Requires-Dist: ipympl>=0.9.0
24
24
  Requires-Dist: ipywidgets>=8.0.0
25
25
  Requires-Dist: matplotlib>=3.8.0
26
26
  Requires-Dist: numpy>=1.24.0
27
+ Provides-Extra: ai
28
+ Requires-Dist: anthropic>=0.39.0; extra == 'ai'
29
+ Requires-Dist: openai>=1.0.0; extra == 'ai'
30
+ Requires-Dist: pillow>=9.0; extra == 'ai'
31
+ Requires-Dist: pymupdf>=1.23.0; extra == 'ai'
27
32
  Provides-Extra: dev
28
33
  Requires-Dist: pytest>=7.0; extra == 'dev'
29
34
  Requires-Dist: ruff>=0.4.0; extra == 'dev'
@@ -50,6 +55,7 @@ reproducible Python code. No separate GUI; everything runs inline in your notebo
50
55
  ## Features
51
56
 
52
57
  - **10+ plot types**: line, scatter, bar, histogram, box, violin, errorbar, heatmap, fill, marginal
58
+ - **AI style extraction**: upload a reference plot image and automatically match its style (fonts, colors, spines, ticks, legend, etc.) using Claude or GPT vision models
53
59
  - **Code generation**: export a standalone Python script that recreates your styled figure
54
60
  - **Undo / redo**: full command history with keyboard shortcuts
55
61
  - **Style profiles**: save and load reusable figure styles
@@ -107,6 +113,16 @@ with matplotly() as pb:
107
113
  | Fill | `ax.fill_between()` / `ax.fill_betweenx()` |
108
114
  | Marginal | Joint + marginal distribution plots |
109
115
 
116
+ ## AI Style Extraction
117
+
118
+ Upload a reference plot image and let an AI vision model extract its style — fonts, colors, spines, ticks, grid, legend, and more — then apply it to your figure in one click.
119
+
120
+ ```bash
121
+ pip install matplotly[ai]
122
+ ```
123
+
124
+ Supports **Anthropic** (Claude) and **OpenAI** (GPT-4o, GPT-5) as providers. Two-pass extraction: the first pass extracts style parameters, the second pass verifies and corrects them. Extracted styles can be downloaded as JSON profiles for reuse without further API calls.
125
+
110
126
  ## Documentation
111
127
 
112
128
  Full documentation is available at [matplotly.readthedocs.io](https://matplotly.readthedocs.io).
@@ -14,6 +14,7 @@ reproducible Python code. No separate GUI; everything runs inline in your notebo
14
14
  ## Features
15
15
 
16
16
  - **10+ plot types**: line, scatter, bar, histogram, box, violin, errorbar, heatmap, fill, marginal
17
+ - **AI style extraction**: upload a reference plot image and automatically match its style (fonts, colors, spines, ticks, legend, etc.) using Claude or GPT vision models
17
18
  - **Code generation**: export a standalone Python script that recreates your styled figure
18
19
  - **Undo / redo**: full command history with keyboard shortcuts
19
20
  - **Style profiles**: save and load reusable figure styles
@@ -71,6 +72,16 @@ with matplotly() as pb:
71
72
  | Fill | `ax.fill_between()` / `ax.fill_betweenx()` |
72
73
  | Marginal | Joint + marginal distribution plots |
73
74
 
75
+ ## AI Style Extraction
76
+
77
+ Upload a reference plot image and let an AI vision model extract its style — fonts, colors, spines, ticks, grid, legend, and more — then apply it to your figure in one click.
78
+
79
+ ```bash
80
+ pip install matplotly[ai]
81
+ ```
82
+
83
+ Supports **Anthropic** (Claude) and **OpenAI** (GPT-4o, GPT-5) as providers. Two-pass extraction: the first pass extracts style parameters, the second pass verifies and corrects them. Extracted styles can be downloaded as JSON profiles for reuse without further API calls.
84
+
74
85
  ## Documentation
75
86
 
76
87
  Full documentation is available at [matplotly.readthedocs.io](https://matplotly.readthedocs.io).
@@ -35,14 +35,14 @@
35
35
  },
36
36
  {
37
37
  "cell_type": "code",
38
- "execution_count": 5,
38
+ "execution_count": 3,
39
39
  "id": "simple-bar",
40
40
  "metadata": {},
41
41
  "outputs": [
42
42
  {
43
43
  "data": {
44
44
  "application/vnd.jupyter.widget-view+json": {
45
- "model_id": "6346d295b9bd476f902410ea0d56efaa",
45
+ "model_id": "72d2e487e8d6427caf5afb34abd724ed",
46
46
  "version_major": 2,
47
47
  "version_minor": 0
48
48
  },