plexora 0.0.22__tar.gz → 0.0.26__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 (1143) hide show
  1. plexora-0.0.26/MANIFEST.in +25 -0
  2. plexora-0.0.26/PKG-INFO +206 -0
  3. plexora-0.0.26/README.md +144 -0
  4. plexora-0.0.26/plexora/__init__.py +487 -0
  5. plexora-0.0.26/plexora/_lifetime.py +266 -0
  6. plexora-0.0.26/plexora/_resources.py +387 -0
  7. plexora-0.0.26/plexora/_subprocess.py +50 -0
  8. plexora-0.0.26/plexora/agent/__init__.py +28 -0
  9. plexora-0.0.26/plexora/agent/artifacts.py +170 -0
  10. plexora-0.0.26/plexora/agent/attach.py +160 -0
  11. plexora-0.0.26/plexora/agent/audit.py +110 -0
  12. plexora-0.0.26/plexora/agent/cell_explain.py +170 -0
  13. plexora-0.0.26/plexora/agent/cell_gallery.py +268 -0
  14. plexora-0.0.26/plexora/agent/core/__init__.py +20 -0
  15. plexora-0.0.26/plexora/agent/core/cells.py +113 -0
  16. plexora-0.0.26/plexora/agent/core/image.py +55 -0
  17. plexora-0.0.26/plexora/agent/core/jobs.py +97 -0
  18. plexora-0.0.26/plexora/agent/core/operations.py +211 -0
  19. plexora-0.0.26/plexora/agent/core/project.py +479 -0
  20. plexora-0.0.26/plexora/agent/core/scene.py +188 -0
  21. plexora-0.0.26/plexora/agent/core/table.py +96 -0
  22. plexora-0.0.26/plexora/agent/core/viewer.py +440 -0
  23. plexora-0.0.26/plexora/agent/core/visual.py +86 -0
  24. plexora-0.0.26/plexora/agent/errors.py +108 -0
  25. plexora-0.0.26/plexora/agent/evidence/__init__.py +10 -0
  26. plexora-0.0.26/plexora/agent/evidence/calibration.py +389 -0
  27. plexora-0.0.26/plexora/agent/evidence/cell_window.py +178 -0
  28. plexora-0.0.26/plexora/agent/evidence/collage.py +465 -0
  29. plexora-0.0.26/plexora/agent/evidence/crops.py +230 -0
  30. plexora-0.0.26/plexora/agent/evidence/density_plot.py +140 -0
  31. plexora-0.0.26/plexora/agent/evidence/image_qc.py +146 -0
  32. plexora-0.0.26/plexora/agent/evidence/sheet_layout.py +149 -0
  33. plexora-0.0.26/plexora/agent/expression.py +137 -0
  34. plexora-0.0.26/plexora/agent/gate_panel.py +161 -0
  35. plexora-0.0.26/plexora/agent/gate_rule.py +19 -0
  36. plexora-0.0.26/plexora/agent/gate_sampling.py +274 -0
  37. plexora-0.0.26/plexora/agent/jobs.py +330 -0
  38. plexora-0.0.26/plexora/agent/limits.py +49 -0
  39. plexora-0.0.26/plexora/agent/plots.py +184 -0
  40. plexora-0.0.26/plexora/agent/policy.py +336 -0
  41. plexora-0.0.26/plexora/agent/presets.py +122 -0
  42. plexora-0.0.26/plexora/agent/receipts.py +67 -0
  43. plexora-0.0.26/plexora/agent/registry.py +397 -0
  44. plexora-0.0.26/plexora/agent/render.py +753 -0
  45. plexora-0.0.26/plexora/agent/render_spec.py +205 -0
  46. plexora-0.0.26/plexora/agent/report.py +283 -0
  47. plexora-0.0.26/plexora/agent/scene_models.py +134 -0
  48. plexora-0.0.26/plexora/agent/schemas.py +85 -0
  49. plexora-0.0.26/plexora/agent/session.py +232 -0
  50. plexora-0.0.26/plexora/agent/sessions/__init__.py +16 -0
  51. plexora-0.0.26/plexora/agent/sessions/budget.py +79 -0
  52. plexora-0.0.26/plexora/agent/sessions/control.py +64 -0
  53. plexora-0.0.26/plexora/agent/sessions/engine.py +483 -0
  54. plexora-0.0.26/plexora/agent/sessions/events.py +50 -0
  55. plexora-0.0.26/plexora/agent/sessions/memo.py +93 -0
  56. plexora-0.0.26/plexora/agent/sessions/mirror.py +105 -0
  57. plexora-0.0.26/plexora/agent/sessions/store.py +244 -0
  58. plexora-0.0.26/plexora/agent/sessions/tools.py +540 -0
  59. plexora-0.0.26/plexora/agent/tasks.py +106 -0
  60. plexora-0.0.26/plexora/agent/tokens.py +166 -0
  61. plexora-0.0.26/plexora/agent/viewer.py +186 -0
  62. plexora-0.0.26/plexora/ai/__init__.py +10 -0
  63. plexora-0.0.26/plexora/ai/audit.py +64 -0
  64. plexora-0.0.26/plexora/ai/bench.py +601 -0
  65. plexora-0.0.26/plexora/ai/bench_data.py +185 -0
  66. plexora-0.0.26/plexora/ai/bench_qc.py +520 -0
  67. plexora-0.0.26/plexora/ai/knowledge/markers.yaml +356 -0
  68. plexora-0.0.26/plexora/ai/qc_scenes.py +179 -0
  69. plexora-0.0.26/plexora/ai/setup.py +319 -0
  70. plexora-0.0.26/plexora/ai/skill_manifest.yaml +81 -0
  71. plexora-0.0.26/plexora/ai/skills/dataset-triage/SKILL.md +81 -0
  72. plexora-0.0.26/plexora/ai/skills/diagnose-marker/SKILL.md +82 -0
  73. plexora-0.0.26/plexora/ai/skills/gate-dataset/SKILL.md +103 -0
  74. plexora-0.0.26/plexora/ai/skills/gate-image/SKILL.md +288 -0
  75. plexora-0.0.26/plexora/ai/skills/marker-qc/SKILL.md +68 -0
  76. plexora-0.0.26/plexora/ai/skills/qc-image/SKILL.md +159 -0
  77. plexora-0.0.26/plexora/ai/skills/review-gating/SKILL.md +90 -0
  78. plexora-0.0.26/plexora/ai/skills/review-qc/SKILL.md +77 -0
  79. plexora-0.0.26/plexora/ai/skills/visual-gating/SKILL.md +104 -0
  80. plexora-0.0.26/plexora/ai/skills/visual-inspection/SKILL.md +78 -0
  81. plexora-0.0.26/plexora/ai/skills.py +274 -0
  82. plexora-0.0.26/plexora/ai/vocabulary.py +122 -0
  83. plexora-0.0.26/plexora/api/__init__.py +203 -0
  84. plexora-0.0.26/plexora/api/dataset.py +1063 -0
  85. plexora-0.0.26/plexora/api/features.py +153 -0
  86. plexora-0.0.26/plexora/api/http.py +40 -0
  87. plexora-0.0.26/plexora/api/plugin.py +923 -0
  88. plexora-0.0.26/plexora/api/store.py +309 -0
  89. plexora-0.0.26/plexora/cli.py +3152 -0
  90. plexora-0.0.26/plexora/client/dist/vendor_bundle.js +2 -0
  91. plexora-0.0.26/plexora/client/external/openseadragon-bin-2.4.0/canvas-overlay-hd.js +154 -0
  92. plexora-0.0.26/plexora/client/external/thinking-orbs-0.3.2/LICENSE +21 -0
  93. plexora-0.0.26/plexora/client/external/thinking-orbs-0.3.2/README-plexora.txt +21 -0
  94. plexora-0.0.26/plexora/client/external/thinking-orbs-0.3.2/orbs.js +873 -0
  95. plexora-0.0.26/plexora/client/src/css/agentPanel.css +433 -0
  96. plexora-0.0.26/plexora/client/src/css/main.css +8984 -0
  97. plexora-0.0.26/plexora/client/src/css/quickView.css +456 -0
  98. plexora-0.0.26/plexora/client/src/css/settings.css +982 -0
  99. plexora-0.0.26/plexora/client/src/css/viewer.css +3346 -0
  100. plexora-0.0.26/plexora/client/src/js/main.js +1898 -0
  101. plexora-0.0.26/plexora/client/src/js/pluginRegistry.js +153 -0
  102. plexora-0.0.26/plexora/client/src/js/services/agentBridge.js +1850 -0
  103. plexora-0.0.26/plexora/client/src/js/services/appStatus.js +323 -0
  104. plexora-0.0.26/plexora/client/src/js/services/browsePicker.js +555 -0
  105. plexora-0.0.26/plexora/client/src/js/services/connectionModal.js +3170 -0
  106. plexora-0.0.26/plexora/client/src/js/services/dataLayer.js +452 -0
  107. plexora-0.0.26/plexora/client/src/js/services/desktopBridge.js +385 -0
  108. plexora-0.0.26/plexora/client/src/js/services/errors.js +136 -0
  109. plexora-0.0.26/plexora/client/src/js/services/fileLocation.js +721 -0
  110. plexora-0.0.26/plexora/client/src/js/services/numericData.js +173 -0
  111. plexora-0.0.26/plexora/client/src/js/services/orbDriver.js +242 -0
  112. plexora-0.0.26/plexora/client/src/js/services/paidFeature.js +127 -0
  113. plexora-0.0.26/plexora/client/src/js/services/performanceTelemetry.js +266 -0
  114. plexora-0.0.26/plexora/client/src/js/services/pointerDrag.js +145 -0
  115. plexora-0.0.26/plexora/client/src/js/services/resourceRouting.js +269 -0
  116. plexora-0.0.26/plexora/client/src/js/services/resourceStatus.js +577 -0
  117. plexora-0.0.26/plexora/client/src/js/services/sessionExpiry.js +366 -0
  118. plexora-0.0.26/plexora/client/src/js/services/telemetry.js +345 -0
  119. plexora-0.0.26/plexora/client/src/js/services/toast.js +222 -0
  120. plexora-0.0.26/plexora/client/src/js/services/viewTransform.js +360 -0
  121. plexora-0.0.26/plexora/client/src/js/services/viewerScene.js +334 -0
  122. plexora-0.0.26/plexora/client/src/js/views/agentPanel.js +800 -0
  123. plexora-0.0.26/plexora/client/src/js/views/cardList.js +265 -0
  124. plexora-0.0.26/plexora/client/src/js/views/columnClassifier.js +147 -0
  125. plexora-0.0.26/plexora/client/src/js/views/confirmDialog.js +214 -0
  126. plexora-0.0.26/plexora/client/src/js/views/datasetNav.js +308 -0
  127. plexora-0.0.26/plexora/client/src/js/views/datasetStrip.js +368 -0
  128. plexora-0.0.26/plexora/client/src/js/views/geneGroupModal.js +678 -0
  129. plexora-0.0.26/plexora/client/src/js/views/geneList.js +573 -0
  130. plexora-0.0.26/plexora/client/src/js/views/glInit.js +280 -0
  131. plexora-0.0.26/plexora/client/src/js/views/gradientRange.js +542 -0
  132. plexora-0.0.26/plexora/client/src/js/views/helpMenu.js +247 -0
  133. plexora-0.0.26/plexora/client/src/js/views/imageViewer.js +3421 -0
  134. plexora-0.0.26/plexora/client/src/js/views/importHelp.js +577 -0
  135. plexora-0.0.26/plexora/client/src/js/views/importSample.js +1865 -0
  136. plexora-0.0.26/plexora/client/src/js/views/labelGpu.js +465 -0
  137. plexora-0.0.26/plexora/client/src/js/views/labelTile.js +258 -0
  138. plexora-0.0.26/plexora/client/src/js/views/layerChannelPanel.js +400 -0
  139. plexora-0.0.26/plexora/client/src/js/views/layerManager.js +1875 -0
  140. plexora-0.0.26/plexora/client/src/js/views/loadProgress.js +184 -0
  141. plexora-0.0.26/plexora/client/src/js/views/locators.js +76 -0
  142. plexora-0.0.26/plexora/client/src/js/views/miniMap.js +938 -0
  143. plexora-0.0.26/plexora/client/src/js/views/navbarControls.js +89 -0
  144. plexora-0.0.26/plexora/client/src/js/views/openProjectPage.js +949 -0
  145. plexora-0.0.26/plexora/client/src/js/views/pluginHelp.js +134 -0
  146. plexora-0.0.26/plexora/client/src/js/views/popoverMenu.js +205 -0
  147. plexora-0.0.26/plexora/client/src/js/views/projectEdit.js +681 -0
  148. plexora-0.0.26/plexora/client/src/js/views/quickViewLanding.js +362 -0
  149. plexora-0.0.26/plexora/client/src/js/views/rgbImageViewer.js +145 -0
  150. plexora-0.0.26/plexora/client/src/js/views/searchableSelect.js +459 -0
  151. plexora-0.0.26/plexora/client/src/js/views/segmentationWait.js +321 -0
  152. plexora-0.0.26/plexora/client/src/js/views/settingsPage.js +2292 -0
  153. plexora-0.0.26/plexora/client/src/js/views/slider.js +920 -0
  154. plexora-0.0.26/plexora/client/src/js/views/tileColorize.js +369 -0
  155. plexora-0.0.26/plexora/client/src/js/views/tileDecode.js +337 -0
  156. plexora-0.0.26/plexora/client/src/js/views/toolLoader.js +1369 -0
  157. plexora-0.0.26/plexora/client/src/js/views/updateDialog.js +717 -0
  158. plexora-0.0.26/plexora/client/src/js/views/viewTransformTools.js +157 -0
  159. plexora-0.0.26/plexora/client/src/js/views/viewerErrorState.js +206 -0
  160. plexora-0.0.26/plexora/client/src/js/views/viewerManager.js +2398 -0
  161. plexora-0.0.26/plexora/client/src/js/views/viewerSidebar.js +1834 -0
  162. plexora-0.0.26/plexora/client/src/shaders/label.frag.glsl +89 -0
  163. plexora-0.0.26/plexora/client/templates/base.html +518 -0
  164. plexora-0.0.26/plexora/client/templates/index.html +629 -0
  165. plexora-0.0.26/plexora/client/templates/open_project.html +118 -0
  166. plexora-0.0.26/plexora/client/templates/project_edit.html +404 -0
  167. plexora-0.0.26/plexora/client/templates/settings.html +712 -0
  168. plexora-0.0.26/plexora/client/templates/tools/rotate_panel.html +48 -0
  169. plexora-0.0.26/plexora/connect.py +3162 -0
  170. plexora-0.0.26/plexora/datasets.py +1574 -0
  171. plexora-0.0.26/plexora/datasource.py +1718 -0
  172. plexora-0.0.26/plexora/gcloud.py +2475 -0
  173. plexora-0.0.26/plexora/jupyter.py +1234 -0
  174. plexora-0.0.26/plexora/licensing/__init__.py +62 -0
  175. plexora-0.0.26/plexora/licensing/certificate.py +159 -0
  176. plexora-0.0.26/plexora/licensing/cli.py +430 -0
  177. plexora-0.0.26/plexora/licensing/client.py +215 -0
  178. plexora-0.0.26/plexora/licensing/delegation.py +142 -0
  179. plexora-0.0.26/plexora/licensing/entitlements.py +79 -0
  180. plexora-0.0.26/plexora/licensing/environment.py +293 -0
  181. plexora-0.0.26/plexora/licensing/errors.py +70 -0
  182. plexora-0.0.26/plexora/licensing/guards.py +164 -0
  183. plexora-0.0.26/plexora/licensing/keys.py +37 -0
  184. plexora-0.0.26/plexora/licensing/manifest.py +103 -0
  185. plexora-0.0.26/plexora/licensing/models.py +199 -0
  186. plexora-0.0.26/plexora/licensing/state.py +515 -0
  187. plexora-0.0.26/plexora/licensing/store.py +276 -0
  188. plexora-0.0.26/plexora/licensing/tokens.py +155 -0
  189. plexora-0.0.26/plexora/links.py +27 -0
  190. plexora-0.0.26/plexora/mcp/__init__.py +31 -0
  191. plexora-0.0.26/plexora/mcp/auth.py +63 -0
  192. plexora-0.0.26/plexora/mcp/prompts.py +127 -0
  193. plexora-0.0.26/plexora/mcp/resources.py +135 -0
  194. plexora-0.0.26/plexora/mcp/resources_gating.py +62 -0
  195. plexora-0.0.26/plexora/mcp/resources_scene.py +51 -0
  196. plexora-0.0.26/plexora/mcp/resources_visual.py +18 -0
  197. plexora-0.0.26/plexora/mcp/serialize.py +72 -0
  198. plexora-0.0.26/plexora/mcp/server.py +368 -0
  199. plexora-0.0.26/plexora/mcp/smoke.py +52 -0
  200. plexora-0.0.26/plexora/mcp/tools.py +170 -0
  201. plexora-0.0.26/plexora/memory.py +911 -0
  202. plexora-0.0.26/plexora/nodes.py +1169 -0
  203. plexora-0.0.26/plexora/paths.py +876 -0
  204. plexora-0.0.26/plexora/plugins/cell_explorer/__init__.py +105 -0
  205. plexora-0.0.26/plexora/plugins/cell_explorer/static/cellExplorerSidebarController.js +883 -0
  206. plexora-0.0.26/plexora/plugins/figure_builder/__init__.py +172 -0
  207. plexora-0.0.26/plexora/plugins/figure_builder/server/compose.py +829 -0
  208. plexora-0.0.26/plexora/plugins/figure_builder/server/export_jobs.py +167 -0
  209. plexora-0.0.26/plexora/plugins/figure_builder/server/provenance.py +185 -0
  210. plexora-0.0.26/plexora/plugins/figure_builder/server/render.py +297 -0
  211. plexora-0.0.26/plexora/plugins/figure_builder/server/schema.py +1454 -0
  212. plexora-0.0.26/plexora/plugins/figure_builder/static/figureCanvas.js +3526 -0
  213. plexora-0.0.26/plexora/plugins/figure_builder/static/figureCaptureBoxes.js +381 -0
  214. plexora-0.0.26/plexora/plugins/figure_builder/static/figureCaptureDock.js +578 -0
  215. plexora-0.0.26/plexora/plugins/figure_builder/static/figureCaptureTool.js +1165 -0
  216. plexora-0.0.26/plexora/plugins/figure_builder/static/figureContextBar.js +1274 -0
  217. plexora-0.0.26/plexora/plugins/figure_builder/static/figureExportUi.js +181 -0
  218. plexora-0.0.26/plexora/plugins/figure_builder/static/figureImagePanel.js +1561 -0
  219. plexora-0.0.26/plexora/plugins/figure_builder/static/figureLibrary.js +255 -0
  220. plexora-0.0.26/plexora/plugins/figure_builder/static/figurePanelCompositor.js +175 -0
  221. plexora-0.0.26/plexora/plugins/figure_builder/static/figureQuickEdit.js +1004 -0
  222. plexora-0.0.26/plexora/plugins/figure_builder/static/figureSceneSnapshot.js +376 -0
  223. plexora-0.0.26/plexora/plugins/figure_builder/static/figureSchema.js +567 -0
  224. plexora-0.0.26/plexora/plugins/figure_builder/static/figureSidebarController.js +1260 -0
  225. plexora-0.0.26/plexora/plugins/figure_builder/static/figureWorkspace.js +2737 -0
  226. plexora-0.0.26/plexora/plugins/figure_builder/static/figure_builder.css +5990 -0
  227. plexora-0.0.26/plexora/plugins/figure_builder/templates/figure_builder/workspace.html +27 -0
  228. plexora-0.0.26/plexora/plugins/gating/__init__.py +92 -0
  229. plexora-0.0.26/plexora/plugins/gating/capabilities.py +690 -0
  230. plexora-0.0.26/plexora/plugins/gating/capabilities_autogate.py +613 -0
  231. plexora-0.0.26/plexora/plugins/gating/capabilities_session.py +1182 -0
  232. plexora-0.0.26/plexora/plugins/gating/server/anndata_gates.py +411 -0
  233. plexora-0.0.26/plexora/plugins/gating/server/autogate/__init__.py +11 -0
  234. plexora-0.0.26/plexora/plugins/gating/server/autogate/answers.py +211 -0
  235. plexora-0.0.26/plexora/plugins/gating/server/autogate/bivariate.py +272 -0
  236. plexora-0.0.26/plexora/plugins/gating/server/autogate/bulk.py +247 -0
  237. plexora-0.0.26/plexora/plugins/gating/server/autogate/candidates.py +263 -0
  238. plexora-0.0.26/plexora/plugins/gating/server/autogate/cells.py +154 -0
  239. plexora-0.0.26/plexora/plugins/gating/server/autogate/context.py +313 -0
  240. plexora-0.0.26/plexora/plugins/gating/server/autogate/engine.py +837 -0
  241. plexora-0.0.26/plexora/plugins/gating/server/autogate/events.py +37 -0
  242. plexora-0.0.26/plexora/plugins/gating/server/autogate/kernels.py +176 -0
  243. plexora-0.0.26/plexora/plugins/gating/server/autogate/lattice.py +188 -0
  244. plexora-0.0.26/plexora/plugins/gating/server/autogate/memo.py +42 -0
  245. plexora-0.0.26/plexora/plugins/gating/server/autogate/mirror_script.py +217 -0
  246. plexora-0.0.26/plexora/plugins/gating/server/autogate/packets.py +970 -0
  247. plexora-0.0.26/plexora/plugins/gating/server/autogate/pixel_estimate.py +232 -0
  248. plexora-0.0.26/plexora/plugins/gating/server/autogate/profile.py +675 -0
  249. plexora-0.0.26/plexora/plugins/gating/server/autogate/provenance.py +15 -0
  250. plexora-0.0.26/plexora/plugins/gating/server/autogate/qc_cells.py +221 -0
  251. plexora-0.0.26/plexora/plugins/gating/server/autogate/reference.py +162 -0
  252. plexora-0.0.26/plexora/plugins/gating/server/autogate/regression.py +152 -0
  253. plexora-0.0.26/plexora/plugins/gating/server/autogate/report.py +513 -0
  254. plexora-0.0.26/plexora/plugins/gating/server/autogate/sampler.py +350 -0
  255. plexora-0.0.26/plexora/plugins/gating/server/autogate/schemas.py +239 -0
  256. plexora-0.0.26/plexora/plugins/gating/server/autogate/sheet.py +336 -0
  257. plexora-0.0.26/plexora/plugins/gating/server/autogate/tableops.py +186 -0
  258. plexora-0.0.26/plexora/plugins/gating/server/autogate/transfer.py +260 -0
  259. plexora-0.0.26/plexora/plugins/gating/server/autogate/transitions.py +702 -0
  260. plexora-0.0.26/plexora/plugins/gating/server/autogate/views.py +183 -0
  261. plexora-0.0.26/plexora/plugins/gating/server/mixture.py +105 -0
  262. plexora-0.0.26/plexora/plugins/gating/server/model.py +772 -0
  263. plexora-0.0.26/plexora/plugins/gating/server/provenance.py +248 -0
  264. plexora-0.0.26/plexora/plugins/gating/server/routes.py +336 -0
  265. plexora-0.0.26/plexora/plugins/gating/server/tableops.py +132 -0
  266. plexora-0.0.26/plexora/plugins/gating/static/csvGatingList.js +966 -0
  267. plexora-0.0.26/plexora/plugins/gating/static/gating.css +366 -0
  268. plexora-0.0.26/plexora/plugins/gating/static/gatingAgentBridge.js +199 -0
  269. plexora-0.0.26/plexora/plugins/gating/static/gatingApi.js +270 -0
  270. plexora-0.0.26/plexora/plugins/gating/static/gatingSidebarController.js +1132 -0
  271. plexora-0.0.26/plexora/plugins/gating/templates/gating/panel.html +99 -0
  272. plexora-0.0.26/plexora/plugins/qc/__init__.py +67 -0
  273. plexora-0.0.26/plexora/plugins/qc/capabilities.py +709 -0
  274. plexora-0.0.26/plexora/plugins/qc/capabilities_session.py +460 -0
  275. plexora-0.0.26/plexora/plugins/qc/mcp.py +87 -0
  276. plexora-0.0.26/plexora/plugins/qc/server/__init__.py +1 -0
  277. plexora-0.0.26/plexora/plugins/qc/server/answers.py +177 -0
  278. plexora-0.0.26/plexora/plugins/qc/server/bulk.py +177 -0
  279. plexora-0.0.26/plexora/plugins/qc/server/candidates.py +237 -0
  280. plexora-0.0.26/plexora/plugins/qc/server/cells/__init__.py +1 -0
  281. plexora-0.0.26/plexora/plugins/qc/server/cells/bulk.py +98 -0
  282. plexora-0.0.26/plexora/plugins/qc/server/cells/calls.py +208 -0
  283. plexora-0.0.26/plexora/plugins/qc/server/cells/modules.py +334 -0
  284. plexora-0.0.26/plexora/plugins/qc/server/cells/packets.py +190 -0
  285. plexora-0.0.26/plexora/plugins/qc/server/cycles.py +129 -0
  286. plexora-0.0.26/plexora/plugins/qc/server/detectors/__init__.py +65 -0
  287. plexora-0.0.26/plexora/plugins/qc/server/detectors/base.py +126 -0
  288. plexora-0.0.26/plexora/plugins/qc/server/detectors/classical.py +464 -0
  289. plexora-0.0.26/plexora/plugins/qc/server/engine.py +595 -0
  290. plexora-0.0.26/plexora/plugins/qc/server/events.py +36 -0
  291. plexora-0.0.26/plexora/plugins/qc/server/export.py +99 -0
  292. plexora-0.0.26/plexora/plugins/qc/server/finalize.py +106 -0
  293. plexora-0.0.26/plexora/plugins/qc/server/mirror_script.py +146 -0
  294. plexora-0.0.26/plexora/plugins/qc/server/packets.py +462 -0
  295. plexora-0.0.26/plexora/plugins/qc/server/polygons.py +213 -0
  296. plexora-0.0.26/plexora/plugins/qc/server/propagate.py +179 -0
  297. plexora-0.0.26/plexora/plugins/qc/server/report.py +499 -0
  298. plexora-0.0.26/plexora/plugins/qc/server/results.py +365 -0
  299. plexora-0.0.26/plexora/plugins/qc/server/roi_link.py +362 -0
  300. plexora-0.0.26/plexora/plugins/qc/server/routes.py +213 -0
  301. plexora-0.0.26/plexora/plugins/qc/server/scan.py +802 -0
  302. plexora-0.0.26/plexora/plugins/qc/server/schemas.py +372 -0
  303. plexora-0.0.26/plexora/plugins/qc/server/sheets.py +443 -0
  304. plexora-0.0.26/plexora/plugins/qc/server/source_write.py +224 -0
  305. plexora-0.0.26/plexora/plugins/qc/server/strictness.py +116 -0
  306. plexora-0.0.26/plexora/plugins/qc/server/transitions.py +347 -0
  307. plexora-0.0.26/plexora/plugins/qc/static/qc.css +181 -0
  308. plexora-0.0.26/plexora/plugins/qc/static/qcAgentBridge.js +57 -0
  309. plexora-0.0.26/plexora/plugins/qc/static/qcApi.js +75 -0
  310. plexora-0.0.26/plexora/plugins/qc/static/qcSidebarController.js +298 -0
  311. plexora-0.0.26/plexora/plugins/qc/templates/qc/panel.html +39 -0
  312. plexora-0.0.26/plexora/plugins/roi/__init__.py +113 -0
  313. plexora-0.0.26/plexora/plugins/roi/capabilities.py +208 -0
  314. plexora-0.0.26/plexora/plugins/roi/server/service.py +229 -0
  315. plexora-0.0.26/plexora/plugins/roi/static/roiAgentBridge.js +63 -0
  316. plexora-0.0.26/plexora/plugins/roi/static/roiApi.js +199 -0
  317. plexora-0.0.26/plexora/plugins/roi/static/roiSidebarController.js +1164 -0
  318. plexora-0.0.26/plexora/plugins/roi/static/roiState.js +528 -0
  319. plexora-0.0.26/plexora/plugins/roi/static/roiTools.js +1050 -0
  320. plexora-0.0.26/plexora/plugins/transcripts/__init__.py +99 -0
  321. plexora-0.0.26/plexora/plugins/transcripts/server/routes.py +488 -0
  322. plexora-0.0.26/plexora/plugins/transcripts/static/transcriptLayer.js +1496 -0
  323. plexora-0.0.26/plexora/plugins/transcripts/static/transcriptPoints.js +917 -0
  324. plexora-0.0.26/plexora/plugins/transcripts/static/transcripts.css +318 -0
  325. plexora-0.0.26/plexora/plugins/transcripts/static/transcriptsSidebarController.js +963 -0
  326. plexora-0.0.26/plexora/plugins/transcripts/templates/transcripts/panel.html +236 -0
  327. plexora-0.0.26/plexora/plugins/visium_hd/__init__.py +59 -0
  328. plexora-0.0.26/plexora/plugins/visium_hd/server/routes.py +354 -0
  329. plexora-0.0.26/plexora/plugins/visium_hd/server/spots.py +194 -0
  330. plexora-0.0.26/plexora/plugins/visium_hd/static/binLayer.js +859 -0
  331. plexora-0.0.26/plexora/plugins/visium_hd/static/spotLayer.js +505 -0
  332. plexora-0.0.26/plexora/plugins/visium_hd/static/visiumHdApi.js +132 -0
  333. plexora-0.0.26/plexora/plugins/visium_hd/static/visiumHdSidebarController.js +829 -0
  334. plexora-0.0.26/plexora/plugins/visium_hd/static/visium_hd.css +271 -0
  335. plexora-0.0.26/plexora/plugins/visium_hd/templates/visium_hd/panel.html +157 -0
  336. plexora-0.0.26/plexora/server/core_tools.py +48 -0
  337. plexora-0.0.26/plexora/server/models/adapters/__init__.py +179 -0
  338. plexora-0.0.26/plexora/server/models/adapters/anndata_adapter.py +1240 -0
  339. plexora-0.0.26/plexora/server/models/adapters/base.py +182 -0
  340. plexora-0.0.26/plexora/server/models/adapters/csv_adapter.py +148 -0
  341. plexora-0.0.26/plexora/server/models/adapters/inspection.py +330 -0
  342. plexora-0.0.26/plexora/server/models/adapters/spatialdata_adapter.py +367 -0
  343. plexora-0.0.26/plexora/server/models/bin_tiles.py +1296 -0
  344. plexora-0.0.26/plexora/server/models/centroid_tiles.py +406 -0
  345. plexora-0.0.26/plexora/server/models/data_migration.py +311 -0
  346. plexora-0.0.26/plexora/server/models/data_model.py +4012 -0
  347. plexora-0.0.26/plexora/server/models/database_model.py +200 -0
  348. plexora-0.0.26/plexora/server/models/import_proposal.py +2608 -0
  349. plexora-0.0.26/plexora/server/models/import_sample.py +708 -0
  350. plexora-0.0.26/plexora/server/models/layer_jobs.py +481 -0
  351. plexora-0.0.26/plexora/server/models/layer_sources.py +815 -0
  352. plexora-0.0.26/plexora/server/models/manifest.py +392 -0
  353. plexora-0.0.26/plexora/server/models/project.py +2375 -0
  354. plexora-0.0.26/plexora/server/models/recipes.py +1150 -0
  355. plexora-0.0.26/plexora/server/models/remote_sessions.py +1326 -0
  356. plexora-0.0.26/plexora/server/models/remote_sources.py +482 -0
  357. plexora-0.0.26/plexora/server/models/server_records.py +138 -0
  358. plexora-0.0.26/plexora/server/models/transcript_tiles.py +1265 -0
  359. plexora-0.0.26/plexora/server/models/viewer_sessions.py +407 -0
  360. plexora-0.0.26/plexora/server/node/api.py +1623 -0
  361. plexora-0.0.26/plexora/server/node/app.py +658 -0
  362. plexora-0.0.26/plexora/server/node/resources.py +863 -0
  363. plexora-0.0.26/plexora/server/plugins.py +290 -0
  364. plexora-0.0.26/plexora/server/providers/__init__.py +238 -0
  365. plexora-0.0.26/plexora/server/providers/base.py +431 -0
  366. plexora-0.0.26/plexora/server/providers/http.py +475 -0
  367. plexora-0.0.26/plexora/server/providers/local.py +614 -0
  368. plexora-0.0.26/plexora/server/providers/node.py +601 -0
  369. plexora-0.0.26/plexora/server/providers/operations.py +178 -0
  370. plexora-0.0.26/plexora/server/providers/remote.py +198 -0
  371. plexora-0.0.26/plexora/server/routes/agent_routes.py +210 -0
  372. plexora-0.0.26/plexora/server/routes/browse_routes.py +371 -0
  373. plexora-0.0.26/plexora/server/routes/data_routes.py +1172 -0
  374. plexora-0.0.26/plexora/server/routes/desktop_routes.py +178 -0
  375. plexora-0.0.26/plexora/server/routes/gcloud_routes.py +368 -0
  376. plexora-0.0.26/plexora/server/routes/import_routes.py +1043 -0
  377. plexora-0.0.26/plexora/server/routes/license_routes.py +174 -0
  378. plexora-0.0.26/plexora/server/routes/page_routes.py +415 -0
  379. plexora-0.0.26/plexora/server/routes/project_routes.py +906 -0
  380. plexora-0.0.26/plexora/server/routes/settings_routes.py +1385 -0
  381. plexora-0.0.26/plexora/server/routes/system_routes.py +56 -0
  382. plexora-0.0.26/plexora/server/routes/telemetry_routes.py +189 -0
  383. plexora-0.0.26/plexora/server/routes/tool_routes.py +544 -0
  384. plexora-0.0.26/plexora/server/routes/update_routes.py +247 -0
  385. plexora-0.0.26/plexora/server/utils/boundary_mask.py +614 -0
  386. plexora-0.0.26/plexora/server/utils/brightfield.py +1260 -0
  387. plexora-0.0.26/plexora/server/utils/dicom_wsi.py +1309 -0
  388. plexora-0.0.26/plexora/server/utils/fast_png.py +114 -0
  389. plexora-0.0.26/plexora/server/utils/gene_groups.py +126 -0
  390. plexora-0.0.26/plexora/server/utils/jit.py +137 -0
  391. plexora-0.0.26/plexora/server/utils/label_kernels.py +132 -0
  392. plexora-0.0.26/plexora/server/utils/label_overlay.py +240 -0
  393. plexora-0.0.26/plexora/server/utils/layer_composite.py +343 -0
  394. plexora-0.0.26/plexora/server/utils/native_dialog.py +374 -0
  395. plexora-0.0.26/plexora/server/utils/ome_zarr.py +1283 -0
  396. plexora-0.0.26/plexora/server/utils/pixel_scale.py +128 -0
  397. plexora-0.0.26/plexora/server/utils/remote_store.py +1646 -0
  398. plexora-0.0.26/plexora/server/utils/segmentation_pyramid.py +1039 -0
  399. plexora-0.0.26/plexora/server/utils/source_image.py +536 -0
  400. plexora-0.0.26/plexora/server/utils/tenx_matrix.py +755 -0
  401. plexora-0.0.26/plexora/server/utils/xenium_focus.py +305 -0
  402. plexora-0.0.26/plexora/server_cli.py +98 -0
  403. plexora-0.0.26/plexora/telemetry/__init__.py +40 -0
  404. plexora-0.0.26/plexora/telemetry/agent_hooks.py +118 -0
  405. plexora-0.0.26/plexora/telemetry/batch.py +159 -0
  406. plexora-0.0.26/plexora/telemetry/cli.py +115 -0
  407. plexora-0.0.26/plexora/telemetry/client.py +636 -0
  408. plexora-0.0.26/plexora/telemetry/config.py +199 -0
  409. plexora-0.0.26/plexora/telemetry/dataset.py +184 -0
  410. plexora-0.0.26/plexora/telemetry/environment.py +182 -0
  411. plexora-0.0.26/plexora/telemetry/flask_hooks.py +211 -0
  412. plexora-0.0.26/plexora/telemetry/identity.py +73 -0
  413. plexora-0.0.26/plexora/telemetry/node_hooks.py +248 -0
  414. plexora-0.0.26/plexora/telemetry/performance.py +97 -0
  415. plexora-0.0.26/plexora/telemetry/queue.py +457 -0
  416. plexora-0.0.26/plexora/telemetry/redact.py +154 -0
  417. plexora-0.0.26/plexora/telemetry/report.py +117 -0
  418. plexora-0.0.26/plexora/telemetry/sample.py +81 -0
  419. plexora-0.0.26/plexora/telemetry/schema.py +763 -0
  420. plexora-0.0.26/plexora/telemetry/uploader.py +404 -0
  421. plexora-0.0.26/plexora/updates.py +571 -0
  422. plexora-0.0.26/plexora.egg-info/PKG-INFO +206 -0
  423. plexora-0.0.26/plexora.egg-info/SOURCES.txt +929 -0
  424. plexora-0.0.26/plexora.egg-info/entry_points.txt +13 -0
  425. plexora-0.0.26/plexora.egg-info/requires.txt +58 -0
  426. plexora-0.0.26/pyproject.toml +227 -0
  427. plexora-0.0.26/tests/test_agent_architecture.py +107 -0
  428. plexora-0.0.26/tests/test_agent_artifacts.py +37 -0
  429. plexora-0.0.26/tests/test_agent_cell_gallery.py +135 -0
  430. plexora-0.0.26/tests/test_agent_client_probes.py +112 -0
  431. plexora-0.0.26/tests/test_agent_explain_cell.py +91 -0
  432. plexora-0.0.26/tests/test_agent_future_modality.py +69 -0
  433. plexora-0.0.26/tests/test_agent_gate_panel.py +56 -0
  434. plexora-0.0.26/tests/test_agent_gate_sampling.py +72 -0
  435. plexora-0.0.26/tests/test_agent_gating.py +84 -0
  436. plexora-0.0.26/tests/test_agent_gating_dataset.py +78 -0
  437. plexora-0.0.26/tests/test_agent_jobs.py +172 -0
  438. plexora-0.0.26/tests/test_agent_policy_scopes.py +55 -0
  439. plexora-0.0.26/tests/test_agent_registry.py +82 -0
  440. plexora-0.0.26/tests/test_agent_render.py +132 -0
  441. plexora-0.0.26/tests/test_agent_render_formats.py +154 -0
  442. plexora-0.0.26/tests/test_agent_render_layers.py +122 -0
  443. plexora-0.0.26/tests/test_agent_render_node.py +89 -0
  444. plexora-0.0.26/tests/test_agent_report.py +113 -0
  445. plexora-0.0.26/tests/test_agent_roi.py +51 -0
  446. plexora-0.0.26/tests/test_agent_routes_guard.py +29 -0
  447. plexora-0.0.26/tests/test_agent_scene.py +83 -0
  448. plexora-0.0.26/tests/test_agent_scope.py +76 -0
  449. plexora-0.0.26/tests/test_agent_session.py +85 -0
  450. plexora-0.0.26/tests/test_agent_undo.py +130 -0
  451. plexora-0.0.26/tests/test_agent_vertical_slice.py +103 -0
  452. plexora-0.0.26/tests/test_agent_viewer_api.py +301 -0
  453. plexora-0.0.26/tests/test_agent_viewer_routes.py +98 -0
  454. plexora-0.0.26/tests/test_ai_bench.py +40 -0
  455. plexora-0.0.26/tests/test_ai_setup.py +84 -0
  456. plexora-0.0.26/tests/test_ai_skills.py +69 -0
  457. plexora-0.0.26/tests/test_ai_token.py +74 -0
  458. plexora-0.0.26/tests/test_app_shell.py +262 -0
  459. plexora-0.0.26/tests/test_autogate_units.py +1431 -0
  460. plexora-0.0.26/tests/test_bin_tiles.py +628 -0
  461. plexora-0.0.26/tests/test_boundary_mask.py +434 -0
  462. plexora-0.0.26/tests/test_cell_mode_control.py +436 -0
  463. plexora-0.0.26/tests/test_channel_auto_revert.py +147 -0
  464. plexora-0.0.26/tests/test_cli.py +1531 -0
  465. plexora-0.0.26/tests/test_connect.py +2351 -0
  466. plexora-0.0.26/tests/test_connection_modal.py +675 -0
  467. plexora-0.0.26/tests/test_core_tools.py +182 -0
  468. plexora-0.0.26/tests/test_dataset_nav.py +80 -0
  469. plexora-0.0.26/tests/test_dataset_strip.py +81 -0
  470. plexora-0.0.26/tests/test_desktop_bridge.py +67 -0
  471. plexora-0.0.26/tests/test_desktop_cli.py +292 -0
  472. plexora-0.0.26/tests/test_desktop_process.py +122 -0
  473. plexora-0.0.26/tests/test_desktop_routes.py +132 -0
  474. plexora-0.0.26/tests/test_docs_coverage.py +45 -0
  475. plexora-0.0.26/tests/test_docs_docstrings.py +57 -0
  476. plexora-0.0.26/tests/test_docs_envvars.py +30 -0
  477. plexora-0.0.26/tests/test_docs_examples.py +133 -0
  478. plexora-0.0.26/tests/test_docs_freshness.py +23 -0
  479. plexora-0.0.26/tests/test_docs_links.py +57 -0
  480. plexora-0.0.26/tests/test_docs_signatures.py +38 -0
  481. plexora-0.0.26/tests/test_gating_limits.py +399 -0
  482. plexora-0.0.26/tests/test_gating_session.py +1227 -0
  483. plexora-0.0.26/tests/test_gcloud.py +1634 -0
  484. plexora-0.0.26/tests/test_import_dialog.py +220 -0
  485. plexora-0.0.26/tests/test_import_entry_points.py +206 -0
  486. plexora-0.0.26/tests/test_import_routes_json_errors.py +47 -0
  487. plexora-0.0.26/tests/test_label_gpu.py +186 -0
  488. plexora-0.0.26/tests/test_label_gpu_parity.py +68 -0
  489. plexora-0.0.26/tests/test_label_overlay.py +88 -0
  490. plexora-0.0.26/tests/test_layer_manager.py +41 -0
  491. plexora-0.0.26/tests/test_layer_sources.py +512 -0
  492. plexora-0.0.26/tests/test_license_js.py +58 -0
  493. plexora-0.0.26/tests/test_license_routes.py +142 -0
  494. plexora-0.0.26/tests/test_licensing_certificate.py +145 -0
  495. plexora-0.0.26/tests/test_licensing_cli.py +148 -0
  496. plexora-0.0.26/tests/test_licensing_client.py +207 -0
  497. plexora-0.0.26/tests/test_licensing_delegation.py +168 -0
  498. plexora-0.0.26/tests/test_licensing_enforcement.py +314 -0
  499. plexora-0.0.26/tests/test_licensing_entitlements.py +93 -0
  500. plexora-0.0.26/tests/test_licensing_hardening.py +339 -0
  501. plexora-0.0.26/tests/test_licensing_hpc.py +209 -0
  502. plexora-0.0.26/tests/test_licensing_plugins.py +154 -0
  503. plexora-0.0.26/tests/test_licensing_state.py +475 -0
  504. plexora-0.0.26/tests/test_licensing_vectors.py +61 -0
  505. plexora-0.0.26/tests/test_lifetime.py +114 -0
  506. plexora-0.0.26/tests/test_load_progress.py +108 -0
  507. plexora-0.0.26/tests/test_mcp_gating.py +111 -0
  508. plexora-0.0.26/tests/test_mcp_http.py +196 -0
  509. plexora-0.0.26/tests/test_mcp_qc.py +41 -0
  510. plexora-0.0.26/tests/test_mcp_server.py +118 -0
  511. plexora-0.0.26/tests/test_mcp_stdio.py +46 -0
  512. plexora-0.0.26/tests/test_mini_map.py +367 -0
  513. plexora-0.0.26/tests/test_node_image.py +812 -0
  514. plexora-0.0.26/tests/test_open_project.py +209 -0
  515. plexora-0.0.26/tests/test_paths.py +496 -0
  516. plexora-0.0.26/tests/test_pixel_scale.py +41 -0
  517. plexora-0.0.26/tests/test_plugin_boundary.py +558 -0
  518. plexora-0.0.26/tests/test_plugins.py +614 -0
  519. plexora-0.0.26/tests/test_popover_menu.py +58 -0
  520. plexora-0.0.26/tests/test_qc_bench.py +38 -0
  521. plexora-0.0.26/tests/test_qc_detectors.py +126 -0
  522. plexora-0.0.26/tests/test_qc_mirror.py +92 -0
  523. plexora-0.0.26/tests/test_qc_results.py +236 -0
  524. plexora-0.0.26/tests/test_qc_scan.py +124 -0
  525. plexora-0.0.26/tests/test_qc_session.py +331 -0
  526. plexora-0.0.26/tests/test_qc_units.py +266 -0
  527. plexora-0.0.26/tests/test_release_script.py +270 -0
  528. plexora-0.0.26/tests/test_remote_chunk_cache.py +245 -0
  529. plexora-0.0.26/tests/test_remote_connect.py +2089 -0
  530. plexora-0.0.26/tests/test_remote_discovery.py +146 -0
  531. plexora-0.0.26/tests/test_remote_image_provider.py +187 -0
  532. plexora-0.0.26/tests/test_remote_image_status.py +104 -0
  533. plexora-0.0.26/tests/test_remote_jobs.py +144 -0
  534. plexora-0.0.26/tests/test_remote_labels.py +171 -0
  535. plexora-0.0.26/tests/test_remote_locator.py +188 -0
  536. plexora-0.0.26/tests/test_remote_tables.py +164 -0
  537. plexora-0.0.26/tests/test_resource_status_notice.py +94 -0
  538. plexora-0.0.26/tests/test_segmentation_wait.py +159 -0
  539. plexora-0.0.26/tests/test_server_records.py +36 -0
  540. plexora-0.0.26/tests/test_session_expiry.py +177 -0
  541. plexora-0.0.26/tests/test_settings_webdata_page.py +123 -0
  542. plexora-0.0.26/tests/test_slider.py +295 -0
  543. plexora-0.0.26/tests/test_slider_css.py +235 -0
  544. plexora-0.0.26/tests/test_source_image_core.py +78 -0
  545. plexora-0.0.26/tests/test_subprocess_flags.py +58 -0
  546. plexora-0.0.26/tests/test_telemetry_agent.py +118 -0
  547. plexora-0.0.26/tests/test_telemetry_cli.py +85 -0
  548. plexora-0.0.26/tests/test_telemetry_client.py +172 -0
  549. plexora-0.0.26/tests/test_telemetry_config.py +159 -0
  550. plexora-0.0.26/tests/test_telemetry_dataset.py +116 -0
  551. plexora-0.0.26/tests/test_telemetry_hooks.py +176 -0
  552. plexora-0.0.26/tests/test_telemetry_hooks_cost.py +59 -0
  553. plexora-0.0.26/tests/test_telemetry_js.py +87 -0
  554. plexora-0.0.26/tests/test_telemetry_node.py +132 -0
  555. plexora-0.0.26/tests/test_telemetry_privacy.py +136 -0
  556. plexora-0.0.26/tests/test_telemetry_queue.py +192 -0
  557. plexora-0.0.26/tests/test_telemetry_routes.py +147 -0
  558. plexora-0.0.26/tests/test_telemetry_schema.py +117 -0
  559. plexora-0.0.26/tests/test_telemetry_tiles.py +49 -0
  560. plexora-0.0.26/tests/test_telemetry_uploader.py +236 -0
  561. plexora-0.0.26/tests/test_thumbnail_rgb.py +68 -0
  562. plexora-0.0.26/tests/test_tile_colorize.py +74 -0
  563. plexora-0.0.26/tests/test_toast.py +74 -0
  564. plexora-0.0.26/tests/test_tool_cards.py +226 -0
  565. plexora-0.0.26/tests/test_updates.py +497 -0
  566. plexora-0.0.26/tests/test_view_menu.py +146 -0
  567. plexora-0.0.26/tests/test_view_transform.py +184 -0
  568. plexora-0.0.26/tests/test_view_transform_routes.py +88 -0
  569. plexora-0.0.26/tests/test_viewer_sessions.py +99 -0
  570. plexora-0.0.26/tests/test_visium_hd_import.py +302 -0
  571. plexora-0.0.26/tests/test_visium_import.py +332 -0
  572. plexora-0.0.22/MANIFEST.in +0 -16
  573. plexora-0.0.22/PKG-INFO +0 -550
  574. plexora-0.0.22/README.md +0 -499
  575. plexora-0.0.22/plexora/__init__.py +0 -372
  576. plexora-0.0.22/plexora/_resources.py +0 -382
  577. plexora-0.0.22/plexora/api/__init__.py +0 -124
  578. plexora-0.0.22/plexora/api/dataset.py +0 -654
  579. plexora-0.0.22/plexora/api/http.py +0 -19
  580. plexora-0.0.22/plexora/api/plugin.py +0 -743
  581. plexora-0.0.22/plexora/api/store.py +0 -221
  582. plexora-0.0.22/plexora/cli.py +0 -2314
  583. plexora-0.0.22/plexora/client/dist/vendor_bundle.js +0 -2
  584. plexora-0.0.22/plexora/client/external/openseadragon-bin-2.4.0/canvas-overlay-hd.js +0 -140
  585. plexora-0.0.22/plexora/client/src/css/main.css +0 -7172
  586. plexora-0.0.22/plexora/client/src/css/quickView.css +0 -445
  587. plexora-0.0.22/plexora/client/src/css/settings.css +0 -876
  588. plexora-0.0.22/plexora/client/src/css/viewer.css +0 -3041
  589. plexora-0.0.22/plexora/client/src/js/main.js +0 -1728
  590. plexora-0.0.22/plexora/client/src/js/pluginRegistry.js +0 -152
  591. plexora-0.0.22/plexora/client/src/js/services/appStatus.js +0 -315
  592. plexora-0.0.22/plexora/client/src/js/services/browsePicker.js +0 -525
  593. plexora-0.0.22/plexora/client/src/js/services/connectionModal.js +0 -2874
  594. plexora-0.0.22/plexora/client/src/js/services/dataLayer.js +0 -429
  595. plexora-0.0.22/plexora/client/src/js/services/fileLocation.js +0 -704
  596. plexora-0.0.22/plexora/client/src/js/services/numericData.js +0 -128
  597. plexora-0.0.22/plexora/client/src/js/services/resourceRouting.js +0 -249
  598. plexora-0.0.22/plexora/client/src/js/services/resourceStatus.js +0 -527
  599. plexora-0.0.22/plexora/client/src/js/services/sessionExpiry.js +0 -338
  600. plexora-0.0.22/plexora/client/src/js/services/toast.js +0 -175
  601. plexora-0.0.22/plexora/client/src/js/views/cardList.js +0 -258
  602. plexora-0.0.22/plexora/client/src/js/views/columnClassifier.js +0 -146
  603. plexora-0.0.22/plexora/client/src/js/views/confirmDialog.js +0 -197
  604. plexora-0.0.22/plexora/client/src/js/views/datasetNav.js +0 -284
  605. plexora-0.0.22/plexora/client/src/js/views/glInit.js +0 -267
  606. plexora-0.0.22/plexora/client/src/js/views/gradientRange.js +0 -523
  607. plexora-0.0.22/plexora/client/src/js/views/imageViewer.js +0 -3128
  608. plexora-0.0.22/plexora/client/src/js/views/importHelp.js +0 -576
  609. plexora-0.0.22/plexora/client/src/js/views/importSample.js +0 -1581
  610. plexora-0.0.22/plexora/client/src/js/views/labelTile.js +0 -154
  611. plexora-0.0.22/plexora/client/src/js/views/layerChannelPanel.js +0 -396
  612. plexora-0.0.22/plexora/client/src/js/views/layerManager.js +0 -1862
  613. plexora-0.0.22/plexora/client/src/js/views/miniMap.js +0 -843
  614. plexora-0.0.22/plexora/client/src/js/views/navbarControls.js +0 -161
  615. plexora-0.0.22/plexora/client/src/js/views/openProjectPage.js +0 -887
  616. plexora-0.0.22/plexora/client/src/js/views/pluginHelp.js +0 -116
  617. plexora-0.0.22/plexora/client/src/js/views/popoverMenu.js +0 -129
  618. plexora-0.0.22/plexora/client/src/js/views/projectEdit.js +0 -607
  619. plexora-0.0.22/plexora/client/src/js/views/quickViewLanding.js +0 -348
  620. plexora-0.0.22/plexora/client/src/js/views/rgbImageViewer.js +0 -121
  621. plexora-0.0.22/plexora/client/src/js/views/searchableSelect.js +0 -419
  622. plexora-0.0.22/plexora/client/src/js/views/segmentationWait.js +0 -317
  623. plexora-0.0.22/plexora/client/src/js/views/settingsPage.js +0 -1491
  624. plexora-0.0.22/plexora/client/src/js/views/slider.js +0 -831
  625. plexora-0.0.22/plexora/client/src/js/views/tileColorize.js +0 -321
  626. plexora-0.0.22/plexora/client/src/js/views/tileDecode.js +0 -317
  627. plexora-0.0.22/plexora/client/src/js/views/toolLoader.js +0 -1286
  628. plexora-0.0.22/plexora/client/src/js/views/viewerErrorState.js +0 -139
  629. plexora-0.0.22/plexora/client/src/js/views/viewerManager.js +0 -2366
  630. plexora-0.0.22/plexora/client/src/js/views/viewerSidebar.js +0 -1731
  631. plexora-0.0.22/plexora/client/templates/base.html +0 -454
  632. plexora-0.0.22/plexora/client/templates/index.html +0 -598
  633. plexora-0.0.22/plexora/client/templates/open_project.html +0 -118
  634. plexora-0.0.22/plexora/client/templates/project_edit.html +0 -361
  635. plexora-0.0.22/plexora/client/templates/settings.html +0 -365
  636. plexora-0.0.22/plexora/connect.py +0 -3126
  637. plexora-0.0.22/plexora/datasets.py +0 -1192
  638. plexora-0.0.22/plexora/datasource.py +0 -1441
  639. plexora-0.0.22/plexora/gcloud.py +0 -2158
  640. plexora-0.0.22/plexora/jupyter.py +0 -950
  641. plexora-0.0.22/plexora/memory.py +0 -785
  642. plexora-0.0.22/plexora/nodes.py +0 -906
  643. plexora-0.0.22/plexora/paths.py +0 -822
  644. plexora-0.0.22/plexora/plugins/cell_explorer/__init__.py +0 -105
  645. plexora-0.0.22/plexora/plugins/cell_explorer/static/cellExplorerSidebarController.js +0 -874
  646. plexora-0.0.22/plexora/plugins/figure_builder/__init__.py +0 -173
  647. plexora-0.0.22/plexora/plugins/figure_builder/server/compose.py +0 -825
  648. plexora-0.0.22/plexora/plugins/figure_builder/server/export_jobs.py +0 -148
  649. plexora-0.0.22/plexora/plugins/figure_builder/server/provenance.py +0 -174
  650. plexora-0.0.22/plexora/plugins/figure_builder/server/render.py +0 -441
  651. plexora-0.0.22/plexora/plugins/figure_builder/server/schema.py +0 -1397
  652. plexora-0.0.22/plexora/plugins/figure_builder/static/figureCanvas.js +0 -3516
  653. plexora-0.0.22/plexora/plugins/figure_builder/static/figureCaptureBoxes.js +0 -369
  654. plexora-0.0.22/plexora/plugins/figure_builder/static/figureCaptureDock.js +0 -516
  655. plexora-0.0.22/plexora/plugins/figure_builder/static/figureCaptureTool.js +0 -1060
  656. plexora-0.0.22/plexora/plugins/figure_builder/static/figureContextBar.js +0 -1267
  657. plexora-0.0.22/plexora/plugins/figure_builder/static/figureExportUi.js +0 -174
  658. plexora-0.0.22/plexora/plugins/figure_builder/static/figureImagePanel.js +0 -1558
  659. plexora-0.0.22/plexora/plugins/figure_builder/static/figureLibrary.js +0 -251
  660. plexora-0.0.22/plexora/plugins/figure_builder/static/figurePanelCompositor.js +0 -157
  661. plexora-0.0.22/plexora/plugins/figure_builder/static/figureQuickEdit.js +0 -970
  662. plexora-0.0.22/plexora/plugins/figure_builder/static/figureSceneSnapshot.js +0 -380
  663. plexora-0.0.22/plexora/plugins/figure_builder/static/figureSchema.js +0 -466
  664. plexora-0.0.22/plexora/plugins/figure_builder/static/figureSidebarController.js +0 -1238
  665. plexora-0.0.22/plexora/plugins/figure_builder/static/figureWorkspace.js +0 -2692
  666. plexora-0.0.22/plexora/plugins/figure_builder/static/figure_builder.css +0 -5986
  667. plexora-0.0.22/plexora/plugins/figure_builder/templates/figure_builder/workspace.html +0 -27
  668. plexora-0.0.22/plexora/plugins/gating/__init__.py +0 -80
  669. plexora-0.0.22/plexora/plugins/gating/server/anndata_gates.py +0 -367
  670. plexora-0.0.22/plexora/plugins/gating/server/model.py +0 -275
  671. plexora-0.0.22/plexora/plugins/gating/server/routes.py +0 -226
  672. plexora-0.0.22/plexora/plugins/gating/server/tableops.py +0 -119
  673. plexora-0.0.22/plexora/plugins/gating/static/csvGatingList.js +0 -940
  674. plexora-0.0.22/plexora/plugins/gating/static/gating.css +0 -274
  675. plexora-0.0.22/plexora/plugins/gating/static/gatingApi.js +0 -230
  676. plexora-0.0.22/plexora/plugins/gating/static/gatingSidebarController.js +0 -913
  677. plexora-0.0.22/plexora/plugins/gating/templates/gating/panel.html +0 -88
  678. plexora-0.0.22/plexora/plugins/roi/__init__.py +0 -101
  679. plexora-0.0.22/plexora/plugins/roi/static/roiApi.js +0 -192
  680. plexora-0.0.22/plexora/plugins/roi/static/roiSidebarController.js +0 -1063
  681. plexora-0.0.22/plexora/plugins/roi/static/roiState.js +0 -522
  682. plexora-0.0.22/plexora/plugins/roi/static/roiTools.js +0 -1029
  683. plexora-0.0.22/plexora/plugins/transcripts/__init__.py +0 -99
  684. plexora-0.0.22/plexora/plugins/transcripts/server/routes.py +0 -585
  685. plexora-0.0.22/plexora/plugins/transcripts/static/transcriptGroupModal.js +0 -635
  686. plexora-0.0.22/plexora/plugins/transcripts/static/transcriptLayer.js +0 -1529
  687. plexora-0.0.22/plexora/plugins/transcripts/static/transcriptPoints.js +0 -892
  688. plexora-0.0.22/plexora/plugins/transcripts/static/transcripts.css +0 -1358
  689. plexora-0.0.22/plexora/plugins/transcripts/static/transcriptsSidebarController.js +0 -1213
  690. plexora-0.0.22/plexora/plugins/transcripts/templates/transcripts/panel.html +0 -236
  691. plexora-0.0.22/plexora/plugins/visium_hd/__init__.py +0 -56
  692. plexora-0.0.22/plexora/plugins/visium_hd/server/routes.py +0 -238
  693. plexora-0.0.22/plexora/plugins/visium_hd/static/binLayer.js +0 -557
  694. plexora-0.0.22/plexora/plugins/visium_hd/static/visiumHdApi.js +0 -97
  695. plexora-0.0.22/plexora/plugins/visium_hd/static/visiumHdSidebarController.js +0 -840
  696. plexora-0.0.22/plexora/plugins/visium_hd/static/visium_hd.css +0 -360
  697. plexora-0.0.22/plexora/plugins/visium_hd/templates/visium_hd/panel.html +0 -115
  698. plexora-0.0.22/plexora/server/models/adapters/__init__.py +0 -118
  699. plexora-0.0.22/plexora/server/models/adapters/anndata_adapter.py +0 -1108
  700. plexora-0.0.22/plexora/server/models/adapters/base.py +0 -181
  701. plexora-0.0.22/plexora/server/models/adapters/csv_adapter.py +0 -132
  702. plexora-0.0.22/plexora/server/models/adapters/inspection.py +0 -329
  703. plexora-0.0.22/plexora/server/models/adapters/spatialdata_adapter.py +0 -252
  704. plexora-0.0.22/plexora/server/models/bin_tiles.py +0 -905
  705. plexora-0.0.22/plexora/server/models/centroid_tiles.py +0 -399
  706. plexora-0.0.22/plexora/server/models/data_migration.py +0 -307
  707. plexora-0.0.22/plexora/server/models/data_model.py +0 -3544
  708. plexora-0.0.22/plexora/server/models/database_model.py +0 -187
  709. plexora-0.0.22/plexora/server/models/import_proposal.py +0 -2359
  710. plexora-0.0.22/plexora/server/models/import_sample.py +0 -592
  711. plexora-0.0.22/plexora/server/models/layer_jobs.py +0 -373
  712. plexora-0.0.22/plexora/server/models/layer_sources.py +0 -753
  713. plexora-0.0.22/plexora/server/models/manifest.py +0 -350
  714. plexora-0.0.22/plexora/server/models/project.py +0 -2300
  715. plexora-0.0.22/plexora/server/models/recipes.py +0 -1139
  716. plexora-0.0.22/plexora/server/models/remote_sessions.py +0 -1248
  717. plexora-0.0.22/plexora/server/models/transcript_tiles.py +0 -1260
  718. plexora-0.0.22/plexora/server/node/api.py +0 -1544
  719. plexora-0.0.22/plexora/server/node/app.py +0 -675
  720. plexora-0.0.22/plexora/server/node/resources.py +0 -838
  721. plexora-0.0.22/plexora/server/plugins.py +0 -253
  722. plexora-0.0.22/plexora/server/providers/__init__.py +0 -223
  723. plexora-0.0.22/plexora/server/providers/base.py +0 -340
  724. plexora-0.0.22/plexora/server/providers/http.py +0 -460
  725. plexora-0.0.22/plexora/server/providers/local.py +0 -594
  726. plexora-0.0.22/plexora/server/providers/node.py +0 -575
  727. plexora-0.0.22/plexora/server/providers/operations.py +0 -143
  728. plexora-0.0.22/plexora/server/routes/browse_routes.py +0 -366
  729. plexora-0.0.22/plexora/server/routes/data_routes.py +0 -1116
  730. plexora-0.0.22/plexora/server/routes/gcloud_routes.py +0 -362
  731. plexora-0.0.22/plexora/server/routes/import_routes.py +0 -975
  732. plexora-0.0.22/plexora/server/routes/page_routes.py +0 -359
  733. plexora-0.0.22/plexora/server/routes/project_routes.py +0 -881
  734. plexora-0.0.22/plexora/server/routes/settings_routes.py +0 -1244
  735. plexora-0.0.22/plexora/server/routes/system_routes.py +0 -39
  736. plexora-0.0.22/plexora/server/routes/tool_routes.py +0 -523
  737. plexora-0.0.22/plexora/server/utils/boundary_mask.py +0 -547
  738. plexora-0.0.22/plexora/server/utils/brightfield.py +0 -1232
  739. plexora-0.0.22/plexora/server/utils/dicom_wsi.py +0 -1304
  740. plexora-0.0.22/plexora/server/utils/fast_png.py +0 -97
  741. plexora-0.0.22/plexora/server/utils/native_dialog.py +0 -368
  742. plexora-0.0.22/plexora/server/utils/ome_zarr.py +0 -805
  743. plexora-0.0.22/plexora/server/utils/segmentation_pyramid.py +0 -874
  744. plexora-0.0.22/plexora/server/utils/tenx_matrix.py +0 -640
  745. plexora-0.0.22/plexora/server/utils/xenium_focus.py +0 -301
  746. plexora-0.0.22/plexora/server_cli.py +0 -58
  747. plexora-0.0.22/plexora.egg-info/PKG-INFO +0 -550
  748. plexora-0.0.22/plexora.egg-info/SOURCES.txt +0 -570
  749. plexora-0.0.22/plexora.egg-info/entry_points.txt +0 -12
  750. plexora-0.0.22/plexora.egg-info/requires.txt +0 -45
  751. plexora-0.0.22/pyproject.toml +0 -186
  752. plexora-0.0.22/tests/test_app_shell.py +0 -245
  753. plexora-0.0.22/tests/test_bin_tiles.py +0 -278
  754. plexora-0.0.22/tests/test_boundary_mask.py +0 -327
  755. plexora-0.0.22/tests/test_cell_mode_control.py +0 -437
  756. plexora-0.0.22/tests/test_channel_auto_revert.py +0 -135
  757. plexora-0.0.22/tests/test_cli.py +0 -1507
  758. plexora-0.0.22/tests/test_connect.py +0 -2349
  759. plexora-0.0.22/tests/test_connection_modal.py +0 -650
  760. plexora-0.0.22/tests/test_dataset_nav.py +0 -74
  761. plexora-0.0.22/tests/test_gcloud.py +0 -1416
  762. plexora-0.0.22/tests/test_import_dialog.py +0 -188
  763. plexora-0.0.22/tests/test_import_entry_points.py +0 -190
  764. plexora-0.0.22/tests/test_layer_manager.py +0 -40
  765. plexora-0.0.22/tests/test_layer_sources.py +0 -490
  766. plexora-0.0.22/tests/test_mini_map.py +0 -305
  767. plexora-0.0.22/tests/test_node_image.py +0 -781
  768. plexora-0.0.22/tests/test_open_project.py +0 -207
  769. plexora-0.0.22/tests/test_paths.py +0 -495
  770. plexora-0.0.22/tests/test_plugin_boundary.py +0 -520
  771. plexora-0.0.22/tests/test_plugins.py +0 -610
  772. plexora-0.0.22/tests/test_popover_menu.py +0 -55
  773. plexora-0.0.22/tests/test_remote_connect.py +0 -2047
  774. plexora-0.0.22/tests/test_resource_status_banner.py +0 -94
  775. plexora-0.0.22/tests/test_segmentation_wait.py +0 -158
  776. plexora-0.0.22/tests/test_session_expiry.py +0 -169
  777. plexora-0.0.22/tests/test_slider.py +0 -259
  778. plexora-0.0.22/tests/test_slider_css.py +0 -231
  779. plexora-0.0.22/tests/test_tile_colorize.py +0 -66
  780. plexora-0.0.22/tests/test_toast.py +0 -70
  781. plexora-0.0.22/tests/test_tool_cards.py +0 -214
  782. plexora-0.0.22/tests/test_view_menu.py +0 -155
  783. plexora-0.0.22/tests/test_visium_hd_import.py +0 -293
  784. {plexora-0.0.22 → plexora-0.0.26}/LICENSE +0 -0
  785. {plexora-0.0.22 → plexora-0.0.26}/plexora/__main__.py +0 -0
  786. {plexora-0.0.22 → plexora-0.0.26}/plexora/_transient_locks.py +0 -0
  787. {plexora-0.0.22 → plexora-0.0.26}/plexora/_url.py +0 -0
  788. {plexora-0.0.22 → plexora-0.0.26}/plexora/askpass.py +0 -0
  789. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/354_bundle.js +0 -0
  790. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/354_bundle.js.LICENSE.txt +0 -0
  791. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/418_bundle.js +0 -0
  792. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/418_bundle.js.LICENSE.txt +0 -0
  793. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/693b935cb1f907814be9c6199a68c217.svg +0 -0
  794. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/713c134ff47cd328a5b711526f151082.svg +0 -0
  795. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/770_bundle.js +0 -0
  796. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/ff743f408972e0e96ca9153ed5ae4c83.svg +0 -0
  797. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/vendor_bundle.js.LICENSE.txt +0 -0
  798. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/vendors-node_modules_canvg_lib_index_es_js_bundle.js +0 -0
  799. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/vendors-node_modules_dompurify_dist_purify_es_mjs_bundle.js +0 -0
  800. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/vendors-node_modules_html2canvas_dist_html2canvas_js_bundle.js +0 -0
  801. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/LICENSE.txt +0 -0
  802. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/changelog.txt +0 -0
  803. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/.gitattributes +0 -0
  804. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/LICENSE.txt +0 -0
  805. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/Toolbar.png +0 -0
  806. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/fullpage.psd +0 -0
  807. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/home.psd +0 -0
  808. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/next.psd +0 -0
  809. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/previous.psd +0 -0
  810. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/rotateleft.psd +0 -0
  811. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/rotateright.psd +0 -0
  812. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/zoom.psd +0 -0
  813. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/README.md +0 -0
  814. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_grouphover.png +0 -0
  815. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_hover.png +0 -0
  816. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_pressed.png +0 -0
  817. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_rest.png +0 -0
  818. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_grouphover.png +0 -0
  819. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_hover.png +0 -0
  820. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_pressed.png +0 -0
  821. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_rest.png +0 -0
  822. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_grouphover.png +0 -0
  823. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_hover.png +0 -0
  824. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_pressed.png +0 -0
  825. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_rest.png +0 -0
  826. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_grouphover.png +0 -0
  827. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_hover.png +0 -0
  828. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_pressed.png +0 -0
  829. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_rest.png +0 -0
  830. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_grouphover.png +0 -0
  831. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_hover.png +0 -0
  832. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_pressed.png +0 -0
  833. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_rest.png +0 -0
  834. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_grouphover.png +0 -0
  835. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_hover.png +0 -0
  836. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_pressed.png +0 -0
  837. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_rest.png +0 -0
  838. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_grouphover.png +0 -0
  839. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_hover.png +0 -0
  840. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_pressed.png +0 -0
  841. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_rest.png +0 -0
  842. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_grouphover.png +0 -0
  843. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_hover.png +0 -0
  844. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_pressed.png +0 -0
  845. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_rest.png +0 -0
  846. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-scalebar.js +0 -0
  847. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/css/import.css +0 -0
  848. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/css/openProject.css +0 -0
  849. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/css/tokens.css +0 -0
  850. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/apple-touch-icon.png +0 -0
  851. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/favicon.ico +0 -0
  852. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/logo.ai +0 -0
  853. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/logo.svg +0 -0
  854. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/logo_with_text.ai +0 -0
  855. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/logo_with_text.svg +0 -0
  856. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/appRouter.js +0 -0
  857. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/carryOver.js +0 -0
  858. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/dataLocation.js +0 -0
  859. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/datasetContext.js +0 -0
  860. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/failureMessage.js +0 -0
  861. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/glRenderer.js +0 -0
  862. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/keyboardShortcuts.js +0 -0
  863. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/logTerminal.js +0 -0
  864. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/pageBoot.js +0 -0
  865. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/passVariablesToFrontend.js +0 -0
  866. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/pathPicker.js +0 -0
  867. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/placePicker.js +0 -0
  868. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/remoteGlobe.js +0 -0
  869. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/remoteState.js +0 -0
  870. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/renderClipboard.js +0 -0
  871. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/simpleEventHandler.js +0 -0
  872. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/viewerLoader.js +0 -0
  873. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/vendor.js +0 -0
  874. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/brightfieldAdjust.js +0 -0
  875. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/channelList.js +0 -0
  876. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/channelNamesUpload.js +0 -0
  877. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/colorSwatchPicker.js +0 -0
  878. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/coordinateField.js +0 -0
  879. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/dataSourceField.js +0 -0
  880. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/datasetPicker.js +0 -0
  881. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/fileSourceRow.js +0 -0
  882. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/jobProgress.js +0 -0
  883. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/layerSections.js +0 -0
  884. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/layerStack.js +0 -0
  885. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/panCursor.js +0 -0
  886. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/popoverPortal.js +0 -0
  887. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/rainbow.js +0 -0
  888. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/requirementsModal.js +0 -0
  889. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/scaleCalibration.js +0 -0
  890. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/tableProgress.js +0 -0
  891. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/viewerControls.js +0 -0
  892. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/workers/tileDecoder.js +0 -0
  893. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/shaders/frag.glsl +0 -0
  894. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/shaders/vert.glsl +0 -0
  895. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/templates/_fragment.html +0 -0
  896. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/templates/_scale_calibration.html +0 -0
  897. {plexora-0.0.22 → plexora-0.0.26}/plexora/client/templates/_scale_calibration_float.html +0 -0
  898. {plexora-0.0.22 → plexora-0.0.26}/plexora/notebook_env.py +0 -0
  899. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/__init__.py +0 -0
  900. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/server/__init__.py +0 -0
  901. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/server/routes.py +0 -0
  902. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/server/state.py +0 -0
  903. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/server/values.py +0 -0
  904. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/server/variables.py +0 -0
  905. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerApi.js +0 -0
  906. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerColors.js +0 -0
  907. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerContinuous.js +0 -0
  908. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerFigureBridge.js +0 -0
  909. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerLegend.js +0 -0
  910. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerRoiBridge.js +0 -0
  911. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerState.js +0 -0
  912. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cell_explorer.css +0 -0
  913. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/templates/cell_explorer/panel.html +0 -0
  914. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/__init__.py +0 -0
  915. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/captures.py +0 -0
  916. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/export.py +0 -0
  917. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/operations.py +0 -0
  918. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/pixels.py +0 -0
  919. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/repository.py +0 -0
  920. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/routes.py +0 -0
  921. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/shapegeom.py +0 -0
  922. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/sources.py +0 -0
  923. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/strokegeom.py +0 -0
  924. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/textmetrics.py +0 -0
  925. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureActions.js +0 -0
  926. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureBuilderApi.js +0 -0
  927. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureCaptureBin.js +0 -0
  928. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureCaptureBinGrid.js +0 -0
  929. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureChoiceField.js +0 -0
  930. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureColorField.js +0 -0
  931. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureConfirm.js +0 -0
  932. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureContextMenu.js +0 -0
  933. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureDestinationPicker.js +0 -0
  934. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureDocumentState.js +0 -0
  935. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureLineDefs.js +0 -0
  936. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureLinePanel.js +0 -0
  937. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figurePointEditor.js +0 -0
  938. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureRichText.js +0 -0
  939. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureShapeDefs.js +0 -0
  940. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureShapeDrawing.js +0 -0
  941. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureShapeGeometry.js +0 -0
  942. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureShapePanel.js +0 -0
  943. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureStrokeGeometry.js +0 -0
  944. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureTextEditor.js +0 -0
  945. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureTextPanel.js +0 -0
  946. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureThumbnail.js +0 -0
  947. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureViewOptions.js +0 -0
  948. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/templates/figure_builder/captures.html +0 -0
  949. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/templates/figure_builder/library.html +0 -0
  950. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/templates/figure_builder/workspace_body.html +0 -0
  951. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/gating/server/__init__.py +0 -0
  952. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/gating/server/database.py +0 -0
  953. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/gating/templates/gating/legacy.html +0 -0
  954. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/__init__.py +0 -0
  955. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/adapters.py +0 -0
  956. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/geojson.py +0 -0
  957. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/geometry.py +0 -0
  958. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/mapping.py +0 -0
  959. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/operations.py +0 -0
  960. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/repository.py +0 -0
  961. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/routes.py +0 -0
  962. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/schema.py +0 -0
  963. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/tableops.py +0 -0
  964. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/static/roi.css +0 -0
  965. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/static/roiFigureBridge.js +0 -0
  966. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/static/roiGeometry.js +0 -0
  967. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/static/roiRenderer.js +0 -0
  968. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/static/roiTree.js +0 -0
  969. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/templates/roi/panel.html +0 -0
  970. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/transcripts/server/__init__.py +0 -0
  971. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/transcripts/server/xenium.py +0 -0
  972. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/transcripts/static/transcriptsApi.js +0 -0
  973. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/visium_hd/server/__init__.py +0 -0
  974. {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/visium_hd/server/tenx.py +0 -0
  975. {plexora-0.0.22 → plexora-0.0.26}/plexora/proxy.py +0 -0
  976. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/adapters/classify.py +0 -0
  977. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/adapters/flat_table.py +0 -0
  978. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/adapters/memory_adapter.py +0 -0
  979. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/consistency.py +0 -0
  980. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/datasets.py +0 -0
  981. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/nodes.py +0 -0
  982. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/remotes.py +0 -0
  983. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/secret_store.py +0 -0
  984. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/providers/memory.py +0 -0
  985. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/providers/wire.py +0 -0
  986. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/routes/dataset_routes.py +0 -0
  987. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/routes/transfer_routes.py +0 -0
  988. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/addHEColumns.py +0 -0
  989. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/channel_file.py +0 -0
  990. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/colormaps.py +0 -0
  991. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/dir_listing.py +0 -0
  992. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/file_transfer.py +0 -0
  993. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/fullConversion.py +0 -0
  994. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/memory_pyramid.py +0 -0
  995. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/ngff_transform.py +0 -0
  996. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/pre_normalization.py +0 -0
  997. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/smallestenclosingcircle.py +0 -0
  998. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/spatial_scene.py +0 -0
  999. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/tiff_series.py +0 -0
  1000. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/tiffsurgeon.py +0 -0
  1001. {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/xenium_cells.py +0 -0
  1002. {plexora-0.0.22 → plexora-0.0.26}/plexora/test.py +0 -0
  1003. {plexora-0.0.22 → plexora-0.0.26}/plexora.egg-info/dependency_links.txt +0 -0
  1004. {plexora-0.0.22 → plexora-0.0.26}/plexora.egg-info/top_level.txt +0 -0
  1005. {plexora-0.0.22 → plexora-0.0.26}/setup.cfg +0 -0
  1006. {plexora-0.0.22 → plexora-0.0.26}/tests/test_anndata_adapter.py +0 -0
  1007. {plexora-0.0.22 → plexora-0.0.26}/tests/test_api_dataset.py +0 -0
  1008. {plexora-0.0.22 → plexora-0.0.26}/tests/test_api_store.py +0 -0
  1009. {plexora-0.0.22 → plexora-0.0.26}/tests/test_app_router.py +0 -0
  1010. {plexora-0.0.22 → plexora-0.0.26}/tests/test_auth_token.py +0 -0
  1011. {plexora-0.0.22 → plexora-0.0.26}/tests/test_blank_frame.py +0 -0
  1012. {plexora-0.0.22 → plexora-0.0.26}/tests/test_brightfield_detection.py +0 -0
  1013. {plexora-0.0.22 → plexora-0.0.26}/tests/test_brightfield_pipeline.py +0 -0
  1014. {plexora-0.0.22 → plexora-0.0.26}/tests/test_brightfield_reader.py +0 -0
  1015. {plexora-0.0.22 → plexora-0.0.26}/tests/test_brightfield_routes.py +0 -0
  1016. {plexora-0.0.22 → plexora-0.0.26}/tests/test_browse_routes.py +0 -0
  1017. {plexora-0.0.22 → plexora-0.0.26}/tests/test_carry_over.py +0 -0
  1018. {plexora-0.0.22 → plexora-0.0.26}/tests/test_cell_color_layer.py +0 -0
  1019. {plexora-0.0.22 → plexora-0.0.26}/tests/test_centroid_tiles.py +0 -0
  1020. {plexora-0.0.22 → plexora-0.0.26}/tests/test_channel_names_modal.py +0 -0
  1021. {plexora-0.0.22 → plexora-0.0.26}/tests/test_channel_names_sidecar.py +0 -0
  1022. {plexora-0.0.22 → plexora-0.0.26}/tests/test_channel_names_upload.py +0 -0
  1023. {plexora-0.0.22 → plexora-0.0.26}/tests/test_channel_overview.py +0 -0
  1024. {plexora-0.0.22 → plexora-0.0.26}/tests/test_channel_rename_state.py +0 -0
  1025. {plexora-0.0.22 → plexora-0.0.26}/tests/test_classify_columns.py +0 -0
  1026. {plexora-0.0.22 → plexora-0.0.26}/tests/test_colormaps.py +0 -0
  1027. {plexora-0.0.22 → plexora-0.0.26}/tests/test_column_classifier_css.py +0 -0
  1028. {plexora-0.0.22 → plexora-0.0.26}/tests/test_config_store.py +0 -0
  1029. {plexora-0.0.22 → plexora-0.0.26}/tests/test_consistency.py +0 -0
  1030. {plexora-0.0.22 → plexora-0.0.26}/tests/test_csv_adapter.py +0 -0
  1031. {plexora-0.0.22 → plexora-0.0.26}/tests/test_data_location.py +0 -0
  1032. {plexora-0.0.22 → plexora-0.0.26}/tests/test_database_model.py +0 -0
  1033. {plexora-0.0.22 → plexora-0.0.26}/tests/test_datalayer_requests.py +0 -0
  1034. {plexora-0.0.22 → plexora-0.0.26}/tests/test_dataset_routes.py +0 -0
  1035. {plexora-0.0.22 → plexora-0.0.26}/tests/test_datasets_api.py +0 -0
  1036. {plexora-0.0.22 → plexora-0.0.26}/tests/test_datasets_api_on_a_node.py +0 -0
  1037. {plexora-0.0.22 → plexora-0.0.26}/tests/test_datasets_registry.py +0 -0
  1038. {plexora-0.0.22 → plexora-0.0.26}/tests/test_derive_anndata_channel_names.py +0 -0
  1039. {plexora-0.0.22 → plexora-0.0.26}/tests/test_detect_data_type.py +0 -0
  1040. {plexora-0.0.22 → plexora-0.0.26}/tests/test_dicom_assembly.py +0 -0
  1041. {plexora-0.0.22 → plexora-0.0.26}/tests/test_dicom_detection.py +0 -0
  1042. {plexora-0.0.22 → plexora-0.0.26}/tests/test_dicom_pyramid.py +0 -0
  1043. {plexora-0.0.22 → plexora-0.0.26}/tests/test_dicom_registration.py +0 -0
  1044. {plexora-0.0.22 → plexora-0.0.26}/tests/test_dicom_routes.py +0 -0
  1045. {plexora-0.0.22 → plexora-0.0.26}/tests/test_file_location.py +0 -0
  1046. {plexora-0.0.22 → plexora-0.0.26}/tests/test_file_transfer_node.py +0 -0
  1047. {plexora-0.0.22 → plexora-0.0.26}/tests/test_hd_slider_domain.py +0 -0
  1048. {plexora-0.0.22 → plexora-0.0.26}/tests/test_home_landing.py +0 -0
  1049. {plexora-0.0.22 → plexora-0.0.26}/tests/test_icon_names.py +0 -0
  1050. {plexora-0.0.22 → plexora-0.0.26}/tests/test_image_status.py +0 -0
  1051. {plexora-0.0.22 → plexora-0.0.26}/tests/test_import_costs_nothing.py +0 -0
  1052. {plexora-0.0.22 → plexora-0.0.26}/tests/test_import_from_a_node.py +0 -0
  1053. {plexora-0.0.22 → plexora-0.0.26}/tests/test_import_help.py +0 -0
  1054. {plexora-0.0.22 → plexora-0.0.26}/tests/test_import_proposal.py +0 -0
  1055. {plexora-0.0.22 → plexora-0.0.26}/tests/test_import_sample_routes.py +0 -0
  1056. {plexora-0.0.22 → plexora-0.0.26}/tests/test_jupyter_viewer.py +0 -0
  1057. {plexora-0.0.22 → plexora-0.0.26}/tests/test_label_outlines.py +0 -0
  1058. {plexora-0.0.22 → plexora-0.0.26}/tests/test_label_region.py +0 -0
  1059. {plexora-0.0.22 → plexora-0.0.26}/tests/test_label_tile_lifecycle.py +0 -0
  1060. {plexora-0.0.22 → plexora-0.0.26}/tests/test_launch_state.py +0 -0
  1061. {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_channel_panel.py +0 -0
  1062. {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_draw.py +0 -0
  1063. {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_jobs.py +0 -0
  1064. {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_spec.py +0 -0
  1065. {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_state.py +0 -0
  1066. {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_transform.py +0 -0
  1067. {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_visibility.py +0 -0
  1068. {plexora-0.0.22 → plexora-0.0.26}/tests/test_manifest.py +0 -0
  1069. {plexora-0.0.22 → plexora-0.0.26}/tests/test_marker_split.py +0 -0
  1070. {plexora-0.0.22 → plexora-0.0.26}/tests/test_mask_without_table.py +0 -0
  1071. {plexora-0.0.22 → plexora-0.0.26}/tests/test_memory_adapter.py +0 -0
  1072. {plexora-0.0.22 → plexora-0.0.26}/tests/test_memory_datasource.py +0 -0
  1073. {plexora-0.0.22 → plexora-0.0.26}/tests/test_memory_pyramid.py +0 -0
  1074. {plexora-0.0.22 → plexora-0.0.26}/tests/test_metadata_columns.py +0 -0
  1075. {plexora-0.0.22 → plexora-0.0.26}/tests/test_nav_shortcuts.py +0 -0
  1076. {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_direct_routing.py +0 -0
  1077. {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_disconnect.py +0 -0
  1078. {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_dynamic.py +0 -0
  1079. {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_image_type.py +0 -0
  1080. {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_mask_status.py +0 -0
  1081. {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_reconnect.py +0 -0
  1082. {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_routes.py +0 -0
  1083. {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_table.py +0 -0
  1084. {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_warm_and_cache.py +0 -0
  1085. {plexora-0.0.22 → plexora-0.0.26}/tests/test_notebook_env.py +0 -0
  1086. {plexora-0.0.22 → plexora-0.0.26}/tests/test_notebook_mode.py +0 -0
  1087. {plexora-0.0.22 → plexora-0.0.26}/tests/test_ome_zarr_reader.py +0 -0
  1088. {plexora-0.0.22 → plexora-0.0.26}/tests/test_optional_segmentation.py +0 -0
  1089. {plexora-0.0.22 → plexora-0.0.26}/tests/test_page_assets.py +0 -0
  1090. {plexora-0.0.22 → plexora-0.0.26}/tests/test_page_routes.py +0 -0
  1091. {plexora-0.0.22 → plexora-0.0.26}/tests/test_parquet_tables.py +0 -0
  1092. {plexora-0.0.22 → plexora-0.0.26}/tests/test_path_picker.py +0 -0
  1093. {plexora-0.0.22 → plexora-0.0.26}/tests/test_pixel_size.py +0 -0
  1094. {plexora-0.0.22 → plexora-0.0.26}/tests/test_plugin_css_boundary.py +0 -0
  1095. {plexora-0.0.22 → plexora-0.0.26}/tests/test_plugin_layers.py +0 -0
  1096. {plexora-0.0.22 → plexora-0.0.26}/tests/test_popover_portal.py +0 -0
  1097. {plexora-0.0.22 → plexora-0.0.26}/tests/test_prime_hot_code.py +0 -0
  1098. {plexora-0.0.22 → plexora-0.0.26}/tests/test_project_edit_routes.py +0 -0
  1099. {plexora-0.0.22 → plexora-0.0.26}/tests/test_project_layer_routes.py +0 -0
  1100. {plexora-0.0.22 → plexora-0.0.26}/tests/test_project_record.py +0 -0
  1101. {plexora-0.0.22 → plexora-0.0.26}/tests/test_recipes.py +0 -0
  1102. {plexora-0.0.22 → plexora-0.0.26}/tests/test_reconnect.py +0 -0
  1103. {plexora-0.0.22 → plexora-0.0.26}/tests/test_refresh_dataset.py +0 -0
  1104. {plexora-0.0.22 → plexora-0.0.26}/tests/test_register_anndata_datasource.py +0 -0
  1105. {plexora-0.0.22 → plexora-0.0.26}/tests/test_register_image_datasource.py +0 -0
  1106. {plexora-0.0.22 → plexora-0.0.26}/tests/test_register_zarr_image_datasource.py +0 -0
  1107. {plexora-0.0.22 → plexora-0.0.26}/tests/test_remote_globe.py +0 -0
  1108. {plexora-0.0.22 → plexora-0.0.26}/tests/test_remote_health.py +0 -0
  1109. {plexora-0.0.22 → plexora-0.0.26}/tests/test_remote_state.py +0 -0
  1110. {plexora-0.0.22 → plexora-0.0.26}/tests/test_rename_channels.py +0 -0
  1111. {plexora-0.0.22 → plexora-0.0.26}/tests/test_rename_channels_json.py +0 -0
  1112. {plexora-0.0.22 → plexora-0.0.26}/tests/test_render_clipboard.py +0 -0
  1113. {plexora-0.0.22 → plexora-0.0.26}/tests/test_requirements_routes.py +0 -0
  1114. {plexora-0.0.22 → plexora-0.0.26}/tests/test_segmentation_mapping.py +0 -0
  1115. {plexora-0.0.22 → plexora-0.0.26}/tests/test_segmentation_mode_routes.py +0 -0
  1116. {plexora-0.0.22 → plexora-0.0.26}/tests/test_segmentation_pyramid.py +0 -0
  1117. {plexora-0.0.22 → plexora-0.0.26}/tests/test_session_walltime.py +0 -0
  1118. {plexora-0.0.22 → plexora-0.0.26}/tests/test_settings_page.py +0 -0
  1119. {plexora-0.0.22 → plexora-0.0.26}/tests/test_settings_remotes_page.py +0 -0
  1120. {plexora-0.0.22 → plexora-0.0.26}/tests/test_shared_roots.py +0 -0
  1121. {plexora-0.0.22 → plexora-0.0.26}/tests/test_sidebar_scoping.py +0 -0
  1122. {plexora-0.0.22 → plexora-0.0.26}/tests/test_single_image_import.py +0 -0
  1123. {plexora-0.0.22 → plexora-0.0.26}/tests/test_spatial_scene.py +0 -0
  1124. {plexora-0.0.22 → plexora-0.0.26}/tests/test_spatialdata_adapter.py +0 -0
  1125. {plexora-0.0.22 → plexora-0.0.26}/tests/test_spatialdata_image_import.py +0 -0
  1126. {plexora-0.0.22 → plexora-0.0.26}/tests/test_staged_progress.py +0 -0
  1127. {plexora-0.0.22 → plexora-0.0.26}/tests/test_table_progress.py +0 -0
  1128. {plexora-0.0.22 → plexora-0.0.26}/tests/test_tenx_matrix.py +0 -0
  1129. {plexora-0.0.22 → plexora-0.0.26}/tests/test_tiff_hyperstack.py +0 -0
  1130. {plexora-0.0.22 → plexora-0.0.26}/tests/test_tile_url.py +0 -0
  1131. {plexora-0.0.22 → plexora-0.0.26}/tests/test_tool_assets.py +0 -0
  1132. {plexora-0.0.22 → plexora-0.0.26}/tests/test_tool_coexistence.py +0 -0
  1133. {plexora-0.0.22 → plexora-0.0.26}/tests/test_tool_switching.py +0 -0
  1134. {plexora-0.0.22 → plexora-0.0.26}/tests/test_transcript_tiles.py +0 -0
  1135. {plexora-0.0.22 → plexora-0.0.26}/tests/test_transfer_routes.py +0 -0
  1136. {plexora-0.0.22 → plexora-0.0.26}/tests/test_unreachable_node.py +0 -0
  1137. {plexora-0.0.22 → plexora-0.0.26}/tests/test_url_helpers.py +0 -0
  1138. {plexora-0.0.22 → plexora-0.0.26}/tests/test_viewer_error_state.py +0 -0
  1139. {plexora-0.0.22 → plexora-0.0.26}/tests/test_viewer_loader.py +0 -0
  1140. {plexora-0.0.22 → plexora-0.0.26}/tests/test_wide_features.py +0 -0
  1141. {plexora-0.0.22 → plexora-0.0.26}/tests/test_xenium_cells.py +0 -0
  1142. {plexora-0.0.22 → plexora-0.0.26}/tests/test_xenium_focus.py +0 -0
  1143. {plexora-0.0.22 → plexora-0.0.26}/tests/test_zarr_write_retry.py +0 -0
@@ -0,0 +1,25 @@
1
+ recursive-include plexora/client/templates *.html
2
+ recursive-include plexora/client/dist *
3
+ recursive-include plexora/client/src/css *.css
4
+ recursive-include plexora/client/src/img *
5
+ recursive-include plexora/client/src/js *.js
6
+ recursive-include plexora/client/src/shaders *.glsl
7
+ recursive-include plexora/client/external *
8
+ recursive-include plexora/plugins *.html
9
+ # Per plugin rather than a plugins/*/static glob: MANIFEST.in has no such glob,
10
+ # so every bundled plugin's assets need a line of their own here or they are
11
+ # simply absent from an sdist -- which builds and installs fine, then serves a
12
+ # tool with no client.
13
+ recursive-include plexora/plugins/cell_explorer/static *
14
+ recursive-include plexora/plugins/figure_builder/static *
15
+ recursive-include plexora/plugins/gating/static *
16
+ recursive-include plexora/plugins/roi/static *
17
+ # The telemetry Worker (Cloudflare) is deployed separately, never shipped.
18
+ prune backend
19
+ # The licence service Worker likewise: deployed separately, never shipped --
20
+ # and its tools/ must never ride along in an sdist.
21
+ prune licensing
22
+ # The documentation site and its generator are built from the repository and
23
+ # published to GitHub Pages; neither is part of the package.
24
+ prune website
25
+ prune tools
@@ -0,0 +1,206 @@
1
+ Metadata-Version: 2.4
2
+ Name: plexora
3
+ Version: 0.0.26
4
+ Summary: OpenSeadragon-based cellular image viewing and analysis tool.
5
+ License-Expression: LicenseRef-Plexora-Academic-1.0
6
+ Requires-Python: <3.14,>=3.12
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: aiohttp>=3.9
10
+ Requires-Dist: anndata>=0.10
11
+ Requires-Dist: cryptography>=42
12
+ Requires-Dist: Flask>=3.1
13
+ Requires-Dist: fsspec>=2024.12
14
+ Requires-Dist: h5py>=3.16.0
15
+ Requires-Dist: imagecodecs
16
+ Requires-Dist: itsdangerous>=2.2
17
+ Requires-Dist: Jinja2>=3.1
18
+ Requires-Dist: numba>=0.61
19
+ Requires-Dist: numpy>=2.0
20
+ Requires-Dist: ome-types>=0.6.3
21
+ Requires-Dist: opencv-python-headless>=5.0.0.93
22
+ Requires-Dist: openpyxl>=3.1
23
+ Requires-Dist: orjson>=3.11
24
+ Requires-Dist: pandas>=3.0.5
25
+ Requires-Dist: Pillow>=10.4
26
+ Requires-Dist: platformdirs>=4
27
+ Requires-Dist: polars>=1.43
28
+ Requires-Dist: pydantic<2.14,>=2.13
29
+ Requires-Dist: reportlab>=5.0.1
30
+ Requires-Dist: s3fs>=2024.12
31
+ Requires-Dist: scikit-image
32
+ Requires-Dist: scikit-learn>=1.9
33
+ Requires-Dist: scipy
34
+ Requires-Dist: shapely>=2.1.2
35
+ Requires-Dist: spatialdata>=0.8.0
36
+ Requires-Dist: threadpoolctl>=3.6.0
37
+ Requires-Dist: tifffile>=2026.7.31
38
+ Requires-Dist: urllib3>=2.0
39
+ Requires-Dist: waitress
40
+ Requires-Dist: Werkzeug>=3.1
41
+ Requires-Dist: zarr>=3
42
+ Provides-Extra: jupyter
43
+ Requires-Dist: ipython; extra == "jupyter"
44
+ Requires-Dist: jupyter-server-proxy; extra == "jupyter"
45
+ Provides-Extra: dev
46
+ Requires-Dist: pytest; extra == "dev"
47
+ Requires-Dist: pytest-randomly>=4.1.0; extra == "dev"
48
+ Provides-Extra: spatial
49
+ Requires-Dist: pyarrow>=14; extra == "spatial"
50
+ Provides-Extra: remote
51
+ Requires-Dist: gcsfs>=2024.12; extra == "remote"
52
+ Requires-Dist: adlfs>=2024.12; extra == "remote"
53
+ Provides-Extra: wsi
54
+ Requires-Dist: openslide-python>=1.3; extra == "wsi"
55
+ Requires-Dist: openslide-bin>=4.0; extra == "wsi"
56
+ Requires-Dist: wsidicom>=0.22; extra == "wsi"
57
+ Requires-Dist: pydicom>=3; extra == "wsi"
58
+ Provides-Extra: ai
59
+ Requires-Dist: mcp<3,>=2.2; extra == "ai"
60
+ Requires-Dist: pyyaml>=6; extra == "ai"
61
+ Dynamic: license-file
62
+
63
+ # Plexora
64
+
65
+ ![](./plexora/client/src/img/logo_with_text.svg)
66
+
67
+ Plexora is a viewer for multiplexed imaging and spatial transcriptomics. It
68
+ opens large images where they are, without converting or copying them, draws
69
+ segmentation masks and cell tables over them, and runs on a laptop, in a
70
+ notebook, on a remote workstation or on an HPC cluster.
71
+
72
+ **Documentation: https://nirmallab.github.io/plexora/**
73
+
74
+ ![The Plexora viewer showing a multiplexed tissue image](./website/public/screenshots/home/viewer.webp)
75
+
76
+ ## Install
77
+
78
+ ```bash
79
+ pip install plexora
80
+ plexora
81
+ ```
82
+
83
+ `plexora` starts the viewer and opens it in your browser. Python 3.12 or 3.13
84
+ is required. A desktop app for macOS, Windows and Linux is on the
85
+ [releases page](https://github.com/nirmallab/plexora/releases). See
86
+ [Installation](https://nirmallab.github.io/plexora/docs/getting-started/installation/).
87
+
88
+ ## Quick start
89
+
90
+ In the app, choose **File → Import Sample…** and pick an image, a folder of
91
+ files, or a Xenium or Visium run. From Python:
92
+
93
+ ```python
94
+ import plexora
95
+
96
+ name = plexora.import_sample("slide.ome.tif", "slide_mask.tif", "cells.csv", wait=True)
97
+ plexora.view(name) # in a notebook, shows the viewer inline
98
+ ```
99
+
100
+ More in the [quick start](https://nirmallab.github.io/plexora/docs/getting-started/quick-start/).
101
+
102
+ ## What it reads
103
+
104
+ - Multiplexed images: OME-TIFF, TIFF, QPTIFF, OME-Zarr (local, `https://` or `s3://`)
105
+ - Brightfield whole-slide images: SVS, NDPI, SCN, BIF, MRXS, DICOM
106
+ - 10x Genomics Xenium, Visium and Visium HD output folders
107
+ - SpatialData stores and AnnData tables; CSV, TSV and Parquet cell tables
108
+ - Segmentation masks (label images) and cell boundary polygons
109
+
110
+ The full list is in [Supported formats](https://nirmallab.github.io/plexora/docs/reference/supported-formats/).
111
+
112
+ ## Where to go next
113
+
114
+ | I want to | Read |
115
+ | --- | --- |
116
+ | Use the viewer and its tools | [Viewer](https://nirmallab.github.io/plexora/docs/viewer/navigation/), [Tools](https://nirmallab.github.io/plexora/docs/plugins/) |
117
+ | Script it from Python or a notebook | [Python](https://nirmallab.github.io/plexora/docs/python/), [Notebooks](https://nirmallab.github.io/plexora/docs/notebooks/) |
118
+ | Look at data on a remote machine or cluster | [Remote and HPC](https://nirmallab.github.io/plexora/docs/remote/) |
119
+ | Write a plugin | [Plugin development](https://nirmallab.github.io/plexora/docs/plugin-development/) |
120
+ | Look up a function or command | [Python API](https://nirmallab.github.io/plexora/docs/python-api/), [Command line](https://nirmallab.github.io/plexora/docs/cli/) |
121
+
122
+ ## Developing Plexora
123
+
124
+ ```bash
125
+ git clone https://github.com/nirmallab/plexora.git
126
+ cd plexora
127
+ pip install -e ".[dev]"
128
+ python -m pytest -q -p no:randomly
129
+ ```
130
+
131
+ See [Development setup](https://nirmallab.github.io/plexora/docs/contributing/development-setup/)
132
+ and, for the documentation site in `website/`, [CONTRIBUTING_DOCS.md](./CONTRIBUTING_DOCS.md).
133
+ Engineering notes live in [docs/internal/](./docs/internal/).
134
+
135
+ ## Usage data
136
+
137
+ Plexora can send **anonymous usage counts** -- which features and plugins are
138
+ used, how long tiles take to draw, which kinds of errors occur -- so we know
139
+ what to improve. It never sends file, project, marker or gene names, cell
140
+ data, coordinates, usernames, machine names, paths, prompts or anything typed
141
+ into a tool; every field it may send is on an allowlist
142
+ (`plexora/telemetry/schema.py`). Everything is queued on this machine first,
143
+ nothing in Plexora waits for it, and it works air-gapped exactly as before.
144
+
145
+ It is on by default and a notice says so the first time. Any one of these turns
146
+ it off:
147
+
148
+ ```bash
149
+ plexora telemetry off # or: Settings > Usage data
150
+ export DO_NOT_TRACK=1 # honoured everywhere
151
+ export PLEXORA_TELEMETRY=off
152
+ ```
153
+
154
+ `plexora telemetry preview` prints exactly what the next upload would contain,
155
+ and `plexora telemetry status` says which of the above is in force.
156
+ [docs/TELEMETRY.md](./docs/TELEMETRY.md) has the details.
157
+
158
+ ## Free and Paid
159
+
160
+ **Free** is everything described above: every image, table and modality, every
161
+ tool's manual features, remote, HPC and notebook viewing, and export. It needs no
162
+ account, no activation and no network, and it never asks.
163
+
164
+ **Paid** adds AI features: guided gating sessions an agent runs with you, and
165
+ the evidence and analysis tools it uses. Activate a seat key or install an
166
+ offline licence file in Settings > License, or from a terminal:
167
+
168
+ ```bash
169
+ plexora license status
170
+ plexora license activate PLEX-XXXX-XXXX-XXXX-XXXX # this computer
171
+ plexora license activate PLEX-XXXX-XXXX-XXXX-XXXX --cluster # a whole HPC cluster, once, from a login node
172
+ plexora license install lab.plexora # an offline licence file
173
+ plexora license trial # 30 days of Paid
174
+ ```
175
+
176
+ A licence check sends the licence certificate and a hash that identifies the
177
+ environment. It never sends your data, file names, machine names or anything
178
+ about what you are looking at. When a licence ends, everything Free keeps
179
+ working, and every gate, ROI, figure and export you made, with or without AI,
180
+ stays yours and editable. AI model providers your agent uses bill you
181
+ separately. [docs/LICENSING.md](./docs/LICENSING.md) has the details.
182
+
183
+ ## License
184
+
185
+ Plexora is released under the **Plexora Academic License 1.0** (see [LICENSE](./LICENSE)).
186
+ It is **not** an open source license. In short:
187
+
188
+ | | |
189
+ |---|---|
190
+ | Academic research, teaching, personal study | ✅ Free |
191
+ | Use by a nonprofit or government research institution | ✅ Free (whatever the funding source) |
192
+ | Redistributing Plexora unmodified, with the license attached | ✅ Allowed |
193
+ | Patching your own copy to fix a bug or a compatibility problem | ✅ Allowed |
194
+ | Publishing a fork, a patched build, or a renamed version | ❌ Not allowed |
195
+ | Commercial use of any kind | ❌ Requires a paid license |
196
+
197
+ **Plugins are a deliberate exception.** Anything you build against the documented
198
+ extension interfaces — the `plexora.plugins` entry point group and the `plexora.api`
199
+ package — is yours. You may distribute and sell your plugin under whatever license
200
+ you like, and you do not need our permission. Extending Plexora through the plugin
201
+ API is the supported way to change what it does; editing its source is not.
202
+
203
+ For a commercial license, contact Ajit Johnson Nirmal <ajitjohnson.n@gmail.com>.
204
+
205
+ Some bundled components carry their own licenses, which are unaffected by the above —
206
+ see section 8 of [LICENSE](./LICENSE).
@@ -0,0 +1,144 @@
1
+ # Plexora
2
+
3
+ ![](./plexora/client/src/img/logo_with_text.svg)
4
+
5
+ Plexora is a viewer for multiplexed imaging and spatial transcriptomics. It
6
+ opens large images where they are, without converting or copying them, draws
7
+ segmentation masks and cell tables over them, and runs on a laptop, in a
8
+ notebook, on a remote workstation or on an HPC cluster.
9
+
10
+ **Documentation: https://nirmallab.github.io/plexora/**
11
+
12
+ ![The Plexora viewer showing a multiplexed tissue image](./website/public/screenshots/home/viewer.webp)
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ pip install plexora
18
+ plexora
19
+ ```
20
+
21
+ `plexora` starts the viewer and opens it in your browser. Python 3.12 or 3.13
22
+ is required. A desktop app for macOS, Windows and Linux is on the
23
+ [releases page](https://github.com/nirmallab/plexora/releases). See
24
+ [Installation](https://nirmallab.github.io/plexora/docs/getting-started/installation/).
25
+
26
+ ## Quick start
27
+
28
+ In the app, choose **File → Import Sample…** and pick an image, a folder of
29
+ files, or a Xenium or Visium run. From Python:
30
+
31
+ ```python
32
+ import plexora
33
+
34
+ name = plexora.import_sample("slide.ome.tif", "slide_mask.tif", "cells.csv", wait=True)
35
+ plexora.view(name) # in a notebook, shows the viewer inline
36
+ ```
37
+
38
+ More in the [quick start](https://nirmallab.github.io/plexora/docs/getting-started/quick-start/).
39
+
40
+ ## What it reads
41
+
42
+ - Multiplexed images: OME-TIFF, TIFF, QPTIFF, OME-Zarr (local, `https://` or `s3://`)
43
+ - Brightfield whole-slide images: SVS, NDPI, SCN, BIF, MRXS, DICOM
44
+ - 10x Genomics Xenium, Visium and Visium HD output folders
45
+ - SpatialData stores and AnnData tables; CSV, TSV and Parquet cell tables
46
+ - Segmentation masks (label images) and cell boundary polygons
47
+
48
+ The full list is in [Supported formats](https://nirmallab.github.io/plexora/docs/reference/supported-formats/).
49
+
50
+ ## Where to go next
51
+
52
+ | I want to | Read |
53
+ | --- | --- |
54
+ | Use the viewer and its tools | [Viewer](https://nirmallab.github.io/plexora/docs/viewer/navigation/), [Tools](https://nirmallab.github.io/plexora/docs/plugins/) |
55
+ | Script it from Python or a notebook | [Python](https://nirmallab.github.io/plexora/docs/python/), [Notebooks](https://nirmallab.github.io/plexora/docs/notebooks/) |
56
+ | Look at data on a remote machine or cluster | [Remote and HPC](https://nirmallab.github.io/plexora/docs/remote/) |
57
+ | Write a plugin | [Plugin development](https://nirmallab.github.io/plexora/docs/plugin-development/) |
58
+ | Look up a function or command | [Python API](https://nirmallab.github.io/plexora/docs/python-api/), [Command line](https://nirmallab.github.io/plexora/docs/cli/) |
59
+
60
+ ## Developing Plexora
61
+
62
+ ```bash
63
+ git clone https://github.com/nirmallab/plexora.git
64
+ cd plexora
65
+ pip install -e ".[dev]"
66
+ python -m pytest -q -p no:randomly
67
+ ```
68
+
69
+ See [Development setup](https://nirmallab.github.io/plexora/docs/contributing/development-setup/)
70
+ and, for the documentation site in `website/`, [CONTRIBUTING_DOCS.md](./CONTRIBUTING_DOCS.md).
71
+ Engineering notes live in [docs/internal/](./docs/internal/).
72
+
73
+ ## Usage data
74
+
75
+ Plexora can send **anonymous usage counts** -- which features and plugins are
76
+ used, how long tiles take to draw, which kinds of errors occur -- so we know
77
+ what to improve. It never sends file, project, marker or gene names, cell
78
+ data, coordinates, usernames, machine names, paths, prompts or anything typed
79
+ into a tool; every field it may send is on an allowlist
80
+ (`plexora/telemetry/schema.py`). Everything is queued on this machine first,
81
+ nothing in Plexora waits for it, and it works air-gapped exactly as before.
82
+
83
+ It is on by default and a notice says so the first time. Any one of these turns
84
+ it off:
85
+
86
+ ```bash
87
+ plexora telemetry off # or: Settings > Usage data
88
+ export DO_NOT_TRACK=1 # honoured everywhere
89
+ export PLEXORA_TELEMETRY=off
90
+ ```
91
+
92
+ `plexora telemetry preview` prints exactly what the next upload would contain,
93
+ and `plexora telemetry status` says which of the above is in force.
94
+ [docs/TELEMETRY.md](./docs/TELEMETRY.md) has the details.
95
+
96
+ ## Free and Paid
97
+
98
+ **Free** is everything described above: every image, table and modality, every
99
+ tool's manual features, remote, HPC and notebook viewing, and export. It needs no
100
+ account, no activation and no network, and it never asks.
101
+
102
+ **Paid** adds AI features: guided gating sessions an agent runs with you, and
103
+ the evidence and analysis tools it uses. Activate a seat key or install an
104
+ offline licence file in Settings > License, or from a terminal:
105
+
106
+ ```bash
107
+ plexora license status
108
+ plexora license activate PLEX-XXXX-XXXX-XXXX-XXXX # this computer
109
+ plexora license activate PLEX-XXXX-XXXX-XXXX-XXXX --cluster # a whole HPC cluster, once, from a login node
110
+ plexora license install lab.plexora # an offline licence file
111
+ plexora license trial # 30 days of Paid
112
+ ```
113
+
114
+ A licence check sends the licence certificate and a hash that identifies the
115
+ environment. It never sends your data, file names, machine names or anything
116
+ about what you are looking at. When a licence ends, everything Free keeps
117
+ working, and every gate, ROI, figure and export you made, with or without AI,
118
+ stays yours and editable. AI model providers your agent uses bill you
119
+ separately. [docs/LICENSING.md](./docs/LICENSING.md) has the details.
120
+
121
+ ## License
122
+
123
+ Plexora is released under the **Plexora Academic License 1.0** (see [LICENSE](./LICENSE)).
124
+ It is **not** an open source license. In short:
125
+
126
+ | | |
127
+ |---|---|
128
+ | Academic research, teaching, personal study | ✅ Free |
129
+ | Use by a nonprofit or government research institution | ✅ Free (whatever the funding source) |
130
+ | Redistributing Plexora unmodified, with the license attached | ✅ Allowed |
131
+ | Patching your own copy to fix a bug or a compatibility problem | ✅ Allowed |
132
+ | Publishing a fork, a patched build, or a renamed version | ❌ Not allowed |
133
+ | Commercial use of any kind | ❌ Requires a paid license |
134
+
135
+ **Plugins are a deliberate exception.** Anything you build against the documented
136
+ extension interfaces — the `plexora.plugins` entry point group and the `plexora.api`
137
+ package — is yours. You may distribute and sell your plugin under whatever license
138
+ you like, and you do not need our permission. Extending Plexora through the plugin
139
+ API is the supported way to change what it does; editing its source is not.
140
+
141
+ For a commercial license, contact Ajit Johnson Nirmal <ajitjohnson.n@gmail.com>.
142
+
143
+ Some bundled components carry their own licenses, which are unaffected by the above —
144
+ see section 8 of [LICENSE](./LICENSE).