quantized-lab 0.24.0__tar.gz → 0.26.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/.gitignore +4 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/PKG-INFO +9 -4
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/README.md +8 -3
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/pyproject.toml +3 -1
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/__init__.py +1 -1
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/corrections.py +109 -1
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure.py +34 -32
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_break.py +1 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_categorical.py +1 -0
- quantized_lab-0.26.0/src/quantized/calc/figure_colorscatter.py +53 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_corner.py +1 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_errorbars.py +24 -1
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_facets.py +1 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_facets_map.py +1 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_field.py +1 -0
- quantized_lab-0.26.0/src/quantized/calc/figure_greyscale.py +159 -0
- quantized_lab-0.26.0/src/quantized/calc/figure_group_styles.py +119 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_labels.py +29 -1
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_map.py +1 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_multivar.py +14 -2
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_page.py +21 -2
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_statplots.py +1 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_ternary.py +1 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_models_special.py +70 -35
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/plotting.py +87 -4
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/resample.py +40 -2
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/sld_formula.py +6 -3
- quantized_lab-0.26.0/src/quantized/cat_levels.py +146 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/datastruct.py +139 -4
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_bridge.py +63 -24
- quantized_lab-0.26.0/src/quantized/desktop_bridge_common.py +44 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_bridge_dialogs.py +61 -34
- quantized_lab-0.26.0/src/quantized/desktop_bridge_pack.py +446 -0
- quantized_lab-0.26.0/src/quantized/desktop_bridge_pack_state.py +176 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_consent.py +147 -9
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_project_file.py +130 -11
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_source_probe.py +30 -5
- quantized_lab-0.26.0/src/quantized/io/_delimited_fast.py +303 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/_delimited_layout.py +50 -3
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/delimited.py +68 -76
- quantized_lab-0.26.0/src/quantized/io/error_binding_suggestions.py +353 -0
- quantized_lab-0.26.0/src/quantized/io/error_inference.py +131 -0
- quantized_lab-0.26.0/src/quantized/io/error_label_candidates.py +371 -0
- quantized_lab-0.26.0/src/quantized/io/error_label_classify.py +177 -0
- quantized_lab-0.26.0/src/quantized/io/import_categorical_guards.py +213 -0
- quantized_lab-0.26.0/src/quantized/io/import_error_bindings.py +382 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/import_filters.py +15 -1
- quantized_lab-0.26.0/src/quantized/io/import_metadata.py +180 -0
- quantized_lab-0.26.0/src/quantized/io/import_parse.py +180 -0
- quantized_lab-0.26.0/src/quantized/io/import_preview.py +486 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/lakeshore.py +1 -10
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/ncnr.py +183 -9
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/preview.py +44 -8
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/qd.py +1 -10
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/registry.py +20 -3
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/sims.py +31 -37
- quantized_lab-0.26.0/src/quantized/portable/__init__.py +89 -0
- quantized_lab-0.26.0/src/quantized/portable/atomic_rename.py +236 -0
- quantized_lab-0.26.0/src/quantized/portable/copy_stream.py +276 -0
- quantized_lab-0.26.0/src/quantized/portable/copying.py +438 -0
- quantized_lab-0.26.0/src/quantized/portable/grouping.py +257 -0
- quantized_lab-0.26.0/src/quantized/portable/layout.py +305 -0
- quantized_lab-0.26.0/src/quantized/portable/manifest.py +471 -0
- quantized_lab-0.26.0/src/quantized/portable/naming.py +104 -0
- quantized_lab-0.26.0/src/quantized/portable/pack.py +288 -0
- quantized_lab-0.26.0/src/quantized/portable/project_rewrite.py +180 -0
- quantized_lab-0.26.0/src/quantized/portable/publish.py +500 -0
- quantized_lab-0.26.0/src/quantized/portable/staging.py +441 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/_datasetcache.py +98 -25
- quantized_lab-0.26.0/src/quantized/routes/_errors.py +79 -0
- quantized_lab-0.26.0/src/quantized/routes/_payload.py +322 -0
- quantized_lab-0.26.0/src/quantized/routes/_uploadcache.py +199 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/aggregate.py +7 -6
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/baseline.py +30 -50
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/books.py +22 -15
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/corrections.py +7 -6
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/crystallography.py +30 -35
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/database.py +2 -1
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export.py +16 -21
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export_figures.py +117 -107
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export_figures_aux.py +38 -37
- quantized_lab-0.26.0/src/quantized/routes/export_figures_labels.py +97 -0
- quantized_lab-0.26.0/src/quantized/routes/export_figures_schema.py +202 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export_multivar.py +5 -4
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export_page.py +16 -3
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export_statplots.py +3 -2
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/fitting.py +9 -14
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/fitting_bumps.py +3 -5
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/import_template.py +12 -4
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/import_wizard.py +16 -16
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/magnetometry.py +28 -39
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/parsers.py +171 -22
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/peaks.py +21 -26
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/plot.py +21 -9
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/reductions.py +31 -42
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/reference.py +2 -4
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/reflectivity.py +10 -15
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/report_export.py +3 -5
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/rsm.py +51 -39
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/sld.py +8 -10
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/spectral.py +2 -1
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/statplots.py +5 -4
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/stats.py +22 -21
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/stats_design.py +19 -18
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/stats_outliers.py +5 -4
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/stats_varcomp.py +4 -3
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/substrates.py +3 -5
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/xray.py +4 -9
- quantized_lab-0.26.0/src/quantized/row_sidecars.py +271 -0
- quantized_lab-0.26.0/src/quantized/web/assets/AnnotationTextDialog-CrUBjfS-.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/BackgroundPlotWindow-Cb2B6750.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/BaselinePanel-tCZWG5Pz.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/BufferedNumberField-DMBkaSb6.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/CalcOnlyApp-CSkEPxiL.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/CalculatorsContent-DuAffJm_.js +8 -0
- quantized_lab-0.26.0/src/quantized/web/assets/CalculatorsPanel-fSdGLd3E.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/Card-B5-fV_rb.js → quantized_lab-0.26.0/src/quantized/web/assets/Card-f1DjIZuX.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/Checkbox-DJkTxszS.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/CollectionsSection-DzYGLqNo.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ColumnSwitcher-BscfU05y.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/CombineWorkbooksDialog-CSFamCUb.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/CurveFitPanel-DCt1wDzh.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/DataFilterPanel-D3W8WgNV.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/DataTable-DQDR8-By.js → quantized_lab-0.26.0/src/quantized/web/assets/DataTable-BUsp9T89.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/DatasetMathPanel-BYWqbaq1.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/DigitizerView-lN5nnSf1.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/DistributionPanel-Dq1yRBMK.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/EditableFiguresSection-CiJDEj0e.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/FigureBuilderView-D0t4_BcB.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/FigurePageView-DV1XlvB7.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/FigureRow-DPQQtCs5.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/FiguresSection-KBvGC1XN.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/FitYByXPanel-m8hw_oTR.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/GraphBuilderPanel-CyP7qfNy.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/GraphPreview-CbuxAsPQ.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/HelpDialog-D-FLvDAC.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/HysteresisPanel-BG2qFFKy.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/IconButton-Coh25Dic.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ImportWizardPanel-BN6TckG-.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/Inspector-DShe0H7d.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/LevelOrderPanel-DDh9IRMl.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/LibraryDetails-D1-LgNWY.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/LibraryTree-DYNckxg2.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/LibraryWorkspace-CAwAOLq6.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/MagToolsPanel-C5okeE7F.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/MapStage-BtZz5t4R.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/MetaRow-BdF1fLAJ.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/MultiPanelStage-noDoOgre.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/MultiSelectBar-ZytMnGJI.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/MultivarPanel-UrfRnpRN.js +2 -0
- quantized_lab-0.24.0/src/quantized/web/assets/NumberField-L_cTvWQ5.js → quantized_lab-0.26.0/src/quantized/web/assets/NumberField-ClCJO6V-.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/OriginFidelitySection-Bl1Sq7Rp.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/OriginSavedPreviewWindow-BOFe2SnW.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/OutlierScreeningPanel-C5ngFO5l.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PackProjectPanel-DQWKHscl.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PagesSection-Cs5vD_kr.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PanelPlotWindow-BI1yaGmt.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ParamDialog-C0P4O-3z.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PeakWizardPanel-BjKHtWoc.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PeaksPanel-Ck8Zq_Vm.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/Pill-CWRal9q7.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PipelinePanel-B6YWwfW9.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PlotContextMenu-Bx3UPzUf.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PlotRecipeApplyDialog-whQSWOlZ.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PlotResultChips-DKINGVQg.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PolarStage-CPG6mku9.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PolarStageCore-Cmu_g2Yd.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/PreferencesDialog-DKrvfZQu.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/QuickFigureBuilderWorkspace-CfhsIfZO.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/QuickPlotWithDialog-Ru5LjWqZ.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/RecipeLibraryPanel-B6paLoa_.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/RecipeManagerPanel-CQk1d7g-.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/RecodePanel-DntNg675.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/RecoveryChoiceDialog-Cc_K5D6k.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ReductionsPanel-DOHW_AJR.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ReflView-C4if0ngk.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ReflectivityPanel-B31fiMUL.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ReimportAllDialog-CtpXWhXd.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/RelinkPanel-CshrlobI.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ReportPanel-CCMZgCbk.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ReportsSection-DIgTK4F3.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/RichLabelInput-CXw-iHle.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/RoiCutsPanel-Df8lxkKM.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/RsmPanel-YPt0R7xR.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/SavedFiguresSection-CqK0TQ1Y.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/SearchPanel-DHN2r8ha.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/SegmentedControl-8pszxiEO.js → quantized_lab-0.26.0/src/quantized/web/assets/SegmentedControl-CR1JRq0i.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/SeparateWorksheetsDialog-CWaBy4uR.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ShortcutsDialog-C8NF66gB.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/SliderRow-BVjTRPd1.js → quantized_lab-0.26.0/src/quantized/web/assets/SliderRow-B3FcajZK.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/SmartFoldersSection-B0AqdfzG.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/SnapshotPlotWindow-B5L5gM6k.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/SplitDatasetDialog-Dhfyo7_i.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/SqliteQueryDialog-1F-EMoiT.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/StatStage-CkFXdrSE.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/StatStageCanvas-BrjMdNEI.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/StatsChooserPanel-DLIakqbt.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/Switch-F5CNDsic.js → quantized_lab-0.26.0/src/quantized/web/assets/Switch-B51vKMPs.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/TabulatePanel-B3SrJSnq.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/TabulateTable-B0zhohRN.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/TextFormatHelp-CegMJi1C.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ToolWindow-DNa3_-7m.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/TrashPanel-BxBxsdId.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/VariabilityChartPanel-DCWSAmWv.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/WaterfallView-CqlUzGBS.js → quantized_lab-0.26.0/src/quantized/web/assets/WaterfallView-BhCGTNCP.js +2 -2
- quantized_lab-0.26.0/src/quantized/web/assets/WhatIsThis-CNZ5KZQ6.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/Worksheet-CGOUsl4J.js → quantized_lab-0.26.0/src/quantized/web/assets/Worksheet-Bchnfup1.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/WorksheetPane-DWy8pcxj.js +3 -0
- quantized_lab-0.26.0/src/quantized/web/assets/ZoneWell-Bn1QjmY1.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/annotationTextDialog-ClEDuPrm.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/autosaveGenerations-B023G-vn.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/axisspec-DZ4Gcvcl.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/baseline-Pt-OfgJt.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/clipboard-02oM0LWi.js +3 -0
- quantized_lab-0.26.0/src/quantized/web/assets/combineDialog-BG-kbyxc.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/contextActions-CNtyChLx.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/copyFigureCommand-DPCbv0BN.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/curvefit-DoEXIwk3.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/datasetsplit-jVwpwCuY.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/desktopBridge-DnoGkBQK.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/desktopLockProvider-HMesW_Oj.js → quantized_lab-0.26.0/src/quantized/web/assets/desktopLockProvider-B2FqTnr5.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/desktopRelinkBridge-DtfJyZAw.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/diagnostics-ObaON_LH.js +3 -0
- quantized_lab-0.26.0/src/quantized/web/assets/dnd-DjPpWs4t.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/errorbars-DD5Hd63O.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/exportActive-BOETgoQm.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/exportFigureCommand-D1p-WVdq.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/exportPageCommand-Cx9ZtlmT.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/figureCompatibility-6YMbE7aH.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/figureDocument-DcIT7FTP.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/figureSpec-kS9d8Mst.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/figureSpecStage-Dk4LBc7g.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/figures-B698B_-o.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/fileCommandsLazy-DJ9oxm8H.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/fitmodels-CW6DgLuC.js → quantized_lab-0.26.0/src/quantized/web/assets/fitmodels-B_enYcup.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/fitselectionActions-CCxoR2AI.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/folderOps-Cd2ZYcX7.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/format-wNo0e3_y.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/formatBytes-BPCGNWDJ.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/globalPlotRecipes-eLeNFWi4.js → quantized_lab-0.26.0/src/quantized/web/assets/globalPlotRecipes-BOxSqoGm.js +1 -1
- quantized_lab-0.24.0/src/quantized/web/assets/help-CaovmIrj.js → quantized_lab-0.26.0/src/quantized/web/assets/help-SyZMZh-E.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/index-CEYbjyf2.css +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/index-Ch3GryeW.js +10 -0
- quantized_lab-0.26.0/src/quantized/web/assets/jsx-runtime-NZYk81nU.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/labelRows-BbLP8H_v.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/libraryDetails-DtEMrYkE.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/magnetometry-CX4yqv4t.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/markers-IElxdZc4.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/merge-DujsXvOU.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/modeling-Du21uA0m.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/originFidelity-zQ_uQ_ci.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/originFigureSelection-DVb6NW1W.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/originSpatialPanels-BZn8z26C.js → quantized_lab-0.26.0/src/quantized/web/assets/originSpatialPanels-DoajGR_o.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/packProject-Zs3v-r2Z.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/packProjectCommands-3PkbEfcH.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/packProjectRun-BOx_yTd4.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/pageDocumentActions-xZ5IqkGB.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/pageGreyscale-DnY2fdvR.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/pageSetupCommand-DWV4J9TG.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/pagesetup-Z1HdoaJV.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/panelResolve-zKHP9ZaA.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/parseWorkspaceFile-hxjyKCc8.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/peakMarkerHit-CtJLcBau.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/peakTableFit-CJ4tW63U.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/peaks-DmEoQ7LI.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/peakwizard-D_l5I-Jw.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/pendingOps-DgJ0jAs4.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/plotInNewWindow-ZaZozXS4.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/plotRecipe-DbhpRXw7.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/plotRecipeApply-BCvoDTN3.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/plotRecipeIO-DhztDQ_v.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/plotRecipeMatch-Bkam0Z3x.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/plotdata-D-Bh3WVm.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/plural-DZ1uV0WM.js +3 -0
- quantized_lab-0.26.0/src/quantized/web/assets/preload-helper-Czpn1I53.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/primitives-ChiQwT3D.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/quickPlotTemplates-oDp3-HHl.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/quickPlotWithDialog-DYShHGGV.js → quantized_lab-0.26.0/src/quantized/web/assets/quickPlotWithDialog-Do0LVz-2.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/quickfit-DcQdUkGj.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/react-C5lyt4z4.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/react-dom-DDfzmQVy.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/recipeIndex-rzO9nNzy.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/recipeManagerActions-GIM74Oef.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/recordRecipeUse-HjHRRyO7.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/reimportAllRun-387E_aqK.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/relink-Bw3O17OU.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/relinkCommit-AleSRQAq.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/relinkPreview-BmzAif3e.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/rolldown-runtime-hePW80VL.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/rowSidecars-CdeDWwmc.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/rowstate-4BE_1Yry.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/runTemplate-BCXMyiIT.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/saveFigureAsRecipe-CA1WEU6C.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/stats-BOn_SgNJ.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/techniqueDefaults-R0WO3YZo.js +1 -0
- quantized_lab-0.24.0/src/quantized/web/assets/template-BYbejUgd.js → quantized_lab-0.26.0/src/quantized/web/assets/template-B3UZtwYT.js +1 -1
- quantized_lab-0.26.0/src/quantized/web/assets/toasts-v4ZA--Hu.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/trash-DHaksMjk.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/trashRestore-DA-z_T0Q.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/uplotOpts-DnrTDLSU.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/uplotShapes-DuJv18Mm.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useApp-Dl96Fupu.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useByPartition-CXaALAn5.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useCutLanding-DGpxTNvh.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useDialogFocus-D1ftVZg9.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useFigureBuilder-SiFKgCP2.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useLibraryStore-BhcgXGyv.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useListVirtualization-Cl-u45F8.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useMapColorLimitsField-CEhj8l3L.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useMultiPanelStage-ChpnG8mu.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useRoiCuts-zHekI89r.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/useStatStage-Df7DJ_4Q.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/workbookIds-DVtAJq88.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/workbookRowMenu-D3Ujyoh2.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/workbookTransfer-DF96LSEo.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/workbooks-C5xuHiEZ.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/worksheetTransformCommands-BnQgciZC.js +2 -0
- quantized_lab-0.26.0/src/quantized/web/assets/worksheetTransforms-CEYaaaHg.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/assets/workspaceParse.worker-BwfJHa6h.js +1 -0
- quantized_lab-0.26.0/src/quantized/web/index.html +67 -0
- quantized_lab-0.24.0/src/quantized/io/import_preview.py +0 -431
- quantized_lab-0.24.0/src/quantized/routes/_errors.py +0 -52
- quantized_lab-0.24.0/src/quantized/routes/_payload.py +0 -63
- quantized_lab-0.24.0/src/quantized/routes/_uploadcache.py +0 -100
- quantized_lab-0.24.0/src/quantized/web/assets/AnnotationTextDialog-Dh8d45Bo.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/BackgroundPlotWindow-DxYNDu3n.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/BaselinePanel-B4eMqqLY.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/BufferedNumberField-C9q5k3r5.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/CalcOnlyApp-2EQVCHWO.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/CalculatorsContent-DNm81xF6.js +0 -8
- quantized_lab-0.24.0/src/quantized/web/assets/CalculatorsPanel-D7cMY4_C.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/Checkbox-ZPlARkcc.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/ColumnSwitcher-CQjGqfe7.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/CombineWorkbooksDialog-CGfr7jwp.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/CurveFitPanel-BiDiMGWM.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/DataFilterPanel-BvuQsPvu.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/DatasetMathPanel-PW4TEPkm.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/DigitizerView-DrabPAaR.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/DistributionPanel-CgO09E6L.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/EditableFiguresSection-Bl1EbS8D.js +0 -2
- quantized_lab-0.24.0/src/quantized/web/assets/FigureBuilderView-D_Z6Wum1.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/FigurePageView-BTKC21Sj.js +0 -2
- quantized_lab-0.24.0/src/quantized/web/assets/FitYByXPanel-C7ShY_Y9.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/GraphBuilderPanel-DjB5FxHv.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/GraphPreview-iEDSv6mL.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/HelpDialog-iHZaCAMg.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/HysteresisPanel-DvNTCEl0.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/IconButton-CWf4LPKg.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/ImportWizardPanel-B5MBeEjd.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/Inspector-C_vIfBDr.js +0 -2
- quantized_lab-0.24.0/src/quantized/web/assets/LibraryDetails-BNb8fvr6.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/LibraryTree-ByCCrNiv.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/LibraryWorkspace-BhwCCiAF.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/MagToolsPanel-ByfYczwE.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/MapStage-BrHN8eXL.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/MultiPanelStage-DKWSbg7W.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/MultivarPanel-DuW3IDQf.js +0 -2
- quantized_lab-0.24.0/src/quantized/web/assets/OutlierScreeningPanel-DweGs8OE.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/PagesSection-BrVI6pCl.js +0 -2
- quantized_lab-0.24.0/src/quantized/web/assets/ParamDialog-Q6GW-ie5.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/PeakWizardPanel-9JzzHRTK.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/PeaksPanel-DyHSjs6K.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/Pill-ChI4gT6d.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/PipelinePanel-BkWhBDwV.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/PlotRecipeApplyDialog-DB9yfGVS.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/PreferencesDialog-DmVXMbJy.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/QuickFigureBuilderWorkspace-BRurnVLP.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/QuickPlotWithDialog-cZsIJfgf.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/RecipeLibraryPanel-8P2PZVe7.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/RecipeManagerPanel-DubyrN42.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/RecodePanel-reyxPLZA.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/RecoveryChoiceDialog-WGQ2gOdk.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/ReductionsPanel-BbE0b1j2.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/ReflView-zkCE8ius.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/ReflectivityPanel-DRz8Ujvv.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/ReimportAllDialog-DtCV4sut.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/RelinkPanel-C1pQmi1A.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/ReportPanel-Be9hbHUr.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/RichLabelInput-CgjdRd2j.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/RoiCutsPanel-BSn69UQW.js +0 -2
- quantized_lab-0.24.0/src/quantized/web/assets/RsmPanel-vUOX6WrX.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/SearchPanel-RsY3MmCU.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/SeparateWorksheetsDialog-FRSUmD8E.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/ShortcutsDialog-BDfbHaC5.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/SplitDatasetDialog-DcofPHWB.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/SqliteQueryDialog-DiBDWCZv.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/StatStage-CU-7nRa4.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/StatStageCanvas-BOr7O6fO.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/StatsChooserPanel-n3lnZLxs.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/TabulatePanel-BWPI3Cxn.js +0 -2
- quantized_lab-0.24.0/src/quantized/web/assets/TabulateTable-BxYKrDSN.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/TextFormatHelp-CBr98jBj.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/TrashPanel-BWDi2qo5.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/VariabilityChartPanel-DPGOcPZV.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/WhatIsThis-B9bcXOIl.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/WorksheetPane-Bjr2zGs0.js +0 -3
- quantized_lab-0.24.0/src/quantized/web/assets/ZoneWell-CnoSEFKD.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/artifactContextActions-CbzUMhxS.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/axisspec-BruuLYCZ.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/baseline-BIc0YhGI.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/clipboard-CcYalH5s.js +0 -3
- quantized_lab-0.24.0/src/quantized/web/assets/combineDialog-Db6KKvu7.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/contextActions-Byk8JqE9.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/copyFigureCommand-Dl77DzQi.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/curvefit-D6P39epC.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/datasetRowMenu-DhhvaE76.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/desktopBridge-BLHPY7xb.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/diagnostics-Bh7NNAw0.js +0 -3
- quantized_lab-0.24.0/src/quantized/web/assets/errorbars-BndKr3Yn.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/exportFigureCommand-Bv_iZC7b.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/exportStyles-9izfaXuV.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/figureDocument-BKRnuSLc.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/figurePage-UBkEq4FE.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/figureSpec-BSgluP_V.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/figures-BFUFlFGx.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/fitselectionActions-BCUx8RLl.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/index-Dz8qlVlD.css +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/index-gVa0B0IK.js +0 -10
- quantized_lab-0.24.0/src/quantized/web/assets/jsx-runtime-HgiJn1ih.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/libraryDetails-BqdGwE-h.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/magnetometry-CfZ9AfKl.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/originFigureSelection---YiP5mQ.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/pageDocumentActions-Ma_3goyS.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/panelResolve-B_RtiVqH.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/peakMarkerHit-C_SzJ9DJ.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/peaks-PndHY5xV.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/peakwizard-B_rU-TLg.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/plotInNewWindow-BjxELqGd.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/plotRecipe-DdsiarbP.js +0 -2
- quantized_lab-0.24.0/src/quantized/web/assets/plotRecipeIO-xnD_vV5I.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/plotRecipeMatch-DGUSpLp3.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/primitives-lnGqdfLY.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/quickPlotTemplates-Dn4mJ_ii.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/react-dom-BBHtqE9J.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/react-nHOb1MiV.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/recipeIndex-BmUS929N.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/recipeManagerActions-c5-6xTlC.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/reimportAllRun-BimYRbEC.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/report-pZ5eJHvQ.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/richtext-DqEouiF0.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/runTemplate-BXexD7OQ.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/saveFigureAsRecipe-Bv2sRY0U.js +0 -2
- quantized_lab-0.24.0/src/quantized/web/assets/stats-DvN9PXpk.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/uplotOpts-DoYRAc37.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/uplotOverlays-DJM0m86s.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/uplotShapes-Bacmze99.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/useApp-BhBa-pdP.js +0 -4
- quantized_lab-0.24.0/src/quantized/web/assets/useByPartition-BZJcNksF.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/useCutLanding-xkTgcfwC.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/useFigureBuilder-CsvVbYEE.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/useMultiPanelStage-DG6RDgho.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/useRoiCuts-B1OCiLyf.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/useStatStage-DqhN4rvu.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/workbookRowMenu-C2C-mUz5.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/assets/workspaceParse.worker-9kedPdZU.js +0 -1
- quantized_lab-0.24.0/src/quantized/web/index.html +0 -50
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/LICENSE +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/NOTICE +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/assets/branding/README.md +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/docs/theory/README.md +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/__main__.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/api.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/app.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/__init__.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/_clipfit.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/_grid_detect.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/_natural_neighbor.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/_rsm_grid.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/_semiconductor_materials.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/aggregate.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/backgrounds.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/baseline.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/batch_fit.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/boxcut.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/constants.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/crystallography.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/decimate.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/diffusion.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/electrical.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/electrochemistry.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/element_data.json +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/element_data.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/errors.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_decor.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_hitmap.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_overrides.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_page_facets.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_page_layout.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_page_panel_labels.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_page_validate.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_scale.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_shapes.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_styles.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_ticks.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_y2.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_autoguess.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_bootstrap.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_bumps.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_constraints.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_equation.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_findxy.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_models.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_odr.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_scan.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_stats.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fitting.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/formula.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/global_curve_fit.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/global_fit.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/interp2d.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/ion_range.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/linecut.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/magnetic.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/magnetometry.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/map.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/mcmc.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/miller_bravais.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/optics.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/pawley.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peak_batch.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peak_fit.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peak_integrate.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peak_multifit.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peak_track.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peaks.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peakshapes.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/plane_spacings.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/processing.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/qspace.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/reductions.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/reductions_fft.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/refl_sld_presets.json +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/reflectivity.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/registry.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/relaxation.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/report.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/report_emit.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/rsm.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/rsm_analyze.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/sectorcut.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/semiconductor.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/sld.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/spectral.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/statplots.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_anova2.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_anova_ext.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_band.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_contingency.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_dist.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_glm.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_multivar.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_outliers.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_roc.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_survival.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_tests.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_varcomp.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/substrates.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/superconductor.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/surface_fit.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/surface_models.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/thermal.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/thin_film.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/unit_convert.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/units.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/units_data.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/vacuum.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/xray.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/cli.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/client.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_project_lock.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_project_lock_oslock.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_project_lock_record.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_project_lock_write.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/__init__.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/_hdf5_layout.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/_jcamp_asdf.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/_xrdml_scan.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/base.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/bruker_brml.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/bruker_raw.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/cif.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/consolidated.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/excel.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/hdf5.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/jcamp.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/netcdf.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/opus.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_com.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/__init__.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/annotation_marks.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/container.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/curve_style_color.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/fidelity.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/figure_geometry.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/figure_layers.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/figure_text.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/figures.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/figures_opju.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/graph_preview.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/notes.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opj.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opj_curves.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opj_shapes.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_axis_real_form.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_axis_specimen_form.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_codec.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_curves.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_curves_allcols.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_figure_curves.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_figure_text.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_reports.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/origin_richtext.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/templates.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/tree.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/tree_opju.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/windows.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/windows_opju.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/writer.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/writer_blocks.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/refl1d.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/report_export.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/rigaku.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/spc.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/sqlite_query.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/technique.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/xrd_csv.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/xrdml.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/jobs.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/plugins/__init__.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/plugins/contract.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/plugins/loader.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/plugins/steps.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/__init__.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/_bookcache.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/_export_common.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/_uploadstream.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/calc.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/diffusion.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/electrical.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/electrochemistry.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/jobs_api.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/magnetic.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/optics.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/samples.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/semiconductor.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/superconductor.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/thermal.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/thin_film.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/vacuum.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/samples/demo_vsm.csv +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/security.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/server_launch.py +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/JetBrainsMono-Bold-CUogYd9I.woff2 +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/JetBrainsMono-Regular-CA-Os4ii.woff2 +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/browserLockProvider-WonU-LkS.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/distribution-DtRUmVv3.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/figureDocumentReimport-CcKuldgP.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/gestureCancel-CIoXlFFV.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/gridwindow-DITcrjM7.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/jitter-WCHwU_Li.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/lockState-Ur5JH-bI.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/originFigures-BumquS0h.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/panelLayout-DizjSWgK.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/shapeHit-CWTHpAPr.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/tickFormat-DhmvIZc_.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/uPlot-CnsZ1jie.css +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/uPlot.min-CWikSVZk.js +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/favicon.png +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/loading.html +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/tools/origin_compare/README.md +0 -0
- {quantized_lab-0.24.0 → quantized_lab-0.26.0}/tools/visual/README.md +0 -0
|
@@ -59,6 +59,10 @@ Thumbs.db
|
|
|
59
59
|
.claude/
|
|
60
60
|
CLAUDE.local.md
|
|
61
61
|
|
|
62
|
+
# ── Local agent definitions and skills (per-machine, not shared) ──────
|
|
63
|
+
.agents/skills/
|
|
64
|
+
.codex/agents/
|
|
65
|
+
|
|
62
66
|
# NOTE: plans/ is TRACKED in this repo for now (founding design docs).
|
|
63
67
|
# Once active development starts we may adopt the sibling-repo convention
|
|
64
68
|
# (gitignore plans/, track a BACKLOG.md dashboard) — see CLAUDE.md.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: quantized-lab
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.26.0
|
|
4
4
|
Summary: Plot, analyze, and publish lab data - magnetometry, XRD, reflectometry - with OriginPro file interop, golden-verified analysis, and reproducible pipelines.
|
|
5
5
|
Project-URL: Homepage, https://github.com/pquarterman17/quantized
|
|
6
6
|
Project-URL: Documentation, https://github.com/pquarterman17/quantized/wiki
|
|
@@ -167,6 +167,8 @@ ships without a UI.
|
|
|
167
167
|
getting started, feature guides, Origin interop
|
|
168
168
|
- **[Releases](https://github.com/pquarterman17/quantized/releases)** —
|
|
169
169
|
installers + changelogs
|
|
170
|
+
- [`CHANGELOG.md`](https://github.com/pquarterman17/quantized/blob/main/CHANGELOG.md)
|
|
171
|
+
— plain-language changes per release, Keep a Changelog format
|
|
170
172
|
- [`RELEASE.md`](https://github.com/pquarterman17/quantized/blob/main/RELEASE.md)
|
|
171
173
|
— how releases are built and published
|
|
172
174
|
- In-app: **⌘K** command palette, **Help ▸ Keyboard shortcuts**, and
|
|
@@ -184,9 +186,12 @@ for the rules and
|
|
|
184
186
|
for the gate and the flake-fix evidence standard.
|
|
185
187
|
|
|
186
188
|
```bash
|
|
187
|
-
uv sync --group dev
|
|
188
|
-
uv run
|
|
189
|
-
|
|
189
|
+
uv sync --group dev # backend deps
|
|
190
|
+
uv run python tools/gate.py # the whole gate, one command (~8 min)
|
|
191
|
+
|
|
192
|
+
# what it runs, if you want to run a step by hand:
|
|
193
|
+
uv run pytest -n auto # backend tests (+ `-m golden` for MATLAB parity)
|
|
194
|
+
uv run ruff check src tests tools && uv run mypy src
|
|
190
195
|
cd frontend && npm test && npm run build
|
|
191
196
|
```
|
|
192
197
|
|
|
@@ -126,6 +126,8 @@ ships without a UI.
|
|
|
126
126
|
getting started, feature guides, Origin interop
|
|
127
127
|
- **[Releases](https://github.com/pquarterman17/quantized/releases)** —
|
|
128
128
|
installers + changelogs
|
|
129
|
+
- [`CHANGELOG.md`](https://github.com/pquarterman17/quantized/blob/main/CHANGELOG.md)
|
|
130
|
+
— plain-language changes per release, Keep a Changelog format
|
|
129
131
|
- [`RELEASE.md`](https://github.com/pquarterman17/quantized/blob/main/RELEASE.md)
|
|
130
132
|
— how releases are built and published
|
|
131
133
|
- In-app: **⌘K** command palette, **Help ▸ Keyboard shortcuts**, and
|
|
@@ -143,9 +145,12 @@ for the rules and
|
|
|
143
145
|
for the gate and the flake-fix evidence standard.
|
|
144
146
|
|
|
145
147
|
```bash
|
|
146
|
-
uv sync --group dev
|
|
147
|
-
uv run
|
|
148
|
-
|
|
148
|
+
uv sync --group dev # backend deps
|
|
149
|
+
uv run python tools/gate.py # the whole gate, one command (~8 min)
|
|
150
|
+
|
|
151
|
+
# what it runs, if you want to run a step by hand:
|
|
152
|
+
uv run pytest -n auto # backend tests (+ `-m golden` for MATLAB parity)
|
|
153
|
+
uv run ruff check src tests tools && uv run mypy src
|
|
149
154
|
cd frontend && npm test && npm run build
|
|
150
155
|
```
|
|
151
156
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "quantized-lab"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.26.0"
|
|
4
4
|
description = "Plot, analyze, and publish lab data - magnetometry, XRD, reflectometry - with OriginPro file interop, golden-verified analysis, and reproducible pipelines."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -93,6 +93,7 @@ dev = [
|
|
|
93
93
|
"lifelines>=0.27",
|
|
94
94
|
# exercise the optional bumps fit engine (GOTO #10) in CI
|
|
95
95
|
"bumps>=1.0",
|
|
96
|
+
"pytest-xdist>=3.8.0",
|
|
96
97
|
]
|
|
97
98
|
# Desktop packaging only — used by the release workflow to freeze the server
|
|
98
99
|
# into a self-contained sidecar (tools/bundle/qz-server.spec). Never a runtime
|
|
@@ -168,6 +169,7 @@ module = ["scipy.*", "uvicorn.*", "openpyxl.*", "h5py.*", "periodictable.*", "do
|
|
|
168
169
|
ignore_missing_imports = true
|
|
169
170
|
|
|
170
171
|
[tool.pytest.ini_options]
|
|
172
|
+
addopts = "--strict-markers"
|
|
171
173
|
markers = [
|
|
172
174
|
"golden: compares output against frozen quantized_matlab reference values",
|
|
173
175
|
"realdata: needs the local-only instrument corpus (auto-skips when absent)",
|
|
@@ -16,7 +16,9 @@ from typing import Any
|
|
|
16
16
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
|
|
19
|
+
from ..cat_levels import surviving_cat_levels, surviving_level_order
|
|
19
20
|
from ..datastruct import DataStruct
|
|
21
|
+
from ..row_sidecars import slice_row_sidecars
|
|
20
22
|
from .backgrounds import anchor_baseline, footprint_factor
|
|
21
23
|
from .processing import (
|
|
22
24
|
cumulative_integral,
|
|
@@ -96,6 +98,45 @@ def apply_corrections(
|
|
|
96
98
|
"""
|
|
97
99
|
time = np.asarray(data.time, dtype=float).copy()
|
|
98
100
|
values = np.asarray(data.values, dtype=float).copy()
|
|
101
|
+
# BUG-005: kept to decide, at the end, which `cat_levels` entries the
|
|
102
|
+
# pipeline actually invalidated. `values` above is mutated in place from here
|
|
103
|
+
# on, so the comparison needs its own reference.
|
|
104
|
+
values_in = np.asarray(data.values, dtype=float)
|
|
105
|
+
# BUG-005 review, HIGH 1. Bit-identity of a column is NOT evidence that its
|
|
106
|
+
# level codes survived: a transform can map codes to themselves by
|
|
107
|
+
# ARITHMETIC ACCIDENT. Measured on a single-level channel (every code 0,
|
|
108
|
+
# which is the commonest real case — a Sample/Phase/Status column constant
|
|
109
|
+
# within one file): dY/dX, ∫Y dx, a moving-average smooth, all four
|
|
110
|
+
# normalizations, a unit conversion and yScale=1000 each left it
|
|
111
|
+
# [0, 0, 0] and so kept the table, and `level_of` then returned the LABEL
|
|
112
|
+
# for a dY/dX channel. That is precisely the "labels for values that cannot
|
|
113
|
+
# have them" failure the strip exists to prevent.
|
|
114
|
+
#
|
|
115
|
+
# So the survival test is a CONJUNCTION: no step may have redefined what the
|
|
116
|
+
# channel IS (this flag), AND the numbers must be unchanged
|
|
117
|
+
# (`surviving_cat_levels`). Each half covers the other's blind spot — the
|
|
118
|
+
# flag catches an arithmetic coincidence, and the value comparison catches a
|
|
119
|
+
# step added later that forgets to set the flag.
|
|
120
|
+
#
|
|
121
|
+
# WHICH STEPS SET IT: those that REDEFINE THE QUANTITY — a derivative,
|
|
122
|
+
# integral, smooth, any normalization, a unit conversion, a mass/volume
|
|
123
|
+
# normalization, the footprint or neutron scale. After any of those the
|
|
124
|
+
# channel is no longer the thing its level table names, whatever the numbers
|
|
125
|
+
# happen to be.
|
|
126
|
+
#
|
|
127
|
+
# WHICH DO NOT: same-units arithmetic that is a genuine identity when its
|
|
128
|
+
# parameters are zero — the background/y-offset subtraction and the reference-
|
|
129
|
+
# dataset subtraction. Those run on EVERY call (`values - y_bg - y_off` is
|
|
130
|
+
# unconditional, with zeros by default), so flagging them made the flag always
|
|
131
|
+
# true and silently reverted this whole fix; the first version of it did
|
|
132
|
+
# exactly that and the identity/trim tests caught it. For these the value
|
|
133
|
+
# comparison IS the right test: subtract a real background and the codes move
|
|
134
|
+
# and are dropped; subtract zero and the channel is untouched.
|
|
135
|
+
#
|
|
136
|
+
# A NEW QUANTITY-REDEFINING STEP MUST SET THIS. `test_calc_corrections.py::
|
|
137
|
+
# test_corrections_drops_cat_levels_for_every_y_transforming_step` enumerates
|
|
138
|
+
# the current ones against a single-level channel.
|
|
139
|
+
y_touched = False
|
|
99
140
|
labels = list(data.labels)
|
|
100
141
|
|
|
101
142
|
# 0. Arbitrary X/Y rescaling (MAIN_PLAN #37) — a non-destructive unit
|
|
@@ -117,10 +158,12 @@ def apply_corrections(
|
|
|
117
158
|
time = time * x_scale
|
|
118
159
|
if y_scale != 1.0:
|
|
119
160
|
values = values * y_scale
|
|
161
|
+
y_touched = True
|
|
120
162
|
|
|
121
163
|
# 1. Trim on x.
|
|
122
164
|
x_min = params.get("xTrimMin", float("nan"))
|
|
123
165
|
x_max = params.get("xTrimMax", float("nan"))
|
|
166
|
+
kept_rows: list[int] | None = None
|
|
124
167
|
if not (math.isnan(x_min) and math.isnan(x_max)):
|
|
125
168
|
mask = np.ones(time.size, dtype=bool)
|
|
126
169
|
if not math.isnan(x_min):
|
|
@@ -129,6 +172,18 @@ def apply_corrections(
|
|
|
129
172
|
mask &= time <= x_max
|
|
130
173
|
time = time[mask]
|
|
131
174
|
values = values[mask, :]
|
|
175
|
+
# BUG-006 site 7. This is the ONLY step here that changes the ROW COUNT,
|
|
176
|
+
# so it is the only one whose row-indexed metadata sidecars need to move
|
|
177
|
+
# -- and they were riding through unsliced, which is strictly worse than
|
|
178
|
+
# the Extract/Split cases the bug started from: those produce a derived
|
|
179
|
+
# copy, while this response is written straight back into the dataset and
|
|
180
|
+
# the .dwk. Trim the first 50 of 100 rows and `text_columns` still held
|
|
181
|
+
# 100 cells starting at row 0, so every visible text cell described a
|
|
182
|
+
# row 50 places away. (An earlier version of this comment said "the code
|
|
183
|
+
# below already reasons about `excludedRows` shifting under this same
|
|
184
|
+
# trim" -- there is no `excludedRows` anywhere in this module; that
|
|
185
|
+
# reasoning is in the FRONTEND, `store/corrections.ts`.)
|
|
186
|
+
kept_rows = [int(i) for i in np.flatnonzero(mask)]
|
|
132
187
|
|
|
133
188
|
# 2. X offset.
|
|
134
189
|
time = time - params.get("xOff", 0.0)
|
|
@@ -145,6 +200,7 @@ def apply_corrections(
|
|
|
145
200
|
for k in range(values.shape[1]):
|
|
146
201
|
if labels[k].lower() != "dq":
|
|
147
202
|
values[:, k] = values[:, k] / factor
|
|
203
|
+
y_touched = True
|
|
148
204
|
|
|
149
205
|
# 3. Neutron R-scale, or background subtraction + y-offset.
|
|
150
206
|
y_off = params.get("yOff", 0.0)
|
|
@@ -152,6 +208,7 @@ def apply_corrections(
|
|
|
152
208
|
for k in range(values.shape[1]):
|
|
153
209
|
if labels[k].lower() != "dq":
|
|
154
210
|
values[:, k] = values[:, k] * y_off
|
|
211
|
+
y_touched = True
|
|
155
212
|
else:
|
|
156
213
|
# An anchor-point baseline (GOTO #2) beats the polynomial/slope forms.
|
|
157
214
|
bg_anchors = params.get("bgAnchors")
|
|
@@ -197,41 +254,92 @@ def apply_corrections(
|
|
|
197
254
|
m_unit = params.get("momentUnit", "")
|
|
198
255
|
if m_unit == "emu/g" and params.get("sampleMass", 0.0) > 0:
|
|
199
256
|
values = values / params["sampleMass"]
|
|
257
|
+
y_touched = True
|
|
200
258
|
elif m_unit in ("emu/cm³", "kA/m") and params.get("sampleVolume", 0.0) > 0:
|
|
201
259
|
values = values / params["sampleVolume"]
|
|
260
|
+
y_touched = True
|
|
202
261
|
elif m_unit == "A·m²":
|
|
203
262
|
values = values * 1e-3
|
|
263
|
+
y_touched = True
|
|
204
264
|
|
|
205
265
|
# 6. Smoothing.
|
|
206
266
|
if params.get("smoothEnabled", False):
|
|
207
267
|
win = max(1, _matlab_round(params.get("smoothWindow", 5)))
|
|
208
268
|
values = smooth_data(values, method=str(params["smoothMethod"]).lower(), window=win)
|
|
269
|
+
y_touched = True
|
|
209
270
|
|
|
210
271
|
# 7. Normalization.
|
|
211
272
|
norm = params.get("normMethod", "None")
|
|
212
273
|
if norm == "Range [0,1]":
|
|
213
274
|
values = normalize(values, method="range")
|
|
275
|
+
y_touched = True
|
|
214
276
|
elif norm == "Peak (max=1)":
|
|
215
277
|
values = normalize(values, method="peak")
|
|
278
|
+
y_touched = True
|
|
216
279
|
elif norm == "Z-score":
|
|
217
280
|
values = normalize(values, method="zscore")
|
|
281
|
+
y_touched = True
|
|
218
282
|
elif norm == "Area (integral=1)":
|
|
219
283
|
for k in range(values.shape[1]):
|
|
220
284
|
area = float(np.trapezoid(values[:, k], time))
|
|
221
285
|
if area != 0:
|
|
222
286
|
values[:, k] = values[:, k] / area
|
|
287
|
+
y_touched = True
|
|
223
288
|
|
|
224
289
|
# 8. Derivative / integral transforms.
|
|
225
290
|
deriv = params.get("derivativeMode", "None")
|
|
226
291
|
if deriv == "dY/dX":
|
|
227
292
|
values = derivative(time, values, order=1)
|
|
293
|
+
y_touched = True
|
|
228
294
|
elif deriv == "d²Y/dX²":
|
|
229
295
|
values = derivative(time, values, order=2)
|
|
296
|
+
y_touched = True
|
|
230
297
|
elif deriv == "∫Y dx":
|
|
231
298
|
values = cumulative_integral(time, values)
|
|
299
|
+
y_touched = True
|
|
232
300
|
elif deriv == "dlog/dlog":
|
|
233
301
|
values = log_derivative(time, values)
|
|
302
|
+
y_touched = True
|
|
234
303
|
|
|
304
|
+
# `cat_levels` IS CARRIED FORWARD ONLY WHERE THE CODES SURVIVED (BUG-005).
|
|
305
|
+
#
|
|
306
|
+
# Every step above transforms EVERY channel unconditionally (`for k in
|
|
307
|
+
# range(values.shape[1])`, plus whole-matrix `smooth_data`/`normalize`/
|
|
308
|
+
# `derivative` calls). A categorical channel's values are level CODES
|
|
309
|
+
# (0..n-1); smoothing or differentiating them yields fractional numbers with
|
|
310
|
+
# no level, so keeping the table would make the output claim labels for
|
|
311
|
+
# values that no longer index it — worse than showing the raw numbers.
|
|
312
|
+
#
|
|
313
|
+
# That was why this dropped the table. But it dropped it UNCONDITIONALLY,
|
|
314
|
+
# including when the codes demonstrably did not move: an identity correction
|
|
315
|
+
# (every step off) or a pure row TRIM, which selects rows and never touches a
|
|
316
|
+
# value. `surviving_cat_levels` (see `quantized/cat_levels.py`) now decides
|
|
317
|
+
# per channel by COMPARING the numbers, so a table is kept exactly when it
|
|
318
|
+
# still describes the output and dropped otherwise. Evidence, not inference
|
|
319
|
+
# about which parameters are identities — which is also why it cannot change
|
|
320
|
+
# any existing golden output.
|
|
321
|
+
#
|
|
322
|
+
# STILL BOOKED as BUG-005: corrections should not TRANSFORM a categorical
|
|
323
|
+
# channel at all. That needs a channel mask threaded through every step above
|
|
324
|
+
# and carries real golden-parity regression risk, so it is not faked here.
|
|
325
|
+
metadata = (
|
|
326
|
+
dict(data.metadata)
|
|
327
|
+
if kept_rows is None
|
|
328
|
+
else slice_row_sidecars(data.metadata, kept_rows)
|
|
329
|
+
)
|
|
330
|
+
surviving = (
|
|
331
|
+
None
|
|
332
|
+
if y_touched
|
|
333
|
+
else surviving_cat_levels(data.cat_levels, values_in, values, kept_rows)
|
|
334
|
+
)
|
|
235
335
|
return DataStruct.create(
|
|
236
|
-
time,
|
|
336
|
+
time,
|
|
337
|
+
values,
|
|
338
|
+
labels=labels,
|
|
339
|
+
units=list(data.units),
|
|
340
|
+
metadata=metadata,
|
|
341
|
+
cat_levels=surviving,
|
|
342
|
+
level_order=surviving_level_order(
|
|
343
|
+
data.level_order, surviving, np.array_equal(time, np.asarray(data.time, dtype=float))
|
|
344
|
+
),
|
|
237
345
|
)
|
|
@@ -17,11 +17,16 @@ from typing import Any
|
|
|
17
17
|
import matplotlib
|
|
18
18
|
|
|
19
19
|
matplotlib.use("Agg") # headless: render to a buffer, never to a display
|
|
20
|
+
matplotlib.rcParams["svg.fonttype"] = "none" # editable SVG <text>, not glyph outlines
|
|
20
21
|
|
|
21
22
|
import matplotlib.pyplot as plt # noqa: E402 (must follow matplotlib.use)
|
|
22
|
-
import numpy as np
|
|
23
|
-
from numpy.typing import ArrayLike, NDArray
|
|
23
|
+
import numpy as np # noqa: E402
|
|
24
|
+
from numpy.typing import ArrayLike, NDArray # noqa: E402
|
|
24
25
|
|
|
26
|
+
from quantized.calc.figure_colorscatter import ( # noqa: E402
|
|
27
|
+
draw_color_scatter as _draw_color_scatter,
|
|
28
|
+
)
|
|
29
|
+
from quantized.calc.figure_greyscale import apply_greyscale # noqa: E402
|
|
25
30
|
from quantized.calc.figure_hitmap import collect_map as _collect_map_impl # noqa: E402
|
|
26
31
|
from quantized.calc.figure_labels import safe_mathtext_label # noqa: E402
|
|
27
32
|
from quantized.calc.figure_overrides import _apply_overrides, _validate_overrides # noqa: E402
|
|
@@ -29,7 +34,7 @@ from quantized.calc.figure_scale import apply_axis_scale, resolve_axis_scale #
|
|
|
29
34
|
from quantized.calc.figure_styles import FigureStyle, figure_style # noqa: E402
|
|
30
35
|
from quantized.calc.figure_ticks import apply_tick_formats, apply_tick_steps # noqa: E402
|
|
31
36
|
|
|
32
|
-
from .figure_errorbars import apply_error_bars
|
|
37
|
+
from .figure_errorbars import apply_error_bars # noqa: E402
|
|
33
38
|
|
|
34
39
|
__all__ = ["draw_series_axes", "render_figure", "style_rc"]
|
|
35
40
|
|
|
@@ -39,6 +44,10 @@ _LINESTYLE = {"solid": "-", "dashed": "--", "dotted": ":", "none": "none"}
|
|
|
39
44
|
# per-series `step` ("pre"/"post"/"mid" — SeriesStyle.step / ExportSeriesStyle
|
|
40
45
|
# .step) maps 1:1 onto matplotlib's own `Line2D.drawstyle` vocabulary.
|
|
41
46
|
_DRAWSTYLE = {"pre": "steps-pre", "post": "steps-post", "mid": "steps-mid"}
|
|
47
|
+
# 8 `MarkerShape` glyphs -> matplotlib codes; wire key `marker_shape` (sent by
|
|
48
|
+
# `lib/exportStyles`; was hardcoded "o", so every shape exported as a circle).
|
|
49
|
+
_MARKER = {"circle": "o", "square": "s", "triangle": "^", "downtriangle": "v",
|
|
50
|
+
"diamond": "D", "plus": "+", "cross": "x", "star": "*"}
|
|
42
51
|
# Fixed fill translucency for MAIN #13 (fill under/between curves) — matches
|
|
43
52
|
# the screen side's `uplotFill.ts` FILL_ALPHA_PCT (25%) so an exported figure
|
|
44
53
|
# reads the same as its on-screen counterpart.
|
|
@@ -56,7 +65,7 @@ def _plot_kwargs(
|
|
|
56
65
|
silently ignored (no ``drawstyle``/``linestyle`` key added) rather than
|
|
57
66
|
raising -- same degrade-gracefully contract as every other style field
|
|
58
67
|
here (see ``calc.plotting.resolve_style_channels``'s doc: "an export must
|
|
59
|
-
never 500 on a bad style hint")."""
|
|
68
|
+
never 500 on a bad style hint") -- ``marker_shape`` included."""
|
|
60
69
|
kw: dict[str, Any] = {"linewidth": default_lw}
|
|
61
70
|
if not spec:
|
|
62
71
|
return kw
|
|
@@ -73,7 +82,8 @@ def _plot_kwargs(
|
|
|
73
82
|
if step in _DRAWSTYLE:
|
|
74
83
|
kw["drawstyle"] = _DRAWSTYLE[step]
|
|
75
84
|
if spec.get("marker"):
|
|
76
|
-
|
|
85
|
+
shape = spec.get("marker_shape")
|
|
86
|
+
kw["marker"] = _MARKER.get(shape, "o") if isinstance(shape, str) else "o"
|
|
77
87
|
kw["markersize"] = spec.get("marker_size") or default_marker_size
|
|
78
88
|
return kw
|
|
79
89
|
|
|
@@ -110,33 +120,6 @@ def _apply_fill(
|
|
|
110
120
|
ax.fill_between(xv[:n], yv[:n], other[:n], color=color, alpha=_FILL_ALPHA)
|
|
111
121
|
|
|
112
122
|
|
|
113
|
-
def _draw_color_scatter(
|
|
114
|
-
fig: Any,
|
|
115
|
-
ax: Any,
|
|
116
|
-
xv: NDArray[np.float64],
|
|
117
|
-
yv: NDArray[np.float64],
|
|
118
|
-
label: str,
|
|
119
|
-
spec: Mapping[str, Any],
|
|
120
|
-
st: FigureStyle,
|
|
121
|
-
) -> Any:
|
|
122
|
-
"""Colour-mapped scatter (MAIN #14): each point coloured by a THIRD
|
|
123
|
-
channel's value -- ``spec["color_by"]``, already resolved by
|
|
124
|
-
``calc.plotting.resolve_style_channels`` to a concrete per-row array (this
|
|
125
|
-
module never sees a raw channel index). Replaces the normal line draw
|
|
126
|
-
entirely for this series -- screen-side parity: ``uplotOpts.ts`` hides the
|
|
127
|
-
native line/points the same way whenever a series' ``colorBy`` is set.
|
|
128
|
-
Adds a colourbar so the mapping is legible. Returns the ``PathCollection``
|
|
129
|
-
artist (for the figure-hitmap element collector)."""
|
|
130
|
-
z = np.asarray(spec["color_by"], dtype=float)
|
|
131
|
-
n = min(len(xv), len(yv), len(z))
|
|
132
|
-
size = float(spec.get("marker_size") or st.marker_size) ** 2
|
|
133
|
-
sc = ax.scatter(
|
|
134
|
-
xv[:n], yv[:n], c=z[:n], cmap=str(spec.get("colormap") or "viridis"), s=size, label=label
|
|
135
|
-
)
|
|
136
|
-
fig.colorbar(sc, ax=ax)
|
|
137
|
-
return sc
|
|
138
|
-
|
|
139
|
-
|
|
140
123
|
def style_rc(st: FigureStyle, ov: Mapping[str, Any]) -> dict[str, Any]:
|
|
141
124
|
"""The rc-param dict a preset (+ optional font/tick overrides) resolves to.
|
|
142
125
|
|
|
@@ -297,6 +280,19 @@ def _render_impl(
|
|
|
297
280
|
# preset's opaque background. Matters for pasting a figure onto a
|
|
298
281
|
# coloured slide; ignored in practice by formats that have no alpha.
|
|
299
282
|
transparent: bool = False,
|
|
283
|
+
# P3.3 print-safe export mode: overrides every series' colour to a
|
|
284
|
+
# position-based grey ramp and forces the dash/marker cycle (see
|
|
285
|
+
# `calc.figure_greyscale`'s module doc) -- applied uniformly to this
|
|
286
|
+
# function's own single-axes/y2/x-breaks paths (every one of them draws
|
|
287
|
+
# through `_plot_kwargs` off the SAME `series_styles` list mutated just
|
|
288
|
+
# below), so it also covers a `group_col`-resolved request (that path's
|
|
289
|
+
# `series_styles` is `None`, which `apply_greyscale` treats as "no
|
|
290
|
+
# explicit style on any series" and still ramps). Facets render through
|
|
291
|
+
# a completely separate module (`calc.figure_facets`) that never reaches
|
|
292
|
+
# `series_styles` at all -- this flag is a documented no-op there (see
|
|
293
|
+
# `routes.export_figures._render_facets_bytes`, which does not forward
|
|
294
|
+
# it) rather than silently doing nothing while looking wired.
|
|
295
|
+
greyscale: bool = False,
|
|
300
296
|
overrides: Mapping[str, Any] | None = None,
|
|
301
297
|
collect_map: bool = False,
|
|
302
298
|
x_fmt: Mapping[str, Any] | None = None,
|
|
@@ -344,6 +340,10 @@ def _render_impl(
|
|
|
344
340
|
``figure_y2.render_with_secondary_axis``'s doc). Not compatible with
|
|
345
341
|
``x_breaks`` (raises ``ValueError``) -- a broken figure has several
|
|
346
342
|
axes already and gains no coherent secondary-axis meaning.
|
|
343
|
+
``greyscale`` (P3.3 print-safe export) rewrites ``series_styles`` via
|
|
344
|
+
:func:`quantized.calc.figure_greyscale.apply_greyscale` before any of
|
|
345
|
+
the branches below run -- see that function's doc for exactly what it
|
|
346
|
+
overrides and what it deliberately leaves alone.
|
|
347
347
|
"""
|
|
348
348
|
if fmt not in _FORMATS:
|
|
349
349
|
raise ValueError(f"fmt must be one of {_FORMATS}")
|
|
@@ -357,6 +357,8 @@ def _render_impl(
|
|
|
357
357
|
y_label = safe_mathtext_label(y_label)
|
|
358
358
|
y2_label = safe_mathtext_label(y2_label)
|
|
359
359
|
series = [(safe_mathtext_label(label), y) for label, y in series]
|
|
360
|
+
if greyscale:
|
|
361
|
+
series_styles = apply_greyscale(series_styles, len(series))
|
|
360
362
|
st = figure_style(style)
|
|
361
363
|
ov = dict(overrides or {})
|
|
362
364
|
_validate_overrides(ov)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""Colour-mapped scatter (MAIN #14) for the publication renderer.
|
|
2
|
+
|
|
3
|
+
Split out of ``calc.figure`` purely to stay under the 500-line god-module
|
|
4
|
+
ceiling (mirrors ``figure_break``/``figure_y2``/``figure_overrides`` — a
|
|
5
|
+
self-contained draw branch pulled into its own module rather than trimmed).
|
|
6
|
+
Pure layer: no fastapi/pydantic imports.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from collections.abc import Mapping
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
import numpy as np
|
|
15
|
+
from numpy.typing import NDArray
|
|
16
|
+
|
|
17
|
+
from quantized.calc.figure_styles import FigureStyle
|
|
18
|
+
|
|
19
|
+
__all__ = ["draw_color_scatter"]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def draw_color_scatter(
|
|
23
|
+
fig: Any,
|
|
24
|
+
ax: Any,
|
|
25
|
+
xv: NDArray[np.float64],
|
|
26
|
+
yv: NDArray[np.float64],
|
|
27
|
+
label: str,
|
|
28
|
+
spec: Mapping[str, Any],
|
|
29
|
+
st: FigureStyle,
|
|
30
|
+
) -> Any:
|
|
31
|
+
"""Colour-mapped scatter: each point coloured by a THIRD channel's value
|
|
32
|
+
-- ``spec["color_by"]``, already resolved by
|
|
33
|
+
``calc.plotting.resolve_style_channels`` to a concrete per-row array
|
|
34
|
+
(this module never sees a raw channel index). Replaces the normal line
|
|
35
|
+
draw entirely for this series -- screen-side parity: ``uplotOpts.ts``
|
|
36
|
+
hides the native line/points the same way whenever a series' ``colorBy``
|
|
37
|
+
is set. Adds a colourbar so the mapping is legible. Returns the
|
|
38
|
+
``PathCollection`` artist (for the figure-hitmap element collector).
|
|
39
|
+
|
|
40
|
+
Deliberately left OUT of P3.3's greyscale export mode
|
|
41
|
+
(``calc.figure_greyscale.apply_greyscale`` passes a ``color_by`` spec
|
|
42
|
+
through unchanged): a colour-mapped scatter's colour IS the plotted
|
|
43
|
+
quantity, not a categorical series-to-series distinction, so forcing it
|
|
44
|
+
to grey would delete information rather than make the figure print-safe.
|
|
45
|
+
"""
|
|
46
|
+
z = np.asarray(spec["color_by"], dtype=float)
|
|
47
|
+
n = min(len(xv), len(yv), len(z))
|
|
48
|
+
size = float(spec.get("marker_size") or st.marker_size) ** 2
|
|
49
|
+
sc = ax.scatter(
|
|
50
|
+
xv[:n], yv[:n], c=z[:n], cmap=str(spec.get("colormap") or "viridis"), s=size, label=label
|
|
51
|
+
)
|
|
52
|
+
fig.colorbar(sc, ax=ax)
|
|
53
|
+
return sc
|
|
@@ -83,7 +83,7 @@ def apply_error_bars(
|
|
|
83
83
|
color = artist.get_color() if artist is not None else None
|
|
84
84
|
except AttributeError:
|
|
85
85
|
color = None # a colour-mapped scatter has no single colour
|
|
86
|
-
ax.errorbar(
|
|
86
|
+
container = ax.errorbar(
|
|
87
87
|
xv,
|
|
88
88
|
yv,
|
|
89
89
|
yerr=yerr,
|
|
@@ -94,3 +94,26 @@ def apply_error_bars(
|
|
|
94
94
|
capsize=2,
|
|
95
95
|
zorder=1, # behind the series line, so data stays legible
|
|
96
96
|
)
|
|
97
|
+
# matplotlib returns an ErrorbarContainer -- a tuple subclass of
|
|
98
|
+
# (data_line, caplines, barlinecols). A minimal axes stand-in (the
|
|
99
|
+
# unit tests' recording fake) may return None; treat anything that is
|
|
100
|
+
# not a 3-tuple as "no caps to restyle" rather than unpacking blindly.
|
|
101
|
+
caplines = container[1] if isinstance(container, tuple) and len(container) > 1 else ()
|
|
102
|
+
if color is not None:
|
|
103
|
+
# `ecolor=` above colours the bar lines and each cap's EDGE, but
|
|
104
|
+
# matplotlib's cap markers ('|'/'_') keep their default FACE
|
|
105
|
+
# colour (rcParams' C0) regardless -- passing markerfacecolor=
|
|
106
|
+
# to errorbar() itself is silently dropped for these marker
|
|
107
|
+
# styles, so the face has to be set on the returned cap Line2Ds
|
|
108
|
+
# directly. Otherwise a "print-safe" greyscale export still
|
|
109
|
+
# emits a chromatic `fill: #1f77b4` for every cap in vector
|
|
110
|
+
# output (PDF/SVG) -- invisible in a raster PNG only because the
|
|
111
|
+
# cap's degenerate fill path paints zero visible pixels there.
|
|
112
|
+
# This also corrects the ordinary COLOURED case: before this fix,
|
|
113
|
+
# every series' caps were filled with rcParams' C0 regardless of
|
|
114
|
+
# that series' own colour (e.g. series 2's caps rendered blue,
|
|
115
|
+
# not orange) in any coloured vector export -- a second, latent
|
|
116
|
+
# fix beyond the greyscale defect this was written for.
|
|
117
|
+
for cap in caplines:
|
|
118
|
+
cap.set_markerfacecolor(color)
|
|
119
|
+
cap.set_markeredgecolor(color)
|
|
@@ -31,6 +31,7 @@ from typing import Any
|
|
|
31
31
|
import matplotlib
|
|
32
32
|
|
|
33
33
|
matplotlib.use("Agg") # headless (defensive -- figure_facets already sets this)
|
|
34
|
+
matplotlib.rcParams["svg.fonttype"] = "none" # editable SVG <text>, not glyph outlines
|
|
34
35
|
|
|
35
36
|
import matplotlib.pyplot as plt # noqa: E402
|
|
36
37
|
import numpy as np # noqa: E402
|