scitex 2.10.2__py3-none-any.whl → 2.11.0__py3-none-any.whl
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.
- scitex/__init__.py +1 -4
- scitex/__version__.py +1 -1
- scitex/_install_guide.py +14 -2
- scitex/bridge/_figrecipe.py +1 -1
- scitex/bridge/_helpers.py +1 -1
- scitex/bridge/_plt_vis.py +1 -1
- scitex/bridge/_stats_plt.py +1 -1
- scitex/bridge/_stats_vis.py +2 -2
- scitex/{fig → canvas}/__init__.py +84 -96
- scitex/{fig → canvas}/backend/_parser.py +1 -1
- scitex/{fig → canvas}/canvas.py +13 -14
- scitex/{fts/_fig/_editor → canvas/editor}/_defaults.py +2 -2
- scitex/{fig → canvas}/editor/edit/__init__.py +11 -14
- scitex/{fig → canvas}/editor/edit/bundle_resolver.py +56 -48
- scitex/{fig → canvas}/editor/edit/editor_launcher.py +79 -26
- scitex/{fts/_fig/_editor/_cui/_panel_loader.py → canvas/editor/edit/panel_loader.py} +8 -8
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_bbox.py +2 -1
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_core.py +84 -84
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_renderer.py +7 -6
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/static/css/features/canvas.css +2 -2
- scitex/{fig → canvas}/editor/flask_editor/static/css/features/panel-grid.css +1 -1
- scitex/{fig → canvas}/editor/flask_editor/static/js/core/api.js +3 -4
- scitex/{fig → canvas}/editor/flask_editor/static/js/editor/preview.js +5 -5
- scitex/{fig → canvas}/editor/flask_editor/templates/_html.py +3 -3
- scitex/{fig → canvas}/editor/flask_editor/templates/_scripts.py +10 -10
- scitex/{fig → canvas}/editor/flask_editor/templates/_styles.py +3 -3
- scitex/{fig → canvas}/io/__init__.py +32 -38
- scitex/{fig → canvas}/io/_bundle.py +217 -154
- scitex/{fig → canvas}/io/_canvas.py +1 -1
- scitex/{fig → canvas}/io/_data.py +1 -1
- scitex/{fig → canvas}/io/_export.py +1 -1
- scitex/{fig → canvas}/io/_load.py +1 -1
- scitex/{fig → canvas}/io/_panel.py +1 -1
- scitex/{fig → canvas}/io/_save.py +1 -1
- scitex/{fig → canvas}/model/__init__.py +1 -1
- scitex/{fig → canvas}/model/_annotations.py +1 -1
- scitex/{fig → canvas}/model/_axes.py +1 -1
- scitex/{fig → canvas}/model/_figure.py +1 -1
- scitex/{fig → canvas}/model/_guides.py +1 -1
- scitex/{fig → canvas}/model/_plot.py +1 -1
- scitex/{fig → canvas}/model/_styles.py +1 -1
- scitex/{fig → canvas}/utils/__init__.py +1 -1
- scitex/cli/convert.py +10 -6
- scitex/diagram/README.md +7 -7
- scitex/io/__init__.py +7 -19
- scitex/io/_load.py +15 -19
- scitex/io/_load_modules/_canvas.py +2 -2
- scitex/io/_load_modules/_con.py +5 -5
- scitex/io/_load_modules/_eeg.py +16 -12
- scitex/io/_save.py +11 -16
- scitex/io/_save_modules/__init__.py +6 -10
- scitex/io/_save_modules/_canvas.py +3 -3
- scitex/io/_save_modules/_plot_bundle.py +112 -0
- scitex/io/_save_modules/{_pltz_stx.py → _plot_scitex.py} +7 -7
- scitex/io/_save_modules/_stx_bundle.py +16 -16
- scitex/io/bundle/README.md +89 -80
- scitex/{fts/_bundle/_FTS.py → io/bundle/_Bundle.py} +197 -95
- scitex/io/bundle/__init__.py +67 -35
- scitex/{fts/_bundle → io/bundle}/_children.py +32 -40
- scitex/io/bundle/_core.py +184 -97
- scitex/{fts/_bundle/_dataclasses/_Node.py → io/bundle/_dataclasses/_Spec.py} +29 -23
- scitex/{fts/_bundle/_dataclasses/_NodeRefs.py → io/bundle/_dataclasses/_SpecRefs.py} +6 -6
- scitex/{fts/_bundle → io/bundle}/_dataclasses/__init__.py +4 -4
- scitex/{fts/_bundle → io/bundle}/_loader.py +19 -19
- scitex/io/bundle/_manifest.py +99 -0
- scitex/{fts/_bundle → io/bundle}/_mpl_helpers.py +119 -28
- scitex/io/bundle/_nested.py +113 -100
- scitex/{fts/_bundle → io/bundle}/_saver.py +13 -14
- scitex/{fts/_bundle → io/bundle}/_storage.py +3 -3
- scitex/io/bundle/_types.py +41 -16
- scitex/{fts/_bundle → io/bundle}/_validation.py +20 -18
- scitex/io/bundle/_zip.py +21 -31
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_backend/_parser.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Annotations.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Axes.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Figure.py +1 -1
- scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Guides.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Plot.py +1 -1
- scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Styles.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_utils/_plot_layout.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/__init__.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/_app.py +1 -1
- scitex/{fts/_tables → io/bundle/kinds/_table}/_latex/_export.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_figure_exporter.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_table_exporter.py +1 -1
- scitex/io/bundle/schemas/__init__.py +30 -0
- scitex/parallel/_run.py +5 -4
- scitex/path/_find.py +60 -83
- scitex/path/_get_module_path.py +23 -21
- scitex/path/_get_spath.py +6 -27
- scitex/path/_getsize.py +23 -9
- scitex/path/_increment_version.py +31 -38
- scitex/path/_mk_spath.py +26 -29
- scitex/path/_path.py +5 -12
- scitex/path/_split.py +27 -15
- scitex/path/_this_path.py +23 -9
- scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/__init__.py +2 -1
- scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +2 -2
- scitex/plt/gallery/_generate.py +76 -50
- scitex/plt/io/__init__.py +17 -19
- scitex/plt/io/_bundle.py +99 -52
- scitex/plt/io/_layered_bundle.py +303 -168
- scitex/plt/utils/_csv_column_naming.py +250 -118
- scitex/schema/__init__.py +69 -73
- scitex/schema/_canvas.py +1 -1
- scitex/schema/_stats.py +2 -2
- scitex/stats/__init__.py +30 -33
- scitex/stats/_schema.py +1 -1
- scitex/stats/io/__init__.py +10 -11
- scitex/stats/io/_bundle.py +16 -16
- {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/METADATA +191 -72
- {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/RECORD +237 -360
- scitex/fig/editor/_defaults.py +0 -300
- scitex/fig/editor/edit/panel_loader.py +0 -232
- scitex/fig/editor/flask_editor/_bbox.py +0 -1299
- scitex/fig/editor/flask_editor/_core.py +0 -1429
- scitex/fig/editor/flask_editor/_renderer.py +0 -813
- scitex/fig/editor/flask_editor/static/css/features/canvas.css +0 -176
- scitex/fts/README.md +0 -262
- scitex/fts/TODO.md +0 -66
- scitex/fts/__init__.py +0 -90
- scitex/fts/_bundle/README_IN_BUNDLE.md +0 -102
- scitex/fts/_bundle/__init__.py +0 -38
- scitex/fts/_bundle/_utils/__init__.py +0 -55
- scitex/fts/_bundle/_utils/_const.py +0 -26
- scitex/fts/_bundle/_utils/_errors.py +0 -73
- scitex/fts/_bundle/_utils/_generate.py +0 -21
- scitex/fts/_bundle/_utils/_types.py +0 -76
- scitex/fts/_bundle/_zipbundle.py +0 -165
- scitex/fts/_fig/__init__.py +0 -22
- scitex/fts/_fig/_backend/_parser.py +0 -188
- scitex/fts/_fig/_editor/__init__.py +0 -14
- scitex/fts/_fig/_editor/_cui/__init__.py +0 -33
- scitex/fts/_fig/_editor/_cui/_backend_detector.py +0 -39
- scitex/fts/_fig/_editor/_cui/_bundle_resolver.py +0 -366
- scitex/fts/_fig/_editor/_cui/_editor_launcher.py +0 -175
- scitex/fts/_fig/_editor/_cui/_manual_handler.py +0 -52
- scitex/fts/_fig/_editor/_cui/_path_resolver.py +0 -66
- scitex/fts/_fig/_editor/_gui/__init__.py +0 -11
- scitex/fts/_fig/_editor/_gui/_flask_editor/__init__.py +0 -20
- scitex/fts/_fig/_editor/_gui/_flask_editor/_plotter.py +0 -664
- scitex/fts/_fig/_editor/_gui/_flask_editor/_utils.py +0 -79
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/reset.css +0 -41
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/typography.css +0 -16
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/variables.css +0 -85
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/buttons.css +0 -217
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/context-menu.css +0 -93
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/dropdown.css +0 -57
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/forms.css +0 -112
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/modal.css +0 -59
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/sections.css +0 -212
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/element-inspector.css +0 -190
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/loading.css +0 -59
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/overlay.css +0 -45
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/panel-grid.css +0 -95
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/selection.css +0 -101
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/statistics.css +0 -138
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/index.css +0 -31
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/container.css +0 -7
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/controls.css +0 -56
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/preview.css +0 -78
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/axis.js +0 -314
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/basic.js +0 -107
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/distribute.js +0 -54
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/canvas.js +0 -172
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/dragging.js +0 -258
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/resize.js +0 -48
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/selection.js +0 -71
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/api.js +0 -288
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/state.js +0 -143
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/utils.js +0 -245
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/dev/element-inspector.js +0 -992
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/bbox.js +0 -339
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/element-drag.js +0 -286
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/overlay.js +0 -371
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/preview.js +0 -293
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/main.js +0 -426
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/context-menu.js +0 -152
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/keyboard.js +0 -265
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/controls.js +0 -184
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/download.js +0 -57
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/help.js +0 -100
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/theme.js +0 -34
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/__init__.py +0 -124
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_html.py +0 -851
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_scripts.py +0 -4932
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_styles.py +0 -1657
- scitex/fts/_fig/_editor/_gui/_flask_editor.py +0 -36
- scitex/fts/_fig/_models/_Annotations.py +0 -115
- scitex/fts/_fig/_models/_Axes.py +0 -152
- scitex/fts/_fig/_models/_Figure.py +0 -138
- scitex/fts/_fig/_models/_Plot.py +0 -123
- scitex/fts/_fig/_utils/_plot_layout.py +0 -397
- scitex/fts/_kinds/_figure/_composite.py +0 -345
- scitex/fts/_kinds/_plot/_backend/__init__.py +0 -53
- scitex/fts/_kinds/_plot/_backend/_export.py +0 -165
- scitex/fts/_kinds/_plot/_backend/_render.py +0 -538
- scitex/fts/_kinds/_plot/_dataclasses/_ChannelEncoding.py +0 -46
- scitex/fts/_kinds/_plot/_dataclasses/_Encoding.py +0 -82
- scitex/fts/_kinds/_plot/_dataclasses/_Theme.py +0 -441
- scitex/fts/_kinds/_plot/_dataclasses/_TraceEncoding.py +0 -52
- scitex/fts/_kinds/_plot/_dataclasses/__init__.py +0 -47
- scitex/fts/_kinds/_plot/_models/_Guides.py +0 -104
- scitex/fts/_kinds/_plot/_models/_Styles.py +0 -245
- scitex/fts/_kinds/_plot/_models/__init__.py +0 -80
- scitex/fts/_kinds/_plot/_models/_plot_types/__init__.py +0 -156
- scitex/fts/_kinds/_plot/_models/_plot_types/_bar.py +0 -43
- scitex/fts/_kinds/_plot/_models/_plot_types/_box.py +0 -38
- scitex/fts/_kinds/_plot/_models/_plot_types/_distribution.py +0 -36
- scitex/fts/_kinds/_plot/_models/_plot_types/_errorbar.py +0 -60
- scitex/fts/_kinds/_plot/_models/_plot_types/_histogram.py +0 -30
- scitex/fts/_kinds/_plot/_models/_plot_types/_image.py +0 -61
- scitex/fts/_kinds/_plot/_models/_plot_types/_line.py +0 -57
- scitex/fts/_kinds/_plot/_models/_plot_types/_scatter.py +0 -30
- scitex/fts/_kinds/_plot/_models/_plot_types/_seaborn.py +0 -121
- scitex/fts/_kinds/_plot/_models/_plot_types/_violin.py +0 -36
- scitex/fts/_kinds/_plot/_utils/__init__.py +0 -129
- scitex/fts/_kinds/_plot/_utils/_auto_layout.py +0 -127
- scitex/fts/_kinds/_plot/_utils/_calc_bounds.py +0 -111
- scitex/fts/_kinds/_plot/_utils/_const_sizes.py +0 -48
- scitex/fts/_kinds/_plot/_utils/_convert_coords.py +0 -77
- scitex/fts/_kinds/_plot/_utils/_get_template.py +0 -178
- scitex/fts/_kinds/_plot/_utils/_normalize.py +0 -73
- scitex/fts/_kinds/_plot/_utils/_validate.py +0 -197
- scitex/fts/_kinds/_table/_latex/_export.py +0 -279
- scitex/fts/_stats/__init__.py +0 -48
- scitex/fts/_stats/_dataclasses/_Stats.py +0 -423
- scitex/fts/_stats/_dataclasses/__init__.py +0 -48
- scitex/fts/_tables/__init__.py +0 -65
- scitex/fts/_tables/_latex/__init__.py +0 -93
- scitex/fts/_tables/_latex/_editor/__init__.py +0 -11
- scitex/fts/_tables/_latex/_editor/_app.py +0 -725
- scitex/fts/_tables/_latex/_figure_exporter.py +0 -153
- scitex/fts/_tables/_latex/_stats_formatter.py +0 -274
- scitex/fts/_tables/_latex/_table_exporter.py +0 -362
- scitex/fts/_tables/_latex/_utils.py +0 -369
- scitex/fts/_tables/_latex/_validator.py +0 -445
- scitex/io/_save_modules/_pltz_bundle.py +0 -356
- /scitex/{fig → canvas}/README.md +0 -0
- /scitex/{fig → canvas}/backend/__init__.py +0 -0
- /scitex/{fig → canvas}/backend/_export.py +0 -0
- /scitex/{fig → canvas}/backend/_render.py +0 -0
- /scitex/{fig → canvas}/docs/CANVAS_ARCHITECTURE.md +0 -0
- /scitex/{fig → canvas}/editor/__init__.py +0 -0
- /scitex/{fig → canvas}/editor/_dearpygui_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_flask_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_mpl_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_qt_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_tkinter_editor.py +0 -0
- /scitex/{fig → canvas}/editor/edit/backend_detector.py +0 -0
- /scitex/{fig → canvas}/editor/edit/manual_handler.py +0 -0
- /scitex/{fig → canvas}/editor/edit/path_resolver.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/__init__.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/_plotter.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/_utils.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/base/reset.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/base/typography.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/base/variables.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/buttons.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/context-menu.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/dropdown.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/forms.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/modal.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/sections.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/element-inspector.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/loading.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/overlay.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/selection.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/statistics.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/index.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/container.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/controls.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/preview.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/axis.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/basic.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/distribute.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/canvas.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/dragging.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/resize.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/selection.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/core/state.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/core/utils.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/dev/element-inspector.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/bbox.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/element-drag.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/overlay.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/main.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/context-menu.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/keyboard.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/controls.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/download.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/help.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/theme.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/templates/__init__.py +0 -0
- /scitex/{fig → canvas}/io/_directory.py +0 -0
- /scitex/{fig → canvas}/model/_plot_types.py +0 -0
- /scitex/{fig → canvas}/utils/_defaults.py +0 -0
- /scitex/{fig → canvas}/utils/_validate.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_conversion/__init__.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_conversion/_bundle2dict.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_conversion/_dict2bundle.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_Axes.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_BBox.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_ColumnDef.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataFormat.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataInfo.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataSource.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_SizeMM.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/__init__.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_bar.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_line.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_scatter.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_figure/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_figure}/_composite.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_plot/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_export.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_render.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_ChannelEncoding.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Encoding.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Theme.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_TraceEncoding.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_bar.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_box.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_distribution.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_errorbar.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_histogram.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_image.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_line.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_scatter.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_seaborn.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_violin.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_auto_layout.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_calc_bounds.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_const_sizes.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_convert_coords.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_get_template.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_normalize.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_validate.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_shape/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_stats/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/_Stats.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_stats_formatter.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_utils.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_validator.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_text/__init__.py +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/data_info.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/encoding.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/node.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/render_manifest.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/stats.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/theme.schema.json +0 -0
- {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/WHEEL +0 -0
- {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/entry_points.txt +0 -0
- {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,356 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Timestamp: 2025-12-19
|
|
3
|
-
# File: /home/ywatanabe/proj/scitex-code/src/scitex/io/_save_modules/_pltz_bundle.py
|
|
4
|
-
|
|
5
|
-
"""Save matplotlib figures as .pltz bundles."""
|
|
6
|
-
|
|
7
|
-
import tempfile
|
|
8
|
-
import warnings
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
|
|
11
|
-
import numpy as np
|
|
12
|
-
|
|
13
|
-
from scitex import logging
|
|
14
|
-
|
|
15
|
-
from ._figure_utils import get_figure_with_data
|
|
16
|
-
|
|
17
|
-
logger = logging.getLogger()
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def save_pltz_bundle(obj, spath, as_zip=False, data=None, layered=True, **kwargs):
|
|
21
|
-
"""Save a matplotlib figure as a .pltz bundle.
|
|
22
|
-
|
|
23
|
-
Bundle structure v2.0 (layered - default):
|
|
24
|
-
plot.pltz.d/
|
|
25
|
-
spec.json # Semantic: WHAT to plot (canonical)
|
|
26
|
-
style.json # Appearance: HOW it looks (canonical)
|
|
27
|
-
data.csv # Raw data (immutable)
|
|
28
|
-
exports/ # PNG, SVG, hitmap
|
|
29
|
-
cache/ # geometry_px.json, render_manifest.json
|
|
30
|
-
|
|
31
|
-
Parameters
|
|
32
|
-
----------
|
|
33
|
-
obj : matplotlib.figure.Figure
|
|
34
|
-
The figure to save.
|
|
35
|
-
spath : str or Path
|
|
36
|
-
Output path (e.g., "plot.pltz.d" or "plot.pltz").
|
|
37
|
-
as_zip : bool
|
|
38
|
-
If True, save as ZIP archive.
|
|
39
|
-
data : pandas.DataFrame, optional
|
|
40
|
-
Data to embed in the bundle as plot.csv.
|
|
41
|
-
layered : bool
|
|
42
|
-
If True (default), use new layered format (spec/style/geometry).
|
|
43
|
-
**kwargs
|
|
44
|
-
Additional arguments passed to savefig.
|
|
45
|
-
"""
|
|
46
|
-
import shutil
|
|
47
|
-
|
|
48
|
-
import matplotlib.figure
|
|
49
|
-
|
|
50
|
-
from scitex.plt.io import save_layered_pltz_bundle
|
|
51
|
-
|
|
52
|
-
p = Path(spath)
|
|
53
|
-
|
|
54
|
-
# Extract basename from path
|
|
55
|
-
basename = p.stem
|
|
56
|
-
if basename.endswith(".pltz"):
|
|
57
|
-
basename = basename[:-5]
|
|
58
|
-
elif basename.endswith(".d"):
|
|
59
|
-
basename = Path(basename).stem
|
|
60
|
-
if basename.endswith(".pltz"):
|
|
61
|
-
basename = basename[:-5]
|
|
62
|
-
|
|
63
|
-
# Extract figure from various matplotlib object types
|
|
64
|
-
fig = obj
|
|
65
|
-
if hasattr(obj, "figure"):
|
|
66
|
-
fig = obj.figure
|
|
67
|
-
elif hasattr(obj, "fig"):
|
|
68
|
-
fig = obj.fig
|
|
69
|
-
|
|
70
|
-
if not isinstance(fig, matplotlib.figure.Figure):
|
|
71
|
-
raise TypeError(f"Expected matplotlib Figure, got {type(obj).__name__}")
|
|
72
|
-
|
|
73
|
-
dpi = kwargs.pop("dpi", 300)
|
|
74
|
-
|
|
75
|
-
# === Always use layered format ===
|
|
76
|
-
# Determine bundle directory path
|
|
77
|
-
if as_zip:
|
|
78
|
-
temp_dir = Path(tempfile.mkdtemp())
|
|
79
|
-
bundle_dir = temp_dir / f"{basename}.pltz.d"
|
|
80
|
-
zip_path = p if not str(p).endswith(".d") else Path(str(p)[:-2])
|
|
81
|
-
else:
|
|
82
|
-
bundle_dir = p if str(p).endswith(".d") else Path(str(p) + ".d")
|
|
83
|
-
temp_dir = None
|
|
84
|
-
|
|
85
|
-
# Get CSV data from figure if not provided
|
|
86
|
-
csv_df = data
|
|
87
|
-
if csv_df is None:
|
|
88
|
-
csv_source = get_figure_with_data(obj)
|
|
89
|
-
if csv_source is not None and hasattr(csv_source, "export_as_csv"):
|
|
90
|
-
try:
|
|
91
|
-
csv_df = csv_source.export_as_csv()
|
|
92
|
-
except Exception:
|
|
93
|
-
pass
|
|
94
|
-
|
|
95
|
-
save_layered_pltz_bundle(
|
|
96
|
-
fig=fig,
|
|
97
|
-
bundle_dir=bundle_dir,
|
|
98
|
-
basename=basename,
|
|
99
|
-
dpi=dpi,
|
|
100
|
-
csv_df=csv_df,
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
# Compress to ZIP if requested
|
|
104
|
-
if as_zip:
|
|
105
|
-
import zipfile
|
|
106
|
-
|
|
107
|
-
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf:
|
|
108
|
-
for file_path in bundle_dir.rglob("*"):
|
|
109
|
-
if file_path.is_file():
|
|
110
|
-
arcname = file_path.relative_to(bundle_dir.parent)
|
|
111
|
-
zf.write(file_path, arcname)
|
|
112
|
-
shutil.rmtree(temp_dir)
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
def save_pltz_bundle_legacy(obj, spath, as_zip=False, data=None, **kwargs):
|
|
116
|
-
"""Legacy format - kept for reference but not actively used."""
|
|
117
|
-
import hashlib
|
|
118
|
-
import tempfile
|
|
119
|
-
from pathlib import Path
|
|
120
|
-
|
|
121
|
-
import matplotlib.figure
|
|
122
|
-
|
|
123
|
-
from scitex.io.bundle import BundleType
|
|
124
|
-
from scitex.io.bundle import save as save_bundle
|
|
125
|
-
|
|
126
|
-
p = Path(spath)
|
|
127
|
-
basename = p.stem
|
|
128
|
-
if basename.endswith(".pltz"):
|
|
129
|
-
basename = basename[:-5]
|
|
130
|
-
elif basename.endswith(".d"):
|
|
131
|
-
basename = Path(basename).stem
|
|
132
|
-
if basename.endswith(".pltz"):
|
|
133
|
-
basename = basename[:-5]
|
|
134
|
-
|
|
135
|
-
fig = obj
|
|
136
|
-
if hasattr(obj, "figure"):
|
|
137
|
-
fig = obj.figure
|
|
138
|
-
elif hasattr(obj, "fig"):
|
|
139
|
-
fig = obj.fig
|
|
140
|
-
|
|
141
|
-
if not isinstance(fig, matplotlib.figure.Figure):
|
|
142
|
-
raise TypeError(f"Expected matplotlib Figure, got {type(obj).__name__}")
|
|
143
|
-
|
|
144
|
-
dpi = kwargs.pop("dpi", 300)
|
|
145
|
-
fig_width_inch, fig_height_inch = fig.get_size_inches()
|
|
146
|
-
|
|
147
|
-
# Build spec
|
|
148
|
-
spec = {
|
|
149
|
-
"schema": {"name": "scitex.plt.plot", "version": "1.0.0"},
|
|
150
|
-
"backend": "mpl",
|
|
151
|
-
"data": {
|
|
152
|
-
"source": f"{basename}.csv",
|
|
153
|
-
"path": f"{basename}.csv",
|
|
154
|
-
"hash": None,
|
|
155
|
-
"columns": [],
|
|
156
|
-
},
|
|
157
|
-
"size": {
|
|
158
|
-
"width_inch": round(fig_width_inch, 2),
|
|
159
|
-
"height_inch": round(fig_height_inch, 2),
|
|
160
|
-
"width_mm": round(fig_width_inch * 25.4, 2),
|
|
161
|
-
"height_mm": round(fig_height_inch * 25.4, 2),
|
|
162
|
-
"width_px": int(fig_width_inch * dpi),
|
|
163
|
-
"height_px": int(fig_height_inch * dpi),
|
|
164
|
-
"dpi": dpi,
|
|
165
|
-
"crop_margin_mm": 1.0,
|
|
166
|
-
},
|
|
167
|
-
"axes": [],
|
|
168
|
-
"theme": {
|
|
169
|
-
"mode": "light",
|
|
170
|
-
"colors": {
|
|
171
|
-
"background": "transparent",
|
|
172
|
-
"axes_bg": "white",
|
|
173
|
-
"text": "black",
|
|
174
|
-
"spine": "black",
|
|
175
|
-
"tick": "black",
|
|
176
|
-
},
|
|
177
|
-
},
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
extracted_data = {}
|
|
181
|
-
|
|
182
|
-
# Extract axes metadata
|
|
183
|
-
for i, ax in enumerate(fig.axes):
|
|
184
|
-
bbox = ax.get_position()
|
|
185
|
-
ax_info = {
|
|
186
|
-
"xlabel": ax.get_xlabel() or None,
|
|
187
|
-
"ylabel": ax.get_ylabel() or None,
|
|
188
|
-
"title": ax.get_title() or None,
|
|
189
|
-
"xlim": [round(v, 2) for v in ax.get_xlim()],
|
|
190
|
-
"ylim": [round(v, 2) for v in ax.get_ylim()],
|
|
191
|
-
"plot_type": "line",
|
|
192
|
-
"bbox": {
|
|
193
|
-
"x0": round(bbox.x0, 4),
|
|
194
|
-
"y0": round(bbox.y0, 4),
|
|
195
|
-
"x1": round(bbox.x1, 4),
|
|
196
|
-
"y1": round(bbox.y1, 4),
|
|
197
|
-
"width": round(bbox.width, 4),
|
|
198
|
-
"height": round(bbox.height, 4),
|
|
199
|
-
},
|
|
200
|
-
"bbox_mm": {
|
|
201
|
-
"x0": round(bbox.x0 * fig_width_inch * 25.4, 2),
|
|
202
|
-
"y0": round(bbox.y0 * fig_height_inch * 25.4, 2),
|
|
203
|
-
"x1": round(bbox.x1 * fig_width_inch * 25.4, 2),
|
|
204
|
-
"y1": round(bbox.y1 * fig_height_inch * 25.4, 2),
|
|
205
|
-
"width": round(bbox.width * fig_width_inch * 25.4, 2),
|
|
206
|
-
"height": round(bbox.height * fig_height_inch * 25.4, 2),
|
|
207
|
-
},
|
|
208
|
-
"bbox_px": {
|
|
209
|
-
"x0": int(bbox.x0 * fig_width_inch * dpi),
|
|
210
|
-
"y0": int(bbox.y0 * fig_height_inch * dpi),
|
|
211
|
-
"x1": int(bbox.x1 * fig_width_inch * dpi),
|
|
212
|
-
"y1": int(bbox.y1 * fig_height_inch * dpi),
|
|
213
|
-
"width": int(bbox.width * fig_width_inch * dpi),
|
|
214
|
-
"height": int(bbox.height * fig_height_inch * dpi),
|
|
215
|
-
},
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
if hasattr(ax, "_scitex_axes_width_mm"):
|
|
219
|
-
ax_info["axes_width_mm"] = ax._scitex_axes_width_mm
|
|
220
|
-
else:
|
|
221
|
-
ax_info["axes_width_mm"] = round(bbox.width * fig_width_inch * 25.4, 1)
|
|
222
|
-
|
|
223
|
-
if hasattr(ax, "_scitex_axes_height_mm"):
|
|
224
|
-
ax_info["axes_height_mm"] = ax._scitex_axes_height_mm
|
|
225
|
-
else:
|
|
226
|
-
ax_info["axes_height_mm"] = round(bbox.height * fig_height_inch * 25.4, 1)
|
|
227
|
-
|
|
228
|
-
lines_info = []
|
|
229
|
-
for j, line in enumerate(ax.get_lines()):
|
|
230
|
-
label = line.get_label()
|
|
231
|
-
if label is None or label.startswith("_"):
|
|
232
|
-
label = f"series_{j}"
|
|
233
|
-
xdata, ydata = line.get_data()
|
|
234
|
-
if len(xdata) > 0:
|
|
235
|
-
col_x = f"{label}_x" if i == 0 else f"ax{i}_{label}_x"
|
|
236
|
-
col_y = f"{label}_y" if i == 0 else f"ax{i}_{label}_y"
|
|
237
|
-
extracted_data[col_x] = np.array(xdata)
|
|
238
|
-
extracted_data[col_y] = np.array(ydata)
|
|
239
|
-
|
|
240
|
-
color = line.get_color()
|
|
241
|
-
if isinstance(color, (list, tuple)):
|
|
242
|
-
import matplotlib.colors as mcolors
|
|
243
|
-
|
|
244
|
-
color = mcolors.to_hex(color)
|
|
245
|
-
|
|
246
|
-
lines_info.append(
|
|
247
|
-
{
|
|
248
|
-
"label": label,
|
|
249
|
-
"x_col": col_x,
|
|
250
|
-
"y_col": col_y,
|
|
251
|
-
"color": color,
|
|
252
|
-
"linewidth": line.get_linewidth(),
|
|
253
|
-
}
|
|
254
|
-
)
|
|
255
|
-
|
|
256
|
-
if lines_info:
|
|
257
|
-
ax_info["lines"] = lines_info
|
|
258
|
-
|
|
259
|
-
spec["axes"].append(ax_info)
|
|
260
|
-
|
|
261
|
-
# Handle theme
|
|
262
|
-
if hasattr(fig, "_scitex_theme"):
|
|
263
|
-
theme_mode = fig._scitex_theme
|
|
264
|
-
spec["theme"]["mode"] = theme_mode
|
|
265
|
-
if theme_mode == "dark":
|
|
266
|
-
spec["theme"]["colors"] = {
|
|
267
|
-
"background": "transparent",
|
|
268
|
-
"axes_bg": "transparent",
|
|
269
|
-
"text": "#e8e8e8",
|
|
270
|
-
"spine": "#e8e8e8",
|
|
271
|
-
"tick": "#e8e8e8",
|
|
272
|
-
}
|
|
273
|
-
from scitex.plt.utils._figure_mm import _apply_theme_colors
|
|
274
|
-
|
|
275
|
-
for ax in fig.axes:
|
|
276
|
-
_apply_theme_colors(ax, theme="dark")
|
|
277
|
-
|
|
278
|
-
bundle_data = {"spec": spec, "basename": basename}
|
|
279
|
-
|
|
280
|
-
# Process data
|
|
281
|
-
csv_df = None
|
|
282
|
-
if data is not None:
|
|
283
|
-
csv_df = data
|
|
284
|
-
bundle_data["data"] = data
|
|
285
|
-
else:
|
|
286
|
-
csv_source = get_figure_with_data(obj)
|
|
287
|
-
if csv_source is not None and hasattr(csv_source, "export_as_csv"):
|
|
288
|
-
try:
|
|
289
|
-
csv_df = csv_source.export_as_csv()
|
|
290
|
-
if csv_df is not None and not csv_df.empty:
|
|
291
|
-
bundle_data["data"] = csv_df
|
|
292
|
-
except Exception:
|
|
293
|
-
csv_df = None
|
|
294
|
-
|
|
295
|
-
if csv_df is None and extracted_data:
|
|
296
|
-
try:
|
|
297
|
-
import pandas as pd
|
|
298
|
-
|
|
299
|
-
max_len = max(len(v) for v in extracted_data.values())
|
|
300
|
-
padded = {}
|
|
301
|
-
for k, v in extracted_data.items():
|
|
302
|
-
if len(v) < max_len:
|
|
303
|
-
padded[k] = np.pad(
|
|
304
|
-
v, (0, max_len - len(v)), constant_values=np.nan
|
|
305
|
-
)
|
|
306
|
-
else:
|
|
307
|
-
padded[k] = v
|
|
308
|
-
csv_df = pd.DataFrame(padded)
|
|
309
|
-
bundle_data["data"] = csv_df
|
|
310
|
-
except ImportError:
|
|
311
|
-
pass
|
|
312
|
-
|
|
313
|
-
if csv_df is not None:
|
|
314
|
-
csv_str = csv_df.to_csv(index=False)
|
|
315
|
-
csv_hash = hashlib.sha256(csv_str.encode()).hexdigest()
|
|
316
|
-
spec["data"]["hash"] = f"sha256:{csv_hash[:16]}"
|
|
317
|
-
spec["data"]["columns"] = list(csv_df.columns)
|
|
318
|
-
|
|
319
|
-
# Save figures and hitmaps (simplified - full implementation in original)
|
|
320
|
-
crop_box = None
|
|
321
|
-
color_map = {}
|
|
322
|
-
|
|
323
|
-
with tempfile.TemporaryDirectory() as tmp_dir:
|
|
324
|
-
tmp_path = Path(tmp_dir)
|
|
325
|
-
|
|
326
|
-
with warnings.catch_warnings():
|
|
327
|
-
warnings.filterwarnings("ignore", message=".*tight_layout.*")
|
|
328
|
-
|
|
329
|
-
png_path = tmp_path / "plot.png"
|
|
330
|
-
fig.savefig(
|
|
331
|
-
png_path,
|
|
332
|
-
dpi=dpi,
|
|
333
|
-
bbox_inches="tight",
|
|
334
|
-
format="png",
|
|
335
|
-
transparent=True,
|
|
336
|
-
)
|
|
337
|
-
|
|
338
|
-
svg_path = tmp_path / "plot.svg"
|
|
339
|
-
fig.savefig(svg_path, bbox_inches="tight", format="svg")
|
|
340
|
-
|
|
341
|
-
pdf_path = tmp_path / "plot.pdf"
|
|
342
|
-
fig.savefig(pdf_path, bbox_inches="tight", format="pdf")
|
|
343
|
-
|
|
344
|
-
with open(png_path, "rb") as f:
|
|
345
|
-
bundle_data["png"] = f.read()
|
|
346
|
-
|
|
347
|
-
with open(svg_path, "rb") as f:
|
|
348
|
-
bundle_data["svg"] = f.read()
|
|
349
|
-
|
|
350
|
-
with open(pdf_path, "rb") as f:
|
|
351
|
-
bundle_data["pdf"] = f.read()
|
|
352
|
-
|
|
353
|
-
save_bundle(bundle_data, p, bundle_type=BundleType.PLTZ, as_zip=as_zip)
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
# EOF
|
/scitex/{fig → canvas}/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|