figrecipe 0.18.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.
Files changed (542) hide show
  1. figrecipe-0.18.0/.github/ISSUE_TEMPLATE/bug_report.md +52 -0
  2. figrecipe-0.18.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  3. figrecipe-0.18.0/.github/ISSUE_TEMPLATE/feature_request.md +33 -0
  4. figrecipe-0.18.0/.github/PULL_REQUEST_TEMPLATE.md +34 -0
  5. figrecipe-0.18.0/.github/workflows/gallery.yml +89 -0
  6. figrecipe-0.18.0/.github/workflows/test.yml +60 -0
  7. figrecipe-0.18.0/.gitignore +792 -0
  8. figrecipe-0.18.0/.pre-commit-config.yaml +26 -0
  9. figrecipe-0.18.0/CHANGELOG.md +371 -0
  10. figrecipe-0.18.0/CITATION.cff +30 -0
  11. figrecipe-0.18.0/CONTRIBUTING.md +190 -0
  12. figrecipe-0.18.0/LICENSE +661 -0
  13. figrecipe-0.18.0/Makefile +81 -0
  14. figrecipe-0.18.0/PKG-INFO +296 -0
  15. figrecipe-0.18.0/README.md +220 -0
  16. figrecipe-0.18.0/docs/bgm/README.md +13 -0
  17. figrecipe-0.18.0/docs/bgm/smile.mp3 +0 -0
  18. figrecipe-0.18.0/docs/layout_and_cropping.md +277 -0
  19. figrecipe-0.18.0/docs/to_claude/examples/example-python-project-scitex/data/.gitkeep +0 -0
  20. figrecipe-0.18.0/docs/to_claude/examples/pip-project-template/.pre-commit-config.yaml +65 -0
  21. figrecipe-0.18.0/docs/to_claude/examples/pip-project-template/pyproject.toml +160 -0
  22. figrecipe-0.18.0/examples/00_run_all.sh +93 -0
  23. figrecipe-0.18.0/examples/01_all_plots.py +58 -0
  24. figrecipe-0.18.0/examples/01_all_plots_out/plot_acorr.png +0 -0
  25. figrecipe-0.18.0/examples/01_all_plots_out/plot_angle_spectrum.png +0 -0
  26. figrecipe-0.18.0/examples/01_all_plots_out/plot_bar.png +0 -0
  27. figrecipe-0.18.0/examples/01_all_plots_out/plot_barbs.png +0 -0
  28. figrecipe-0.18.0/examples/01_all_plots_out/plot_barh.png +0 -0
  29. figrecipe-0.18.0/examples/01_all_plots_out/plot_boxplot.png +0 -0
  30. figrecipe-0.18.0/examples/01_all_plots_out/plot_cohere.png +0 -0
  31. figrecipe-0.18.0/examples/01_all_plots_out/plot_contour.png +0 -0
  32. figrecipe-0.18.0/examples/01_all_plots_out/plot_contourf.png +0 -0
  33. figrecipe-0.18.0/examples/01_all_plots_out/plot_csd.png +0 -0
  34. figrecipe-0.18.0/examples/01_all_plots_out/plot_ecdf.png +0 -0
  35. figrecipe-0.18.0/examples/01_all_plots_out/plot_errorbar.png +0 -0
  36. figrecipe-0.18.0/examples/01_all_plots_out/plot_eventplot.png +0 -0
  37. figrecipe-0.18.0/examples/01_all_plots_out/plot_fill.png +0 -0
  38. figrecipe-0.18.0/examples/01_all_plots_out/plot_fill_between.png +0 -0
  39. figrecipe-0.18.0/examples/01_all_plots_out/plot_fill_betweenx.png +0 -0
  40. figrecipe-0.18.0/examples/01_all_plots_out/plot_graph.png +0 -0
  41. figrecipe-0.18.0/examples/01_all_plots_out/plot_hexbin.png +0 -0
  42. figrecipe-0.18.0/examples/01_all_plots_out/plot_hist.png +0 -0
  43. figrecipe-0.18.0/examples/01_all_plots_out/plot_hist2d.png +0 -0
  44. figrecipe-0.18.0/examples/01_all_plots_out/plot_imshow.png +0 -0
  45. figrecipe-0.18.0/examples/01_all_plots_out/plot_loglog.png +0 -0
  46. figrecipe-0.18.0/examples/01_all_plots_out/plot_magnitude_spectrum.png +0 -0
  47. figrecipe-0.18.0/examples/01_all_plots_out/plot_matshow.png +0 -0
  48. figrecipe-0.18.0/examples/01_all_plots_out/plot_pcolor.png +0 -0
  49. figrecipe-0.18.0/examples/01_all_plots_out/plot_pcolormesh.png +0 -0
  50. figrecipe-0.18.0/examples/01_all_plots_out/plot_phase_spectrum.png +0 -0
  51. figrecipe-0.18.0/examples/01_all_plots_out/plot_pie.png +0 -0
  52. figrecipe-0.18.0/examples/01_all_plots_out/plot_plot.png +0 -0
  53. figrecipe-0.18.0/examples/01_all_plots_out/plot_psd.png +0 -0
  54. figrecipe-0.18.0/examples/01_all_plots_out/plot_quiver.png +0 -0
  55. figrecipe-0.18.0/examples/01_all_plots_out/plot_scatter.png +0 -0
  56. figrecipe-0.18.0/examples/01_all_plots_out/plot_semilogx.png +0 -0
  57. figrecipe-0.18.0/examples/01_all_plots_out/plot_semilogy.png +0 -0
  58. figrecipe-0.18.0/examples/01_all_plots_out/plot_specgram.png +0 -0
  59. figrecipe-0.18.0/examples/01_all_plots_out/plot_spy.png +0 -0
  60. figrecipe-0.18.0/examples/01_all_plots_out/plot_stackplot.png +0 -0
  61. figrecipe-0.18.0/examples/01_all_plots_out/plot_stairs.png +0 -0
  62. figrecipe-0.18.0/examples/01_all_plots_out/plot_stem.png +0 -0
  63. figrecipe-0.18.0/examples/01_all_plots_out/plot_step.png +0 -0
  64. figrecipe-0.18.0/examples/01_all_plots_out/plot_streamplot.png +0 -0
  65. figrecipe-0.18.0/examples/01_all_plots_out/plot_tricontour.png +0 -0
  66. figrecipe-0.18.0/examples/01_all_plots_out/plot_tricontourf.png +0 -0
  67. figrecipe-0.18.0/examples/01_all_plots_out/plot_tripcolor.png +0 -0
  68. figrecipe-0.18.0/examples/01_all_plots_out/plot_triplot.png +0 -0
  69. figrecipe-0.18.0/examples/01_all_plots_out/plot_violinplot.png +0 -0
  70. figrecipe-0.18.0/examples/01_all_plots_out/plot_xcorr.png +0 -0
  71. figrecipe-0.18.0/examples/02_composition.py +96 -0
  72. figrecipe-0.18.0/examples/02_composition_out/gallery.jpg +0 -0
  73. figrecipe-0.18.0/examples/03_editor.py +136 -0
  74. figrecipe-0.18.0/examples/03_style_anatomy.py +279 -0
  75. figrecipe-0.18.0/examples/03_style_anatomy_out/scitex_anatomy.png +0 -0
  76. figrecipe-0.18.0/examples/04_mcp.org +357 -0
  77. figrecipe-0.18.0/examples/04_mcp_out/figures/demo_all_plots.py +54 -0
  78. figrecipe-0.18.0/examples/05_csv_workflow.py +215 -0
  79. figrecipe-0.18.0/examples/05_csv_workflow_out/csv_workflow_demo.png +0 -0
  80. figrecipe-0.18.0/examples/05_csv_workflow_out/python_api_demo.png +0 -0
  81. figrecipe-0.18.0/examples/06_diagram.py +224 -0
  82. figrecipe-0.18.0/examples/06_diagram_out/decision_tree.mmd +19 -0
  83. figrecipe-0.18.0/examples/06_diagram_out/decision_tree.png +0 -0
  84. figrecipe-0.18.0/examples/06_diagram_out/neural_net.mmd +21 -0
  85. figrecipe-0.18.0/examples/06_diagram_out/pipeline.dot +20 -0
  86. figrecipe-0.18.0/examples/06_diagram_out/pipeline.mmd +14 -0
  87. figrecipe-0.18.0/examples/06_diagram_out/pipeline.png +0 -0
  88. figrecipe-0.18.0/examples/06_diagram_out/scientific_workflow.mmd +18 -0
  89. figrecipe-0.18.0/examples/07_video_demos/01_enable_dark_mode.py +83 -0
  90. figrecipe-0.18.0/examples/07_video_demos/02_change_color.py +113 -0
  91. figrecipe-0.18.0/examples/07_video_demos/03_datatable_import.py +82 -0
  92. figrecipe-0.18.0/examples/07_video_demos/04_image_drop.py +67 -0
  93. figrecipe-0.18.0/examples/07_video_demos/05_panel_drag.py +95 -0
  94. figrecipe-0.18.0/examples/07_video_demos/06_file_browser.py +67 -0
  95. figrecipe-0.18.0/examples/07_video_demos/__init__.py +9 -0
  96. figrecipe-0.18.0/examples/07_video_demos/add_narration.py +119 -0
  97. figrecipe-0.18.0/examples/07_video_demos/process_all_demos.py +270 -0
  98. figrecipe-0.18.0/examples/07_video_demos/run_all.py +194 -0
  99. figrecipe-0.18.0/pyproject.toml +130 -0
  100. figrecipe-0.18.0/scripts/gui_periodic.sh +42 -0
  101. figrecipe-0.18.0/scripts/maintenance/clean-outputs.sh +31 -0
  102. figrecipe-0.18.0/scripts/maintenance/clean.sh +48 -0
  103. figrecipe-0.18.0/scripts/maintenance/demo-gui-browser.sh +41 -0
  104. figrecipe-0.18.0/scripts/maintenance/demo-gui-periodic.sh +30 -0
  105. figrecipe-0.18.0/scripts/maintenance/demo-gui.sh +32 -0
  106. figrecipe-0.18.0/scripts/maintenance/format.sh +31 -0
  107. figrecipe-0.18.0/scripts/maintenance/install-dev.sh +31 -0
  108. figrecipe-0.18.0/scripts/maintenance/install.sh +31 -0
  109. figrecipe-0.18.0/scripts/maintenance/install_arial.sh +86 -0
  110. figrecipe-0.18.0/scripts/maintenance/lint-fix.sh +31 -0
  111. figrecipe-0.18.0/scripts/maintenance/lint.sh +36 -0
  112. figrecipe-0.18.0/scripts/maintenance/notebook.sh +36 -0
  113. figrecipe-0.18.0/scripts/maintenance/pdf.sh +37 -0
  114. figrecipe-0.18.0/scripts/maintenance/pre-commit.sh +32 -0
  115. figrecipe-0.18.0/scripts/maintenance/test.sh +36 -0
  116. figrecipe-0.18.0/scripts/restart_gui.sh +13 -0
  117. figrecipe-0.18.0/src/figrecipe/__init__.py +516 -0
  118. figrecipe-0.18.0/src/figrecipe/__main__.py +12 -0
  119. figrecipe-0.18.0/src/figrecipe/_api/__init__.py +48 -0
  120. figrecipe-0.18.0/src/figrecipe/_api/_compose/__init__.py +159 -0
  121. figrecipe-0.18.0/src/figrecipe/_api/_compose/_freeform.py +154 -0
  122. figrecipe-0.18.0/src/figrecipe/_api/_compose/_grid.py +102 -0
  123. figrecipe-0.18.0/src/figrecipe/_api/_compose/_utils.py +327 -0
  124. figrecipe-0.18.0/src/figrecipe/_api/_extract.py +108 -0
  125. figrecipe-0.18.0/src/figrecipe/_api/_notebook.py +61 -0
  126. figrecipe-0.18.0/src/figrecipe/_api/_panel.py +113 -0
  127. figrecipe-0.18.0/src/figrecipe/_api/_plot.py +320 -0
  128. figrecipe-0.18.0/src/figrecipe/_api/_plot_helpers.py +379 -0
  129. figrecipe-0.18.0/src/figrecipe/_api/_save.py +392 -0
  130. figrecipe-0.18.0/src/figrecipe/_api/_save_helpers.py +252 -0
  131. figrecipe-0.18.0/src/figrecipe/_api/_seaborn_proxy.py +34 -0
  132. figrecipe-0.18.0/src/figrecipe/_api/_style_manager.py +177 -0
  133. figrecipe-0.18.0/src/figrecipe/_api/_subplots.py +342 -0
  134. figrecipe-0.18.0/src/figrecipe/_api/_validate.py +82 -0
  135. figrecipe-0.18.0/src/figrecipe/_branding.py +256 -0
  136. figrecipe-0.18.0/src/figrecipe/_cli/__init__.py +7 -0
  137. figrecipe-0.18.0/src/figrecipe/_cli/_completion.py +162 -0
  138. figrecipe-0.18.0/src/figrecipe/_cli/_compose.py +87 -0
  139. figrecipe-0.18.0/src/figrecipe/_cli/_convert.py +117 -0
  140. figrecipe-0.18.0/src/figrecipe/_cli/_crop.py +82 -0
  141. figrecipe-0.18.0/src/figrecipe/_cli/_diagram.py +284 -0
  142. figrecipe-0.18.0/src/figrecipe/_cli/_edit.py +70 -0
  143. figrecipe-0.18.0/src/figrecipe/_cli/_extract.py +128 -0
  144. figrecipe-0.18.0/src/figrecipe/_cli/_fonts.py +47 -0
  145. figrecipe-0.18.0/src/figrecipe/_cli/_info.py +67 -0
  146. figrecipe-0.18.0/src/figrecipe/_cli/_main.py +98 -0
  147. figrecipe-0.18.0/src/figrecipe/_cli/_mcp.py +119 -0
  148. figrecipe-0.18.0/src/figrecipe/_cli/_plot.py +132 -0
  149. figrecipe-0.18.0/src/figrecipe/_cli/_reproduce.py +79 -0
  150. figrecipe-0.18.0/src/figrecipe/_cli/_style.py +113 -0
  151. figrecipe-0.18.0/src/figrecipe/_cli/_validate.py +66 -0
  152. figrecipe-0.18.0/src/figrecipe/_cli/_version.py +50 -0
  153. figrecipe-0.18.0/src/figrecipe/_composition/__init__.py +38 -0
  154. figrecipe-0.18.0/src/figrecipe/_composition/_alignment.py +452 -0
  155. figrecipe-0.18.0/src/figrecipe/_composition/_compose.py +356 -0
  156. figrecipe-0.18.0/src/figrecipe/_composition/_import_axes.py +127 -0
  157. figrecipe-0.18.0/src/figrecipe/_composition/_visibility.py +125 -0
  158. figrecipe-0.18.0/src/figrecipe/_dev/__init__.py +31 -0
  159. figrecipe-0.18.0/src/figrecipe/_dev/_plotters.py +76 -0
  160. figrecipe-0.18.0/src/figrecipe/_dev/_run_demos.py +69 -0
  161. figrecipe-0.18.0/src/figrecipe/_dev/browser/__init__.py +69 -0
  162. figrecipe-0.18.0/src/figrecipe/_dev/browser/_audio.py +240 -0
  163. figrecipe-0.18.0/src/figrecipe/_dev/browser/_caption.py +356 -0
  164. figrecipe-0.18.0/src/figrecipe/_dev/browser/_click_effect.py +146 -0
  165. figrecipe-0.18.0/src/figrecipe/_dev/browser/_cursor.py +196 -0
  166. figrecipe-0.18.0/src/figrecipe/_dev/browser/_highlight.py +105 -0
  167. figrecipe-0.18.0/src/figrecipe/_dev/browser/_narration.py +237 -0
  168. figrecipe-0.18.0/src/figrecipe/_dev/browser/_recorder.py +494 -0
  169. figrecipe-0.18.0/src/figrecipe/_dev/browser/_utils.py +178 -0
  170. figrecipe-0.18.0/src/figrecipe/_dev/browser/_video_trim/__init__.py +152 -0
  171. figrecipe-0.18.0/src/figrecipe/_dev/browser/_video_trim/_detection.py +223 -0
  172. figrecipe-0.18.0/src/figrecipe/_dev/browser/_video_trim/_markers.py +140 -0
  173. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/__init__.py +64 -0
  174. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/_categories.py +81 -0
  175. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/_figure_creators.py +120 -0
  176. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/_helpers.py +31 -0
  177. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/_registry.py +50 -0
  178. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/bar_categorical/__init__.py +4 -0
  179. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/bar_categorical/plot_bar.py +25 -0
  180. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/bar_categorical/plot_barh.py +25 -0
  181. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/__init__.py +4 -0
  182. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_contour.py +30 -0
  183. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_contourf.py +29 -0
  184. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_tricontour.py +28 -0
  185. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_tricontourf.py +28 -0
  186. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_tripcolor.py +29 -0
  187. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_triplot.py +25 -0
  188. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/__init__.py +4 -0
  189. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/plot_boxplot.py +24 -0
  190. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/plot_ecdf.py +24 -0
  191. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/plot_hist.py +24 -0
  192. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/plot_hist2d.py +25 -0
  193. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/plot_violinplot.py +25 -0
  194. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/__init__.py +4 -0
  195. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_hexbin.py +25 -0
  196. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_imshow.py +23 -0
  197. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_matshow.py +23 -0
  198. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_pcolor.py +29 -0
  199. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_pcolormesh.py +29 -0
  200. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_spy.py +29 -0
  201. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/__init__.py +4 -0
  202. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_errorbar.py +28 -0
  203. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_fill.py +29 -0
  204. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_fill_between.py +30 -0
  205. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_fill_betweenx.py +28 -0
  206. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_plot.py +28 -0
  207. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_stackplot.py +29 -0
  208. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_stairs.py +27 -0
  209. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_step.py +27 -0
  210. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/scatter_points/__init__.py +4 -0
  211. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/scatter_points/plot_scatter.py +24 -0
  212. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/__init__.py +4 -0
  213. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_eventplot.py +25 -0
  214. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_graph.py +55 -0
  215. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_loglog.py +27 -0
  216. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_pie.py +27 -0
  217. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_semilogx.py +27 -0
  218. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_semilogy.py +27 -0
  219. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_stem.py +27 -0
  220. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/__init__.py +4 -0
  221. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_acorr.py +24 -0
  222. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_angle_spectrum.py +28 -0
  223. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_cohere.py +29 -0
  224. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_csd.py +29 -0
  225. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_magnitude_spectrum.py +28 -0
  226. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_phase_spectrum.py +28 -0
  227. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_psd.py +29 -0
  228. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_specgram.py +30 -0
  229. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_xcorr.py +25 -0
  230. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/vector_flow/__init__.py +4 -0
  231. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/vector_flow/plot_barbs.py +30 -0
  232. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/vector_flow/plot_quiver.py +30 -0
  233. figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/vector_flow/plot_streamplot.py +30 -0
  234. figrecipe-0.18.0/src/figrecipe/_diagram/__init__.py +86 -0
  235. figrecipe-0.18.0/src/figrecipe/_diagram/_compile.py +314 -0
  236. figrecipe-0.18.0/src/figrecipe/_diagram/_diagram.py +444 -0
  237. figrecipe-0.18.0/src/figrecipe/_diagram/_presets.py +245 -0
  238. figrecipe-0.18.0/src/figrecipe/_diagram/_render.py +197 -0
  239. figrecipe-0.18.0/src/figrecipe/_diagram/_schema.py +195 -0
  240. figrecipe-0.18.0/src/figrecipe/_diagram/_split.py +279 -0
  241. figrecipe-0.18.0/src/figrecipe/_editor/__init__.py +278 -0
  242. figrecipe-0.18.0/src/figrecipe/_editor/_bbox/__init__.py +43 -0
  243. figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_collections.py +177 -0
  244. figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_elements.py +159 -0
  245. figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_extract.py +402 -0
  246. figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_extract_axes.py +370 -0
  247. figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_extract_text.py +466 -0
  248. figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_lines.py +173 -0
  249. figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_transforms.py +146 -0
  250. figrecipe-0.18.0/src/figrecipe/_editor/_call_overrides.py +183 -0
  251. figrecipe-0.18.0/src/figrecipe/_editor/_datatable_plot_handlers.py +249 -0
  252. figrecipe-0.18.0/src/figrecipe/_editor/_figure_layout.py +211 -0
  253. figrecipe-0.18.0/src/figrecipe/_editor/_flask_app.py +399 -0
  254. figrecipe-0.18.0/src/figrecipe/_editor/_helpers.py +251 -0
  255. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/__init__.py +76 -0
  256. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/__init__.py +21 -0
  257. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/__init__.py +237 -0
  258. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/_linecoll.py +119 -0
  259. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/_mesh.py +113 -0
  260. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/_polycoll.py +253 -0
  261. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/_quiver.py +133 -0
  262. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/_scatter.py +85 -0
  263. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_images.py +68 -0
  264. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_lines.py +164 -0
  265. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_patches.py +302 -0
  266. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_text.py +190 -0
  267. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/__init__.py +129 -0
  268. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_bar.py +176 -0
  269. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_base.py +132 -0
  270. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_boxplot.py +195 -0
  271. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_contour.py +79 -0
  272. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_dispatcher.py +197 -0
  273. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_event.py +89 -0
  274. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_fill.py +337 -0
  275. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_heatmap.py +147 -0
  276. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_line.py +184 -0
  277. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_pie.py +84 -0
  278. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_quiver.py +160 -0
  279. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_scatter.py +92 -0
  280. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_stem.py +139 -0
  281. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_violin.py +127 -0
  282. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_colors.py +181 -0
  283. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_detect.py +180 -0
  284. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_restore.py +154 -0
  285. figrecipe-0.18.0/src/figrecipe/_editor/_hitmap_main.py +182 -0
  286. figrecipe-0.18.0/src/figrecipe/_editor/_overrides.py +321 -0
  287. figrecipe-0.18.0/src/figrecipe/_editor/_plot_types_registry.py +190 -0
  288. figrecipe-0.18.0/src/figrecipe/_editor/_preferences.py +135 -0
  289. figrecipe-0.18.0/src/figrecipe/_editor/_render_overrides.py +507 -0
  290. figrecipe-0.18.0/src/figrecipe/_editor/_renderer.py +244 -0
  291. figrecipe-0.18.0/src/figrecipe/_editor/_routes_annotation.py +114 -0
  292. figrecipe-0.18.0/src/figrecipe/_editor/_routes_axis.py +482 -0
  293. figrecipe-0.18.0/src/figrecipe/_editor/_routes_captions.py +130 -0
  294. figrecipe-0.18.0/src/figrecipe/_editor/_routes_composition.py +270 -0
  295. figrecipe-0.18.0/src/figrecipe/_editor/_routes_core.py +126 -0
  296. figrecipe-0.18.0/src/figrecipe/_editor/_routes_datatable.py +364 -0
  297. figrecipe-0.18.0/src/figrecipe/_editor/_routes_element.py +445 -0
  298. figrecipe-0.18.0/src/figrecipe/_editor/_routes_files.py +443 -0
  299. figrecipe-0.18.0/src/figrecipe/_editor/_routes_image.py +200 -0
  300. figrecipe-0.18.0/src/figrecipe/_editor/_routes_snapshot.py +94 -0
  301. figrecipe-0.18.0/src/figrecipe/_editor/_routes_style.py +243 -0
  302. figrecipe-0.18.0/src/figrecipe/_editor/_templates/__init__.py +190 -0
  303. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_html.py +496 -0
  304. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_html_components/__init__.py +13 -0
  305. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_html_components/_composition_toolbar.py +79 -0
  306. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_html_components/_file_browser.py +41 -0
  307. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_html_datatable.py +92 -0
  308. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/__init__.py +178 -0
  309. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_accordion.py +328 -0
  310. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_annotation_drag.py +504 -0
  311. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_api.py +228 -0
  312. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_canvas_context_menu.py +182 -0
  313. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_captions.py +231 -0
  314. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_colors.py +485 -0
  315. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_composition.py +283 -0
  316. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_core.py +493 -0
  317. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/__init__.py +59 -0
  318. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_cell_edit.py +97 -0
  319. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_clipboard.py +164 -0
  320. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_context_menu.py +221 -0
  321. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_core.py +150 -0
  322. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_editable.py +511 -0
  323. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_import.py +161 -0
  324. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_plot.py +261 -0
  325. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_selection.py +438 -0
  326. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_table.py +256 -0
  327. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_tabs.py +354 -0
  328. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_debug_snapshot.py +186 -0
  329. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_element_editor.py +437 -0
  330. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_files.py +429 -0
  331. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_files_context_menu.py +240 -0
  332. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/__init__.py +33 -0
  333. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_handlers.py +99 -0
  334. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_load.py +79 -0
  335. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_regions.py +122 -0
  336. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_selection.py +51 -0
  337. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_shapes.py +107 -0
  338. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_utils.py +136 -0
  339. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap.py +13 -0
  340. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_image_drop.py +428 -0
  341. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_inspector.py +315 -0
  342. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_labels.py +464 -0
  343. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_legend_drag.py +270 -0
  344. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_modals.py +226 -0
  345. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_multi_select.py +198 -0
  346. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_overlays.py +292 -0
  347. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_panel_drag.py +518 -0
  348. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_panel_drag_snapshot.py +33 -0
  349. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_panel_position.py +463 -0
  350. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_panel_resize.py +230 -0
  351. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_panel_snap.py +307 -0
  352. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_region_select.py +255 -0
  353. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_selection.py +244 -0
  354. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_sync.py +242 -0
  355. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_tabs.py +89 -0
  356. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_undo_redo.py +348 -0
  357. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_view_mode.py +107 -0
  358. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_zoom.py +212 -0
  359. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/__init__.py +78 -0
  360. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_base.py +111 -0
  361. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_buttons.py +327 -0
  362. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_color_input.py +123 -0
  363. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_composition.py +87 -0
  364. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_controls.py +430 -0
  365. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/__init__.py +40 -0
  366. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/_editable.py +203 -0
  367. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/_panel.py +268 -0
  368. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/_table.py +479 -0
  369. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/_toolbar.py +384 -0
  370. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/_vars.py +123 -0
  371. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_dynamic_props.py +144 -0
  372. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_file_browser.py +466 -0
  373. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_forms.py +224 -0
  374. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_hitmap.py +191 -0
  375. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_inspector.py +90 -0
  376. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_labels.py +118 -0
  377. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_modals.py +127 -0
  378. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_overlays.py +130 -0
  379. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_preview.py +430 -0
  380. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_selection.py +73 -0
  381. figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_spinner.py +117 -0
  382. figrecipe-0.18.0/src/figrecipe/_editor/static/audio/click.mp3 +0 -0
  383. figrecipe-0.18.0/src/figrecipe/_editor/static/click.mp3 +0 -0
  384. figrecipe-0.18.0/src/figrecipe/_editor/static/icons/favicon.ico +0 -0
  385. figrecipe-0.18.0/src/figrecipe/_graph.py +516 -0
  386. figrecipe-0.18.0/src/figrecipe/_graph_presets.py +227 -0
  387. figrecipe-0.18.0/src/figrecipe/_integrations/__init__.py +17 -0
  388. figrecipe-0.18.0/src/figrecipe/_integrations/_scitex_stats.py +298 -0
  389. figrecipe-0.18.0/src/figrecipe/_mcp/__init__.py +16 -0
  390. figrecipe-0.18.0/src/figrecipe/_mcp/_diagram_tools.py +297 -0
  391. figrecipe-0.18.0/src/figrecipe/_mcp/_resources.py +448 -0
  392. figrecipe-0.18.0/src/figrecipe/_mcp/server.py +442 -0
  393. figrecipe-0.18.0/src/figrecipe/_params/_DECORATION_METHODS.py +35 -0
  394. figrecipe-0.18.0/src/figrecipe/_params/_PLOTTING_METHODS.py +59 -0
  395. figrecipe-0.18.0/src/figrecipe/_params/__init__.py +9 -0
  396. figrecipe-0.18.0/src/figrecipe/_recorder.py +464 -0
  397. figrecipe-0.18.0/src/figrecipe/_recorder_utils.py +124 -0
  398. figrecipe-0.18.0/src/figrecipe/_reproducer/__init__.py +18 -0
  399. figrecipe-0.18.0/src/figrecipe/_reproducer/_core.py +433 -0
  400. figrecipe-0.18.0/src/figrecipe/_reproducer/_custom_plots.py +279 -0
  401. figrecipe-0.18.0/src/figrecipe/_reproducer/_reconstruct.py +104 -0
  402. figrecipe-0.18.0/src/figrecipe/_reproducer/_replay_graph.py +66 -0
  403. figrecipe-0.18.0/src/figrecipe/_reproducer/_seaborn.py +100 -0
  404. figrecipe-0.18.0/src/figrecipe/_reproducer/_violin.py +185 -0
  405. figrecipe-0.18.0/src/figrecipe/_seaborn.py +310 -0
  406. figrecipe-0.18.0/src/figrecipe/_serializer.py +464 -0
  407. figrecipe-0.18.0/src/figrecipe/_signatures/README.md +68 -0
  408. figrecipe-0.18.0/src/figrecipe/_signatures/__init__.py +17 -0
  409. figrecipe-0.18.0/src/figrecipe/_signatures/_kwargs.py +273 -0
  410. figrecipe-0.18.0/src/figrecipe/_signatures/_loader.py +247 -0
  411. figrecipe-0.18.0/src/figrecipe/_signatures/_parsing.py +147 -0
  412. figrecipe-0.18.0/src/figrecipe/_utils/__init__.py +37 -0
  413. figrecipe-0.18.0/src/figrecipe/_utils/_bundle.py +205 -0
  414. figrecipe-0.18.0/src/figrecipe/_utils/_crop.py +304 -0
  415. figrecipe-0.18.0/src/figrecipe/_utils/_diff.py +98 -0
  416. figrecipe-0.18.0/src/figrecipe/_utils/_image_diff.py +234 -0
  417. figrecipe-0.18.0/src/figrecipe/_utils/_numpy_io.py +440 -0
  418. figrecipe-0.18.0/src/figrecipe/_utils/_units.py +208 -0
  419. figrecipe-0.18.0/src/figrecipe/_validator.py +201 -0
  420. figrecipe-0.18.0/src/figrecipe/_wrappers/__init__.py +8 -0
  421. figrecipe-0.18.0/src/figrecipe/_wrappers/_axes.py +825 -0
  422. figrecipe-0.18.0/src/figrecipe/_wrappers/_axes_graph.py +199 -0
  423. figrecipe-0.18.0/src/figrecipe/_wrappers/_axes_helpers.py +147 -0
  424. figrecipe-0.18.0/src/figrecipe/_wrappers/_axes_plots.py +504 -0
  425. figrecipe-0.18.0/src/figrecipe/_wrappers/_axes_seaborn.py +157 -0
  426. figrecipe-0.18.0/src/figrecipe/_wrappers/_caption_generator.py +218 -0
  427. figrecipe-0.18.0/src/figrecipe/_wrappers/_figure.py +489 -0
  428. figrecipe-0.18.0/src/figrecipe/_wrappers/_panel_labels.py +127 -0
  429. figrecipe-0.18.0/src/figrecipe/_wrappers/_plot_helpers.py +147 -0
  430. figrecipe-0.18.0/src/figrecipe/_wrappers/_stat_annotation.py +274 -0
  431. figrecipe-0.18.0/src/figrecipe/_wrappers/_violin_helpers.py +180 -0
  432. figrecipe-0.18.0/src/figrecipe/captions/__init__.py +66 -0
  433. figrecipe-0.18.0/src/figrecipe/captions/_caption.py +371 -0
  434. figrecipe-0.18.0/src/figrecipe/captions/_convenience.py +197 -0
  435. figrecipe-0.18.0/src/figrecipe/captions/_formats.py +260 -0
  436. figrecipe-0.18.0/src/figrecipe/plt.py +11 -0
  437. figrecipe-0.18.0/src/figrecipe/pyplot.py +265 -0
  438. figrecipe-0.18.0/src/figrecipe/specialized_plots/__init__.py +52 -0
  439. figrecipe-0.18.0/src/figrecipe/specialized_plots/_annotation.py +325 -0
  440. figrecipe-0.18.0/src/figrecipe/specialized_plots/_heatmap.py +339 -0
  441. figrecipe-0.18.0/src/figrecipe/specialized_plots/_neuroscience.py +232 -0
  442. figrecipe-0.18.0/src/figrecipe/specialized_plots/_statistical.py +400 -0
  443. figrecipe-0.18.0/src/figrecipe/styles/__init__.py +147 -0
  444. figrecipe-0.18.0/src/figrecipe/styles/_color_resolver.py +218 -0
  445. figrecipe-0.18.0/src/figrecipe/styles/_dotdict.py +72 -0
  446. figrecipe-0.18.0/src/figrecipe/styles/_finalize.py +145 -0
  447. figrecipe-0.18.0/src/figrecipe/styles/_fonts.py +77 -0
  448. figrecipe-0.18.0/src/figrecipe/styles/_kwargs_converter.py +178 -0
  449. figrecipe-0.18.0/src/figrecipe/styles/_plot_styles.py +213 -0
  450. figrecipe-0.18.0/src/figrecipe/styles/_plot_styling.py +37 -0
  451. figrecipe-0.18.0/src/figrecipe/styles/_style_applier.py +278 -0
  452. figrecipe-0.18.0/src/figrecipe/styles/_style_loader.py +413 -0
  453. figrecipe-0.18.0/src/figrecipe/styles/_themes.py +151 -0
  454. figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/__init__.py +74 -0
  455. figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_base.py +64 -0
  456. figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_geometry.py +131 -0
  457. figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_rotate_labels.py +262 -0
  458. figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_sci_note.py +165 -0
  459. figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_spines.py +303 -0
  460. figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_ticks.py +349 -0
  461. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/__init__.py +77 -0
  462. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_barplot.py +119 -0
  463. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_base.py +203 -0
  464. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_boxplot.py +195 -0
  465. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_errorbar.py +145 -0
  466. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_heatmap.py +139 -0
  467. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_histogram.py +130 -0
  468. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_imshow.py +134 -0
  469. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_line.py +107 -0
  470. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_pie.py +154 -0
  471. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_scatter.py +125 -0
  472. figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_violinplot.py +144 -0
  473. figrecipe-0.18.0/src/figrecipe/styles/presets/MATPLOTLIB.yaml +95 -0
  474. figrecipe-0.18.0/src/figrecipe/styles/presets/SCITEX.yaml +188 -0
  475. figrecipe-0.18.0/src/figrecipe/utils.py +82 -0
  476. figrecipe-0.18.0/tests/__init__.py +3 -0
  477. figrecipe-0.18.0/tests/editor/__init__.py +3 -0
  478. figrecipe-0.18.0/tests/editor/conftest.py +137 -0
  479. figrecipe-0.18.0/tests/editor/test_datatable_theme_aware.py +119 -0
  480. figrecipe-0.18.0/tests/editor/test_hit_detection.py +103 -0
  481. figrecipe-0.18.0/tests/editor/test_js_errors.py +106 -0
  482. figrecipe-0.18.0/tests/editor/test_overrides.py +107 -0
  483. figrecipe-0.18.0/tests/editor/test_panel_position.py +191 -0
  484. figrecipe-0.18.0/tests/editor/test_plot_types_registry.py +127 -0
  485. figrecipe-0.18.0/tests/editor/test_properties.py +101 -0
  486. figrecipe-0.18.0/tests/editor/test_restore_endpoint.py +90 -0
  487. figrecipe-0.18.0/tests/editor/test_theme.py +95 -0
  488. figrecipe-0.18.0/tests/editor/test_toolbar.py +107 -0
  489. figrecipe-0.18.0/tests/test_alignment.py +281 -0
  490. figrecipe-0.18.0/tests/test_annotation_fontsize.py +114 -0
  491. figrecipe-0.18.0/tests/test_api_plot.py +297 -0
  492. figrecipe-0.18.0/tests/test_api_validate.py +169 -0
  493. figrecipe-0.18.0/tests/test_axis_helpers.py +434 -0
  494. figrecipe-0.18.0/tests/test_branding.py +220 -0
  495. figrecipe-0.18.0/tests/test_bundle.py +237 -0
  496. figrecipe-0.18.0/tests/test_caption_generation.py +198 -0
  497. figrecipe-0.18.0/tests/test_captions.py +435 -0
  498. figrecipe-0.18.0/tests/test_cli.py +521 -0
  499. figrecipe-0.18.0/tests/test_compose_freeform.py +343 -0
  500. figrecipe-0.18.0/tests/test_composition.py +641 -0
  501. figrecipe-0.18.0/tests/test_constrained_layout.py +158 -0
  502. figrecipe-0.18.0/tests/test_csv_column_support.py +414 -0
  503. figrecipe-0.18.0/tests/test_csv_format.py +265 -0
  504. figrecipe-0.18.0/tests/test_diagram.py +305 -0
  505. figrecipe-0.18.0/tests/test_editor_browser.py +75 -0
  506. figrecipe-0.18.0/tests/test_editor_contourf.py +252 -0
  507. figrecipe-0.18.0/tests/test_editor_dark_mode.py +251 -0
  508. figrecipe-0.18.0/tests/test_editor_datatable.py +377 -0
  509. figrecipe-0.18.0/tests/test_editor_edit_variants.py +284 -0
  510. figrecipe-0.18.0/tests/test_editor_file_browser.py +339 -0
  511. figrecipe-0.18.0/tests/test_editor_hitmap.py +304 -0
  512. figrecipe-0.18.0/tests/test_editor_image_drop.py +284 -0
  513. figrecipe-0.18.0/tests/test_editor_image_drop_formats.py +201 -0
  514. figrecipe-0.18.0/tests/test_editor_image_drop_recording.py +162 -0
  515. figrecipe-0.18.0/tests/test_editor_image_drop_url.py +162 -0
  516. figrecipe-0.18.0/tests/test_editor_layout_stability.py +312 -0
  517. figrecipe-0.18.0/tests/test_editor_new_figure.py +241 -0
  518. figrecipe-0.18.0/tests/test_editor_panel_drag.py +79 -0
  519. figrecipe-0.18.0/tests/test_editor_panel_drag_snapshot.py +79 -0
  520. figrecipe-0.18.0/tests/test_editor_panel_snap.py +174 -0
  521. figrecipe-0.18.0/tests/test_editor_pie_colors.py +226 -0
  522. figrecipe-0.18.0/tests/test_editor_preferences.py +283 -0
  523. figrecipe-0.18.0/tests/test_editor_selection_features.py +311 -0
  524. figrecipe-0.18.0/tests/test_editor_undo_redo.py +251 -0
  525. figrecipe-0.18.0/tests/test_graph.py +573 -0
  526. figrecipe-0.18.0/tests/test_hit_areas.py +668 -0
  527. figrecipe-0.18.0/tests/test_hitmap_call_id_matching.py +380 -0
  528. figrecipe-0.18.0/tests/test_hitmap_pixel_detection.py +643 -0
  529. figrecipe-0.18.0/tests/test_integration.py +438 -0
  530. figrecipe-0.18.0/tests/test_mcp_resources.py +178 -0
  531. figrecipe-0.18.0/tests/test_metadata_caption.py +291 -0
  532. figrecipe-0.18.0/tests/test_plot_styling.py +292 -0
  533. figrecipe-0.18.0/tests/test_recorder.py +163 -0
  534. figrecipe-0.18.0/tests/test_reproducer_pie_colors.py +85 -0
  535. figrecipe-0.18.0/tests/test_roundtrip.py +271 -0
  536. figrecipe-0.18.0/tests/test_roundtrip_all_types.py +265 -0
  537. figrecipe-0.18.0/tests/test_savefig_consistency.py +178 -0
  538. figrecipe-0.18.0/tests/test_scitex_stats_integration.py +228 -0
  539. figrecipe-0.18.0/tests/test_seaborn.py +196 -0
  540. figrecipe-0.18.0/tests/test_specialized_plots.py +382 -0
  541. figrecipe-0.18.0/tests/test_stat_annotation.py +192 -0
  542. figrecipe-0.18.0/tests/test_stats.py +255 -0
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: Bug Report
3
+ about: Report a bug to help us improve FigRecipe
4
+ title: "[BUG] "
5
+ labels: bug
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Description
10
+
11
+ A clear and concise description of the bug.
12
+
13
+ ## To Reproduce
14
+
15
+ Steps to reproduce the behavior:
16
+
17
+ 1. ...
18
+ 2. ...
19
+ 3. ...
20
+
21
+ ## Minimal Code Example
22
+
23
+ ```python
24
+ import figrecipe as fr
25
+
26
+ # Minimal code that reproduces the issue
27
+ ```
28
+
29
+ ## Expected Behavior
30
+
31
+ What you expected to happen.
32
+
33
+ ## Actual Behavior
34
+
35
+ What actually happened.
36
+
37
+ ## Error Traceback
38
+
39
+ ```
40
+ Paste full error traceback here (if applicable)
41
+ ```
42
+
43
+ ## Environment
44
+
45
+ - OS: [e.g., Ubuntu 22.04, Windows 11, macOS 14]
46
+ - Python version: [e.g., 3.11.5]
47
+ - FigRecipe version: [run `pip show figrecipe`]
48
+ - Matplotlib version: [run `pip show matplotlib`]
49
+
50
+ ## Additional Context
51
+
52
+ Add any other context, screenshots, or generated files here.
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Documentation
4
+ url: https://github.com/ywatanabe1989/figrecipe#readme
5
+ about: Check the README for usage examples and API reference
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: Feature Request
3
+ about: Suggest a new feature for FigRecipe
4
+ title: "[FEATURE] "
5
+ labels: enhancement
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Problem Statement
10
+
11
+ A clear description of the problem you're trying to solve.
12
+
13
+ Example: "I'm frustrated when trying to..."
14
+
15
+ ## Proposed Solution
16
+
17
+ A clear description of what you'd like to happen.
18
+
19
+ ## Example Usage
20
+
21
+ ```python
22
+ import figrecipe as fr
23
+
24
+ # How you envision using this feature
25
+ ```
26
+
27
+ ## Alternatives Considered
28
+
29
+ Any alternative solutions or features you've considered.
30
+
31
+ ## Additional Context
32
+
33
+ Add any other context, mockups, or references here.
@@ -0,0 +1,34 @@
1
+ ## Summary
2
+
3
+ Brief description of the changes.
4
+
5
+ ## Type of Change
6
+
7
+ - [ ] Bug fix (non-breaking change that fixes an issue)
8
+ - [ ] New feature (non-breaking change that adds functionality)
9
+ - [ ] Breaking change (fix or feature that would cause existing functionality to change)
10
+ - [ ] Documentation update
11
+ - [ ] Refactoring (no functional changes)
12
+
13
+ ## Related Issues
14
+
15
+ Fixes #(issue number)
16
+
17
+ ## Changes Made
18
+
19
+ -
20
+ -
21
+ -
22
+
23
+ ## Testing
24
+
25
+ - [ ] Tests pass locally (`make test`)
26
+ - [ ] Linter passes (`make lint`)
27
+ - [ ] New tests added (if applicable)
28
+
29
+ ## Checklist
30
+
31
+ - [ ] My code follows the project's code style
32
+ - [ ] I have updated the documentation (if needed)
33
+ - [ ] I have added tests that prove my fix/feature works
34
+ - [ ] All new and existing tests pass
@@ -0,0 +1,89 @@
1
+ name: Gallery
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ paths:
7
+ - 'src/figrecipe/**'
8
+ - 'examples/01_all_plots.py'
9
+ - 'examples/02_composition.py'
10
+ - 'examples/03_style_anatomy.py'
11
+ - '.github/workflows/gallery.yml'
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ generate-gallery:
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: write
19
+
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ with:
23
+ ref: ${{ github.ref }}
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v5
27
+ with:
28
+ python-version: "3.11"
29
+
30
+ - name: Install system fonts (Arial, etc.)
31
+ run: |
32
+ echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
33
+ sudo apt-get update
34
+ sudo apt-get install -y ttf-mscorefonts-installer fontconfig
35
+ sudo fc-cache -f -v
36
+ rm -rf ~/.cache/matplotlib
37
+
38
+ - name: Install dependencies
39
+ run: |
40
+ python -m pip install --upgrade pip
41
+ pip install -e ".[all]"
42
+
43
+ - name: Generate all demo plots
44
+ run: |
45
+ python examples/01_all_plots.py
46
+
47
+ - name: Generate composed gallery
48
+ run: |
49
+ rm -rf examples/02_composition_out/composed_data
50
+ python examples/02_composition.py
51
+
52
+ - name: Generate style anatomy diagram
53
+ run: |
54
+ python examples/03_style_anatomy.py
55
+
56
+ - name: Create compressed gallery
57
+ run: |
58
+ python -c "
59
+ from PIL import Image
60
+ # Gallery
61
+ img = Image.open('examples/02_composition_out/composed.png')
62
+ new_size = (int(img.width * 0.5), int(img.height * 0.5))
63
+ img = img.resize(new_size, Image.Resampling.LANCZOS)
64
+ img = img.convert('RGB')
65
+ img.save('examples/02_composition_out/gallery.jpg', 'JPEG', quality=90, optimize=True)
66
+ # Style Anatomy
67
+ img = Image.open('examples/03_style_anatomy_out/scitex_anatomy.png')
68
+ new_size = (int(img.width * 0.5), int(img.height * 0.5))
69
+ img = img.resize(new_size, Image.Resampling.LANCZOS)
70
+ img = img.convert('RGB')
71
+ img.save('docs/style_granularity.jpg', 'JPEG', quality=90, optimize=True)
72
+ "
73
+
74
+ - name: Upload gallery artifact
75
+ uses: actions/upload-artifact@v4
76
+ with:
77
+ name: gallery
78
+ path: |
79
+ examples/02_composition_out/gallery.jpg
80
+ docs/style_granularity.jpg
81
+ examples/01_all_plots_out/*.png
82
+
83
+ - name: Commit gallery update
84
+ run: |
85
+ git config --local user.email "github-actions[bot]@users.noreply.github.com"
86
+ git config --local user.name "github-actions[bot]"
87
+ git add examples/02_composition_out/gallery.jpg
88
+ git diff --staged --quiet || git commit -m "chore: Update plot gallery [skip ci]"
89
+ git push
@@ -0,0 +1,60 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main, develop]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.9", "3.10", "3.11", "3.12"]
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - name: Set up Python ${{ matrix.python-version }}
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: ${{ matrix.python-version }}
23
+
24
+ - name: Install system fonts (Arial, etc.)
25
+ run: |
26
+ echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
27
+ sudo apt-get update
28
+ sudo apt-get install -y ttf-mscorefonts-installer fontconfig
29
+ sudo fc-cache -f -v
30
+ # Clear matplotlib font cache
31
+ rm -rf ~/.cache/matplotlib
32
+
33
+ - name: Install dependencies
34
+ run: |
35
+ python -m pip install --upgrade pip
36
+ pip install -e ".[all]"
37
+
38
+ - name: Install Playwright browsers
39
+ run: |
40
+ playwright install chromium
41
+
42
+ - name: Run tests
43
+ run: |
44
+ pytest tests/ -v --tb=short --ignore=tests/editor
45
+
46
+ lint:
47
+ runs-on: ubuntu-latest
48
+ steps:
49
+ - uses: actions/checkout@v4
50
+
51
+ - name: Set up Python
52
+ uses: actions/setup-python@v5
53
+ with:
54
+ python-version: "3.11"
55
+
56
+ - name: Install ruff
57
+ run: pip install ruff
58
+
59
+ - name: Run ruff
60
+ run: ruff check src/