scitex 2.10.3__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.3.dist-info → scitex-2.11.0.dist-info}/METADATA +190 -73
- {scitex-2.10.3.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.3.dist-info → scitex-2.11.0.dist-info}/WHEEL +0 -0
- {scitex-2.10.3.dist-info → scitex-2.11.0.dist-info}/entry_points.txt +0 -0
- {scitex-2.10.3.dist-info → scitex-2.11.0.dist-info}/licenses/LICENSE +0 -0
scitex/plt/gallery/_generate.py
CHANGED
|
@@ -24,10 +24,10 @@ def generate(
|
|
|
24
24
|
save_csv=True,
|
|
25
25
|
save_png=True,
|
|
26
26
|
save_svg=True,
|
|
27
|
-
|
|
27
|
+
save_plot=True,
|
|
28
28
|
verbose=True,
|
|
29
29
|
):
|
|
30
|
-
"""Generate gallery plots with CSVs and optional .
|
|
30
|
+
"""Generate gallery plots with CSVs and optional .plot bundles.
|
|
31
31
|
|
|
32
32
|
Parameters
|
|
33
33
|
----------
|
|
@@ -49,8 +49,8 @@ def generate(
|
|
|
49
49
|
Whether to save PNG image files.
|
|
50
50
|
save_svg : bool
|
|
51
51
|
Whether to save SVG image files for element selection.
|
|
52
|
-
|
|
53
|
-
Whether to save .
|
|
52
|
+
save_plot : bool
|
|
53
|
+
Whether to save .plot bundles (reproducible plot packages).
|
|
54
54
|
verbose : bool
|
|
55
55
|
Print progress messages.
|
|
56
56
|
|
|
@@ -78,7 +78,7 @@ def generate(
|
|
|
78
78
|
if verbose:
|
|
79
79
|
print(f"Generating {len(plots_to_generate)} plots to {output_dir}")
|
|
80
80
|
|
|
81
|
-
results = {"png": [], "svg": [], "csv": [], "
|
|
81
|
+
results = {"png": [], "svg": [], "csv": [], "plot": [], "errors": []}
|
|
82
82
|
|
|
83
83
|
for plot_name in plots_to_generate:
|
|
84
84
|
if plot_name not in PLOT_FUNCTIONS:
|
|
@@ -102,31 +102,34 @@ def generate(
|
|
|
102
102
|
# Generate plot
|
|
103
103
|
fig, ax = plot_func(fig, ax, stx)
|
|
104
104
|
|
|
105
|
-
# Save as .
|
|
105
|
+
# Save as .plot bundle - this is the single source of truth
|
|
106
106
|
# All other formats (PNG, SVG, CSV, hitmap) are extracted from the bundle
|
|
107
|
-
|
|
108
|
-
stx.io.save(fig,
|
|
107
|
+
plot_path = cat_dir / f"{plot_name}.plot"
|
|
108
|
+
stx.io.save(fig, plot_path, dpi=dpi)
|
|
109
109
|
|
|
110
110
|
if verbose:
|
|
111
|
-
print(f" [PLTZ] {
|
|
111
|
+
print(f" [PLTZ] {plot_path}")
|
|
112
112
|
|
|
113
113
|
# Extract files from bundle to gallery directory
|
|
114
|
-
# The
|
|
114
|
+
# The plot bundle contains: plot.png, plot.svg, plot.pdf, plot.csv, plot.json, plot_hitmap.png
|
|
115
115
|
import shutil
|
|
116
116
|
|
|
117
117
|
if save_png:
|
|
118
|
-
bundle_png =
|
|
118
|
+
bundle_png = plot_path / "plot.png"
|
|
119
119
|
gallery_png = cat_dir / f"{plot_name}.png"
|
|
120
120
|
if bundle_png.exists():
|
|
121
121
|
shutil.copy(bundle_png, gallery_png)
|
|
122
122
|
results["png"].append(str(gallery_png))
|
|
123
123
|
if verbose:
|
|
124
124
|
from PIL import Image
|
|
125
|
+
|
|
125
126
|
with Image.open(gallery_png) as img:
|
|
126
|
-
print(
|
|
127
|
+
print(
|
|
128
|
+
f" [PNG] {gallery_png} ({img.size[0]}x{img.size[1]})"
|
|
129
|
+
)
|
|
127
130
|
|
|
128
131
|
if save_csv:
|
|
129
|
-
bundle_csv =
|
|
132
|
+
bundle_csv = plot_path / "plot.csv"
|
|
130
133
|
gallery_csv = cat_dir / f"{plot_name}.csv"
|
|
131
134
|
if bundle_csv.exists():
|
|
132
135
|
shutil.copy(bundle_csv, gallery_csv)
|
|
@@ -135,7 +138,7 @@ def generate(
|
|
|
135
138
|
print(f" [CSV] {gallery_csv}")
|
|
136
139
|
|
|
137
140
|
if save_svg:
|
|
138
|
-
bundle_svg =
|
|
141
|
+
bundle_svg = plot_path / "plot.svg"
|
|
139
142
|
gallery_svg = cat_dir / f"{plot_name}.svg"
|
|
140
143
|
if bundle_svg.exists():
|
|
141
144
|
shutil.copy(bundle_svg, gallery_svg)
|
|
@@ -144,28 +147,31 @@ def generate(
|
|
|
144
147
|
print(f" [SVG] {gallery_svg}")
|
|
145
148
|
|
|
146
149
|
# Copy hitmap from bundle
|
|
147
|
-
bundle_hitmap =
|
|
150
|
+
bundle_hitmap = plot_path / "plot_hitmap.png"
|
|
148
151
|
gallery_hitmap = cat_dir / f"{plot_name}_hitmap.png"
|
|
149
152
|
if bundle_hitmap.exists():
|
|
150
153
|
shutil.copy(bundle_hitmap, gallery_hitmap)
|
|
151
154
|
if verbose:
|
|
152
155
|
from PIL import Image
|
|
156
|
+
|
|
153
157
|
with Image.open(gallery_hitmap) as img:
|
|
154
|
-
print(
|
|
158
|
+
print(
|
|
159
|
+
f" [HITMAP] {gallery_hitmap} ({img.size[0]}x{img.size[1]})"
|
|
160
|
+
)
|
|
155
161
|
|
|
156
162
|
# Copy and update JSON from bundle
|
|
157
|
-
bundle_json =
|
|
163
|
+
bundle_json = plot_path / "plot.json"
|
|
158
164
|
gallery_json = cat_dir / f"{plot_name}.json"
|
|
159
165
|
if bundle_json.exists():
|
|
160
166
|
shutil.copy(bundle_json, gallery_json)
|
|
161
167
|
# Add element_bboxes to the copied JSON
|
|
162
168
|
_add_element_bboxes_to_json(fig, ax, dpi, gallery_json, verbose)
|
|
163
169
|
|
|
164
|
-
if
|
|
165
|
-
results["
|
|
170
|
+
if save_plot:
|
|
171
|
+
results["plot"].append(str(plot_path))
|
|
166
172
|
else:
|
|
167
173
|
# Remove bundle if not requested
|
|
168
|
-
shutil.rmtree(
|
|
174
|
+
shutil.rmtree(plot_path)
|
|
169
175
|
|
|
170
176
|
stx.plt.close(fig._fig_mpl if hasattr(fig, "_fig_mpl") else fig)
|
|
171
177
|
|
|
@@ -175,7 +181,9 @@ def generate(
|
|
|
175
181
|
print(f" [ERROR] {plot_name}: {e}")
|
|
176
182
|
|
|
177
183
|
if verbose:
|
|
178
|
-
print(
|
|
184
|
+
print(
|
|
185
|
+
f"\nGenerated: {len(results['png'])} PNG, {len(results['svg'])} SVG, {len(results['csv'])} CSV, {len(results['plot'])} PLTZ"
|
|
186
|
+
)
|
|
179
187
|
if results["errors"]:
|
|
180
188
|
print(f"Errors: {len(results['errors'])}")
|
|
181
189
|
|
|
@@ -229,11 +237,12 @@ def _add_element_bboxes_to_json(fig, ax, dpi, json_path, verbose=True):
|
|
|
229
237
|
Print progress messages
|
|
230
238
|
"""
|
|
231
239
|
from PIL import Image
|
|
240
|
+
|
|
232
241
|
from scitex.plt.utils.metadata._geometry_extraction import (
|
|
233
242
|
extract_axes_bbox_px,
|
|
234
243
|
extract_line_geometry,
|
|
235
|
-
extract_scatter_geometry,
|
|
236
244
|
extract_polygon_geometry,
|
|
245
|
+
extract_scatter_geometry,
|
|
237
246
|
)
|
|
238
247
|
|
|
239
248
|
try:
|
|
@@ -249,7 +258,7 @@ def _add_element_bboxes_to_json(fig, ax, dpi, json_path, verbose=True):
|
|
|
249
258
|
renderer = mpl_fig.canvas.get_renderer()
|
|
250
259
|
|
|
251
260
|
# Get saved image dimensions (needed for coordinate transformation)
|
|
252
|
-
png_path = json_path.with_suffix(
|
|
261
|
+
png_path = json_path.with_suffix(".png")
|
|
253
262
|
if png_path.exists():
|
|
254
263
|
with Image.open(png_path) as img:
|
|
255
264
|
img_width, img_height = img.size
|
|
@@ -267,26 +276,28 @@ def _add_element_bboxes_to_json(fig, ax, dpi, json_path, verbose=True):
|
|
|
267
276
|
return
|
|
268
277
|
|
|
269
278
|
# Load existing JSON
|
|
270
|
-
with open(json_path,
|
|
279
|
+
with open(json_path, "r") as f:
|
|
271
280
|
metadata = json.load(f)
|
|
272
281
|
|
|
273
282
|
# Add element_bboxes
|
|
274
|
-
metadata[
|
|
283
|
+
metadata["element_bboxes"] = element_bboxes
|
|
275
284
|
|
|
276
285
|
# Also ensure figure_size_px is present
|
|
277
|
-
if
|
|
278
|
-
metadata[
|
|
279
|
-
metadata[
|
|
280
|
-
|
|
281
|
-
|
|
286
|
+
if "dimensions" not in metadata:
|
|
287
|
+
metadata["dimensions"] = {}
|
|
288
|
+
metadata["dimensions"]["figure_size_px"] = {
|
|
289
|
+
"width": img_width,
|
|
290
|
+
"height": img_height,
|
|
282
291
|
}
|
|
283
292
|
|
|
284
293
|
# Save updated JSON
|
|
285
|
-
with open(json_path,
|
|
294
|
+
with open(json_path, "w") as f:
|
|
286
295
|
json.dump(metadata, f, indent=4)
|
|
287
296
|
|
|
288
297
|
if verbose:
|
|
289
|
-
print(
|
|
298
|
+
print(
|
|
299
|
+
f" [BBOXES] Added {len(element_bboxes)} element bboxes to {json_path.name}"
|
|
300
|
+
)
|
|
290
301
|
|
|
291
302
|
except Exception as e:
|
|
292
303
|
if verbose:
|
|
@@ -323,8 +334,12 @@ def _extract_element_bboxes_for_gallery(fig, ax, renderer, img_width, img_height
|
|
|
323
334
|
"""Get element bbox in image pixel coordinates."""
|
|
324
335
|
try:
|
|
325
336
|
bbox = element.get_window_extent(renderer)
|
|
326
|
-
if not (
|
|
327
|
-
|
|
337
|
+
if not (
|
|
338
|
+
np.isfinite(bbox.x0)
|
|
339
|
+
and np.isfinite(bbox.x1)
|
|
340
|
+
and np.isfinite(bbox.y0)
|
|
341
|
+
and np.isfinite(bbox.y1)
|
|
342
|
+
):
|
|
328
343
|
return
|
|
329
344
|
|
|
330
345
|
elem_x0_inches = bbox.x0 / fig.dpi
|
|
@@ -447,7 +462,9 @@ def _extract_element_bboxes_for_gallery(fig, ax, renderer, img_width, img_height
|
|
|
447
462
|
return bboxes
|
|
448
463
|
|
|
449
464
|
|
|
450
|
-
def _generate_and_save_hitmap(
|
|
465
|
+
def _generate_and_save_hitmap(
|
|
466
|
+
fig, dpi, hitmap_path, json_path, verbose=True, crop_box=None
|
|
467
|
+
):
|
|
451
468
|
"""Generate hitmap PNG and add color_map to JSON.
|
|
452
469
|
|
|
453
470
|
The hitmap is generated at the same size as the PNG by:
|
|
@@ -471,6 +488,7 @@ def _generate_and_save_hitmap(fig, dpi, hitmap_path, json_path, verbose=True, cr
|
|
|
471
488
|
If provided, applies the same crop to hitmap for exact size matching.
|
|
472
489
|
"""
|
|
473
490
|
from PIL import Image
|
|
491
|
+
|
|
474
492
|
from scitex.plt.utils._hitmap import generate_hitmap_id_colors
|
|
475
493
|
|
|
476
494
|
try:
|
|
@@ -492,10 +510,10 @@ def _generate_and_save_hitmap(fig, dpi, hitmap_path, json_path, verbose=True, cr
|
|
|
492
510
|
rgb[:, :, 0] = (hitmap_array >> 16) & 0xFF
|
|
493
511
|
rgb[:, :, 1] = (hitmap_array >> 8) & 0xFF
|
|
494
512
|
rgb[:, :, 2] = hitmap_array & 0xFF
|
|
495
|
-
hitmap_full = Image.fromarray(rgb, mode=
|
|
513
|
+
hitmap_full = Image.fromarray(rgb, mode="RGB")
|
|
496
514
|
|
|
497
515
|
# Save full hitmap first (before cropping)
|
|
498
|
-
hitmap_full.save(hitmap_path, format=
|
|
516
|
+
hitmap_full.save(hitmap_path, format="PNG")
|
|
499
517
|
|
|
500
518
|
if verbose:
|
|
501
519
|
print(f" [HITMAP] Full size: {w}x{h}")
|
|
@@ -503,6 +521,7 @@ def _generate_and_save_hitmap(fig, dpi, hitmap_path, json_path, verbose=True, cr
|
|
|
503
521
|
# Apply same crop as PNG if crop_box provided
|
|
504
522
|
if crop_box is not None:
|
|
505
523
|
from scitex.plt.utils._crop import crop
|
|
524
|
+
|
|
506
525
|
crop(
|
|
507
526
|
str(hitmap_path),
|
|
508
527
|
output_path=str(hitmap_path),
|
|
@@ -515,45 +534,52 @@ def _generate_and_save_hitmap(fig, dpi, hitmap_path, json_path, verbose=True, cr
|
|
|
515
534
|
print(f" [HITMAP] Cropped to: {cropped.size[0]}x{cropped.size[1]}")
|
|
516
535
|
|
|
517
536
|
# Validate sizes match
|
|
518
|
-
png_path = hitmap_path.parent / hitmap_path.name.replace(
|
|
537
|
+
png_path = hitmap_path.parent / hitmap_path.name.replace("_hitmap.png", ".png")
|
|
519
538
|
if png_path.exists():
|
|
520
539
|
with Image.open(png_path) as png_img, Image.open(hitmap_path) as hitmap_img:
|
|
521
540
|
png_size = png_img.size
|
|
522
541
|
hitmap_size = hitmap_img.size
|
|
523
542
|
if png_size != hitmap_size:
|
|
524
|
-
print(
|
|
525
|
-
|
|
543
|
+
print(
|
|
544
|
+
f" [ERROR] Size mismatch! PNG={png_size}, Hitmap={hitmap_size}"
|
|
545
|
+
)
|
|
546
|
+
raise ValueError(
|
|
547
|
+
f"Hitmap size {hitmap_size} doesn't match PNG size {png_size}"
|
|
548
|
+
)
|
|
526
549
|
elif verbose:
|
|
527
|
-
print(
|
|
550
|
+
print(
|
|
551
|
+
f" [HITMAP] Size validated: {hitmap_size[0]}x{hitmap_size[1]} (matches PNG)"
|
|
552
|
+
)
|
|
528
553
|
|
|
529
554
|
if verbose:
|
|
530
555
|
print(f" [HITMAP] {hitmap_path.name} ({len(color_map)} elements)")
|
|
531
556
|
|
|
532
557
|
# Add hitmap_color_map to JSON
|
|
533
558
|
if json_path.exists():
|
|
534
|
-
with open(json_path,
|
|
559
|
+
with open(json_path, "r") as f:
|
|
535
560
|
metadata = json.load(f)
|
|
536
561
|
|
|
537
562
|
# Store color_map with string keys for JSON compatibility
|
|
538
|
-
metadata[
|
|
539
|
-
metadata[
|
|
563
|
+
metadata["hitmap_color_map"] = {str(k): v for k, v in color_map.items()}
|
|
564
|
+
metadata["hitmap_file"] = hitmap_path.name
|
|
540
565
|
|
|
541
566
|
# Store crop_box in metadata for reference
|
|
542
567
|
if crop_box is not None:
|
|
543
|
-
metadata[
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
568
|
+
metadata["hitmap_crop_box"] = {
|
|
569
|
+
"left": int(crop_box[0]),
|
|
570
|
+
"upper": int(crop_box[1]),
|
|
571
|
+
"right": int(crop_box[2]),
|
|
572
|
+
"lower": int(crop_box[3]),
|
|
548
573
|
}
|
|
549
574
|
|
|
550
|
-
with open(json_path,
|
|
575
|
+
with open(json_path, "w") as f:
|
|
551
576
|
json.dump(metadata, f, indent=4)
|
|
552
577
|
|
|
553
578
|
except Exception as e:
|
|
554
579
|
if verbose:
|
|
555
580
|
print(f" [WARN] Could not generate hitmap: {e}")
|
|
556
581
|
import traceback
|
|
582
|
+
|
|
557
583
|
traceback.print_exc()
|
|
558
584
|
|
|
559
585
|
|
scitex/plt/io/__init__.py
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
# Timestamp: "2025-12-13 (ywatanabe)"
|
|
4
3
|
# File: /home/ywatanabe/proj/scitex-code/src/scitex/plt/io/__init__.py
|
|
5
4
|
|
|
6
5
|
"""
|
|
7
|
-
I/O operations for scitex.plt - Plot bundles (.
|
|
6
|
+
I/O operations for scitex.plt - Plot bundles (.plot).
|
|
8
7
|
|
|
9
8
|
This module handles:
|
|
10
|
-
- .
|
|
9
|
+
- .plot bundle load/save operations (legacy and layered formats)
|
|
11
10
|
- CSV data export/import
|
|
12
11
|
- Hitmap generation and storage
|
|
13
12
|
- Bundle overview generation
|
|
14
13
|
|
|
15
14
|
Layered Format (v2.0):
|
|
16
|
-
plot.
|
|
15
|
+
plot.plot/
|
|
17
16
|
spec.json # Semantic: WHAT to plot
|
|
18
17
|
style.json # Appearance: HOW it looks
|
|
19
18
|
data.csv # Raw data
|
|
@@ -22,30 +21,29 @@ Layered Format (v2.0):
|
|
|
22
21
|
"""
|
|
23
22
|
|
|
24
23
|
from ._bundle import (
|
|
25
|
-
|
|
26
|
-
load_pltz_bundle,
|
|
27
|
-
save_pltz_bundle,
|
|
24
|
+
PLOT_SCHEMA_SPEC,
|
|
28
25
|
generate_bundle_overview,
|
|
29
|
-
|
|
26
|
+
load_plot_bundle,
|
|
27
|
+
save_plot_bundle,
|
|
28
|
+
validate_plot_spec,
|
|
30
29
|
)
|
|
31
|
-
|
|
32
30
|
from ._layered_bundle import (
|
|
33
|
-
save_layered_pltz_bundle,
|
|
34
|
-
load_layered_pltz_bundle,
|
|
35
|
-
merge_layered_bundle,
|
|
36
31
|
is_layered_bundle,
|
|
32
|
+
load_layered_plot_bundle,
|
|
33
|
+
merge_layered_bundle,
|
|
34
|
+
save_layered_plot_bundle,
|
|
37
35
|
)
|
|
38
36
|
|
|
39
37
|
__all__ = [
|
|
40
|
-
#
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
38
|
+
# Bundle operations
|
|
39
|
+
"validate_plot_spec",
|
|
40
|
+
"load_plot_bundle",
|
|
41
|
+
"save_plot_bundle",
|
|
44
42
|
"generate_bundle_overview",
|
|
45
|
-
"
|
|
43
|
+
"PLOT_SCHEMA_SPEC",
|
|
46
44
|
# Layered bundle operations (v2.0)
|
|
47
|
-
"
|
|
48
|
-
"
|
|
45
|
+
"save_layered_plot_bundle",
|
|
46
|
+
"load_layered_plot_bundle",
|
|
49
47
|
"merge_layered_bundle",
|
|
50
48
|
"is_layered_bundle",
|
|
51
49
|
]
|