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.
- figrecipe-0.18.0/.github/ISSUE_TEMPLATE/bug_report.md +52 -0
- figrecipe-0.18.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- figrecipe-0.18.0/.github/ISSUE_TEMPLATE/feature_request.md +33 -0
- figrecipe-0.18.0/.github/PULL_REQUEST_TEMPLATE.md +34 -0
- figrecipe-0.18.0/.github/workflows/gallery.yml +89 -0
- figrecipe-0.18.0/.github/workflows/test.yml +60 -0
- figrecipe-0.18.0/.gitignore +792 -0
- figrecipe-0.18.0/.pre-commit-config.yaml +26 -0
- figrecipe-0.18.0/CHANGELOG.md +371 -0
- figrecipe-0.18.0/CITATION.cff +30 -0
- figrecipe-0.18.0/CONTRIBUTING.md +190 -0
- figrecipe-0.18.0/LICENSE +661 -0
- figrecipe-0.18.0/Makefile +81 -0
- figrecipe-0.18.0/PKG-INFO +296 -0
- figrecipe-0.18.0/README.md +220 -0
- figrecipe-0.18.0/docs/bgm/README.md +13 -0
- figrecipe-0.18.0/docs/bgm/smile.mp3 +0 -0
- figrecipe-0.18.0/docs/layout_and_cropping.md +277 -0
- figrecipe-0.18.0/docs/to_claude/examples/example-python-project-scitex/data/.gitkeep +0 -0
- figrecipe-0.18.0/docs/to_claude/examples/pip-project-template/.pre-commit-config.yaml +65 -0
- figrecipe-0.18.0/docs/to_claude/examples/pip-project-template/pyproject.toml +160 -0
- figrecipe-0.18.0/examples/00_run_all.sh +93 -0
- figrecipe-0.18.0/examples/01_all_plots.py +58 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_acorr.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_angle_spectrum.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_bar.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_barbs.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_barh.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_boxplot.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_cohere.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_contour.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_contourf.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_csd.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_ecdf.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_errorbar.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_eventplot.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_fill.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_fill_between.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_fill_betweenx.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_graph.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_hexbin.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_hist.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_hist2d.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_imshow.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_loglog.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_magnitude_spectrum.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_matshow.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_pcolor.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_pcolormesh.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_phase_spectrum.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_pie.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_plot.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_psd.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_quiver.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_scatter.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_semilogx.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_semilogy.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_specgram.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_spy.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_stackplot.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_stairs.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_stem.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_step.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_streamplot.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_tricontour.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_tricontourf.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_tripcolor.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_triplot.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_violinplot.png +0 -0
- figrecipe-0.18.0/examples/01_all_plots_out/plot_xcorr.png +0 -0
- figrecipe-0.18.0/examples/02_composition.py +96 -0
- figrecipe-0.18.0/examples/02_composition_out/gallery.jpg +0 -0
- figrecipe-0.18.0/examples/03_editor.py +136 -0
- figrecipe-0.18.0/examples/03_style_anatomy.py +279 -0
- figrecipe-0.18.0/examples/03_style_anatomy_out/scitex_anatomy.png +0 -0
- figrecipe-0.18.0/examples/04_mcp.org +357 -0
- figrecipe-0.18.0/examples/04_mcp_out/figures/demo_all_plots.py +54 -0
- figrecipe-0.18.0/examples/05_csv_workflow.py +215 -0
- figrecipe-0.18.0/examples/05_csv_workflow_out/csv_workflow_demo.png +0 -0
- figrecipe-0.18.0/examples/05_csv_workflow_out/python_api_demo.png +0 -0
- figrecipe-0.18.0/examples/06_diagram.py +224 -0
- figrecipe-0.18.0/examples/06_diagram_out/decision_tree.mmd +19 -0
- figrecipe-0.18.0/examples/06_diagram_out/decision_tree.png +0 -0
- figrecipe-0.18.0/examples/06_diagram_out/neural_net.mmd +21 -0
- figrecipe-0.18.0/examples/06_diagram_out/pipeline.dot +20 -0
- figrecipe-0.18.0/examples/06_diagram_out/pipeline.mmd +14 -0
- figrecipe-0.18.0/examples/06_diagram_out/pipeline.png +0 -0
- figrecipe-0.18.0/examples/06_diagram_out/scientific_workflow.mmd +18 -0
- figrecipe-0.18.0/examples/07_video_demos/01_enable_dark_mode.py +83 -0
- figrecipe-0.18.0/examples/07_video_demos/02_change_color.py +113 -0
- figrecipe-0.18.0/examples/07_video_demos/03_datatable_import.py +82 -0
- figrecipe-0.18.0/examples/07_video_demos/04_image_drop.py +67 -0
- figrecipe-0.18.0/examples/07_video_demos/05_panel_drag.py +95 -0
- figrecipe-0.18.0/examples/07_video_demos/06_file_browser.py +67 -0
- figrecipe-0.18.0/examples/07_video_demos/__init__.py +9 -0
- figrecipe-0.18.0/examples/07_video_demos/add_narration.py +119 -0
- figrecipe-0.18.0/examples/07_video_demos/process_all_demos.py +270 -0
- figrecipe-0.18.0/examples/07_video_demos/run_all.py +194 -0
- figrecipe-0.18.0/pyproject.toml +130 -0
- figrecipe-0.18.0/scripts/gui_periodic.sh +42 -0
- figrecipe-0.18.0/scripts/maintenance/clean-outputs.sh +31 -0
- figrecipe-0.18.0/scripts/maintenance/clean.sh +48 -0
- figrecipe-0.18.0/scripts/maintenance/demo-gui-browser.sh +41 -0
- figrecipe-0.18.0/scripts/maintenance/demo-gui-periodic.sh +30 -0
- figrecipe-0.18.0/scripts/maintenance/demo-gui.sh +32 -0
- figrecipe-0.18.0/scripts/maintenance/format.sh +31 -0
- figrecipe-0.18.0/scripts/maintenance/install-dev.sh +31 -0
- figrecipe-0.18.0/scripts/maintenance/install.sh +31 -0
- figrecipe-0.18.0/scripts/maintenance/install_arial.sh +86 -0
- figrecipe-0.18.0/scripts/maintenance/lint-fix.sh +31 -0
- figrecipe-0.18.0/scripts/maintenance/lint.sh +36 -0
- figrecipe-0.18.0/scripts/maintenance/notebook.sh +36 -0
- figrecipe-0.18.0/scripts/maintenance/pdf.sh +37 -0
- figrecipe-0.18.0/scripts/maintenance/pre-commit.sh +32 -0
- figrecipe-0.18.0/scripts/maintenance/test.sh +36 -0
- figrecipe-0.18.0/scripts/restart_gui.sh +13 -0
- figrecipe-0.18.0/src/figrecipe/__init__.py +516 -0
- figrecipe-0.18.0/src/figrecipe/__main__.py +12 -0
- figrecipe-0.18.0/src/figrecipe/_api/__init__.py +48 -0
- figrecipe-0.18.0/src/figrecipe/_api/_compose/__init__.py +159 -0
- figrecipe-0.18.0/src/figrecipe/_api/_compose/_freeform.py +154 -0
- figrecipe-0.18.0/src/figrecipe/_api/_compose/_grid.py +102 -0
- figrecipe-0.18.0/src/figrecipe/_api/_compose/_utils.py +327 -0
- figrecipe-0.18.0/src/figrecipe/_api/_extract.py +108 -0
- figrecipe-0.18.0/src/figrecipe/_api/_notebook.py +61 -0
- figrecipe-0.18.0/src/figrecipe/_api/_panel.py +113 -0
- figrecipe-0.18.0/src/figrecipe/_api/_plot.py +320 -0
- figrecipe-0.18.0/src/figrecipe/_api/_plot_helpers.py +379 -0
- figrecipe-0.18.0/src/figrecipe/_api/_save.py +392 -0
- figrecipe-0.18.0/src/figrecipe/_api/_save_helpers.py +252 -0
- figrecipe-0.18.0/src/figrecipe/_api/_seaborn_proxy.py +34 -0
- figrecipe-0.18.0/src/figrecipe/_api/_style_manager.py +177 -0
- figrecipe-0.18.0/src/figrecipe/_api/_subplots.py +342 -0
- figrecipe-0.18.0/src/figrecipe/_api/_validate.py +82 -0
- figrecipe-0.18.0/src/figrecipe/_branding.py +256 -0
- figrecipe-0.18.0/src/figrecipe/_cli/__init__.py +7 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_completion.py +162 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_compose.py +87 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_convert.py +117 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_crop.py +82 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_diagram.py +284 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_edit.py +70 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_extract.py +128 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_fonts.py +47 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_info.py +67 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_main.py +98 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_mcp.py +119 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_plot.py +132 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_reproduce.py +79 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_style.py +113 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_validate.py +66 -0
- figrecipe-0.18.0/src/figrecipe/_cli/_version.py +50 -0
- figrecipe-0.18.0/src/figrecipe/_composition/__init__.py +38 -0
- figrecipe-0.18.0/src/figrecipe/_composition/_alignment.py +452 -0
- figrecipe-0.18.0/src/figrecipe/_composition/_compose.py +356 -0
- figrecipe-0.18.0/src/figrecipe/_composition/_import_axes.py +127 -0
- figrecipe-0.18.0/src/figrecipe/_composition/_visibility.py +125 -0
- figrecipe-0.18.0/src/figrecipe/_dev/__init__.py +31 -0
- figrecipe-0.18.0/src/figrecipe/_dev/_plotters.py +76 -0
- figrecipe-0.18.0/src/figrecipe/_dev/_run_demos.py +69 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/__init__.py +69 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_audio.py +240 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_caption.py +356 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_click_effect.py +146 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_cursor.py +196 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_highlight.py +105 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_narration.py +237 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_recorder.py +494 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_utils.py +178 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_video_trim/__init__.py +152 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_video_trim/_detection.py +223 -0
- figrecipe-0.18.0/src/figrecipe/_dev/browser/_video_trim/_markers.py +140 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/__init__.py +64 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/_categories.py +81 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/_figure_creators.py +120 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/_helpers.py +31 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/_registry.py +50 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/bar_categorical/__init__.py +4 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/bar_categorical/plot_bar.py +25 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/bar_categorical/plot_barh.py +25 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/__init__.py +4 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_contour.py +30 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_contourf.py +29 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_tricontour.py +28 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_tricontourf.py +28 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_tripcolor.py +29 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/contour_surface/plot_triplot.py +25 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/__init__.py +4 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/plot_boxplot.py +24 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/plot_ecdf.py +24 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/plot_hist.py +24 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/plot_hist2d.py +25 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/distribution/plot_violinplot.py +25 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/__init__.py +4 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_hexbin.py +25 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_imshow.py +23 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_matshow.py +23 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_pcolor.py +29 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_pcolormesh.py +29 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/image_matrix/plot_spy.py +29 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/__init__.py +4 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_errorbar.py +28 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_fill.py +29 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_fill_between.py +30 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_fill_betweenx.py +28 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_plot.py +28 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_stackplot.py +29 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_stairs.py +27 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/line_curve/plot_step.py +27 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/scatter_points/__init__.py +4 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/scatter_points/plot_scatter.py +24 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/__init__.py +4 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_eventplot.py +25 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_graph.py +55 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_loglog.py +27 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_pie.py +27 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_semilogx.py +27 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_semilogy.py +27 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/special/plot_stem.py +27 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/__init__.py +4 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_acorr.py +24 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_angle_spectrum.py +28 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_cohere.py +29 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_csd.py +29 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_magnitude_spectrum.py +28 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_phase_spectrum.py +28 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_psd.py +29 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_specgram.py +30 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/spectral_signal/plot_xcorr.py +25 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/vector_flow/__init__.py +4 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/vector_flow/plot_barbs.py +30 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/vector_flow/plot_quiver.py +30 -0
- figrecipe-0.18.0/src/figrecipe/_dev/demo_plotters/vector_flow/plot_streamplot.py +30 -0
- figrecipe-0.18.0/src/figrecipe/_diagram/__init__.py +86 -0
- figrecipe-0.18.0/src/figrecipe/_diagram/_compile.py +314 -0
- figrecipe-0.18.0/src/figrecipe/_diagram/_diagram.py +444 -0
- figrecipe-0.18.0/src/figrecipe/_diagram/_presets.py +245 -0
- figrecipe-0.18.0/src/figrecipe/_diagram/_render.py +197 -0
- figrecipe-0.18.0/src/figrecipe/_diagram/_schema.py +195 -0
- figrecipe-0.18.0/src/figrecipe/_diagram/_split.py +279 -0
- figrecipe-0.18.0/src/figrecipe/_editor/__init__.py +278 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_bbox/__init__.py +43 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_collections.py +177 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_elements.py +159 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_extract.py +402 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_extract_axes.py +370 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_extract_text.py +466 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_lines.py +173 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_bbox/_transforms.py +146 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_call_overrides.py +183 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_datatable_plot_handlers.py +249 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_figure_layout.py +211 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_flask_app.py +399 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_helpers.py +251 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/__init__.py +76 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/__init__.py +21 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/__init__.py +237 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/_linecoll.py +119 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/_mesh.py +113 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/_polycoll.py +253 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/_quiver.py +133 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_collections/_scatter.py +85 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_images.py +68 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_lines.py +164 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_patches.py +302 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_text.py +190 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/__init__.py +129 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_bar.py +176 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_base.py +132 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_boxplot.py +195 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_contour.py +79 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_dispatcher.py +197 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_event.py +89 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_fill.py +337 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_heatmap.py +147 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_line.py +184 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_pie.py +84 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_quiver.py +160 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_scatter.py +92 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_stem.py +139 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_artists/_types/_violin.py +127 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_colors.py +181 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_detect.py +180 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap/_restore.py +154 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_hitmap_main.py +182 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_overrides.py +321 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_plot_types_registry.py +190 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_preferences.py +135 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_render_overrides.py +507 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_renderer.py +244 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_annotation.py +114 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_axis.py +482 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_captions.py +130 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_composition.py +270 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_core.py +126 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_datatable.py +364 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_element.py +445 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_files.py +443 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_image.py +200 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_snapshot.py +94 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_routes_style.py +243 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/__init__.py +190 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_html.py +496 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_html_components/__init__.py +13 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_html_components/_composition_toolbar.py +79 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_html_components/_file_browser.py +41 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_html_datatable.py +92 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/__init__.py +178 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_accordion.py +328 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_annotation_drag.py +504 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_api.py +228 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_canvas_context_menu.py +182 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_captions.py +231 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_colors.py +485 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_composition.py +283 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_core.py +493 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/__init__.py +59 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_cell_edit.py +97 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_clipboard.py +164 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_context_menu.py +221 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_core.py +150 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_editable.py +511 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_import.py +161 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_plot.py +261 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_selection.py +438 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_table.py +256 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_datatable/_tabs.py +354 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_debug_snapshot.py +186 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_element_editor.py +437 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_files.py +429 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_files_context_menu.py +240 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/__init__.py +33 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_handlers.py +99 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_load.py +79 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_regions.py +122 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_selection.py +51 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_shapes.py +107 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap/_utils.py +136 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_hitmap.py +13 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_image_drop.py +428 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_inspector.py +315 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_labels.py +464 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_legend_drag.py +270 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_modals.py +226 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_multi_select.py +198 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_overlays.py +292 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_panel_drag.py +518 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_panel_drag_snapshot.py +33 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_panel_position.py +463 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_panel_resize.py +230 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_panel_snap.py +307 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_region_select.py +255 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_selection.py +244 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_sync.py +242 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_tabs.py +89 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_undo_redo.py +348 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_view_mode.py +107 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_scripts/_zoom.py +212 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/__init__.py +78 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_base.py +111 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_buttons.py +327 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_color_input.py +123 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_composition.py +87 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_controls.py +430 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/__init__.py +40 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/_editable.py +203 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/_panel.py +268 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/_table.py +479 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/_toolbar.py +384 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_datatable/_vars.py +123 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_dynamic_props.py +144 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_file_browser.py +466 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_forms.py +224 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_hitmap.py +191 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_inspector.py +90 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_labels.py +118 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_modals.py +127 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_overlays.py +130 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_preview.py +430 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_selection.py +73 -0
- figrecipe-0.18.0/src/figrecipe/_editor/_templates/_styles/_spinner.py +117 -0
- figrecipe-0.18.0/src/figrecipe/_editor/static/audio/click.mp3 +0 -0
- figrecipe-0.18.0/src/figrecipe/_editor/static/click.mp3 +0 -0
- figrecipe-0.18.0/src/figrecipe/_editor/static/icons/favicon.ico +0 -0
- figrecipe-0.18.0/src/figrecipe/_graph.py +516 -0
- figrecipe-0.18.0/src/figrecipe/_graph_presets.py +227 -0
- figrecipe-0.18.0/src/figrecipe/_integrations/__init__.py +17 -0
- figrecipe-0.18.0/src/figrecipe/_integrations/_scitex_stats.py +298 -0
- figrecipe-0.18.0/src/figrecipe/_mcp/__init__.py +16 -0
- figrecipe-0.18.0/src/figrecipe/_mcp/_diagram_tools.py +297 -0
- figrecipe-0.18.0/src/figrecipe/_mcp/_resources.py +448 -0
- figrecipe-0.18.0/src/figrecipe/_mcp/server.py +442 -0
- figrecipe-0.18.0/src/figrecipe/_params/_DECORATION_METHODS.py +35 -0
- figrecipe-0.18.0/src/figrecipe/_params/_PLOTTING_METHODS.py +59 -0
- figrecipe-0.18.0/src/figrecipe/_params/__init__.py +9 -0
- figrecipe-0.18.0/src/figrecipe/_recorder.py +464 -0
- figrecipe-0.18.0/src/figrecipe/_recorder_utils.py +124 -0
- figrecipe-0.18.0/src/figrecipe/_reproducer/__init__.py +18 -0
- figrecipe-0.18.0/src/figrecipe/_reproducer/_core.py +433 -0
- figrecipe-0.18.0/src/figrecipe/_reproducer/_custom_plots.py +279 -0
- figrecipe-0.18.0/src/figrecipe/_reproducer/_reconstruct.py +104 -0
- figrecipe-0.18.0/src/figrecipe/_reproducer/_replay_graph.py +66 -0
- figrecipe-0.18.0/src/figrecipe/_reproducer/_seaborn.py +100 -0
- figrecipe-0.18.0/src/figrecipe/_reproducer/_violin.py +185 -0
- figrecipe-0.18.0/src/figrecipe/_seaborn.py +310 -0
- figrecipe-0.18.0/src/figrecipe/_serializer.py +464 -0
- figrecipe-0.18.0/src/figrecipe/_signatures/README.md +68 -0
- figrecipe-0.18.0/src/figrecipe/_signatures/__init__.py +17 -0
- figrecipe-0.18.0/src/figrecipe/_signatures/_kwargs.py +273 -0
- figrecipe-0.18.0/src/figrecipe/_signatures/_loader.py +247 -0
- figrecipe-0.18.0/src/figrecipe/_signatures/_parsing.py +147 -0
- figrecipe-0.18.0/src/figrecipe/_utils/__init__.py +37 -0
- figrecipe-0.18.0/src/figrecipe/_utils/_bundle.py +205 -0
- figrecipe-0.18.0/src/figrecipe/_utils/_crop.py +304 -0
- figrecipe-0.18.0/src/figrecipe/_utils/_diff.py +98 -0
- figrecipe-0.18.0/src/figrecipe/_utils/_image_diff.py +234 -0
- figrecipe-0.18.0/src/figrecipe/_utils/_numpy_io.py +440 -0
- figrecipe-0.18.0/src/figrecipe/_utils/_units.py +208 -0
- figrecipe-0.18.0/src/figrecipe/_validator.py +201 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/__init__.py +8 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_axes.py +825 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_axes_graph.py +199 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_axes_helpers.py +147 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_axes_plots.py +504 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_axes_seaborn.py +157 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_caption_generator.py +218 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_figure.py +489 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_panel_labels.py +127 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_plot_helpers.py +147 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_stat_annotation.py +274 -0
- figrecipe-0.18.0/src/figrecipe/_wrappers/_violin_helpers.py +180 -0
- figrecipe-0.18.0/src/figrecipe/captions/__init__.py +66 -0
- figrecipe-0.18.0/src/figrecipe/captions/_caption.py +371 -0
- figrecipe-0.18.0/src/figrecipe/captions/_convenience.py +197 -0
- figrecipe-0.18.0/src/figrecipe/captions/_formats.py +260 -0
- figrecipe-0.18.0/src/figrecipe/plt.py +11 -0
- figrecipe-0.18.0/src/figrecipe/pyplot.py +265 -0
- figrecipe-0.18.0/src/figrecipe/specialized_plots/__init__.py +52 -0
- figrecipe-0.18.0/src/figrecipe/specialized_plots/_annotation.py +325 -0
- figrecipe-0.18.0/src/figrecipe/specialized_plots/_heatmap.py +339 -0
- figrecipe-0.18.0/src/figrecipe/specialized_plots/_neuroscience.py +232 -0
- figrecipe-0.18.0/src/figrecipe/specialized_plots/_statistical.py +400 -0
- figrecipe-0.18.0/src/figrecipe/styles/__init__.py +147 -0
- figrecipe-0.18.0/src/figrecipe/styles/_color_resolver.py +218 -0
- figrecipe-0.18.0/src/figrecipe/styles/_dotdict.py +72 -0
- figrecipe-0.18.0/src/figrecipe/styles/_finalize.py +145 -0
- figrecipe-0.18.0/src/figrecipe/styles/_fonts.py +77 -0
- figrecipe-0.18.0/src/figrecipe/styles/_kwargs_converter.py +178 -0
- figrecipe-0.18.0/src/figrecipe/styles/_plot_styles.py +213 -0
- figrecipe-0.18.0/src/figrecipe/styles/_plot_styling.py +37 -0
- figrecipe-0.18.0/src/figrecipe/styles/_style_applier.py +278 -0
- figrecipe-0.18.0/src/figrecipe/styles/_style_loader.py +413 -0
- figrecipe-0.18.0/src/figrecipe/styles/_themes.py +151 -0
- figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/__init__.py +74 -0
- figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_base.py +64 -0
- figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_geometry.py +131 -0
- figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_rotate_labels.py +262 -0
- figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_sci_note.py +165 -0
- figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_spines.py +303 -0
- figrecipe-0.18.0/src/figrecipe/styles/axis_helpers/_ticks.py +349 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/__init__.py +77 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_barplot.py +119 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_base.py +203 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_boxplot.py +195 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_errorbar.py +145 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_heatmap.py +139 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_histogram.py +130 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_imshow.py +134 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_line.py +107 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_pie.py +154 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_scatter.py +125 -0
- figrecipe-0.18.0/src/figrecipe/styles/plot_stylers/_violinplot.py +144 -0
- figrecipe-0.18.0/src/figrecipe/styles/presets/MATPLOTLIB.yaml +95 -0
- figrecipe-0.18.0/src/figrecipe/styles/presets/SCITEX.yaml +188 -0
- figrecipe-0.18.0/src/figrecipe/utils.py +82 -0
- figrecipe-0.18.0/tests/__init__.py +3 -0
- figrecipe-0.18.0/tests/editor/__init__.py +3 -0
- figrecipe-0.18.0/tests/editor/conftest.py +137 -0
- figrecipe-0.18.0/tests/editor/test_datatable_theme_aware.py +119 -0
- figrecipe-0.18.0/tests/editor/test_hit_detection.py +103 -0
- figrecipe-0.18.0/tests/editor/test_js_errors.py +106 -0
- figrecipe-0.18.0/tests/editor/test_overrides.py +107 -0
- figrecipe-0.18.0/tests/editor/test_panel_position.py +191 -0
- figrecipe-0.18.0/tests/editor/test_plot_types_registry.py +127 -0
- figrecipe-0.18.0/tests/editor/test_properties.py +101 -0
- figrecipe-0.18.0/tests/editor/test_restore_endpoint.py +90 -0
- figrecipe-0.18.0/tests/editor/test_theme.py +95 -0
- figrecipe-0.18.0/tests/editor/test_toolbar.py +107 -0
- figrecipe-0.18.0/tests/test_alignment.py +281 -0
- figrecipe-0.18.0/tests/test_annotation_fontsize.py +114 -0
- figrecipe-0.18.0/tests/test_api_plot.py +297 -0
- figrecipe-0.18.0/tests/test_api_validate.py +169 -0
- figrecipe-0.18.0/tests/test_axis_helpers.py +434 -0
- figrecipe-0.18.0/tests/test_branding.py +220 -0
- figrecipe-0.18.0/tests/test_bundle.py +237 -0
- figrecipe-0.18.0/tests/test_caption_generation.py +198 -0
- figrecipe-0.18.0/tests/test_captions.py +435 -0
- figrecipe-0.18.0/tests/test_cli.py +521 -0
- figrecipe-0.18.0/tests/test_compose_freeform.py +343 -0
- figrecipe-0.18.0/tests/test_composition.py +641 -0
- figrecipe-0.18.0/tests/test_constrained_layout.py +158 -0
- figrecipe-0.18.0/tests/test_csv_column_support.py +414 -0
- figrecipe-0.18.0/tests/test_csv_format.py +265 -0
- figrecipe-0.18.0/tests/test_diagram.py +305 -0
- figrecipe-0.18.0/tests/test_editor_browser.py +75 -0
- figrecipe-0.18.0/tests/test_editor_contourf.py +252 -0
- figrecipe-0.18.0/tests/test_editor_dark_mode.py +251 -0
- figrecipe-0.18.0/tests/test_editor_datatable.py +377 -0
- figrecipe-0.18.0/tests/test_editor_edit_variants.py +284 -0
- figrecipe-0.18.0/tests/test_editor_file_browser.py +339 -0
- figrecipe-0.18.0/tests/test_editor_hitmap.py +304 -0
- figrecipe-0.18.0/tests/test_editor_image_drop.py +284 -0
- figrecipe-0.18.0/tests/test_editor_image_drop_formats.py +201 -0
- figrecipe-0.18.0/tests/test_editor_image_drop_recording.py +162 -0
- figrecipe-0.18.0/tests/test_editor_image_drop_url.py +162 -0
- figrecipe-0.18.0/tests/test_editor_layout_stability.py +312 -0
- figrecipe-0.18.0/tests/test_editor_new_figure.py +241 -0
- figrecipe-0.18.0/tests/test_editor_panel_drag.py +79 -0
- figrecipe-0.18.0/tests/test_editor_panel_drag_snapshot.py +79 -0
- figrecipe-0.18.0/tests/test_editor_panel_snap.py +174 -0
- figrecipe-0.18.0/tests/test_editor_pie_colors.py +226 -0
- figrecipe-0.18.0/tests/test_editor_preferences.py +283 -0
- figrecipe-0.18.0/tests/test_editor_selection_features.py +311 -0
- figrecipe-0.18.0/tests/test_editor_undo_redo.py +251 -0
- figrecipe-0.18.0/tests/test_graph.py +573 -0
- figrecipe-0.18.0/tests/test_hit_areas.py +668 -0
- figrecipe-0.18.0/tests/test_hitmap_call_id_matching.py +380 -0
- figrecipe-0.18.0/tests/test_hitmap_pixel_detection.py +643 -0
- figrecipe-0.18.0/tests/test_integration.py +438 -0
- figrecipe-0.18.0/tests/test_mcp_resources.py +178 -0
- figrecipe-0.18.0/tests/test_metadata_caption.py +291 -0
- figrecipe-0.18.0/tests/test_plot_styling.py +292 -0
- figrecipe-0.18.0/tests/test_recorder.py +163 -0
- figrecipe-0.18.0/tests/test_reproducer_pie_colors.py +85 -0
- figrecipe-0.18.0/tests/test_roundtrip.py +271 -0
- figrecipe-0.18.0/tests/test_roundtrip_all_types.py +265 -0
- figrecipe-0.18.0/tests/test_savefig_consistency.py +178 -0
- figrecipe-0.18.0/tests/test_scitex_stats_integration.py +228 -0
- figrecipe-0.18.0/tests/test_seaborn.py +196 -0
- figrecipe-0.18.0/tests/test_specialized_plots.py +382 -0
- figrecipe-0.18.0/tests/test_stat_annotation.py +192 -0
- 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,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/
|