scitex 2.10.3__py3-none-any.whl → 2.13.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/__main__.py +24 -5
- scitex/__version__.py +1 -1
- scitex/_install_guide.py +14 -2
- scitex/_optional_deps.py +33 -0
- scitex/ai/classification/reporters/_ClassificationReporter.py +1 -1
- scitex/ai/classification/timeseries/_TimeSeriesBlockingSplit.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesCalendarSplit.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesStratifiedSplit.py +2 -2
- scitex/ai/classification/timeseries/_normalize_timestamp.py +1 -1
- scitex/ai/metrics/_calc_seizure_prediction_metrics.py +1 -1
- scitex/ai/plt/_plot_feature_importance.py +1 -1
- scitex/ai/plt/_plot_learning_curve.py +1 -1
- scitex/ai/plt/_plot_optuna_study.py +1 -1
- scitex/ai/plt/_plot_pre_rec_curve.py +1 -1
- scitex/ai/plt/_plot_roc_curve.py +1 -1
- scitex/ai/plt/_stx_conf_mat.py +1 -1
- scitex/ai/training/_LearningCurveLogger.py +1 -1
- scitex/audio/mcp_server.py +38 -8
- 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/browser/automation/CookieHandler.py +1 -1
- scitex/browser/core/BrowserMixin.py +1 -1
- scitex/browser/core/ChromeProfileManager.py +1 -1
- scitex/browser/debugging/_browser_logger.py +1 -1
- scitex/browser/debugging/_highlight_element.py +1 -1
- scitex/browser/debugging/_show_grid.py +1 -1
- scitex/browser/interaction/click_center.py +1 -1
- scitex/browser/interaction/click_with_fallbacks.py +1 -1
- scitex/browser/interaction/close_popups.py +1 -1
- scitex/browser/interaction/fill_with_fallbacks.py +1 -1
- scitex/browser/pdf/click_download_for_chrome_pdf_viewer.py +1 -1
- scitex/browser/pdf/detect_chrome_pdf_viewer.py +1 -1
- scitex/browser/stealth/HumanBehavior.py +1 -1
- scitex/browser/stealth/StealthManager.py +1 -1
- scitex/{fig → canvas}/__init__.py +84 -96
- scitex/canvas/_mcp_handlers.py +372 -0
- scitex/canvas/_mcp_tool_schemas.py +219 -0
- 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/canvas/mcp_server.py +151 -0
- 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/capture/mcp_server.py +41 -12
- scitex/cli/audio.py +233 -0
- scitex/cli/capture.py +307 -0
- scitex/cli/convert.py +10 -6
- scitex/cli/main.py +27 -4
- scitex/cli/repro.py +233 -0
- scitex/cli/resource.py +240 -0
- scitex/cli/stats.py +325 -0
- scitex/cli/template.py +236 -0
- scitex/cli/tex.py +286 -0
- scitex/cli/web.py +11 -12
- scitex/dev/__init__.py +3 -0
- scitex/dev/_pyproject.py +405 -0
- scitex/dev/plt/__init__.py +2 -2
- scitex/dev/plt/mpl/get_dir_ax.py +1 -1
- scitex/dev/plt/mpl/get_signatures.py +1 -1
- scitex/dev/plt/mpl/get_signatures_details.py +1 -1
- scitex/diagram/README.md +7 -7
- scitex/diagram/_mcp_handlers.py +400 -0
- scitex/diagram/_mcp_tool_schemas.py +157 -0
- scitex/diagram/mcp_server.py +151 -0
- scitex/dsp/_demo_sig.py +51 -5
- scitex/dsp/_mne.py +13 -2
- scitex/dsp/_modulation_index.py +15 -3
- scitex/dsp/_pac.py +23 -5
- scitex/dsp/_psd.py +16 -4
- scitex/dsp/_resample.py +24 -4
- scitex/dsp/_transform.py +16 -3
- scitex/dsp/add_noise.py +15 -1
- scitex/dsp/norm.py +17 -2
- scitex/dsp/reference.py +17 -1
- scitex/dsp/utils/_differential_bandpass_filters.py +20 -2
- scitex/dsp/utils/_zero_pad.py +18 -4
- scitex/dt/_normalize_timestamp.py +1 -1
- scitex/git/_session.py +1 -1
- 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 +17 -6
- scitex/io/_load_modules/_eeg.py +28 -13
- scitex/io/_load_modules/_optuna.py +21 -63
- scitex/io/_load_modules/_torch.py +11 -3
- 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/_optuna_study_as_csv_and_pngs.py +13 -2
- 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/_save_modules/_torch.py +11 -3
- 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/mcp_server.py +159 -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/_mcp_handlers.py +361 -0
- scitex/plt/_mcp_tool_schemas.py +169 -0
- 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/mcp_server.py +205 -0
- scitex/plt/utils/_csv_column_naming.py +250 -118
- scitex/repro/README_RandomStateManager.md +3 -3
- scitex/repro/_RandomStateManager.py +14 -14
- scitex/repro/_gen_ID.py +1 -1
- scitex/repro/_gen_timestamp.py +1 -1
- scitex/repro/_hash_array.py +4 -4
- scitex/schema/__init__.py +69 -73
- scitex/schema/_canvas.py +1 -1
- scitex/schema/_stats.py +2 -2
- scitex/scholar/__main__.py +24 -2
- scitex/scholar/_mcp_handlers.py +685 -0
- scitex/scholar/_mcp_tool_schemas.py +339 -0
- scitex/scholar/docs/template.py +1 -1
- scitex/scholar/examples/07_storage_integration.py +1 -1
- scitex/scholar/impact_factor/jcr/ImpactFactorJCREngine.py +1 -1
- scitex/scholar/impact_factor/jcr/build_database.py +1 -1
- scitex/scholar/mcp_server.py +315 -0
- scitex/scholar/pdf_download/ScholarPDFDownloader.py +1 -1
- scitex/scholar/pipelines/ScholarPipelineBibTeX.py +1 -1
- scitex/scholar/pipelines/ScholarPipelineParallel.py +1 -1
- scitex/scholar/pipelines/ScholarPipelineSingle.py +1 -1
- scitex/scholar/storage/PaperIO.py +1 -1
- scitex/session/README.md +4 -4
- scitex/session/__init__.py +1 -1
- scitex/session/_decorator.py +9 -9
- scitex/session/_lifecycle.py +5 -5
- scitex/session/template.py +1 -1
- scitex/stats/__init__.py +30 -33
- scitex/stats/__main__.py +281 -0
- scitex/stats/_mcp_handlers.py +1191 -0
- scitex/stats/_mcp_tool_schemas.py +384 -0
- scitex/stats/_schema.py +1 -1
- scitex/stats/correct/_correct_bonferroni.py +1 -1
- scitex/stats/correct/_correct_fdr.py +1 -1
- scitex/stats/correct/_correct_fdr_.py +1 -1
- scitex/stats/correct/_correct_holm.py +1 -1
- scitex/stats/correct/_correct_sidak.py +1 -1
- scitex/stats/effect_sizes/_cliffs_delta.py +1 -1
- scitex/stats/effect_sizes/_cohens_d.py +1 -1
- scitex/stats/effect_sizes/_epsilon_squared.py +1 -1
- scitex/stats/effect_sizes/_eta_squared.py +1 -1
- scitex/stats/effect_sizes/_prob_superiority.py +1 -1
- scitex/stats/io/__init__.py +10 -11
- scitex/stats/io/_bundle.py +16 -16
- scitex/stats/mcp_server.py +405 -0
- scitex/stats/posthoc/_dunnett.py +1 -1
- scitex/stats/posthoc/_games_howell.py +1 -1
- scitex/stats/posthoc/_tukey_hsd.py +1 -1
- scitex/stats/power/_power.py +1 -1
- scitex/stats/utils/_effect_size.py +1 -1
- scitex/stats/utils/_formatters.py +1 -1
- scitex/stats/utils/_power.py +1 -1
- scitex/template/_mcp_handlers.py +259 -0
- scitex/template/_mcp_tool_schemas.py +112 -0
- scitex/template/mcp_server.py +186 -0
- scitex/utils/_verify_scitex_format.py +2 -2
- scitex/utils/template.py +1 -1
- scitex/web/__init__.py +12 -11
- scitex/web/_scraping.py +26 -265
- scitex/web/download_images.py +316 -0
- scitex/writer/Writer.py +1 -1
- scitex/writer/_clone_writer_project.py +1 -1
- scitex/writer/_validate_tree_structures.py +1 -1
- scitex/writer/dataclasses/config/_WriterConfig.py +1 -1
- scitex/writer/dataclasses/contents/_ManuscriptContents.py +1 -1
- scitex/writer/dataclasses/core/_Document.py +1 -1
- scitex/writer/dataclasses/core/_DocumentSection.py +1 -1
- scitex/writer/dataclasses/results/_CompilationResult.py +1 -1
- scitex/writer/dataclasses/results/_LaTeXIssue.py +1 -1
- scitex/writer/utils/.legacy_git_retry.py +7 -5
- scitex/writer/utils/_parse_latex_logs.py +1 -1
- scitex-2.13.0.dist-info/METADATA +1231 -0
- {scitex-2.10.3.dist-info → scitex-2.13.0.dist-info}/RECORD +376 -470
- scitex-2.13.0.dist-info/entry_points.txt +11 -0
- 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-2.10.3.dist-info/METADATA +0 -952
- scitex-2.10.3.dist-info/entry_points.txt +0 -2
- /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.13.0.dist-info}/WHEEL +0 -0
- {scitex-2.10.3.dist-info → scitex-2.13.0.dist-info}/licenses/LICENSE +0 -0
scitex/fts/_bundle/__init__.py
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Timestamp: 2025-12-20
|
|
3
|
-
# File: /home/ywatanabe/proj/scitex-code/src/scitex/fts/_bundle/__init__.py
|
|
4
|
-
|
|
5
|
-
"""FTS Bundle - Core bundle functionality."""
|
|
6
|
-
|
|
7
|
-
# FTS class
|
|
8
|
-
from ._FTS import FTS, create_bundle, from_matplotlib, load_bundle
|
|
9
|
-
|
|
10
|
-
# Core dataclasses users need
|
|
11
|
-
from ._dataclasses import BBox, DataInfo, Node, SizeMM
|
|
12
|
-
|
|
13
|
-
# Type enumeration
|
|
14
|
-
from ._utils import NodeType
|
|
15
|
-
|
|
16
|
-
# Error classes
|
|
17
|
-
from ._utils import BundleError, BundleNotFoundError, BundleValidationError
|
|
18
|
-
|
|
19
|
-
__all__ = [
|
|
20
|
-
# FTS
|
|
21
|
-
"FTS",
|
|
22
|
-
"load_bundle",
|
|
23
|
-
"create_bundle",
|
|
24
|
-
"from_matplotlib",
|
|
25
|
-
# Core dataclasses
|
|
26
|
-
"Node",
|
|
27
|
-
"BBox",
|
|
28
|
-
"SizeMM",
|
|
29
|
-
"DataInfo",
|
|
30
|
-
# Types
|
|
31
|
-
"NodeType",
|
|
32
|
-
# Errors
|
|
33
|
-
"BundleError",
|
|
34
|
-
"BundleNotFoundError",
|
|
35
|
-
"BundleValidationError",
|
|
36
|
-
]
|
|
37
|
-
|
|
38
|
-
# EOF
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Timestamp: 2025-12-20
|
|
3
|
-
# File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_bundle/_utils/__init__.py
|
|
4
|
-
|
|
5
|
-
"""FTS Bundle utilities - types, constants, errors, and helpers."""
|
|
6
|
-
|
|
7
|
-
# Constants
|
|
8
|
-
from ._const import EXTENSIONS, SCHEMA_NAME, SCHEMA_VERSION, ZIP_EXTENSION
|
|
9
|
-
|
|
10
|
-
# Types
|
|
11
|
-
from ._types import (
|
|
12
|
-
TYPE_DEFAULTS,
|
|
13
|
-
BundleType,
|
|
14
|
-
NodeType,
|
|
15
|
-
get_default_constraints,
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
# Errors
|
|
19
|
-
from ._errors import (
|
|
20
|
-
BundleError,
|
|
21
|
-
BundleNotFoundError,
|
|
22
|
-
BundleValidationError,
|
|
23
|
-
CircularReferenceError,
|
|
24
|
-
ConstraintError,
|
|
25
|
-
DepthLimitError,
|
|
26
|
-
NestedBundleNotFoundError,
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
# Generation
|
|
30
|
-
from ._generate import generate_bundle_id
|
|
31
|
-
|
|
32
|
-
__all__ = [
|
|
33
|
-
# Constants
|
|
34
|
-
"ZIP_EXTENSION",
|
|
35
|
-
"EXTENSIONS",
|
|
36
|
-
"SCHEMA_NAME",
|
|
37
|
-
"SCHEMA_VERSION",
|
|
38
|
-
# Types
|
|
39
|
-
"NodeType",
|
|
40
|
-
"BundleType",
|
|
41
|
-
"TYPE_DEFAULTS",
|
|
42
|
-
"get_default_constraints",
|
|
43
|
-
# Errors
|
|
44
|
-
"BundleError",
|
|
45
|
-
"BundleValidationError",
|
|
46
|
-
"BundleNotFoundError",
|
|
47
|
-
"NestedBundleNotFoundError",
|
|
48
|
-
"CircularReferenceError",
|
|
49
|
-
"DepthLimitError",
|
|
50
|
-
"ConstraintError",
|
|
51
|
-
# Generation
|
|
52
|
-
"generate_bundle_id",
|
|
53
|
-
]
|
|
54
|
-
|
|
55
|
-
# EOF
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Timestamp: 2025-12-20
|
|
3
|
-
# File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_bundle/_utils/_const.py
|
|
4
|
-
|
|
5
|
-
"""FTS Bundle constants."""
|
|
6
|
-
|
|
7
|
-
from typing import Tuple
|
|
8
|
-
|
|
9
|
-
# Bundle extension (ZIP for portability, or directory)
|
|
10
|
-
ZIP_EXTENSION: str = ".zip"
|
|
11
|
-
|
|
12
|
-
# Supported formats: .zip files or directories (no extension)
|
|
13
|
-
EXTENSIONS: Tuple[str, ...] = (".zip",)
|
|
14
|
-
|
|
15
|
-
# Schema constants
|
|
16
|
-
SCHEMA_NAME = "scitex.fts"
|
|
17
|
-
SCHEMA_VERSION = "1.0.0"
|
|
18
|
-
|
|
19
|
-
__all__ = [
|
|
20
|
-
"ZIP_EXTENSION",
|
|
21
|
-
"EXTENSIONS",
|
|
22
|
-
"SCHEMA_NAME",
|
|
23
|
-
"SCHEMA_VERSION",
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
# EOF
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Timestamp: 2025-12-20
|
|
3
|
-
# File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_bundle/_utils/_errors.py
|
|
4
|
-
|
|
5
|
-
"""FTS Bundle error classes."""
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class BundleError(Exception):
|
|
9
|
-
"""Base exception for bundle operations."""
|
|
10
|
-
|
|
11
|
-
pass
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class BundleValidationError(BundleError, ValueError):
|
|
15
|
-
"""Error raised when bundle validation fails."""
|
|
16
|
-
|
|
17
|
-
pass
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class BundleNotFoundError(BundleError, FileNotFoundError):
|
|
21
|
-
"""Error raised when a bundle is not found."""
|
|
22
|
-
|
|
23
|
-
pass
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class NestedBundleNotFoundError(BundleNotFoundError):
|
|
27
|
-
"""Error raised when a nested bundle or file within it is not found."""
|
|
28
|
-
|
|
29
|
-
pass
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class CircularReferenceError(BundleValidationError):
|
|
33
|
-
"""Error raised when circular reference is detected in bundle hierarchy.
|
|
34
|
-
|
|
35
|
-
This occurs when a bundle references itself directly or indirectly
|
|
36
|
-
through its children, detected via bundle_id tracking.
|
|
37
|
-
"""
|
|
38
|
-
|
|
39
|
-
pass
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class DepthLimitError(BundleValidationError):
|
|
43
|
-
"""Error raised when bundle nesting exceeds max_depth constraint.
|
|
44
|
-
|
|
45
|
-
The max_depth is defined per bundle type in TYPE_DEFAULTS.
|
|
46
|
-
Default is 3 for figures, 1 for leaf types.
|
|
47
|
-
"""
|
|
48
|
-
|
|
49
|
-
pass
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
class ConstraintError(BundleValidationError):
|
|
53
|
-
"""Error raised when bundle violates its type constraints.
|
|
54
|
-
|
|
55
|
-
Examples:
|
|
56
|
-
- Leaf type (plot, stats) has children
|
|
57
|
-
- Unknown type specified
|
|
58
|
-
"""
|
|
59
|
-
|
|
60
|
-
pass
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
__all__ = [
|
|
64
|
-
"BundleError",
|
|
65
|
-
"BundleValidationError",
|
|
66
|
-
"BundleNotFoundError",
|
|
67
|
-
"NestedBundleNotFoundError",
|
|
68
|
-
"CircularReferenceError",
|
|
69
|
-
"DepthLimitError",
|
|
70
|
-
"ConstraintError",
|
|
71
|
-
]
|
|
72
|
-
|
|
73
|
-
# EOF
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Timestamp: 2025-12-20
|
|
3
|
-
# File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_bundle/_utils/_generate.py
|
|
4
|
-
|
|
5
|
-
"""FTS Bundle ID generation utilities."""
|
|
6
|
-
|
|
7
|
-
import uuid
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def generate_bundle_id() -> str:
|
|
11
|
-
"""Generate a unique bundle ID (UUID4).
|
|
12
|
-
|
|
13
|
-
Returns:
|
|
14
|
-
A new UUID4 string.
|
|
15
|
-
"""
|
|
16
|
-
return str(uuid.uuid4())
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
__all__ = ["generate_bundle_id"]
|
|
20
|
-
|
|
21
|
-
# EOF
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Timestamp: 2025-12-20
|
|
3
|
-
# File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_bundle/_utils/_types.py
|
|
4
|
-
|
|
5
|
-
"""FTS Node type constants and constraints."""
|
|
6
|
-
|
|
7
|
-
from typing import Any, Dict
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class NodeType:
|
|
11
|
-
"""Node type constants for FTS bundles.
|
|
12
|
-
|
|
13
|
-
The type is stored in node.json["type"].
|
|
14
|
-
|
|
15
|
-
Usage:
|
|
16
|
-
from scitex.fts import NodeType
|
|
17
|
-
|
|
18
|
-
if bundle.node.type == NodeType.FIGURE:
|
|
19
|
-
...
|
|
20
|
-
|
|
21
|
-
Note:
|
|
22
|
-
Tables are treated as structured figures in academic contexts.
|
|
23
|
-
FTS handles figures, tables, and statistics in a unified way.
|
|
24
|
-
"""
|
|
25
|
-
|
|
26
|
-
FIGURE = "figure"
|
|
27
|
-
PLOT = "plot"
|
|
28
|
-
TABLE = "table" # Structured data presentation (demographics, results, etc.)
|
|
29
|
-
STATS = "stats"
|
|
30
|
-
IMAGE = "image"
|
|
31
|
-
TEXT = "text"
|
|
32
|
-
SHAPE = "shape"
|
|
33
|
-
SYMBOL = "symbol"
|
|
34
|
-
COMMENT = "comment"
|
|
35
|
-
EQUATION = "equation"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
# Legacy alias (deprecated)
|
|
39
|
-
BundleType = NodeType
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
# Type-specific default constraints
|
|
43
|
-
TYPE_DEFAULTS: Dict[str, Dict[str, Any]] = {
|
|
44
|
-
"figure": {"allow_children": True, "max_depth": 3},
|
|
45
|
-
"plot": {"allow_children": False, "max_depth": 1},
|
|
46
|
-
"table": {"allow_children": False, "max_depth": 1}, # Tables are leaf nodes
|
|
47
|
-
"stats": {"allow_children": False, "max_depth": 1},
|
|
48
|
-
"image": {"allow_children": False, "max_depth": 1},
|
|
49
|
-
"text": {"allow_children": False, "max_depth": 1},
|
|
50
|
-
"shape": {"allow_children": False, "max_depth": 1},
|
|
51
|
-
"symbol": {"allow_children": False, "max_depth": 1},
|
|
52
|
-
"comment": {"allow_children": False, "max_depth": 1},
|
|
53
|
-
"equation": {"allow_children": False, "max_depth": 1},
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
def get_default_constraints(node_type: str) -> Dict[str, Any]:
|
|
58
|
-
"""Get default constraints for a node type.
|
|
59
|
-
|
|
60
|
-
Args:
|
|
61
|
-
node_type: Type string (figure, plot, stats, etc.)
|
|
62
|
-
|
|
63
|
-
Returns:
|
|
64
|
-
Dict with allow_children and max_depth.
|
|
65
|
-
"""
|
|
66
|
-
return TYPE_DEFAULTS.get(node_type, {"allow_children": False, "max_depth": 1})
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
__all__ = [
|
|
70
|
-
"NodeType",
|
|
71
|
-
"BundleType",
|
|
72
|
-
"TYPE_DEFAULTS",
|
|
73
|
-
"get_default_constraints",
|
|
74
|
-
]
|
|
75
|
-
|
|
76
|
-
# EOF
|
scitex/fts/_bundle/_zipbundle.py
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Timestamp: 2025-12-20
|
|
3
|
-
# File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_zipbundle.py
|
|
4
|
-
|
|
5
|
-
"""ZipBundle - Simple ZIP file wrapper for FTS bundles."""
|
|
6
|
-
|
|
7
|
-
import json
|
|
8
|
-
import zipfile
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
from typing import Any, Dict, Optional, Union
|
|
11
|
-
|
|
12
|
-
__all__ = ["ZipBundle"]
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class ZipBundle:
|
|
16
|
-
"""Simple ZIP file wrapper for reading/writing bundle data.
|
|
17
|
-
|
|
18
|
-
Provides a context manager interface for working with ZIP files.
|
|
19
|
-
|
|
20
|
-
Usage:
|
|
21
|
-
# Read mode
|
|
22
|
-
with ZipBundle("bundle.zip", mode="r") as bundle:
|
|
23
|
-
spec = bundle.read_json("spec.json")
|
|
24
|
-
data = bundle.read_bytes("data.csv")
|
|
25
|
-
|
|
26
|
-
# Write/append mode
|
|
27
|
-
with ZipBundle("bundle.zip", mode="a") as bundle:
|
|
28
|
-
bundle.write_json("spec.json", {"type": "plot"})
|
|
29
|
-
bundle.write_bytes("data.csv", csv_bytes)
|
|
30
|
-
"""
|
|
31
|
-
|
|
32
|
-
def __init__(self, path: Union[str, Path], mode: str = "r"):
|
|
33
|
-
"""Initialize ZipBundle.
|
|
34
|
-
|
|
35
|
-
Args:
|
|
36
|
-
path: Path to ZIP file.
|
|
37
|
-
mode: File mode ('r' for read, 'w' for write, 'a' for append).
|
|
38
|
-
"""
|
|
39
|
-
self.path = Path(path)
|
|
40
|
-
self.mode = mode
|
|
41
|
-
self._zf: Optional[zipfile.ZipFile] = None
|
|
42
|
-
|
|
43
|
-
def __enter__(self) -> "ZipBundle":
|
|
44
|
-
"""Enter context manager."""
|
|
45
|
-
self._zf = zipfile.ZipFile(self.path, self.mode)
|
|
46
|
-
return self
|
|
47
|
-
|
|
48
|
-
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
49
|
-
"""Exit context manager."""
|
|
50
|
-
if self._zf:
|
|
51
|
-
self._zf.close()
|
|
52
|
-
self._zf = None
|
|
53
|
-
|
|
54
|
-
def read_json(self, name: str) -> Dict[str, Any]:
|
|
55
|
-
"""Read JSON file from ZIP.
|
|
56
|
-
|
|
57
|
-
Args:
|
|
58
|
-
name: File name within ZIP.
|
|
59
|
-
|
|
60
|
-
Returns:
|
|
61
|
-
Parsed JSON data.
|
|
62
|
-
"""
|
|
63
|
-
if not self._zf:
|
|
64
|
-
raise RuntimeError("ZipBundle not open")
|
|
65
|
-
|
|
66
|
-
# Try direct path first
|
|
67
|
-
try:
|
|
68
|
-
data = self._zf.read(name)
|
|
69
|
-
return json.loads(data.decode("utf-8"))
|
|
70
|
-
except KeyError:
|
|
71
|
-
pass
|
|
72
|
-
|
|
73
|
-
# Try with .d/ directory prefix
|
|
74
|
-
for item in self._zf.namelist():
|
|
75
|
-
if item.endswith(f"/{name}") or item == name:
|
|
76
|
-
data = self._zf.read(item)
|
|
77
|
-
return json.loads(data.decode("utf-8"))
|
|
78
|
-
|
|
79
|
-
raise FileNotFoundError(f"File not found in ZIP: {name}")
|
|
80
|
-
|
|
81
|
-
def read_bytes(self, name: str) -> bytes:
|
|
82
|
-
"""Read raw bytes from ZIP.
|
|
83
|
-
|
|
84
|
-
Args:
|
|
85
|
-
name: File name within ZIP.
|
|
86
|
-
|
|
87
|
-
Returns:
|
|
88
|
-
Raw file bytes.
|
|
89
|
-
"""
|
|
90
|
-
if not self._zf:
|
|
91
|
-
raise RuntimeError("ZipBundle not open")
|
|
92
|
-
|
|
93
|
-
# Try direct path first
|
|
94
|
-
try:
|
|
95
|
-
return self._zf.read(name)
|
|
96
|
-
except KeyError:
|
|
97
|
-
pass
|
|
98
|
-
|
|
99
|
-
# Try with .d/ directory prefix
|
|
100
|
-
for item in self._zf.namelist():
|
|
101
|
-
if item.endswith(f"/{name}") or item == name:
|
|
102
|
-
return self._zf.read(item)
|
|
103
|
-
|
|
104
|
-
raise FileNotFoundError(f"File not found in ZIP: {name}")
|
|
105
|
-
|
|
106
|
-
def write_json(self, name: str, data: Dict[str, Any], indent: int = 2) -> None:
|
|
107
|
-
"""Write JSON file to ZIP.
|
|
108
|
-
|
|
109
|
-
Args:
|
|
110
|
-
name: File name within ZIP.
|
|
111
|
-
data: Data to write.
|
|
112
|
-
indent: JSON indentation level.
|
|
113
|
-
"""
|
|
114
|
-
if not self._zf:
|
|
115
|
-
raise RuntimeError("ZipBundle not open")
|
|
116
|
-
|
|
117
|
-
json_str = json.dumps(data, indent=indent)
|
|
118
|
-
self._zf.writestr(name, json_str.encode("utf-8"))
|
|
119
|
-
|
|
120
|
-
def write_bytes(self, name: str, data: bytes) -> None:
|
|
121
|
-
"""Write raw bytes to ZIP.
|
|
122
|
-
|
|
123
|
-
Args:
|
|
124
|
-
name: File name within ZIP.
|
|
125
|
-
data: Data to write.
|
|
126
|
-
"""
|
|
127
|
-
if not self._zf:
|
|
128
|
-
raise RuntimeError("ZipBundle not open")
|
|
129
|
-
|
|
130
|
-
self._zf.writestr(name, data)
|
|
131
|
-
|
|
132
|
-
def namelist(self) -> list:
|
|
133
|
-
"""List files in ZIP.
|
|
134
|
-
|
|
135
|
-
Returns:
|
|
136
|
-
List of file names.
|
|
137
|
-
"""
|
|
138
|
-
if not self._zf:
|
|
139
|
-
raise RuntimeError("ZipBundle not open")
|
|
140
|
-
return self._zf.namelist()
|
|
141
|
-
|
|
142
|
-
def exists(self, name: str) -> bool:
|
|
143
|
-
"""Check if file exists in ZIP.
|
|
144
|
-
|
|
145
|
-
Args:
|
|
146
|
-
name: File name to check.
|
|
147
|
-
|
|
148
|
-
Returns:
|
|
149
|
-
True if file exists.
|
|
150
|
-
"""
|
|
151
|
-
if not self._zf:
|
|
152
|
-
raise RuntimeError("ZipBundle not open")
|
|
153
|
-
|
|
154
|
-
if name in self._zf.namelist():
|
|
155
|
-
return True
|
|
156
|
-
|
|
157
|
-
# Check with .d/ directory prefix
|
|
158
|
-
for item in self._zf.namelist():
|
|
159
|
-
if item.endswith(f"/{name}"):
|
|
160
|
-
return True
|
|
161
|
-
|
|
162
|
-
return False
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
# EOF
|
scitex/fts/_fig/__init__.py
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Timestamp: 2025-12-20
|
|
3
|
-
# File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_fig/__init__.py
|
|
4
|
-
|
|
5
|
-
"""FTS Figure - Encoding and Theme dataclasses."""
|
|
6
|
-
|
|
7
|
-
# Public dataclasses
|
|
8
|
-
from ._dataclasses import (
|
|
9
|
-
ENCODING_VERSION,
|
|
10
|
-
THEME_VERSION,
|
|
11
|
-
Encoding,
|
|
12
|
-
Theme,
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
__all__ = [
|
|
16
|
-
"ENCODING_VERSION",
|
|
17
|
-
"THEME_VERSION",
|
|
18
|
-
"Encoding",
|
|
19
|
-
"Theme",
|
|
20
|
-
]
|
|
21
|
-
|
|
22
|
-
# EOF
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# File: ./src/scitex/vis/backend/parser.py
|
|
3
|
-
"""Parse figure JSON to Python object models."""
|
|
4
|
-
|
|
5
|
-
from typing import Any, Dict
|
|
6
|
-
|
|
7
|
-
from .._models import (
|
|
8
|
-
AnnotationModel,
|
|
9
|
-
AxesModel,
|
|
10
|
-
FigureModel,
|
|
11
|
-
GuideModel,
|
|
12
|
-
PlotModel,
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def parse_figure_json(fig_json: Dict[str, Any]) -> FigureModel:
|
|
17
|
-
"""
|
|
18
|
-
Parse figure JSON into FigureModel.
|
|
19
|
-
|
|
20
|
-
Parameters
|
|
21
|
-
----------
|
|
22
|
-
fig_json : Dict[str, Any]
|
|
23
|
-
Figure JSON specification
|
|
24
|
-
|
|
25
|
-
Returns
|
|
26
|
-
-------
|
|
27
|
-
FigureModel
|
|
28
|
-
Parsed figure model
|
|
29
|
-
|
|
30
|
-
Examples
|
|
31
|
-
--------
|
|
32
|
-
>>> fig_json = {
|
|
33
|
-
... "width_mm": 180,
|
|
34
|
-
... "height_mm": 120,
|
|
35
|
-
... "nrows": 1,
|
|
36
|
-
... "ncols": 2,
|
|
37
|
-
... "axes": [...]
|
|
38
|
-
... }
|
|
39
|
-
>>> fig_model = parse_figure_json(fig_json)
|
|
40
|
-
"""
|
|
41
|
-
# Parse nested axes
|
|
42
|
-
axes_data = fig_json.get("axes", [])
|
|
43
|
-
parsed_axes = [parse_axes_json(ax) for ax in axes_data]
|
|
44
|
-
|
|
45
|
-
# Create FigureModel with parsed axes
|
|
46
|
-
fig_data = fig_json.copy()
|
|
47
|
-
fig_data["axes"] = [ax.to_dict() for ax in parsed_axes]
|
|
48
|
-
|
|
49
|
-
return FigureModel.from_dict(fig_data)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def parse_axes_json(axes_json: Dict[str, Any]) -> AxesModel:
|
|
53
|
-
"""
|
|
54
|
-
Parse axes JSON into AxesModel.
|
|
55
|
-
|
|
56
|
-
Parameters
|
|
57
|
-
----------
|
|
58
|
-
axes_json : Dict[str, Any]
|
|
59
|
-
Axes JSON specification
|
|
60
|
-
|
|
61
|
-
Returns
|
|
62
|
-
-------
|
|
63
|
-
AxesModel
|
|
64
|
-
Parsed axes model
|
|
65
|
-
"""
|
|
66
|
-
# Parse nested plots
|
|
67
|
-
plots_data = axes_json.get("plots", [])
|
|
68
|
-
parsed_plots = [parse_plot_json(plot) for plot in plots_data]
|
|
69
|
-
|
|
70
|
-
# Parse nested annotations
|
|
71
|
-
annotations_data = axes_json.get("annotations", [])
|
|
72
|
-
parsed_annotations = [parse_annotation_json(ann) for ann in annotations_data]
|
|
73
|
-
|
|
74
|
-
# Parse nested guides
|
|
75
|
-
guides_data = axes_json.get("guides", [])
|
|
76
|
-
parsed_guides = [parse_guide_json(guide) for guide in guides_data]
|
|
77
|
-
|
|
78
|
-
# Create AxesModel with parsed children
|
|
79
|
-
ax_data = axes_json.copy()
|
|
80
|
-
ax_data["plots"] = [p.to_dict() for p in parsed_plots]
|
|
81
|
-
ax_data["annotations"] = [a.to_dict() for a in parsed_annotations]
|
|
82
|
-
ax_data["guides"] = [g.to_dict() for g in parsed_guides]
|
|
83
|
-
|
|
84
|
-
return AxesModel.from_dict(ax_data)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
def parse_plot_json(plot_json: Dict[str, Any]) -> PlotModel:
|
|
88
|
-
"""
|
|
89
|
-
Parse plot JSON into PlotModel.
|
|
90
|
-
|
|
91
|
-
Parameters
|
|
92
|
-
----------
|
|
93
|
-
plot_json : Dict[str, Any]
|
|
94
|
-
Plot JSON specification
|
|
95
|
-
|
|
96
|
-
Returns
|
|
97
|
-
-------
|
|
98
|
-
PlotModel
|
|
99
|
-
Parsed plot model
|
|
100
|
-
"""
|
|
101
|
-
return PlotModel.from_dict(plot_json)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
def parse_guide_json(guide_json: Dict[str, Any]) -> GuideModel:
|
|
105
|
-
"""
|
|
106
|
-
Parse guide JSON into GuideModel.
|
|
107
|
-
|
|
108
|
-
Parameters
|
|
109
|
-
----------
|
|
110
|
-
guide_json : Dict[str, Any]
|
|
111
|
-
Guide JSON specification
|
|
112
|
-
|
|
113
|
-
Returns
|
|
114
|
-
-------
|
|
115
|
-
GuideModel
|
|
116
|
-
Parsed guide model
|
|
117
|
-
"""
|
|
118
|
-
return GuideModel.from_dict(guide_json)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
def parse_annotation_json(annotation_json: Dict[str, Any]) -> AnnotationModel:
|
|
122
|
-
"""
|
|
123
|
-
Parse annotation JSON into AnnotationModel.
|
|
124
|
-
|
|
125
|
-
Parameters
|
|
126
|
-
----------
|
|
127
|
-
annotation_json : Dict[str, Any]
|
|
128
|
-
Annotation JSON specification
|
|
129
|
-
|
|
130
|
-
Returns
|
|
131
|
-
-------
|
|
132
|
-
AnnotationModel
|
|
133
|
-
Parsed annotation model
|
|
134
|
-
"""
|
|
135
|
-
return AnnotationModel.from_dict(annotation_json)
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
def validate_figure_json(fig_json: Dict[str, Any]) -> bool:
|
|
139
|
-
"""
|
|
140
|
-
Validate figure JSON structure (single entry point for validation).
|
|
141
|
-
|
|
142
|
-
This is the recommended validation function that performs:
|
|
143
|
-
1. Basic JSON structure validation (utils.validate_json_structure)
|
|
144
|
-
2. Model parsing and validation (FigureModel.validate)
|
|
145
|
-
3. Axes layout validation (utils.validate_axes_layout)
|
|
146
|
-
|
|
147
|
-
Parameters
|
|
148
|
-
----------
|
|
149
|
-
fig_json : Dict[str, Any]
|
|
150
|
-
Figure JSON to validate
|
|
151
|
-
|
|
152
|
-
Returns
|
|
153
|
-
-------
|
|
154
|
-
bool
|
|
155
|
-
True if valid, raises ValueError otherwise
|
|
156
|
-
|
|
157
|
-
Raises
|
|
158
|
-
------
|
|
159
|
-
ValueError
|
|
160
|
-
If JSON structure is invalid
|
|
161
|
-
|
|
162
|
-
Examples
|
|
163
|
-
--------
|
|
164
|
-
>>> from scitex.fig.backend import validate_figure_json
|
|
165
|
-
>>> fig_json = {"width_mm": 180, "height_mm": 120, "axes": []}
|
|
166
|
-
>>> validate_figure_json(fig_json)
|
|
167
|
-
True
|
|
168
|
-
"""
|
|
169
|
-
from ..utils import validate_axes_layout, validate_json_structure
|
|
170
|
-
|
|
171
|
-
# Step 1: Validate basic JSON structure
|
|
172
|
-
validate_json_structure(fig_json)
|
|
173
|
-
|
|
174
|
-
# Step 2: Parse to models and validate
|
|
175
|
-
fig_model = parse_figure_json(fig_json)
|
|
176
|
-
fig_model.validate()
|
|
177
|
-
|
|
178
|
-
# Step 3: Validate axes layout consistency
|
|
179
|
-
validate_axes_layout(
|
|
180
|
-
nrows=fig_model.nrows,
|
|
181
|
-
ncols=fig_model.ncols,
|
|
182
|
-
num_axes=len(fig_model.axes),
|
|
183
|
-
)
|
|
184
|
-
|
|
185
|
-
return True
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
# EOF
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Timestamp: 2025-12-20
|
|
3
|
-
# File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_fig/editor/__init__.py
|
|
4
|
-
|
|
5
|
-
"""FTS Figure Editor - Interactive GUI for editing figure styles."""
|
|
6
|
-
|
|
7
|
-
from ._cui import edit, save_manual_overrides
|
|
8
|
-
|
|
9
|
-
__all__ = [
|
|
10
|
-
"edit",
|
|
11
|
-
"save_manual_overrides",
|
|
12
|
-
]
|
|
13
|
-
|
|
14
|
-
# EOF
|