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.
Files changed (674) hide show
  1. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/.gitignore +4 -0
  2. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/PKG-INFO +9 -4
  3. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/README.md +8 -3
  4. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/pyproject.toml +3 -1
  5. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/__init__.py +1 -1
  6. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/corrections.py +109 -1
  7. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure.py +34 -32
  8. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_break.py +1 -0
  9. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_categorical.py +1 -0
  10. quantized_lab-0.26.0/src/quantized/calc/figure_colorscatter.py +53 -0
  11. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_corner.py +1 -0
  12. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_errorbars.py +24 -1
  13. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_facets.py +1 -0
  14. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_facets_map.py +1 -0
  15. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_field.py +1 -0
  16. quantized_lab-0.26.0/src/quantized/calc/figure_greyscale.py +159 -0
  17. quantized_lab-0.26.0/src/quantized/calc/figure_group_styles.py +119 -0
  18. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_labels.py +29 -1
  19. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_map.py +1 -0
  20. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_multivar.py +14 -2
  21. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_page.py +21 -2
  22. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_statplots.py +1 -0
  23. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_ternary.py +1 -0
  24. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_models_special.py +70 -35
  25. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/plotting.py +87 -4
  26. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/resample.py +40 -2
  27. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/sld_formula.py +6 -3
  28. quantized_lab-0.26.0/src/quantized/cat_levels.py +146 -0
  29. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/datastruct.py +139 -4
  30. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_bridge.py +63 -24
  31. quantized_lab-0.26.0/src/quantized/desktop_bridge_common.py +44 -0
  32. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_bridge_dialogs.py +61 -34
  33. quantized_lab-0.26.0/src/quantized/desktop_bridge_pack.py +446 -0
  34. quantized_lab-0.26.0/src/quantized/desktop_bridge_pack_state.py +176 -0
  35. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_consent.py +147 -9
  36. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_project_file.py +130 -11
  37. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_source_probe.py +30 -5
  38. quantized_lab-0.26.0/src/quantized/io/_delimited_fast.py +303 -0
  39. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/_delimited_layout.py +50 -3
  40. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/delimited.py +68 -76
  41. quantized_lab-0.26.0/src/quantized/io/error_binding_suggestions.py +353 -0
  42. quantized_lab-0.26.0/src/quantized/io/error_inference.py +131 -0
  43. quantized_lab-0.26.0/src/quantized/io/error_label_candidates.py +371 -0
  44. quantized_lab-0.26.0/src/quantized/io/error_label_classify.py +177 -0
  45. quantized_lab-0.26.0/src/quantized/io/import_categorical_guards.py +213 -0
  46. quantized_lab-0.26.0/src/quantized/io/import_error_bindings.py +382 -0
  47. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/import_filters.py +15 -1
  48. quantized_lab-0.26.0/src/quantized/io/import_metadata.py +180 -0
  49. quantized_lab-0.26.0/src/quantized/io/import_parse.py +180 -0
  50. quantized_lab-0.26.0/src/quantized/io/import_preview.py +486 -0
  51. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/lakeshore.py +1 -10
  52. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/ncnr.py +183 -9
  53. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/preview.py +44 -8
  54. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/qd.py +1 -10
  55. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/registry.py +20 -3
  56. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/sims.py +31 -37
  57. quantized_lab-0.26.0/src/quantized/portable/__init__.py +89 -0
  58. quantized_lab-0.26.0/src/quantized/portable/atomic_rename.py +236 -0
  59. quantized_lab-0.26.0/src/quantized/portable/copy_stream.py +276 -0
  60. quantized_lab-0.26.0/src/quantized/portable/copying.py +438 -0
  61. quantized_lab-0.26.0/src/quantized/portable/grouping.py +257 -0
  62. quantized_lab-0.26.0/src/quantized/portable/layout.py +305 -0
  63. quantized_lab-0.26.0/src/quantized/portable/manifest.py +471 -0
  64. quantized_lab-0.26.0/src/quantized/portable/naming.py +104 -0
  65. quantized_lab-0.26.0/src/quantized/portable/pack.py +288 -0
  66. quantized_lab-0.26.0/src/quantized/portable/project_rewrite.py +180 -0
  67. quantized_lab-0.26.0/src/quantized/portable/publish.py +500 -0
  68. quantized_lab-0.26.0/src/quantized/portable/staging.py +441 -0
  69. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/_datasetcache.py +98 -25
  70. quantized_lab-0.26.0/src/quantized/routes/_errors.py +79 -0
  71. quantized_lab-0.26.0/src/quantized/routes/_payload.py +322 -0
  72. quantized_lab-0.26.0/src/quantized/routes/_uploadcache.py +199 -0
  73. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/aggregate.py +7 -6
  74. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/baseline.py +30 -50
  75. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/books.py +22 -15
  76. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/corrections.py +7 -6
  77. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/crystallography.py +30 -35
  78. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/database.py +2 -1
  79. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export.py +16 -21
  80. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export_figures.py +117 -107
  81. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export_figures_aux.py +38 -37
  82. quantized_lab-0.26.0/src/quantized/routes/export_figures_labels.py +97 -0
  83. quantized_lab-0.26.0/src/quantized/routes/export_figures_schema.py +202 -0
  84. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export_multivar.py +5 -4
  85. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export_page.py +16 -3
  86. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/export_statplots.py +3 -2
  87. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/fitting.py +9 -14
  88. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/fitting_bumps.py +3 -5
  89. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/import_template.py +12 -4
  90. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/import_wizard.py +16 -16
  91. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/magnetometry.py +28 -39
  92. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/parsers.py +171 -22
  93. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/peaks.py +21 -26
  94. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/plot.py +21 -9
  95. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/reductions.py +31 -42
  96. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/reference.py +2 -4
  97. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/reflectivity.py +10 -15
  98. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/report_export.py +3 -5
  99. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/rsm.py +51 -39
  100. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/sld.py +8 -10
  101. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/spectral.py +2 -1
  102. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/statplots.py +5 -4
  103. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/stats.py +22 -21
  104. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/stats_design.py +19 -18
  105. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/stats_outliers.py +5 -4
  106. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/stats_varcomp.py +4 -3
  107. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/substrates.py +3 -5
  108. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/xray.py +4 -9
  109. quantized_lab-0.26.0/src/quantized/row_sidecars.py +271 -0
  110. quantized_lab-0.26.0/src/quantized/web/assets/AnnotationTextDialog-CrUBjfS-.js +1 -0
  111. quantized_lab-0.26.0/src/quantized/web/assets/BackgroundPlotWindow-Cb2B6750.js +1 -0
  112. quantized_lab-0.26.0/src/quantized/web/assets/BaselinePanel-tCZWG5Pz.js +1 -0
  113. quantized_lab-0.26.0/src/quantized/web/assets/BufferedNumberField-DMBkaSb6.js +1 -0
  114. quantized_lab-0.26.0/src/quantized/web/assets/CalcOnlyApp-CSkEPxiL.js +1 -0
  115. quantized_lab-0.26.0/src/quantized/web/assets/CalculatorsContent-DuAffJm_.js +8 -0
  116. quantized_lab-0.26.0/src/quantized/web/assets/CalculatorsPanel-fSdGLd3E.js +1 -0
  117. 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
  118. quantized_lab-0.26.0/src/quantized/web/assets/Checkbox-DJkTxszS.js +1 -0
  119. quantized_lab-0.26.0/src/quantized/web/assets/CollectionsSection-DzYGLqNo.js +1 -0
  120. quantized_lab-0.26.0/src/quantized/web/assets/ColumnSwitcher-BscfU05y.js +1 -0
  121. quantized_lab-0.26.0/src/quantized/web/assets/CombineWorkbooksDialog-CSFamCUb.js +1 -0
  122. quantized_lab-0.26.0/src/quantized/web/assets/CurveFitPanel-DCt1wDzh.js +1 -0
  123. quantized_lab-0.26.0/src/quantized/web/assets/DataFilterPanel-D3W8WgNV.js +1 -0
  124. 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
  125. quantized_lab-0.26.0/src/quantized/web/assets/DatasetMathPanel-BYWqbaq1.js +1 -0
  126. quantized_lab-0.26.0/src/quantized/web/assets/DigitizerView-lN5nnSf1.js +1 -0
  127. quantized_lab-0.26.0/src/quantized/web/assets/DistributionPanel-Dq1yRBMK.js +1 -0
  128. quantized_lab-0.26.0/src/quantized/web/assets/EditableFiguresSection-CiJDEj0e.js +2 -0
  129. quantized_lab-0.26.0/src/quantized/web/assets/FigureBuilderView-D0t4_BcB.js +1 -0
  130. quantized_lab-0.26.0/src/quantized/web/assets/FigurePageView-DV1XlvB7.js +2 -0
  131. quantized_lab-0.26.0/src/quantized/web/assets/FigureRow-DPQQtCs5.js +2 -0
  132. quantized_lab-0.26.0/src/quantized/web/assets/FiguresSection-KBvGC1XN.js +1 -0
  133. quantized_lab-0.26.0/src/quantized/web/assets/FitYByXPanel-m8hw_oTR.js +1 -0
  134. quantized_lab-0.26.0/src/quantized/web/assets/GraphBuilderPanel-CyP7qfNy.js +1 -0
  135. quantized_lab-0.26.0/src/quantized/web/assets/GraphPreview-CbuxAsPQ.js +1 -0
  136. quantized_lab-0.26.0/src/quantized/web/assets/HelpDialog-D-FLvDAC.js +1 -0
  137. quantized_lab-0.26.0/src/quantized/web/assets/HysteresisPanel-BG2qFFKy.js +1 -0
  138. quantized_lab-0.26.0/src/quantized/web/assets/IconButton-Coh25Dic.js +1 -0
  139. quantized_lab-0.26.0/src/quantized/web/assets/ImportWizardPanel-BN6TckG-.js +1 -0
  140. quantized_lab-0.26.0/src/quantized/web/assets/Inspector-DShe0H7d.js +2 -0
  141. quantized_lab-0.26.0/src/quantized/web/assets/LevelOrderPanel-DDh9IRMl.js +1 -0
  142. quantized_lab-0.26.0/src/quantized/web/assets/LibraryDetails-D1-LgNWY.js +1 -0
  143. quantized_lab-0.26.0/src/quantized/web/assets/LibraryTree-DYNckxg2.js +1 -0
  144. quantized_lab-0.26.0/src/quantized/web/assets/LibraryWorkspace-CAwAOLq6.js +1 -0
  145. quantized_lab-0.26.0/src/quantized/web/assets/MagToolsPanel-C5okeE7F.js +1 -0
  146. quantized_lab-0.26.0/src/quantized/web/assets/MapStage-BtZz5t4R.js +1 -0
  147. quantized_lab-0.26.0/src/quantized/web/assets/MetaRow-BdF1fLAJ.js +1 -0
  148. quantized_lab-0.26.0/src/quantized/web/assets/MultiPanelStage-noDoOgre.js +1 -0
  149. quantized_lab-0.26.0/src/quantized/web/assets/MultiSelectBar-ZytMnGJI.js +2 -0
  150. quantized_lab-0.26.0/src/quantized/web/assets/MultivarPanel-UrfRnpRN.js +2 -0
  151. 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
  152. quantized_lab-0.26.0/src/quantized/web/assets/OriginFidelitySection-Bl1Sq7Rp.js +1 -0
  153. quantized_lab-0.26.0/src/quantized/web/assets/OriginSavedPreviewWindow-BOFe2SnW.js +1 -0
  154. quantized_lab-0.26.0/src/quantized/web/assets/OutlierScreeningPanel-C5ngFO5l.js +1 -0
  155. quantized_lab-0.26.0/src/quantized/web/assets/PackProjectPanel-DQWKHscl.js +1 -0
  156. quantized_lab-0.26.0/src/quantized/web/assets/PagesSection-Cs5vD_kr.js +2 -0
  157. quantized_lab-0.26.0/src/quantized/web/assets/PanelPlotWindow-BI1yaGmt.js +1 -0
  158. quantized_lab-0.26.0/src/quantized/web/assets/ParamDialog-C0P4O-3z.js +1 -0
  159. quantized_lab-0.26.0/src/quantized/web/assets/PeakWizardPanel-BjKHtWoc.js +1 -0
  160. quantized_lab-0.26.0/src/quantized/web/assets/PeaksPanel-Ck8Zq_Vm.js +1 -0
  161. quantized_lab-0.26.0/src/quantized/web/assets/Pill-CWRal9q7.js +1 -0
  162. quantized_lab-0.26.0/src/quantized/web/assets/PipelinePanel-B6YWwfW9.js +1 -0
  163. quantized_lab-0.26.0/src/quantized/web/assets/PlotContextMenu-Bx3UPzUf.js +1 -0
  164. quantized_lab-0.26.0/src/quantized/web/assets/PlotRecipeApplyDialog-whQSWOlZ.js +1 -0
  165. quantized_lab-0.26.0/src/quantized/web/assets/PlotResultChips-DKINGVQg.js +1 -0
  166. quantized_lab-0.26.0/src/quantized/web/assets/PolarStage-CPG6mku9.js +1 -0
  167. quantized_lab-0.26.0/src/quantized/web/assets/PolarStageCore-Cmu_g2Yd.js +1 -0
  168. quantized_lab-0.26.0/src/quantized/web/assets/PreferencesDialog-DKrvfZQu.js +1 -0
  169. quantized_lab-0.26.0/src/quantized/web/assets/QuickFigureBuilderWorkspace-CfhsIfZO.js +1 -0
  170. quantized_lab-0.26.0/src/quantized/web/assets/QuickPlotWithDialog-Ru5LjWqZ.js +1 -0
  171. quantized_lab-0.26.0/src/quantized/web/assets/RecipeLibraryPanel-B6paLoa_.js +2 -0
  172. quantized_lab-0.26.0/src/quantized/web/assets/RecipeManagerPanel-CQk1d7g-.js +1 -0
  173. quantized_lab-0.26.0/src/quantized/web/assets/RecodePanel-DntNg675.js +1 -0
  174. quantized_lab-0.26.0/src/quantized/web/assets/RecoveryChoiceDialog-Cc_K5D6k.js +1 -0
  175. quantized_lab-0.26.0/src/quantized/web/assets/ReductionsPanel-DOHW_AJR.js +1 -0
  176. quantized_lab-0.26.0/src/quantized/web/assets/ReflView-C4if0ngk.js +1 -0
  177. quantized_lab-0.26.0/src/quantized/web/assets/ReflectivityPanel-B31fiMUL.js +1 -0
  178. quantized_lab-0.26.0/src/quantized/web/assets/ReimportAllDialog-CtpXWhXd.js +1 -0
  179. quantized_lab-0.26.0/src/quantized/web/assets/RelinkPanel-CshrlobI.js +1 -0
  180. quantized_lab-0.26.0/src/quantized/web/assets/ReportPanel-CCMZgCbk.js +1 -0
  181. quantized_lab-0.26.0/src/quantized/web/assets/ReportsSection-DIgTK4F3.js +1 -0
  182. quantized_lab-0.26.0/src/quantized/web/assets/RichLabelInput-CXw-iHle.js +1 -0
  183. quantized_lab-0.26.0/src/quantized/web/assets/RoiCutsPanel-Df8lxkKM.js +2 -0
  184. quantized_lab-0.26.0/src/quantized/web/assets/RsmPanel-YPt0R7xR.js +1 -0
  185. quantized_lab-0.26.0/src/quantized/web/assets/SavedFiguresSection-CqK0TQ1Y.js +1 -0
  186. quantized_lab-0.26.0/src/quantized/web/assets/SearchPanel-DHN2r8ha.js +1 -0
  187. 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
  188. quantized_lab-0.26.0/src/quantized/web/assets/SeparateWorksheetsDialog-CWaBy4uR.js +1 -0
  189. quantized_lab-0.26.0/src/quantized/web/assets/ShortcutsDialog-C8NF66gB.js +1 -0
  190. 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
  191. quantized_lab-0.26.0/src/quantized/web/assets/SmartFoldersSection-B0AqdfzG.js +1 -0
  192. quantized_lab-0.26.0/src/quantized/web/assets/SnapshotPlotWindow-B5L5gM6k.js +1 -0
  193. quantized_lab-0.26.0/src/quantized/web/assets/SplitDatasetDialog-Dhfyo7_i.js +1 -0
  194. quantized_lab-0.26.0/src/quantized/web/assets/SqliteQueryDialog-1F-EMoiT.js +1 -0
  195. quantized_lab-0.26.0/src/quantized/web/assets/StatStage-CkFXdrSE.js +1 -0
  196. quantized_lab-0.26.0/src/quantized/web/assets/StatStageCanvas-BrjMdNEI.js +1 -0
  197. quantized_lab-0.26.0/src/quantized/web/assets/StatsChooserPanel-DLIakqbt.js +1 -0
  198. 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
  199. quantized_lab-0.26.0/src/quantized/web/assets/TabulatePanel-B3SrJSnq.js +2 -0
  200. quantized_lab-0.26.0/src/quantized/web/assets/TabulateTable-B0zhohRN.js +1 -0
  201. quantized_lab-0.26.0/src/quantized/web/assets/TextFormatHelp-CegMJi1C.js +1 -0
  202. quantized_lab-0.26.0/src/quantized/web/assets/ToolWindow-DNa3_-7m.js +1 -0
  203. quantized_lab-0.26.0/src/quantized/web/assets/TrashPanel-BxBxsdId.js +1 -0
  204. quantized_lab-0.26.0/src/quantized/web/assets/VariabilityChartPanel-DCWSAmWv.js +1 -0
  205. 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
  206. quantized_lab-0.26.0/src/quantized/web/assets/WhatIsThis-CNZ5KZQ6.js +1 -0
  207. 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
  208. quantized_lab-0.26.0/src/quantized/web/assets/WorksheetPane-DWy8pcxj.js +3 -0
  209. quantized_lab-0.26.0/src/quantized/web/assets/ZoneWell-Bn1QjmY1.js +1 -0
  210. quantized_lab-0.26.0/src/quantized/web/assets/annotationTextDialog-ClEDuPrm.js +1 -0
  211. quantized_lab-0.26.0/src/quantized/web/assets/autosaveGenerations-B023G-vn.js +1 -0
  212. quantized_lab-0.26.0/src/quantized/web/assets/axisspec-DZ4Gcvcl.js +1 -0
  213. quantized_lab-0.26.0/src/quantized/web/assets/baseline-Pt-OfgJt.js +1 -0
  214. quantized_lab-0.26.0/src/quantized/web/assets/clipboard-02oM0LWi.js +3 -0
  215. quantized_lab-0.26.0/src/quantized/web/assets/combineDialog-BG-kbyxc.js +1 -0
  216. quantized_lab-0.26.0/src/quantized/web/assets/contextActions-CNtyChLx.js +2 -0
  217. quantized_lab-0.26.0/src/quantized/web/assets/copyFigureCommand-DPCbv0BN.js +1 -0
  218. quantized_lab-0.26.0/src/quantized/web/assets/curvefit-DoEXIwk3.js +1 -0
  219. quantized_lab-0.26.0/src/quantized/web/assets/datasetsplit-jVwpwCuY.js +1 -0
  220. quantized_lab-0.26.0/src/quantized/web/assets/desktopBridge-DnoGkBQK.js +1 -0
  221. 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
  222. quantized_lab-0.26.0/src/quantized/web/assets/desktopRelinkBridge-DtfJyZAw.js +1 -0
  223. quantized_lab-0.26.0/src/quantized/web/assets/diagnostics-ObaON_LH.js +3 -0
  224. quantized_lab-0.26.0/src/quantized/web/assets/dnd-DjPpWs4t.js +1 -0
  225. quantized_lab-0.26.0/src/quantized/web/assets/errorbars-DD5Hd63O.js +1 -0
  226. quantized_lab-0.26.0/src/quantized/web/assets/exportActive-BOETgoQm.js +1 -0
  227. quantized_lab-0.26.0/src/quantized/web/assets/exportFigureCommand-D1p-WVdq.js +1 -0
  228. quantized_lab-0.26.0/src/quantized/web/assets/exportPageCommand-Cx9ZtlmT.js +1 -0
  229. quantized_lab-0.26.0/src/quantized/web/assets/figureCompatibility-6YMbE7aH.js +1 -0
  230. quantized_lab-0.26.0/src/quantized/web/assets/figureDocument-DcIT7FTP.js +1 -0
  231. quantized_lab-0.26.0/src/quantized/web/assets/figureSpec-kS9d8Mst.js +1 -0
  232. quantized_lab-0.26.0/src/quantized/web/assets/figureSpecStage-Dk4LBc7g.js +1 -0
  233. quantized_lab-0.26.0/src/quantized/web/assets/figures-B698B_-o.js +1 -0
  234. quantized_lab-0.26.0/src/quantized/web/assets/fileCommandsLazy-DJ9oxm8H.js +1 -0
  235. 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
  236. quantized_lab-0.26.0/src/quantized/web/assets/fitselectionActions-CCxoR2AI.js +1 -0
  237. quantized_lab-0.26.0/src/quantized/web/assets/folderOps-Cd2ZYcX7.js +1 -0
  238. quantized_lab-0.26.0/src/quantized/web/assets/format-wNo0e3_y.js +1 -0
  239. quantized_lab-0.26.0/src/quantized/web/assets/formatBytes-BPCGNWDJ.js +1 -0
  240. 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
  241. 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
  242. quantized_lab-0.26.0/src/quantized/web/assets/index-CEYbjyf2.css +1 -0
  243. quantized_lab-0.26.0/src/quantized/web/assets/index-Ch3GryeW.js +10 -0
  244. quantized_lab-0.26.0/src/quantized/web/assets/jsx-runtime-NZYk81nU.js +1 -0
  245. quantized_lab-0.26.0/src/quantized/web/assets/labelRows-BbLP8H_v.js +1 -0
  246. quantized_lab-0.26.0/src/quantized/web/assets/libraryDetails-DtEMrYkE.js +1 -0
  247. quantized_lab-0.26.0/src/quantized/web/assets/magnetometry-CX4yqv4t.js +1 -0
  248. quantized_lab-0.26.0/src/quantized/web/assets/markers-IElxdZc4.js +1 -0
  249. quantized_lab-0.26.0/src/quantized/web/assets/merge-DujsXvOU.js +1 -0
  250. quantized_lab-0.26.0/src/quantized/web/assets/modeling-Du21uA0m.js +1 -0
  251. quantized_lab-0.26.0/src/quantized/web/assets/originFidelity-zQ_uQ_ci.js +1 -0
  252. quantized_lab-0.26.0/src/quantized/web/assets/originFigureSelection-DVb6NW1W.js +1 -0
  253. 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
  254. quantized_lab-0.26.0/src/quantized/web/assets/packProject-Zs3v-r2Z.js +2 -0
  255. quantized_lab-0.26.0/src/quantized/web/assets/packProjectCommands-3PkbEfcH.js +2 -0
  256. quantized_lab-0.26.0/src/quantized/web/assets/packProjectRun-BOx_yTd4.js +1 -0
  257. quantized_lab-0.26.0/src/quantized/web/assets/pageDocumentActions-xZ5IqkGB.js +1 -0
  258. quantized_lab-0.26.0/src/quantized/web/assets/pageGreyscale-DnY2fdvR.js +1 -0
  259. quantized_lab-0.26.0/src/quantized/web/assets/pageSetupCommand-DWV4J9TG.js +1 -0
  260. quantized_lab-0.26.0/src/quantized/web/assets/pagesetup-Z1HdoaJV.js +1 -0
  261. quantized_lab-0.26.0/src/quantized/web/assets/panelResolve-zKHP9ZaA.js +1 -0
  262. quantized_lab-0.26.0/src/quantized/web/assets/parseWorkspaceFile-hxjyKCc8.js +1 -0
  263. quantized_lab-0.26.0/src/quantized/web/assets/peakMarkerHit-CtJLcBau.js +1 -0
  264. quantized_lab-0.26.0/src/quantized/web/assets/peakTableFit-CJ4tW63U.js +1 -0
  265. quantized_lab-0.26.0/src/quantized/web/assets/peaks-DmEoQ7LI.js +1 -0
  266. quantized_lab-0.26.0/src/quantized/web/assets/peakwizard-D_l5I-Jw.js +1 -0
  267. quantized_lab-0.26.0/src/quantized/web/assets/pendingOps-DgJ0jAs4.js +1 -0
  268. quantized_lab-0.26.0/src/quantized/web/assets/plotInNewWindow-ZaZozXS4.js +1 -0
  269. quantized_lab-0.26.0/src/quantized/web/assets/plotRecipe-DbhpRXw7.js +2 -0
  270. quantized_lab-0.26.0/src/quantized/web/assets/plotRecipeApply-BCvoDTN3.js +2 -0
  271. quantized_lab-0.26.0/src/quantized/web/assets/plotRecipeIO-DhztDQ_v.js +1 -0
  272. quantized_lab-0.26.0/src/quantized/web/assets/plotRecipeMatch-Bkam0Z3x.js +1 -0
  273. quantized_lab-0.26.0/src/quantized/web/assets/plotdata-D-Bh3WVm.js +1 -0
  274. quantized_lab-0.26.0/src/quantized/web/assets/plural-DZ1uV0WM.js +3 -0
  275. quantized_lab-0.26.0/src/quantized/web/assets/preload-helper-Czpn1I53.js +1 -0
  276. quantized_lab-0.26.0/src/quantized/web/assets/primitives-ChiQwT3D.js +1 -0
  277. quantized_lab-0.26.0/src/quantized/web/assets/quickPlotTemplates-oDp3-HHl.js +1 -0
  278. 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
  279. quantized_lab-0.26.0/src/quantized/web/assets/quickfit-DcQdUkGj.js +1 -0
  280. quantized_lab-0.26.0/src/quantized/web/assets/react-C5lyt4z4.js +1 -0
  281. quantized_lab-0.26.0/src/quantized/web/assets/react-dom-DDfzmQVy.js +1 -0
  282. quantized_lab-0.26.0/src/quantized/web/assets/recipeIndex-rzO9nNzy.js +1 -0
  283. quantized_lab-0.26.0/src/quantized/web/assets/recipeManagerActions-GIM74Oef.js +1 -0
  284. quantized_lab-0.26.0/src/quantized/web/assets/recordRecipeUse-HjHRRyO7.js +2 -0
  285. quantized_lab-0.26.0/src/quantized/web/assets/reimportAllRun-387E_aqK.js +1 -0
  286. quantized_lab-0.26.0/src/quantized/web/assets/relink-Bw3O17OU.js +1 -0
  287. quantized_lab-0.26.0/src/quantized/web/assets/relinkCommit-AleSRQAq.js +1 -0
  288. quantized_lab-0.26.0/src/quantized/web/assets/relinkPreview-BmzAif3e.js +1 -0
  289. quantized_lab-0.26.0/src/quantized/web/assets/rolldown-runtime-hePW80VL.js +1 -0
  290. quantized_lab-0.26.0/src/quantized/web/assets/rowSidecars-CdeDWwmc.js +1 -0
  291. quantized_lab-0.26.0/src/quantized/web/assets/rowstate-4BE_1Yry.js +1 -0
  292. quantized_lab-0.26.0/src/quantized/web/assets/runTemplate-BCXMyiIT.js +1 -0
  293. quantized_lab-0.26.0/src/quantized/web/assets/saveFigureAsRecipe-CA1WEU6C.js +2 -0
  294. quantized_lab-0.26.0/src/quantized/web/assets/stats-BOn_SgNJ.js +1 -0
  295. quantized_lab-0.26.0/src/quantized/web/assets/techniqueDefaults-R0WO3YZo.js +1 -0
  296. 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
  297. quantized_lab-0.26.0/src/quantized/web/assets/toasts-v4ZA--Hu.js +1 -0
  298. quantized_lab-0.26.0/src/quantized/web/assets/trash-DHaksMjk.js +2 -0
  299. quantized_lab-0.26.0/src/quantized/web/assets/trashRestore-DA-z_T0Q.js +1 -0
  300. quantized_lab-0.26.0/src/quantized/web/assets/uplotOpts-DnrTDLSU.js +1 -0
  301. quantized_lab-0.26.0/src/quantized/web/assets/uplotShapes-DuJv18Mm.js +1 -0
  302. quantized_lab-0.26.0/src/quantized/web/assets/useApp-Dl96Fupu.js +2 -0
  303. quantized_lab-0.26.0/src/quantized/web/assets/useByPartition-CXaALAn5.js +1 -0
  304. quantized_lab-0.26.0/src/quantized/web/assets/useCutLanding-DGpxTNvh.js +1 -0
  305. quantized_lab-0.26.0/src/quantized/web/assets/useDialogFocus-D1ftVZg9.js +1 -0
  306. quantized_lab-0.26.0/src/quantized/web/assets/useFigureBuilder-SiFKgCP2.js +1 -0
  307. quantized_lab-0.26.0/src/quantized/web/assets/useLibraryStore-BhcgXGyv.js +1 -0
  308. quantized_lab-0.26.0/src/quantized/web/assets/useListVirtualization-Cl-u45F8.js +1 -0
  309. quantized_lab-0.26.0/src/quantized/web/assets/useMapColorLimitsField-CEhj8l3L.js +1 -0
  310. quantized_lab-0.26.0/src/quantized/web/assets/useMultiPanelStage-ChpnG8mu.js +1 -0
  311. quantized_lab-0.26.0/src/quantized/web/assets/useRoiCuts-zHekI89r.js +1 -0
  312. quantized_lab-0.26.0/src/quantized/web/assets/useStatStage-Df7DJ_4Q.js +1 -0
  313. quantized_lab-0.26.0/src/quantized/web/assets/workbookIds-DVtAJq88.js +1 -0
  314. quantized_lab-0.26.0/src/quantized/web/assets/workbookRowMenu-D3Ujyoh2.js +1 -0
  315. quantized_lab-0.26.0/src/quantized/web/assets/workbookTransfer-DF96LSEo.js +1 -0
  316. quantized_lab-0.26.0/src/quantized/web/assets/workbooks-C5xuHiEZ.js +1 -0
  317. quantized_lab-0.26.0/src/quantized/web/assets/worksheetTransformCommands-BnQgciZC.js +2 -0
  318. quantized_lab-0.26.0/src/quantized/web/assets/worksheetTransforms-CEYaaaHg.js +1 -0
  319. quantized_lab-0.26.0/src/quantized/web/assets/workspaceParse.worker-BwfJHa6h.js +1 -0
  320. quantized_lab-0.26.0/src/quantized/web/index.html +67 -0
  321. quantized_lab-0.24.0/src/quantized/io/import_preview.py +0 -431
  322. quantized_lab-0.24.0/src/quantized/routes/_errors.py +0 -52
  323. quantized_lab-0.24.0/src/quantized/routes/_payload.py +0 -63
  324. quantized_lab-0.24.0/src/quantized/routes/_uploadcache.py +0 -100
  325. quantized_lab-0.24.0/src/quantized/web/assets/AnnotationTextDialog-Dh8d45Bo.js +0 -1
  326. quantized_lab-0.24.0/src/quantized/web/assets/BackgroundPlotWindow-DxYNDu3n.js +0 -1
  327. quantized_lab-0.24.0/src/quantized/web/assets/BaselinePanel-B4eMqqLY.js +0 -1
  328. quantized_lab-0.24.0/src/quantized/web/assets/BufferedNumberField-C9q5k3r5.js +0 -1
  329. quantized_lab-0.24.0/src/quantized/web/assets/CalcOnlyApp-2EQVCHWO.js +0 -1
  330. quantized_lab-0.24.0/src/quantized/web/assets/CalculatorsContent-DNm81xF6.js +0 -8
  331. quantized_lab-0.24.0/src/quantized/web/assets/CalculatorsPanel-D7cMY4_C.js +0 -1
  332. quantized_lab-0.24.0/src/quantized/web/assets/Checkbox-ZPlARkcc.js +0 -1
  333. quantized_lab-0.24.0/src/quantized/web/assets/ColumnSwitcher-CQjGqfe7.js +0 -1
  334. quantized_lab-0.24.0/src/quantized/web/assets/CombineWorkbooksDialog-CGfr7jwp.js +0 -1
  335. quantized_lab-0.24.0/src/quantized/web/assets/CurveFitPanel-BiDiMGWM.js +0 -1
  336. quantized_lab-0.24.0/src/quantized/web/assets/DataFilterPanel-BvuQsPvu.js +0 -1
  337. quantized_lab-0.24.0/src/quantized/web/assets/DatasetMathPanel-PW4TEPkm.js +0 -1
  338. quantized_lab-0.24.0/src/quantized/web/assets/DigitizerView-DrabPAaR.js +0 -1
  339. quantized_lab-0.24.0/src/quantized/web/assets/DistributionPanel-CgO09E6L.js +0 -1
  340. quantized_lab-0.24.0/src/quantized/web/assets/EditableFiguresSection-Bl1EbS8D.js +0 -2
  341. quantized_lab-0.24.0/src/quantized/web/assets/FigureBuilderView-D_Z6Wum1.js +0 -1
  342. quantized_lab-0.24.0/src/quantized/web/assets/FigurePageView-BTKC21Sj.js +0 -2
  343. quantized_lab-0.24.0/src/quantized/web/assets/FitYByXPanel-C7ShY_Y9.js +0 -1
  344. quantized_lab-0.24.0/src/quantized/web/assets/GraphBuilderPanel-DjB5FxHv.js +0 -1
  345. quantized_lab-0.24.0/src/quantized/web/assets/GraphPreview-iEDSv6mL.js +0 -1
  346. quantized_lab-0.24.0/src/quantized/web/assets/HelpDialog-iHZaCAMg.js +0 -1
  347. quantized_lab-0.24.0/src/quantized/web/assets/HysteresisPanel-DvNTCEl0.js +0 -1
  348. quantized_lab-0.24.0/src/quantized/web/assets/IconButton-CWf4LPKg.js +0 -1
  349. quantized_lab-0.24.0/src/quantized/web/assets/ImportWizardPanel-B5MBeEjd.js +0 -1
  350. quantized_lab-0.24.0/src/quantized/web/assets/Inspector-C_vIfBDr.js +0 -2
  351. quantized_lab-0.24.0/src/quantized/web/assets/LibraryDetails-BNb8fvr6.js +0 -1
  352. quantized_lab-0.24.0/src/quantized/web/assets/LibraryTree-ByCCrNiv.js +0 -1
  353. quantized_lab-0.24.0/src/quantized/web/assets/LibraryWorkspace-BhwCCiAF.js +0 -1
  354. quantized_lab-0.24.0/src/quantized/web/assets/MagToolsPanel-ByfYczwE.js +0 -1
  355. quantized_lab-0.24.0/src/quantized/web/assets/MapStage-BrHN8eXL.js +0 -1
  356. quantized_lab-0.24.0/src/quantized/web/assets/MultiPanelStage-DKWSbg7W.js +0 -1
  357. quantized_lab-0.24.0/src/quantized/web/assets/MultivarPanel-DuW3IDQf.js +0 -2
  358. quantized_lab-0.24.0/src/quantized/web/assets/OutlierScreeningPanel-DweGs8OE.js +0 -1
  359. quantized_lab-0.24.0/src/quantized/web/assets/PagesSection-BrVI6pCl.js +0 -2
  360. quantized_lab-0.24.0/src/quantized/web/assets/ParamDialog-Q6GW-ie5.js +0 -1
  361. quantized_lab-0.24.0/src/quantized/web/assets/PeakWizardPanel-9JzzHRTK.js +0 -1
  362. quantized_lab-0.24.0/src/quantized/web/assets/PeaksPanel-DyHSjs6K.js +0 -1
  363. quantized_lab-0.24.0/src/quantized/web/assets/Pill-ChI4gT6d.js +0 -1
  364. quantized_lab-0.24.0/src/quantized/web/assets/PipelinePanel-BkWhBDwV.js +0 -1
  365. quantized_lab-0.24.0/src/quantized/web/assets/PlotRecipeApplyDialog-DB9yfGVS.js +0 -1
  366. quantized_lab-0.24.0/src/quantized/web/assets/PreferencesDialog-DmVXMbJy.js +0 -1
  367. quantized_lab-0.24.0/src/quantized/web/assets/QuickFigureBuilderWorkspace-BRurnVLP.js +0 -1
  368. quantized_lab-0.24.0/src/quantized/web/assets/QuickPlotWithDialog-cZsIJfgf.js +0 -1
  369. quantized_lab-0.24.0/src/quantized/web/assets/RecipeLibraryPanel-8P2PZVe7.js +0 -1
  370. quantized_lab-0.24.0/src/quantized/web/assets/RecipeManagerPanel-DubyrN42.js +0 -1
  371. quantized_lab-0.24.0/src/quantized/web/assets/RecodePanel-reyxPLZA.js +0 -1
  372. quantized_lab-0.24.0/src/quantized/web/assets/RecoveryChoiceDialog-WGQ2gOdk.js +0 -1
  373. quantized_lab-0.24.0/src/quantized/web/assets/ReductionsPanel-BbE0b1j2.js +0 -1
  374. quantized_lab-0.24.0/src/quantized/web/assets/ReflView-zkCE8ius.js +0 -1
  375. quantized_lab-0.24.0/src/quantized/web/assets/ReflectivityPanel-DRz8Ujvv.js +0 -1
  376. quantized_lab-0.24.0/src/quantized/web/assets/ReimportAllDialog-DtCV4sut.js +0 -1
  377. quantized_lab-0.24.0/src/quantized/web/assets/RelinkPanel-C1pQmi1A.js +0 -1
  378. quantized_lab-0.24.0/src/quantized/web/assets/ReportPanel-Be9hbHUr.js +0 -1
  379. quantized_lab-0.24.0/src/quantized/web/assets/RichLabelInput-CgjdRd2j.js +0 -1
  380. quantized_lab-0.24.0/src/quantized/web/assets/RoiCutsPanel-BSn69UQW.js +0 -2
  381. quantized_lab-0.24.0/src/quantized/web/assets/RsmPanel-vUOX6WrX.js +0 -1
  382. quantized_lab-0.24.0/src/quantized/web/assets/SearchPanel-RsY3MmCU.js +0 -1
  383. quantized_lab-0.24.0/src/quantized/web/assets/SeparateWorksheetsDialog-FRSUmD8E.js +0 -1
  384. quantized_lab-0.24.0/src/quantized/web/assets/ShortcutsDialog-BDfbHaC5.js +0 -1
  385. quantized_lab-0.24.0/src/quantized/web/assets/SplitDatasetDialog-DcofPHWB.js +0 -1
  386. quantized_lab-0.24.0/src/quantized/web/assets/SqliteQueryDialog-DiBDWCZv.js +0 -1
  387. quantized_lab-0.24.0/src/quantized/web/assets/StatStage-CU-7nRa4.js +0 -1
  388. quantized_lab-0.24.0/src/quantized/web/assets/StatStageCanvas-BOr7O6fO.js +0 -1
  389. quantized_lab-0.24.0/src/quantized/web/assets/StatsChooserPanel-n3lnZLxs.js +0 -1
  390. quantized_lab-0.24.0/src/quantized/web/assets/TabulatePanel-BWPI3Cxn.js +0 -2
  391. quantized_lab-0.24.0/src/quantized/web/assets/TabulateTable-BxYKrDSN.js +0 -1
  392. quantized_lab-0.24.0/src/quantized/web/assets/TextFormatHelp-CBr98jBj.js +0 -1
  393. quantized_lab-0.24.0/src/quantized/web/assets/TrashPanel-BWDi2qo5.js +0 -1
  394. quantized_lab-0.24.0/src/quantized/web/assets/VariabilityChartPanel-DPGOcPZV.js +0 -1
  395. quantized_lab-0.24.0/src/quantized/web/assets/WhatIsThis-B9bcXOIl.js +0 -1
  396. quantized_lab-0.24.0/src/quantized/web/assets/WorksheetPane-Bjr2zGs0.js +0 -3
  397. quantized_lab-0.24.0/src/quantized/web/assets/ZoneWell-CnoSEFKD.js +0 -1
  398. quantized_lab-0.24.0/src/quantized/web/assets/artifactContextActions-CbzUMhxS.js +0 -1
  399. quantized_lab-0.24.0/src/quantized/web/assets/axisspec-BruuLYCZ.js +0 -1
  400. quantized_lab-0.24.0/src/quantized/web/assets/baseline-BIc0YhGI.js +0 -1
  401. quantized_lab-0.24.0/src/quantized/web/assets/clipboard-CcYalH5s.js +0 -3
  402. quantized_lab-0.24.0/src/quantized/web/assets/combineDialog-Db6KKvu7.js +0 -1
  403. quantized_lab-0.24.0/src/quantized/web/assets/contextActions-Byk8JqE9.js +0 -1
  404. quantized_lab-0.24.0/src/quantized/web/assets/copyFigureCommand-Dl77DzQi.js +0 -1
  405. quantized_lab-0.24.0/src/quantized/web/assets/curvefit-D6P39epC.js +0 -1
  406. quantized_lab-0.24.0/src/quantized/web/assets/datasetRowMenu-DhhvaE76.js +0 -1
  407. quantized_lab-0.24.0/src/quantized/web/assets/desktopBridge-BLHPY7xb.js +0 -1
  408. quantized_lab-0.24.0/src/quantized/web/assets/diagnostics-Bh7NNAw0.js +0 -3
  409. quantized_lab-0.24.0/src/quantized/web/assets/errorbars-BndKr3Yn.js +0 -1
  410. quantized_lab-0.24.0/src/quantized/web/assets/exportFigureCommand-Bv_iZC7b.js +0 -1
  411. quantized_lab-0.24.0/src/quantized/web/assets/exportStyles-9izfaXuV.js +0 -1
  412. quantized_lab-0.24.0/src/quantized/web/assets/figureDocument-BKRnuSLc.js +0 -1
  413. quantized_lab-0.24.0/src/quantized/web/assets/figurePage-UBkEq4FE.js +0 -1
  414. quantized_lab-0.24.0/src/quantized/web/assets/figureSpec-BSgluP_V.js +0 -1
  415. quantized_lab-0.24.0/src/quantized/web/assets/figures-BFUFlFGx.js +0 -1
  416. quantized_lab-0.24.0/src/quantized/web/assets/fitselectionActions-BCUx8RLl.js +0 -1
  417. quantized_lab-0.24.0/src/quantized/web/assets/index-Dz8qlVlD.css +0 -1
  418. quantized_lab-0.24.0/src/quantized/web/assets/index-gVa0B0IK.js +0 -10
  419. quantized_lab-0.24.0/src/quantized/web/assets/jsx-runtime-HgiJn1ih.js +0 -1
  420. quantized_lab-0.24.0/src/quantized/web/assets/libraryDetails-BqdGwE-h.js +0 -1
  421. quantized_lab-0.24.0/src/quantized/web/assets/magnetometry-CfZ9AfKl.js +0 -1
  422. quantized_lab-0.24.0/src/quantized/web/assets/originFigureSelection---YiP5mQ.js +0 -1
  423. quantized_lab-0.24.0/src/quantized/web/assets/pageDocumentActions-Ma_3goyS.js +0 -1
  424. quantized_lab-0.24.0/src/quantized/web/assets/panelResolve-B_RtiVqH.js +0 -1
  425. quantized_lab-0.24.0/src/quantized/web/assets/peakMarkerHit-C_SzJ9DJ.js +0 -1
  426. quantized_lab-0.24.0/src/quantized/web/assets/peaks-PndHY5xV.js +0 -1
  427. quantized_lab-0.24.0/src/quantized/web/assets/peakwizard-B_rU-TLg.js +0 -1
  428. quantized_lab-0.24.0/src/quantized/web/assets/plotInNewWindow-BjxELqGd.js +0 -1
  429. quantized_lab-0.24.0/src/quantized/web/assets/plotRecipe-DdsiarbP.js +0 -2
  430. quantized_lab-0.24.0/src/quantized/web/assets/plotRecipeIO-xnD_vV5I.js +0 -1
  431. quantized_lab-0.24.0/src/quantized/web/assets/plotRecipeMatch-DGUSpLp3.js +0 -1
  432. quantized_lab-0.24.0/src/quantized/web/assets/primitives-lnGqdfLY.js +0 -1
  433. quantized_lab-0.24.0/src/quantized/web/assets/quickPlotTemplates-Dn4mJ_ii.js +0 -1
  434. quantized_lab-0.24.0/src/quantized/web/assets/react-dom-BBHtqE9J.js +0 -1
  435. quantized_lab-0.24.0/src/quantized/web/assets/react-nHOb1MiV.js +0 -1
  436. quantized_lab-0.24.0/src/quantized/web/assets/recipeIndex-BmUS929N.js +0 -1
  437. quantized_lab-0.24.0/src/quantized/web/assets/recipeManagerActions-c5-6xTlC.js +0 -1
  438. quantized_lab-0.24.0/src/quantized/web/assets/reimportAllRun-BimYRbEC.js +0 -1
  439. quantized_lab-0.24.0/src/quantized/web/assets/report-pZ5eJHvQ.js +0 -1
  440. quantized_lab-0.24.0/src/quantized/web/assets/richtext-DqEouiF0.js +0 -1
  441. quantized_lab-0.24.0/src/quantized/web/assets/runTemplate-BXexD7OQ.js +0 -1
  442. quantized_lab-0.24.0/src/quantized/web/assets/saveFigureAsRecipe-Bv2sRY0U.js +0 -2
  443. quantized_lab-0.24.0/src/quantized/web/assets/stats-DvN9PXpk.js +0 -1
  444. quantized_lab-0.24.0/src/quantized/web/assets/uplotOpts-DoYRAc37.js +0 -1
  445. quantized_lab-0.24.0/src/quantized/web/assets/uplotOverlays-DJM0m86s.js +0 -1
  446. quantized_lab-0.24.0/src/quantized/web/assets/uplotShapes-Bacmze99.js +0 -1
  447. quantized_lab-0.24.0/src/quantized/web/assets/useApp-BhBa-pdP.js +0 -4
  448. quantized_lab-0.24.0/src/quantized/web/assets/useByPartition-BZJcNksF.js +0 -1
  449. quantized_lab-0.24.0/src/quantized/web/assets/useCutLanding-xkTgcfwC.js +0 -1
  450. quantized_lab-0.24.0/src/quantized/web/assets/useFigureBuilder-CsvVbYEE.js +0 -1
  451. quantized_lab-0.24.0/src/quantized/web/assets/useMultiPanelStage-DG6RDgho.js +0 -1
  452. quantized_lab-0.24.0/src/quantized/web/assets/useRoiCuts-B1OCiLyf.js +0 -1
  453. quantized_lab-0.24.0/src/quantized/web/assets/useStatStage-DqhN4rvu.js +0 -1
  454. quantized_lab-0.24.0/src/quantized/web/assets/workbookRowMenu-C2C-mUz5.js +0 -1
  455. quantized_lab-0.24.0/src/quantized/web/assets/workspaceParse.worker-9kedPdZU.js +0 -1
  456. quantized_lab-0.24.0/src/quantized/web/index.html +0 -50
  457. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/LICENSE +0 -0
  458. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/NOTICE +0 -0
  459. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/assets/branding/README.md +0 -0
  460. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/docs/theory/README.md +0 -0
  461. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/__main__.py +0 -0
  462. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/api.py +0 -0
  463. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/app.py +0 -0
  464. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/__init__.py +0 -0
  465. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/_clipfit.py +0 -0
  466. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/_grid_detect.py +0 -0
  467. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/_natural_neighbor.py +0 -0
  468. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/_rsm_grid.py +0 -0
  469. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/_semiconductor_materials.py +0 -0
  470. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/aggregate.py +0 -0
  471. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/backgrounds.py +0 -0
  472. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/baseline.py +0 -0
  473. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/batch_fit.py +0 -0
  474. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/boxcut.py +0 -0
  475. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/constants.py +0 -0
  476. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/crystallography.py +0 -0
  477. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/decimate.py +0 -0
  478. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/diffusion.py +0 -0
  479. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/electrical.py +0 -0
  480. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/electrochemistry.py +0 -0
  481. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/element_data.json +0 -0
  482. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/element_data.py +0 -0
  483. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/errors.py +0 -0
  484. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_decor.py +0 -0
  485. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_hitmap.py +0 -0
  486. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_overrides.py +0 -0
  487. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_page_facets.py +0 -0
  488. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_page_layout.py +0 -0
  489. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_page_panel_labels.py +0 -0
  490. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_page_validate.py +0 -0
  491. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_scale.py +0 -0
  492. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_shapes.py +0 -0
  493. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_styles.py +0 -0
  494. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_ticks.py +0 -0
  495. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/figure_y2.py +0 -0
  496. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_autoguess.py +0 -0
  497. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_bootstrap.py +0 -0
  498. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_bumps.py +0 -0
  499. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_constraints.py +0 -0
  500. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_equation.py +0 -0
  501. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_findxy.py +0 -0
  502. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_models.py +0 -0
  503. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_odr.py +0 -0
  504. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_scan.py +0 -0
  505. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fit_stats.py +0 -0
  506. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/fitting.py +0 -0
  507. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/formula.py +0 -0
  508. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/global_curve_fit.py +0 -0
  509. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/global_fit.py +0 -0
  510. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/interp2d.py +0 -0
  511. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/ion_range.py +0 -0
  512. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/linecut.py +0 -0
  513. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/magnetic.py +0 -0
  514. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/magnetometry.py +0 -0
  515. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/map.py +0 -0
  516. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/mcmc.py +0 -0
  517. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/miller_bravais.py +0 -0
  518. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/optics.py +0 -0
  519. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/pawley.py +0 -0
  520. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peak_batch.py +0 -0
  521. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peak_fit.py +0 -0
  522. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peak_integrate.py +0 -0
  523. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peak_multifit.py +0 -0
  524. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peak_track.py +0 -0
  525. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peaks.py +0 -0
  526. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/peakshapes.py +0 -0
  527. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/plane_spacings.py +0 -0
  528. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/processing.py +0 -0
  529. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/qspace.py +0 -0
  530. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/reductions.py +0 -0
  531. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/reductions_fft.py +0 -0
  532. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/refl_sld_presets.json +0 -0
  533. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/reflectivity.py +0 -0
  534. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/registry.py +0 -0
  535. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/relaxation.py +0 -0
  536. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/report.py +0 -0
  537. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/report_emit.py +0 -0
  538. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/rsm.py +0 -0
  539. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/rsm_analyze.py +0 -0
  540. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/sectorcut.py +0 -0
  541. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/semiconductor.py +0 -0
  542. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/sld.py +0 -0
  543. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/spectral.py +0 -0
  544. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/statplots.py +0 -0
  545. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats.py +0 -0
  546. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_anova2.py +0 -0
  547. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_anova_ext.py +0 -0
  548. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_band.py +0 -0
  549. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_contingency.py +0 -0
  550. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_dist.py +0 -0
  551. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_glm.py +0 -0
  552. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_multivar.py +0 -0
  553. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_outliers.py +0 -0
  554. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_roc.py +0 -0
  555. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_survival.py +0 -0
  556. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_tests.py +0 -0
  557. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/stats_varcomp.py +0 -0
  558. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/substrates.py +0 -0
  559. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/superconductor.py +0 -0
  560. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/surface_fit.py +0 -0
  561. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/surface_models.py +0 -0
  562. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/thermal.py +0 -0
  563. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/thin_film.py +0 -0
  564. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/unit_convert.py +0 -0
  565. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/units.py +0 -0
  566. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/units_data.py +0 -0
  567. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/vacuum.py +0 -0
  568. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/calc/xray.py +0 -0
  569. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/cli.py +0 -0
  570. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/client.py +0 -0
  571. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_project_lock.py +0 -0
  572. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_project_lock_oslock.py +0 -0
  573. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_project_lock_record.py +0 -0
  574. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/desktop_project_lock_write.py +0 -0
  575. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/__init__.py +0 -0
  576. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/_hdf5_layout.py +0 -0
  577. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/_jcamp_asdf.py +0 -0
  578. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/_xrdml_scan.py +0 -0
  579. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/base.py +0 -0
  580. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/bruker_brml.py +0 -0
  581. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/bruker_raw.py +0 -0
  582. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/cif.py +0 -0
  583. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/consolidated.py +0 -0
  584. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/excel.py +0 -0
  585. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/hdf5.py +0 -0
  586. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/jcamp.py +0 -0
  587. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/netcdf.py +0 -0
  588. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/opus.py +0 -0
  589. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin.py +0 -0
  590. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_com.py +0 -0
  591. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/__init__.py +0 -0
  592. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/annotation_marks.py +0 -0
  593. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/container.py +0 -0
  594. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/curve_style_color.py +0 -0
  595. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/fidelity.py +0 -0
  596. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/figure_geometry.py +0 -0
  597. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/figure_layers.py +0 -0
  598. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/figure_text.py +0 -0
  599. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/figures.py +0 -0
  600. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/figures_opju.py +0 -0
  601. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/graph_preview.py +0 -0
  602. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/notes.py +0 -0
  603. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opj.py +0 -0
  604. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opj_curves.py +0 -0
  605. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opj_shapes.py +0 -0
  606. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju.py +0 -0
  607. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_axis_real_form.py +0 -0
  608. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_axis_specimen_form.py +0 -0
  609. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_codec.py +0 -0
  610. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_curves.py +0 -0
  611. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_curves_allcols.py +0 -0
  612. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_figure_curves.py +0 -0
  613. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_figure_text.py +0 -0
  614. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/opju_reports.py +0 -0
  615. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/origin_richtext.py +0 -0
  616. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/templates.py +0 -0
  617. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/tree.py +0 -0
  618. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/tree_opju.py +0 -0
  619. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/windows.py +0 -0
  620. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/windows_opju.py +0 -0
  621. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/writer.py +0 -0
  622. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/origin_project/writer_blocks.py +0 -0
  623. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/refl1d.py +0 -0
  624. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/report_export.py +0 -0
  625. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/rigaku.py +0 -0
  626. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/spc.py +0 -0
  627. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/sqlite_query.py +0 -0
  628. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/technique.py +0 -0
  629. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/xrd_csv.py +0 -0
  630. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/io/xrdml.py +0 -0
  631. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/jobs.py +0 -0
  632. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/plugins/__init__.py +0 -0
  633. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/plugins/contract.py +0 -0
  634. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/plugins/loader.py +0 -0
  635. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/plugins/steps.py +0 -0
  636. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/__init__.py +0 -0
  637. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/_bookcache.py +0 -0
  638. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/_export_common.py +0 -0
  639. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/_uploadstream.py +0 -0
  640. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/calc.py +0 -0
  641. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/diffusion.py +0 -0
  642. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/electrical.py +0 -0
  643. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/electrochemistry.py +0 -0
  644. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/jobs_api.py +0 -0
  645. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/magnetic.py +0 -0
  646. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/optics.py +0 -0
  647. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/samples.py +0 -0
  648. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/semiconductor.py +0 -0
  649. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/superconductor.py +0 -0
  650. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/thermal.py +0 -0
  651. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/thin_film.py +0 -0
  652. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/routes/vacuum.py +0 -0
  653. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/samples/demo_vsm.csv +0 -0
  654. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/security.py +0 -0
  655. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/server_launch.py +0 -0
  656. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/JetBrainsMono-Bold-CUogYd9I.woff2 +0 -0
  657. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/JetBrainsMono-Regular-CA-Os4ii.woff2 +0 -0
  658. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/browserLockProvider-WonU-LkS.js +0 -0
  659. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/distribution-DtRUmVv3.js +0 -0
  660. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/figureDocumentReimport-CcKuldgP.js +0 -0
  661. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/gestureCancel-CIoXlFFV.js +0 -0
  662. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/gridwindow-DITcrjM7.js +0 -0
  663. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/jitter-WCHwU_Li.js +0 -0
  664. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/lockState-Ur5JH-bI.js +0 -0
  665. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/originFigures-BumquS0h.js +0 -0
  666. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/panelLayout-DizjSWgK.js +0 -0
  667. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/shapeHit-CWTHpAPr.js +0 -0
  668. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/tickFormat-DhmvIZc_.js +0 -0
  669. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/uPlot-CnsZ1jie.css +0 -0
  670. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/assets/uPlot.min-CWikSVZk.js +0 -0
  671. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/favicon.png +0 -0
  672. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/src/quantized/web/loading.html +0 -0
  673. {quantized_lab-0.24.0 → quantized_lab-0.26.0}/tools/origin_compare/README.md +0 -0
  674. {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.24.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 # backend deps
188
- uv run pytest # backend tests (+ `-m golden` for MATLAB parity)
189
- uv run ruff check src tests && uv run mypy src
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 # backend deps
147
- uv run pytest # backend tests (+ `-m golden` for MATLAB parity)
148
- uv run ruff check src tests && uv run mypy src
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.24.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)",
@@ -7,5 +7,5 @@ Layered, enforced architecture (see CLAUDE.md):
7
7
 
8
8
  from __future__ import annotations
9
9
 
10
- __version__ = "0.24.0"
10
+ __version__ = "0.26.0"
11
11
  __all__ = ["__version__"]
@@ -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, values, labels=labels, units=list(data.units), metadata=dict(data.metadata)
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
- kw["marker"] = "o"
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)
@@ -33,6 +33,7 @@ from typing import Any
33
33
  import matplotlib
34
34
 
35
35
  matplotlib.use("Agg") # headless
36
+ matplotlib.rcParams["svg.fonttype"] = "none" # editable SVG <text>, not glyph outlines
36
37
 
37
38
  import matplotlib.pyplot as plt # noqa: E402
38
39
  import numpy as np # noqa: E402
@@ -16,6 +16,7 @@ from typing import Any
16
16
  import matplotlib
17
17
 
18
18
  matplotlib.use("Agg") # headless
19
+ matplotlib.rcParams["svg.fonttype"] = "none" # editable SVG <text>, not glyph outlines
19
20
 
20
21
  import matplotlib.pyplot as plt # noqa: E402
21
22
  import numpy as np # noqa: E402
@@ -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
@@ -22,6 +22,7 @@ from typing import Any
22
22
  import matplotlib
23
23
 
24
24
  matplotlib.use("Agg") # headless
25
+ matplotlib.rcParams["svg.fonttype"] = "none" # editable SVG <text>, not glyph outlines
25
26
 
26
27
  import matplotlib.pyplot as plt # noqa: E402
27
28
  import numpy as np # noqa: E402
@@ -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)
@@ -36,6 +36,7 @@ from typing import Any
36
36
  import matplotlib
37
37
 
38
38
  matplotlib.use("Agg") # headless
39
+ matplotlib.rcParams["svg.fonttype"] = "none" # editable SVG <text>, not glyph outlines
39
40
 
40
41
  import matplotlib.pyplot as plt # noqa: E402
41
42
  import numpy as np # noqa: E402
@@ -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
@@ -15,6 +15,7 @@ from typing import Any
15
15
  import matplotlib
16
16
 
17
17
  matplotlib.use("Agg") # headless
18
+ matplotlib.rcParams["svg.fonttype"] = "none" # editable SVG <text>, not glyph outlines
18
19
 
19
20
  import matplotlib.pyplot as plt # noqa: E402
20
21
  import numpy as np # noqa: E402