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.
- plexora-0.0.26/MANIFEST.in +25 -0
- plexora-0.0.26/PKG-INFO +206 -0
- plexora-0.0.26/README.md +144 -0
- plexora-0.0.26/plexora/__init__.py +487 -0
- plexora-0.0.26/plexora/_lifetime.py +266 -0
- plexora-0.0.26/plexora/_resources.py +387 -0
- plexora-0.0.26/plexora/_subprocess.py +50 -0
- plexora-0.0.26/plexora/agent/__init__.py +28 -0
- plexora-0.0.26/plexora/agent/artifacts.py +170 -0
- plexora-0.0.26/plexora/agent/attach.py +160 -0
- plexora-0.0.26/plexora/agent/audit.py +110 -0
- plexora-0.0.26/plexora/agent/cell_explain.py +170 -0
- plexora-0.0.26/plexora/agent/cell_gallery.py +268 -0
- plexora-0.0.26/plexora/agent/core/__init__.py +20 -0
- plexora-0.0.26/plexora/agent/core/cells.py +113 -0
- plexora-0.0.26/plexora/agent/core/image.py +55 -0
- plexora-0.0.26/plexora/agent/core/jobs.py +97 -0
- plexora-0.0.26/plexora/agent/core/operations.py +211 -0
- plexora-0.0.26/plexora/agent/core/project.py +479 -0
- plexora-0.0.26/plexora/agent/core/scene.py +188 -0
- plexora-0.0.26/plexora/agent/core/table.py +96 -0
- plexora-0.0.26/plexora/agent/core/viewer.py +440 -0
- plexora-0.0.26/plexora/agent/core/visual.py +86 -0
- plexora-0.0.26/plexora/agent/errors.py +108 -0
- plexora-0.0.26/plexora/agent/evidence/__init__.py +10 -0
- plexora-0.0.26/plexora/agent/evidence/calibration.py +389 -0
- plexora-0.0.26/plexora/agent/evidence/cell_window.py +178 -0
- plexora-0.0.26/plexora/agent/evidence/collage.py +465 -0
- plexora-0.0.26/plexora/agent/evidence/crops.py +230 -0
- plexora-0.0.26/plexora/agent/evidence/density_plot.py +140 -0
- plexora-0.0.26/plexora/agent/evidence/image_qc.py +146 -0
- plexora-0.0.26/plexora/agent/evidence/sheet_layout.py +149 -0
- plexora-0.0.26/plexora/agent/expression.py +137 -0
- plexora-0.0.26/plexora/agent/gate_panel.py +161 -0
- plexora-0.0.26/plexora/agent/gate_rule.py +19 -0
- plexora-0.0.26/plexora/agent/gate_sampling.py +274 -0
- plexora-0.0.26/plexora/agent/jobs.py +330 -0
- plexora-0.0.26/plexora/agent/limits.py +49 -0
- plexora-0.0.26/plexora/agent/plots.py +184 -0
- plexora-0.0.26/plexora/agent/policy.py +336 -0
- plexora-0.0.26/plexora/agent/presets.py +122 -0
- plexora-0.0.26/plexora/agent/receipts.py +67 -0
- plexora-0.0.26/plexora/agent/registry.py +397 -0
- plexora-0.0.26/plexora/agent/render.py +753 -0
- plexora-0.0.26/plexora/agent/render_spec.py +205 -0
- plexora-0.0.26/plexora/agent/report.py +283 -0
- plexora-0.0.26/plexora/agent/scene_models.py +134 -0
- plexora-0.0.26/plexora/agent/schemas.py +85 -0
- plexora-0.0.26/plexora/agent/session.py +232 -0
- plexora-0.0.26/plexora/agent/sessions/__init__.py +16 -0
- plexora-0.0.26/plexora/agent/sessions/budget.py +79 -0
- plexora-0.0.26/plexora/agent/sessions/control.py +64 -0
- plexora-0.0.26/plexora/agent/sessions/engine.py +483 -0
- plexora-0.0.26/plexora/agent/sessions/events.py +50 -0
- plexora-0.0.26/plexora/agent/sessions/memo.py +93 -0
- plexora-0.0.26/plexora/agent/sessions/mirror.py +105 -0
- plexora-0.0.26/plexora/agent/sessions/store.py +244 -0
- plexora-0.0.26/plexora/agent/sessions/tools.py +540 -0
- plexora-0.0.26/plexora/agent/tasks.py +106 -0
- plexora-0.0.26/plexora/agent/tokens.py +166 -0
- plexora-0.0.26/plexora/agent/viewer.py +186 -0
- plexora-0.0.26/plexora/ai/__init__.py +10 -0
- plexora-0.0.26/plexora/ai/audit.py +64 -0
- plexora-0.0.26/plexora/ai/bench.py +601 -0
- plexora-0.0.26/plexora/ai/bench_data.py +185 -0
- plexora-0.0.26/plexora/ai/bench_qc.py +520 -0
- plexora-0.0.26/plexora/ai/knowledge/markers.yaml +356 -0
- plexora-0.0.26/plexora/ai/qc_scenes.py +179 -0
- plexora-0.0.26/plexora/ai/setup.py +319 -0
- plexora-0.0.26/plexora/ai/skill_manifest.yaml +81 -0
- plexora-0.0.26/plexora/ai/skills/dataset-triage/SKILL.md +81 -0
- plexora-0.0.26/plexora/ai/skills/diagnose-marker/SKILL.md +82 -0
- plexora-0.0.26/plexora/ai/skills/gate-dataset/SKILL.md +103 -0
- plexora-0.0.26/plexora/ai/skills/gate-image/SKILL.md +288 -0
- plexora-0.0.26/plexora/ai/skills/marker-qc/SKILL.md +68 -0
- plexora-0.0.26/plexora/ai/skills/qc-image/SKILL.md +159 -0
- plexora-0.0.26/plexora/ai/skills/review-gating/SKILL.md +90 -0
- plexora-0.0.26/plexora/ai/skills/review-qc/SKILL.md +77 -0
- plexora-0.0.26/plexora/ai/skills/visual-gating/SKILL.md +104 -0
- plexora-0.0.26/plexora/ai/skills/visual-inspection/SKILL.md +78 -0
- plexora-0.0.26/plexora/ai/skills.py +274 -0
- plexora-0.0.26/plexora/ai/vocabulary.py +122 -0
- plexora-0.0.26/plexora/api/__init__.py +203 -0
- plexora-0.0.26/plexora/api/dataset.py +1063 -0
- plexora-0.0.26/plexora/api/features.py +153 -0
- plexora-0.0.26/plexora/api/http.py +40 -0
- plexora-0.0.26/plexora/api/plugin.py +923 -0
- plexora-0.0.26/plexora/api/store.py +309 -0
- plexora-0.0.26/plexora/cli.py +3152 -0
- plexora-0.0.26/plexora/client/dist/vendor_bundle.js +2 -0
- plexora-0.0.26/plexora/client/external/openseadragon-bin-2.4.0/canvas-overlay-hd.js +154 -0
- plexora-0.0.26/plexora/client/external/thinking-orbs-0.3.2/LICENSE +21 -0
- plexora-0.0.26/plexora/client/external/thinking-orbs-0.3.2/README-plexora.txt +21 -0
- plexora-0.0.26/plexora/client/external/thinking-orbs-0.3.2/orbs.js +873 -0
- plexora-0.0.26/plexora/client/src/css/agentPanel.css +433 -0
- plexora-0.0.26/plexora/client/src/css/main.css +8984 -0
- plexora-0.0.26/plexora/client/src/css/quickView.css +456 -0
- plexora-0.0.26/plexora/client/src/css/settings.css +982 -0
- plexora-0.0.26/plexora/client/src/css/viewer.css +3346 -0
- plexora-0.0.26/plexora/client/src/js/main.js +1898 -0
- plexora-0.0.26/plexora/client/src/js/pluginRegistry.js +153 -0
- plexora-0.0.26/plexora/client/src/js/services/agentBridge.js +1850 -0
- plexora-0.0.26/plexora/client/src/js/services/appStatus.js +323 -0
- plexora-0.0.26/plexora/client/src/js/services/browsePicker.js +555 -0
- plexora-0.0.26/plexora/client/src/js/services/connectionModal.js +3170 -0
- plexora-0.0.26/plexora/client/src/js/services/dataLayer.js +452 -0
- plexora-0.0.26/plexora/client/src/js/services/desktopBridge.js +385 -0
- plexora-0.0.26/plexora/client/src/js/services/errors.js +136 -0
- plexora-0.0.26/plexora/client/src/js/services/fileLocation.js +721 -0
- plexora-0.0.26/plexora/client/src/js/services/numericData.js +173 -0
- plexora-0.0.26/plexora/client/src/js/services/orbDriver.js +242 -0
- plexora-0.0.26/plexora/client/src/js/services/paidFeature.js +127 -0
- plexora-0.0.26/plexora/client/src/js/services/performanceTelemetry.js +266 -0
- plexora-0.0.26/plexora/client/src/js/services/pointerDrag.js +145 -0
- plexora-0.0.26/plexora/client/src/js/services/resourceRouting.js +269 -0
- plexora-0.0.26/plexora/client/src/js/services/resourceStatus.js +577 -0
- plexora-0.0.26/plexora/client/src/js/services/sessionExpiry.js +366 -0
- plexora-0.0.26/plexora/client/src/js/services/telemetry.js +345 -0
- plexora-0.0.26/plexora/client/src/js/services/toast.js +222 -0
- plexora-0.0.26/plexora/client/src/js/services/viewTransform.js +360 -0
- plexora-0.0.26/plexora/client/src/js/services/viewerScene.js +334 -0
- plexora-0.0.26/plexora/client/src/js/views/agentPanel.js +800 -0
- plexora-0.0.26/plexora/client/src/js/views/cardList.js +265 -0
- plexora-0.0.26/plexora/client/src/js/views/columnClassifier.js +147 -0
- plexora-0.0.26/plexora/client/src/js/views/confirmDialog.js +214 -0
- plexora-0.0.26/plexora/client/src/js/views/datasetNav.js +308 -0
- plexora-0.0.26/plexora/client/src/js/views/datasetStrip.js +368 -0
- plexora-0.0.26/plexora/client/src/js/views/geneGroupModal.js +678 -0
- plexora-0.0.26/plexora/client/src/js/views/geneList.js +573 -0
- plexora-0.0.26/plexora/client/src/js/views/glInit.js +280 -0
- plexora-0.0.26/plexora/client/src/js/views/gradientRange.js +542 -0
- plexora-0.0.26/plexora/client/src/js/views/helpMenu.js +247 -0
- plexora-0.0.26/plexora/client/src/js/views/imageViewer.js +3421 -0
- plexora-0.0.26/plexora/client/src/js/views/importHelp.js +577 -0
- plexora-0.0.26/plexora/client/src/js/views/importSample.js +1865 -0
- plexora-0.0.26/plexora/client/src/js/views/labelGpu.js +465 -0
- plexora-0.0.26/plexora/client/src/js/views/labelTile.js +258 -0
- plexora-0.0.26/plexora/client/src/js/views/layerChannelPanel.js +400 -0
- plexora-0.0.26/plexora/client/src/js/views/layerManager.js +1875 -0
- plexora-0.0.26/plexora/client/src/js/views/loadProgress.js +184 -0
- plexora-0.0.26/plexora/client/src/js/views/locators.js +76 -0
- plexora-0.0.26/plexora/client/src/js/views/miniMap.js +938 -0
- plexora-0.0.26/plexora/client/src/js/views/navbarControls.js +89 -0
- plexora-0.0.26/plexora/client/src/js/views/openProjectPage.js +949 -0
- plexora-0.0.26/plexora/client/src/js/views/pluginHelp.js +134 -0
- plexora-0.0.26/plexora/client/src/js/views/popoverMenu.js +205 -0
- plexora-0.0.26/plexora/client/src/js/views/projectEdit.js +681 -0
- plexora-0.0.26/plexora/client/src/js/views/quickViewLanding.js +362 -0
- plexora-0.0.26/plexora/client/src/js/views/rgbImageViewer.js +145 -0
- plexora-0.0.26/plexora/client/src/js/views/searchableSelect.js +459 -0
- plexora-0.0.26/plexora/client/src/js/views/segmentationWait.js +321 -0
- plexora-0.0.26/plexora/client/src/js/views/settingsPage.js +2292 -0
- plexora-0.0.26/plexora/client/src/js/views/slider.js +920 -0
- plexora-0.0.26/plexora/client/src/js/views/tileColorize.js +369 -0
- plexora-0.0.26/plexora/client/src/js/views/tileDecode.js +337 -0
- plexora-0.0.26/plexora/client/src/js/views/toolLoader.js +1369 -0
- plexora-0.0.26/plexora/client/src/js/views/updateDialog.js +717 -0
- plexora-0.0.26/plexora/client/src/js/views/viewTransformTools.js +157 -0
- plexora-0.0.26/plexora/client/src/js/views/viewerErrorState.js +206 -0
- plexora-0.0.26/plexora/client/src/js/views/viewerManager.js +2398 -0
- plexora-0.0.26/plexora/client/src/js/views/viewerSidebar.js +1834 -0
- plexora-0.0.26/plexora/client/src/shaders/label.frag.glsl +89 -0
- plexora-0.0.26/plexora/client/templates/base.html +518 -0
- plexora-0.0.26/plexora/client/templates/index.html +629 -0
- plexora-0.0.26/plexora/client/templates/open_project.html +118 -0
- plexora-0.0.26/plexora/client/templates/project_edit.html +404 -0
- plexora-0.0.26/plexora/client/templates/settings.html +712 -0
- plexora-0.0.26/plexora/client/templates/tools/rotate_panel.html +48 -0
- plexora-0.0.26/plexora/connect.py +3162 -0
- plexora-0.0.26/plexora/datasets.py +1574 -0
- plexora-0.0.26/plexora/datasource.py +1718 -0
- plexora-0.0.26/plexora/gcloud.py +2475 -0
- plexora-0.0.26/plexora/jupyter.py +1234 -0
- plexora-0.0.26/plexora/licensing/__init__.py +62 -0
- plexora-0.0.26/plexora/licensing/certificate.py +159 -0
- plexora-0.0.26/plexora/licensing/cli.py +430 -0
- plexora-0.0.26/plexora/licensing/client.py +215 -0
- plexora-0.0.26/plexora/licensing/delegation.py +142 -0
- plexora-0.0.26/plexora/licensing/entitlements.py +79 -0
- plexora-0.0.26/plexora/licensing/environment.py +293 -0
- plexora-0.0.26/plexora/licensing/errors.py +70 -0
- plexora-0.0.26/plexora/licensing/guards.py +164 -0
- plexora-0.0.26/plexora/licensing/keys.py +37 -0
- plexora-0.0.26/plexora/licensing/manifest.py +103 -0
- plexora-0.0.26/plexora/licensing/models.py +199 -0
- plexora-0.0.26/plexora/licensing/state.py +515 -0
- plexora-0.0.26/plexora/licensing/store.py +276 -0
- plexora-0.0.26/plexora/licensing/tokens.py +155 -0
- plexora-0.0.26/plexora/links.py +27 -0
- plexora-0.0.26/plexora/mcp/__init__.py +31 -0
- plexora-0.0.26/plexora/mcp/auth.py +63 -0
- plexora-0.0.26/plexora/mcp/prompts.py +127 -0
- plexora-0.0.26/plexora/mcp/resources.py +135 -0
- plexora-0.0.26/plexora/mcp/resources_gating.py +62 -0
- plexora-0.0.26/plexora/mcp/resources_scene.py +51 -0
- plexora-0.0.26/plexora/mcp/resources_visual.py +18 -0
- plexora-0.0.26/plexora/mcp/serialize.py +72 -0
- plexora-0.0.26/plexora/mcp/server.py +368 -0
- plexora-0.0.26/plexora/mcp/smoke.py +52 -0
- plexora-0.0.26/plexora/mcp/tools.py +170 -0
- plexora-0.0.26/plexora/memory.py +911 -0
- plexora-0.0.26/plexora/nodes.py +1169 -0
- plexora-0.0.26/plexora/paths.py +876 -0
- plexora-0.0.26/plexora/plugins/cell_explorer/__init__.py +105 -0
- plexora-0.0.26/plexora/plugins/cell_explorer/static/cellExplorerSidebarController.js +883 -0
- plexora-0.0.26/plexora/plugins/figure_builder/__init__.py +172 -0
- plexora-0.0.26/plexora/plugins/figure_builder/server/compose.py +829 -0
- plexora-0.0.26/plexora/plugins/figure_builder/server/export_jobs.py +167 -0
- plexora-0.0.26/plexora/plugins/figure_builder/server/provenance.py +185 -0
- plexora-0.0.26/plexora/plugins/figure_builder/server/render.py +297 -0
- plexora-0.0.26/plexora/plugins/figure_builder/server/schema.py +1454 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureCanvas.js +3526 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureCaptureBoxes.js +381 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureCaptureDock.js +578 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureCaptureTool.js +1165 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureContextBar.js +1274 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureExportUi.js +181 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureImagePanel.js +1561 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureLibrary.js +255 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figurePanelCompositor.js +175 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureQuickEdit.js +1004 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureSceneSnapshot.js +376 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureSchema.js +567 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureSidebarController.js +1260 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figureWorkspace.js +2737 -0
- plexora-0.0.26/plexora/plugins/figure_builder/static/figure_builder.css +5990 -0
- plexora-0.0.26/plexora/plugins/figure_builder/templates/figure_builder/workspace.html +27 -0
- plexora-0.0.26/plexora/plugins/gating/__init__.py +92 -0
- plexora-0.0.26/plexora/plugins/gating/capabilities.py +690 -0
- plexora-0.0.26/plexora/plugins/gating/capabilities_autogate.py +613 -0
- plexora-0.0.26/plexora/plugins/gating/capabilities_session.py +1182 -0
- plexora-0.0.26/plexora/plugins/gating/server/anndata_gates.py +411 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/__init__.py +11 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/answers.py +211 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/bivariate.py +272 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/bulk.py +247 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/candidates.py +263 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/cells.py +154 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/context.py +313 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/engine.py +837 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/events.py +37 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/kernels.py +176 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/lattice.py +188 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/memo.py +42 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/mirror_script.py +217 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/packets.py +970 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/pixel_estimate.py +232 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/profile.py +675 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/provenance.py +15 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/qc_cells.py +221 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/reference.py +162 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/regression.py +152 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/report.py +513 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/sampler.py +350 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/schemas.py +239 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/sheet.py +336 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/tableops.py +186 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/transfer.py +260 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/transitions.py +702 -0
- plexora-0.0.26/plexora/plugins/gating/server/autogate/views.py +183 -0
- plexora-0.0.26/plexora/plugins/gating/server/mixture.py +105 -0
- plexora-0.0.26/plexora/plugins/gating/server/model.py +772 -0
- plexora-0.0.26/plexora/plugins/gating/server/provenance.py +248 -0
- plexora-0.0.26/plexora/plugins/gating/server/routes.py +336 -0
- plexora-0.0.26/plexora/plugins/gating/server/tableops.py +132 -0
- plexora-0.0.26/plexora/plugins/gating/static/csvGatingList.js +966 -0
- plexora-0.0.26/plexora/plugins/gating/static/gating.css +366 -0
- plexora-0.0.26/plexora/plugins/gating/static/gatingAgentBridge.js +199 -0
- plexora-0.0.26/plexora/plugins/gating/static/gatingApi.js +270 -0
- plexora-0.0.26/plexora/plugins/gating/static/gatingSidebarController.js +1132 -0
- plexora-0.0.26/plexora/plugins/gating/templates/gating/panel.html +99 -0
- plexora-0.0.26/plexora/plugins/qc/__init__.py +67 -0
- plexora-0.0.26/plexora/plugins/qc/capabilities.py +709 -0
- plexora-0.0.26/plexora/plugins/qc/capabilities_session.py +460 -0
- plexora-0.0.26/plexora/plugins/qc/mcp.py +87 -0
- plexora-0.0.26/plexora/plugins/qc/server/__init__.py +1 -0
- plexora-0.0.26/plexora/plugins/qc/server/answers.py +177 -0
- plexora-0.0.26/plexora/plugins/qc/server/bulk.py +177 -0
- plexora-0.0.26/plexora/plugins/qc/server/candidates.py +237 -0
- plexora-0.0.26/plexora/plugins/qc/server/cells/__init__.py +1 -0
- plexora-0.0.26/plexora/plugins/qc/server/cells/bulk.py +98 -0
- plexora-0.0.26/plexora/plugins/qc/server/cells/calls.py +208 -0
- plexora-0.0.26/plexora/plugins/qc/server/cells/modules.py +334 -0
- plexora-0.0.26/plexora/plugins/qc/server/cells/packets.py +190 -0
- plexora-0.0.26/plexora/plugins/qc/server/cycles.py +129 -0
- plexora-0.0.26/plexora/plugins/qc/server/detectors/__init__.py +65 -0
- plexora-0.0.26/plexora/plugins/qc/server/detectors/base.py +126 -0
- plexora-0.0.26/plexora/plugins/qc/server/detectors/classical.py +464 -0
- plexora-0.0.26/plexora/plugins/qc/server/engine.py +595 -0
- plexora-0.0.26/plexora/plugins/qc/server/events.py +36 -0
- plexora-0.0.26/plexora/plugins/qc/server/export.py +99 -0
- plexora-0.0.26/plexora/plugins/qc/server/finalize.py +106 -0
- plexora-0.0.26/plexora/plugins/qc/server/mirror_script.py +146 -0
- plexora-0.0.26/plexora/plugins/qc/server/packets.py +462 -0
- plexora-0.0.26/plexora/plugins/qc/server/polygons.py +213 -0
- plexora-0.0.26/plexora/plugins/qc/server/propagate.py +179 -0
- plexora-0.0.26/plexora/plugins/qc/server/report.py +499 -0
- plexora-0.0.26/plexora/plugins/qc/server/results.py +365 -0
- plexora-0.0.26/plexora/plugins/qc/server/roi_link.py +362 -0
- plexora-0.0.26/plexora/plugins/qc/server/routes.py +213 -0
- plexora-0.0.26/plexora/plugins/qc/server/scan.py +802 -0
- plexora-0.0.26/plexora/plugins/qc/server/schemas.py +372 -0
- plexora-0.0.26/plexora/plugins/qc/server/sheets.py +443 -0
- plexora-0.0.26/plexora/plugins/qc/server/source_write.py +224 -0
- plexora-0.0.26/plexora/plugins/qc/server/strictness.py +116 -0
- plexora-0.0.26/plexora/plugins/qc/server/transitions.py +347 -0
- plexora-0.0.26/plexora/plugins/qc/static/qc.css +181 -0
- plexora-0.0.26/plexora/plugins/qc/static/qcAgentBridge.js +57 -0
- plexora-0.0.26/plexora/plugins/qc/static/qcApi.js +75 -0
- plexora-0.0.26/plexora/plugins/qc/static/qcSidebarController.js +298 -0
- plexora-0.0.26/plexora/plugins/qc/templates/qc/panel.html +39 -0
- plexora-0.0.26/plexora/plugins/roi/__init__.py +113 -0
- plexora-0.0.26/plexora/plugins/roi/capabilities.py +208 -0
- plexora-0.0.26/plexora/plugins/roi/server/service.py +229 -0
- plexora-0.0.26/plexora/plugins/roi/static/roiAgentBridge.js +63 -0
- plexora-0.0.26/plexora/plugins/roi/static/roiApi.js +199 -0
- plexora-0.0.26/plexora/plugins/roi/static/roiSidebarController.js +1164 -0
- plexora-0.0.26/plexora/plugins/roi/static/roiState.js +528 -0
- plexora-0.0.26/plexora/plugins/roi/static/roiTools.js +1050 -0
- plexora-0.0.26/plexora/plugins/transcripts/__init__.py +99 -0
- plexora-0.0.26/plexora/plugins/transcripts/server/routes.py +488 -0
- plexora-0.0.26/plexora/plugins/transcripts/static/transcriptLayer.js +1496 -0
- plexora-0.0.26/plexora/plugins/transcripts/static/transcriptPoints.js +917 -0
- plexora-0.0.26/plexora/plugins/transcripts/static/transcripts.css +318 -0
- plexora-0.0.26/plexora/plugins/transcripts/static/transcriptsSidebarController.js +963 -0
- plexora-0.0.26/plexora/plugins/transcripts/templates/transcripts/panel.html +236 -0
- plexora-0.0.26/plexora/plugins/visium_hd/__init__.py +59 -0
- plexora-0.0.26/plexora/plugins/visium_hd/server/routes.py +354 -0
- plexora-0.0.26/plexora/plugins/visium_hd/server/spots.py +194 -0
- plexora-0.0.26/plexora/plugins/visium_hd/static/binLayer.js +859 -0
- plexora-0.0.26/plexora/plugins/visium_hd/static/spotLayer.js +505 -0
- plexora-0.0.26/plexora/plugins/visium_hd/static/visiumHdApi.js +132 -0
- plexora-0.0.26/plexora/plugins/visium_hd/static/visiumHdSidebarController.js +829 -0
- plexora-0.0.26/plexora/plugins/visium_hd/static/visium_hd.css +271 -0
- plexora-0.0.26/plexora/plugins/visium_hd/templates/visium_hd/panel.html +157 -0
- plexora-0.0.26/plexora/server/core_tools.py +48 -0
- plexora-0.0.26/plexora/server/models/adapters/__init__.py +179 -0
- plexora-0.0.26/plexora/server/models/adapters/anndata_adapter.py +1240 -0
- plexora-0.0.26/plexora/server/models/adapters/base.py +182 -0
- plexora-0.0.26/plexora/server/models/adapters/csv_adapter.py +148 -0
- plexora-0.0.26/plexora/server/models/adapters/inspection.py +330 -0
- plexora-0.0.26/plexora/server/models/adapters/spatialdata_adapter.py +367 -0
- plexora-0.0.26/plexora/server/models/bin_tiles.py +1296 -0
- plexora-0.0.26/plexora/server/models/centroid_tiles.py +406 -0
- plexora-0.0.26/plexora/server/models/data_migration.py +311 -0
- plexora-0.0.26/plexora/server/models/data_model.py +4012 -0
- plexora-0.0.26/plexora/server/models/database_model.py +200 -0
- plexora-0.0.26/plexora/server/models/import_proposal.py +2608 -0
- plexora-0.0.26/plexora/server/models/import_sample.py +708 -0
- plexora-0.0.26/plexora/server/models/layer_jobs.py +481 -0
- plexora-0.0.26/plexora/server/models/layer_sources.py +815 -0
- plexora-0.0.26/plexora/server/models/manifest.py +392 -0
- plexora-0.0.26/plexora/server/models/project.py +2375 -0
- plexora-0.0.26/plexora/server/models/recipes.py +1150 -0
- plexora-0.0.26/plexora/server/models/remote_sessions.py +1326 -0
- plexora-0.0.26/plexora/server/models/remote_sources.py +482 -0
- plexora-0.0.26/plexora/server/models/server_records.py +138 -0
- plexora-0.0.26/plexora/server/models/transcript_tiles.py +1265 -0
- plexora-0.0.26/plexora/server/models/viewer_sessions.py +407 -0
- plexora-0.0.26/plexora/server/node/api.py +1623 -0
- plexora-0.0.26/plexora/server/node/app.py +658 -0
- plexora-0.0.26/plexora/server/node/resources.py +863 -0
- plexora-0.0.26/plexora/server/plugins.py +290 -0
- plexora-0.0.26/plexora/server/providers/__init__.py +238 -0
- plexora-0.0.26/plexora/server/providers/base.py +431 -0
- plexora-0.0.26/plexora/server/providers/http.py +475 -0
- plexora-0.0.26/plexora/server/providers/local.py +614 -0
- plexora-0.0.26/plexora/server/providers/node.py +601 -0
- plexora-0.0.26/plexora/server/providers/operations.py +178 -0
- plexora-0.0.26/plexora/server/providers/remote.py +198 -0
- plexora-0.0.26/plexora/server/routes/agent_routes.py +210 -0
- plexora-0.0.26/plexora/server/routes/browse_routes.py +371 -0
- plexora-0.0.26/plexora/server/routes/data_routes.py +1172 -0
- plexora-0.0.26/plexora/server/routes/desktop_routes.py +178 -0
- plexora-0.0.26/plexora/server/routes/gcloud_routes.py +368 -0
- plexora-0.0.26/plexora/server/routes/import_routes.py +1043 -0
- plexora-0.0.26/plexora/server/routes/license_routes.py +174 -0
- plexora-0.0.26/plexora/server/routes/page_routes.py +415 -0
- plexora-0.0.26/plexora/server/routes/project_routes.py +906 -0
- plexora-0.0.26/plexora/server/routes/settings_routes.py +1385 -0
- plexora-0.0.26/plexora/server/routes/system_routes.py +56 -0
- plexora-0.0.26/plexora/server/routes/telemetry_routes.py +189 -0
- plexora-0.0.26/plexora/server/routes/tool_routes.py +544 -0
- plexora-0.0.26/plexora/server/routes/update_routes.py +247 -0
- plexora-0.0.26/plexora/server/utils/boundary_mask.py +614 -0
- plexora-0.0.26/plexora/server/utils/brightfield.py +1260 -0
- plexora-0.0.26/plexora/server/utils/dicom_wsi.py +1309 -0
- plexora-0.0.26/plexora/server/utils/fast_png.py +114 -0
- plexora-0.0.26/plexora/server/utils/gene_groups.py +126 -0
- plexora-0.0.26/plexora/server/utils/jit.py +137 -0
- plexora-0.0.26/plexora/server/utils/label_kernels.py +132 -0
- plexora-0.0.26/plexora/server/utils/label_overlay.py +240 -0
- plexora-0.0.26/plexora/server/utils/layer_composite.py +343 -0
- plexora-0.0.26/plexora/server/utils/native_dialog.py +374 -0
- plexora-0.0.26/plexora/server/utils/ome_zarr.py +1283 -0
- plexora-0.0.26/plexora/server/utils/pixel_scale.py +128 -0
- plexora-0.0.26/plexora/server/utils/remote_store.py +1646 -0
- plexora-0.0.26/plexora/server/utils/segmentation_pyramid.py +1039 -0
- plexora-0.0.26/plexora/server/utils/source_image.py +536 -0
- plexora-0.0.26/plexora/server/utils/tenx_matrix.py +755 -0
- plexora-0.0.26/plexora/server/utils/xenium_focus.py +305 -0
- plexora-0.0.26/plexora/server_cli.py +98 -0
- plexora-0.0.26/plexora/telemetry/__init__.py +40 -0
- plexora-0.0.26/plexora/telemetry/agent_hooks.py +118 -0
- plexora-0.0.26/plexora/telemetry/batch.py +159 -0
- plexora-0.0.26/plexora/telemetry/cli.py +115 -0
- plexora-0.0.26/plexora/telemetry/client.py +636 -0
- plexora-0.0.26/plexora/telemetry/config.py +199 -0
- plexora-0.0.26/plexora/telemetry/dataset.py +184 -0
- plexora-0.0.26/plexora/telemetry/environment.py +182 -0
- plexora-0.0.26/plexora/telemetry/flask_hooks.py +211 -0
- plexora-0.0.26/plexora/telemetry/identity.py +73 -0
- plexora-0.0.26/plexora/telemetry/node_hooks.py +248 -0
- plexora-0.0.26/plexora/telemetry/performance.py +97 -0
- plexora-0.0.26/plexora/telemetry/queue.py +457 -0
- plexora-0.0.26/plexora/telemetry/redact.py +154 -0
- plexora-0.0.26/plexora/telemetry/report.py +117 -0
- plexora-0.0.26/plexora/telemetry/sample.py +81 -0
- plexora-0.0.26/plexora/telemetry/schema.py +763 -0
- plexora-0.0.26/plexora/telemetry/uploader.py +404 -0
- plexora-0.0.26/plexora/updates.py +571 -0
- plexora-0.0.26/plexora.egg-info/PKG-INFO +206 -0
- plexora-0.0.26/plexora.egg-info/SOURCES.txt +929 -0
- plexora-0.0.26/plexora.egg-info/entry_points.txt +13 -0
- plexora-0.0.26/plexora.egg-info/requires.txt +58 -0
- plexora-0.0.26/pyproject.toml +227 -0
- plexora-0.0.26/tests/test_agent_architecture.py +107 -0
- plexora-0.0.26/tests/test_agent_artifacts.py +37 -0
- plexora-0.0.26/tests/test_agent_cell_gallery.py +135 -0
- plexora-0.0.26/tests/test_agent_client_probes.py +112 -0
- plexora-0.0.26/tests/test_agent_explain_cell.py +91 -0
- plexora-0.0.26/tests/test_agent_future_modality.py +69 -0
- plexora-0.0.26/tests/test_agent_gate_panel.py +56 -0
- plexora-0.0.26/tests/test_agent_gate_sampling.py +72 -0
- plexora-0.0.26/tests/test_agent_gating.py +84 -0
- plexora-0.0.26/tests/test_agent_gating_dataset.py +78 -0
- plexora-0.0.26/tests/test_agent_jobs.py +172 -0
- plexora-0.0.26/tests/test_agent_policy_scopes.py +55 -0
- plexora-0.0.26/tests/test_agent_registry.py +82 -0
- plexora-0.0.26/tests/test_agent_render.py +132 -0
- plexora-0.0.26/tests/test_agent_render_formats.py +154 -0
- plexora-0.0.26/tests/test_agent_render_layers.py +122 -0
- plexora-0.0.26/tests/test_agent_render_node.py +89 -0
- plexora-0.0.26/tests/test_agent_report.py +113 -0
- plexora-0.0.26/tests/test_agent_roi.py +51 -0
- plexora-0.0.26/tests/test_agent_routes_guard.py +29 -0
- plexora-0.0.26/tests/test_agent_scene.py +83 -0
- plexora-0.0.26/tests/test_agent_scope.py +76 -0
- plexora-0.0.26/tests/test_agent_session.py +85 -0
- plexora-0.0.26/tests/test_agent_undo.py +130 -0
- plexora-0.0.26/tests/test_agent_vertical_slice.py +103 -0
- plexora-0.0.26/tests/test_agent_viewer_api.py +301 -0
- plexora-0.0.26/tests/test_agent_viewer_routes.py +98 -0
- plexora-0.0.26/tests/test_ai_bench.py +40 -0
- plexora-0.0.26/tests/test_ai_setup.py +84 -0
- plexora-0.0.26/tests/test_ai_skills.py +69 -0
- plexora-0.0.26/tests/test_ai_token.py +74 -0
- plexora-0.0.26/tests/test_app_shell.py +262 -0
- plexora-0.0.26/tests/test_autogate_units.py +1431 -0
- plexora-0.0.26/tests/test_bin_tiles.py +628 -0
- plexora-0.0.26/tests/test_boundary_mask.py +434 -0
- plexora-0.0.26/tests/test_cell_mode_control.py +436 -0
- plexora-0.0.26/tests/test_channel_auto_revert.py +147 -0
- plexora-0.0.26/tests/test_cli.py +1531 -0
- plexora-0.0.26/tests/test_connect.py +2351 -0
- plexora-0.0.26/tests/test_connection_modal.py +675 -0
- plexora-0.0.26/tests/test_core_tools.py +182 -0
- plexora-0.0.26/tests/test_dataset_nav.py +80 -0
- plexora-0.0.26/tests/test_dataset_strip.py +81 -0
- plexora-0.0.26/tests/test_desktop_bridge.py +67 -0
- plexora-0.0.26/tests/test_desktop_cli.py +292 -0
- plexora-0.0.26/tests/test_desktop_process.py +122 -0
- plexora-0.0.26/tests/test_desktop_routes.py +132 -0
- plexora-0.0.26/tests/test_docs_coverage.py +45 -0
- plexora-0.0.26/tests/test_docs_docstrings.py +57 -0
- plexora-0.0.26/tests/test_docs_envvars.py +30 -0
- plexora-0.0.26/tests/test_docs_examples.py +133 -0
- plexora-0.0.26/tests/test_docs_freshness.py +23 -0
- plexora-0.0.26/tests/test_docs_links.py +57 -0
- plexora-0.0.26/tests/test_docs_signatures.py +38 -0
- plexora-0.0.26/tests/test_gating_limits.py +399 -0
- plexora-0.0.26/tests/test_gating_session.py +1227 -0
- plexora-0.0.26/tests/test_gcloud.py +1634 -0
- plexora-0.0.26/tests/test_import_dialog.py +220 -0
- plexora-0.0.26/tests/test_import_entry_points.py +206 -0
- plexora-0.0.26/tests/test_import_routes_json_errors.py +47 -0
- plexora-0.0.26/tests/test_label_gpu.py +186 -0
- plexora-0.0.26/tests/test_label_gpu_parity.py +68 -0
- plexora-0.0.26/tests/test_label_overlay.py +88 -0
- plexora-0.0.26/tests/test_layer_manager.py +41 -0
- plexora-0.0.26/tests/test_layer_sources.py +512 -0
- plexora-0.0.26/tests/test_license_js.py +58 -0
- plexora-0.0.26/tests/test_license_routes.py +142 -0
- plexora-0.0.26/tests/test_licensing_certificate.py +145 -0
- plexora-0.0.26/tests/test_licensing_cli.py +148 -0
- plexora-0.0.26/tests/test_licensing_client.py +207 -0
- plexora-0.0.26/tests/test_licensing_delegation.py +168 -0
- plexora-0.0.26/tests/test_licensing_enforcement.py +314 -0
- plexora-0.0.26/tests/test_licensing_entitlements.py +93 -0
- plexora-0.0.26/tests/test_licensing_hardening.py +339 -0
- plexora-0.0.26/tests/test_licensing_hpc.py +209 -0
- plexora-0.0.26/tests/test_licensing_plugins.py +154 -0
- plexora-0.0.26/tests/test_licensing_state.py +475 -0
- plexora-0.0.26/tests/test_licensing_vectors.py +61 -0
- plexora-0.0.26/tests/test_lifetime.py +114 -0
- plexora-0.0.26/tests/test_load_progress.py +108 -0
- plexora-0.0.26/tests/test_mcp_gating.py +111 -0
- plexora-0.0.26/tests/test_mcp_http.py +196 -0
- plexora-0.0.26/tests/test_mcp_qc.py +41 -0
- plexora-0.0.26/tests/test_mcp_server.py +118 -0
- plexora-0.0.26/tests/test_mcp_stdio.py +46 -0
- plexora-0.0.26/tests/test_mini_map.py +367 -0
- plexora-0.0.26/tests/test_node_image.py +812 -0
- plexora-0.0.26/tests/test_open_project.py +209 -0
- plexora-0.0.26/tests/test_paths.py +496 -0
- plexora-0.0.26/tests/test_pixel_scale.py +41 -0
- plexora-0.0.26/tests/test_plugin_boundary.py +558 -0
- plexora-0.0.26/tests/test_plugins.py +614 -0
- plexora-0.0.26/tests/test_popover_menu.py +58 -0
- plexora-0.0.26/tests/test_qc_bench.py +38 -0
- plexora-0.0.26/tests/test_qc_detectors.py +126 -0
- plexora-0.0.26/tests/test_qc_mirror.py +92 -0
- plexora-0.0.26/tests/test_qc_results.py +236 -0
- plexora-0.0.26/tests/test_qc_scan.py +124 -0
- plexora-0.0.26/tests/test_qc_session.py +331 -0
- plexora-0.0.26/tests/test_qc_units.py +266 -0
- plexora-0.0.26/tests/test_release_script.py +270 -0
- plexora-0.0.26/tests/test_remote_chunk_cache.py +245 -0
- plexora-0.0.26/tests/test_remote_connect.py +2089 -0
- plexora-0.0.26/tests/test_remote_discovery.py +146 -0
- plexora-0.0.26/tests/test_remote_image_provider.py +187 -0
- plexora-0.0.26/tests/test_remote_image_status.py +104 -0
- plexora-0.0.26/tests/test_remote_jobs.py +144 -0
- plexora-0.0.26/tests/test_remote_labels.py +171 -0
- plexora-0.0.26/tests/test_remote_locator.py +188 -0
- plexora-0.0.26/tests/test_remote_tables.py +164 -0
- plexora-0.0.26/tests/test_resource_status_notice.py +94 -0
- plexora-0.0.26/tests/test_segmentation_wait.py +159 -0
- plexora-0.0.26/tests/test_server_records.py +36 -0
- plexora-0.0.26/tests/test_session_expiry.py +177 -0
- plexora-0.0.26/tests/test_settings_webdata_page.py +123 -0
- plexora-0.0.26/tests/test_slider.py +295 -0
- plexora-0.0.26/tests/test_slider_css.py +235 -0
- plexora-0.0.26/tests/test_source_image_core.py +78 -0
- plexora-0.0.26/tests/test_subprocess_flags.py +58 -0
- plexora-0.0.26/tests/test_telemetry_agent.py +118 -0
- plexora-0.0.26/tests/test_telemetry_cli.py +85 -0
- plexora-0.0.26/tests/test_telemetry_client.py +172 -0
- plexora-0.0.26/tests/test_telemetry_config.py +159 -0
- plexora-0.0.26/tests/test_telemetry_dataset.py +116 -0
- plexora-0.0.26/tests/test_telemetry_hooks.py +176 -0
- plexora-0.0.26/tests/test_telemetry_hooks_cost.py +59 -0
- plexora-0.0.26/tests/test_telemetry_js.py +87 -0
- plexora-0.0.26/tests/test_telemetry_node.py +132 -0
- plexora-0.0.26/tests/test_telemetry_privacy.py +136 -0
- plexora-0.0.26/tests/test_telemetry_queue.py +192 -0
- plexora-0.0.26/tests/test_telemetry_routes.py +147 -0
- plexora-0.0.26/tests/test_telemetry_schema.py +117 -0
- plexora-0.0.26/tests/test_telemetry_tiles.py +49 -0
- plexora-0.0.26/tests/test_telemetry_uploader.py +236 -0
- plexora-0.0.26/tests/test_thumbnail_rgb.py +68 -0
- plexora-0.0.26/tests/test_tile_colorize.py +74 -0
- plexora-0.0.26/tests/test_toast.py +74 -0
- plexora-0.0.26/tests/test_tool_cards.py +226 -0
- plexora-0.0.26/tests/test_updates.py +497 -0
- plexora-0.0.26/tests/test_view_menu.py +146 -0
- plexora-0.0.26/tests/test_view_transform.py +184 -0
- plexora-0.0.26/tests/test_view_transform_routes.py +88 -0
- plexora-0.0.26/tests/test_viewer_sessions.py +99 -0
- plexora-0.0.26/tests/test_visium_hd_import.py +302 -0
- plexora-0.0.26/tests/test_visium_import.py +332 -0
- plexora-0.0.22/MANIFEST.in +0 -16
- plexora-0.0.22/PKG-INFO +0 -550
- plexora-0.0.22/README.md +0 -499
- plexora-0.0.22/plexora/__init__.py +0 -372
- plexora-0.0.22/plexora/_resources.py +0 -382
- plexora-0.0.22/plexora/api/__init__.py +0 -124
- plexora-0.0.22/plexora/api/dataset.py +0 -654
- plexora-0.0.22/plexora/api/http.py +0 -19
- plexora-0.0.22/plexora/api/plugin.py +0 -743
- plexora-0.0.22/plexora/api/store.py +0 -221
- plexora-0.0.22/plexora/cli.py +0 -2314
- plexora-0.0.22/plexora/client/dist/vendor_bundle.js +0 -2
- plexora-0.0.22/plexora/client/external/openseadragon-bin-2.4.0/canvas-overlay-hd.js +0 -140
- plexora-0.0.22/plexora/client/src/css/main.css +0 -7172
- plexora-0.0.22/plexora/client/src/css/quickView.css +0 -445
- plexora-0.0.22/plexora/client/src/css/settings.css +0 -876
- plexora-0.0.22/plexora/client/src/css/viewer.css +0 -3041
- plexora-0.0.22/plexora/client/src/js/main.js +0 -1728
- plexora-0.0.22/plexora/client/src/js/pluginRegistry.js +0 -152
- plexora-0.0.22/plexora/client/src/js/services/appStatus.js +0 -315
- plexora-0.0.22/plexora/client/src/js/services/browsePicker.js +0 -525
- plexora-0.0.22/plexora/client/src/js/services/connectionModal.js +0 -2874
- plexora-0.0.22/plexora/client/src/js/services/dataLayer.js +0 -429
- plexora-0.0.22/plexora/client/src/js/services/fileLocation.js +0 -704
- plexora-0.0.22/plexora/client/src/js/services/numericData.js +0 -128
- plexora-0.0.22/plexora/client/src/js/services/resourceRouting.js +0 -249
- plexora-0.0.22/plexora/client/src/js/services/resourceStatus.js +0 -527
- plexora-0.0.22/plexora/client/src/js/services/sessionExpiry.js +0 -338
- plexora-0.0.22/plexora/client/src/js/services/toast.js +0 -175
- plexora-0.0.22/plexora/client/src/js/views/cardList.js +0 -258
- plexora-0.0.22/plexora/client/src/js/views/columnClassifier.js +0 -146
- plexora-0.0.22/plexora/client/src/js/views/confirmDialog.js +0 -197
- plexora-0.0.22/plexora/client/src/js/views/datasetNav.js +0 -284
- plexora-0.0.22/plexora/client/src/js/views/glInit.js +0 -267
- plexora-0.0.22/plexora/client/src/js/views/gradientRange.js +0 -523
- plexora-0.0.22/plexora/client/src/js/views/imageViewer.js +0 -3128
- plexora-0.0.22/plexora/client/src/js/views/importHelp.js +0 -576
- plexora-0.0.22/plexora/client/src/js/views/importSample.js +0 -1581
- plexora-0.0.22/plexora/client/src/js/views/labelTile.js +0 -154
- plexora-0.0.22/plexora/client/src/js/views/layerChannelPanel.js +0 -396
- plexora-0.0.22/plexora/client/src/js/views/layerManager.js +0 -1862
- plexora-0.0.22/plexora/client/src/js/views/miniMap.js +0 -843
- plexora-0.0.22/plexora/client/src/js/views/navbarControls.js +0 -161
- plexora-0.0.22/plexora/client/src/js/views/openProjectPage.js +0 -887
- plexora-0.0.22/plexora/client/src/js/views/pluginHelp.js +0 -116
- plexora-0.0.22/plexora/client/src/js/views/popoverMenu.js +0 -129
- plexora-0.0.22/plexora/client/src/js/views/projectEdit.js +0 -607
- plexora-0.0.22/plexora/client/src/js/views/quickViewLanding.js +0 -348
- plexora-0.0.22/plexora/client/src/js/views/rgbImageViewer.js +0 -121
- plexora-0.0.22/plexora/client/src/js/views/searchableSelect.js +0 -419
- plexora-0.0.22/plexora/client/src/js/views/segmentationWait.js +0 -317
- plexora-0.0.22/plexora/client/src/js/views/settingsPage.js +0 -1491
- plexora-0.0.22/plexora/client/src/js/views/slider.js +0 -831
- plexora-0.0.22/plexora/client/src/js/views/tileColorize.js +0 -321
- plexora-0.0.22/plexora/client/src/js/views/tileDecode.js +0 -317
- plexora-0.0.22/plexora/client/src/js/views/toolLoader.js +0 -1286
- plexora-0.0.22/plexora/client/src/js/views/viewerErrorState.js +0 -139
- plexora-0.0.22/plexora/client/src/js/views/viewerManager.js +0 -2366
- plexora-0.0.22/plexora/client/src/js/views/viewerSidebar.js +0 -1731
- plexora-0.0.22/plexora/client/templates/base.html +0 -454
- plexora-0.0.22/plexora/client/templates/index.html +0 -598
- plexora-0.0.22/plexora/client/templates/open_project.html +0 -118
- plexora-0.0.22/plexora/client/templates/project_edit.html +0 -361
- plexora-0.0.22/plexora/client/templates/settings.html +0 -365
- plexora-0.0.22/plexora/connect.py +0 -3126
- plexora-0.0.22/plexora/datasets.py +0 -1192
- plexora-0.0.22/plexora/datasource.py +0 -1441
- plexora-0.0.22/plexora/gcloud.py +0 -2158
- plexora-0.0.22/plexora/jupyter.py +0 -950
- plexora-0.0.22/plexora/memory.py +0 -785
- plexora-0.0.22/plexora/nodes.py +0 -906
- plexora-0.0.22/plexora/paths.py +0 -822
- plexora-0.0.22/plexora/plugins/cell_explorer/__init__.py +0 -105
- plexora-0.0.22/plexora/plugins/cell_explorer/static/cellExplorerSidebarController.js +0 -874
- plexora-0.0.22/plexora/plugins/figure_builder/__init__.py +0 -173
- plexora-0.0.22/plexora/plugins/figure_builder/server/compose.py +0 -825
- plexora-0.0.22/plexora/plugins/figure_builder/server/export_jobs.py +0 -148
- plexora-0.0.22/plexora/plugins/figure_builder/server/provenance.py +0 -174
- plexora-0.0.22/plexora/plugins/figure_builder/server/render.py +0 -441
- plexora-0.0.22/plexora/plugins/figure_builder/server/schema.py +0 -1397
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureCanvas.js +0 -3516
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureCaptureBoxes.js +0 -369
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureCaptureDock.js +0 -516
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureCaptureTool.js +0 -1060
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureContextBar.js +0 -1267
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureExportUi.js +0 -174
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureImagePanel.js +0 -1558
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureLibrary.js +0 -251
- plexora-0.0.22/plexora/plugins/figure_builder/static/figurePanelCompositor.js +0 -157
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureQuickEdit.js +0 -970
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureSceneSnapshot.js +0 -380
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureSchema.js +0 -466
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureSidebarController.js +0 -1238
- plexora-0.0.22/plexora/plugins/figure_builder/static/figureWorkspace.js +0 -2692
- plexora-0.0.22/plexora/plugins/figure_builder/static/figure_builder.css +0 -5986
- plexora-0.0.22/plexora/plugins/figure_builder/templates/figure_builder/workspace.html +0 -27
- plexora-0.0.22/plexora/plugins/gating/__init__.py +0 -80
- plexora-0.0.22/plexora/plugins/gating/server/anndata_gates.py +0 -367
- plexora-0.0.22/plexora/plugins/gating/server/model.py +0 -275
- plexora-0.0.22/plexora/plugins/gating/server/routes.py +0 -226
- plexora-0.0.22/plexora/plugins/gating/server/tableops.py +0 -119
- plexora-0.0.22/plexora/plugins/gating/static/csvGatingList.js +0 -940
- plexora-0.0.22/plexora/plugins/gating/static/gating.css +0 -274
- plexora-0.0.22/plexora/plugins/gating/static/gatingApi.js +0 -230
- plexora-0.0.22/plexora/plugins/gating/static/gatingSidebarController.js +0 -913
- plexora-0.0.22/plexora/plugins/gating/templates/gating/panel.html +0 -88
- plexora-0.0.22/plexora/plugins/roi/__init__.py +0 -101
- plexora-0.0.22/plexora/plugins/roi/static/roiApi.js +0 -192
- plexora-0.0.22/plexora/plugins/roi/static/roiSidebarController.js +0 -1063
- plexora-0.0.22/plexora/plugins/roi/static/roiState.js +0 -522
- plexora-0.0.22/plexora/plugins/roi/static/roiTools.js +0 -1029
- plexora-0.0.22/plexora/plugins/transcripts/__init__.py +0 -99
- plexora-0.0.22/plexora/plugins/transcripts/server/routes.py +0 -585
- plexora-0.0.22/plexora/plugins/transcripts/static/transcriptGroupModal.js +0 -635
- plexora-0.0.22/plexora/plugins/transcripts/static/transcriptLayer.js +0 -1529
- plexora-0.0.22/plexora/plugins/transcripts/static/transcriptPoints.js +0 -892
- plexora-0.0.22/plexora/plugins/transcripts/static/transcripts.css +0 -1358
- plexora-0.0.22/plexora/plugins/transcripts/static/transcriptsSidebarController.js +0 -1213
- plexora-0.0.22/plexora/plugins/transcripts/templates/transcripts/panel.html +0 -236
- plexora-0.0.22/plexora/plugins/visium_hd/__init__.py +0 -56
- plexora-0.0.22/plexora/plugins/visium_hd/server/routes.py +0 -238
- plexora-0.0.22/plexora/plugins/visium_hd/static/binLayer.js +0 -557
- plexora-0.0.22/plexora/plugins/visium_hd/static/visiumHdApi.js +0 -97
- plexora-0.0.22/plexora/plugins/visium_hd/static/visiumHdSidebarController.js +0 -840
- plexora-0.0.22/plexora/plugins/visium_hd/static/visium_hd.css +0 -360
- plexora-0.0.22/plexora/plugins/visium_hd/templates/visium_hd/panel.html +0 -115
- plexora-0.0.22/plexora/server/models/adapters/__init__.py +0 -118
- plexora-0.0.22/plexora/server/models/adapters/anndata_adapter.py +0 -1108
- plexora-0.0.22/plexora/server/models/adapters/base.py +0 -181
- plexora-0.0.22/plexora/server/models/adapters/csv_adapter.py +0 -132
- plexora-0.0.22/plexora/server/models/adapters/inspection.py +0 -329
- plexora-0.0.22/plexora/server/models/adapters/spatialdata_adapter.py +0 -252
- plexora-0.0.22/plexora/server/models/bin_tiles.py +0 -905
- plexora-0.0.22/plexora/server/models/centroid_tiles.py +0 -399
- plexora-0.0.22/plexora/server/models/data_migration.py +0 -307
- plexora-0.0.22/plexora/server/models/data_model.py +0 -3544
- plexora-0.0.22/plexora/server/models/database_model.py +0 -187
- plexora-0.0.22/plexora/server/models/import_proposal.py +0 -2359
- plexora-0.0.22/plexora/server/models/import_sample.py +0 -592
- plexora-0.0.22/plexora/server/models/layer_jobs.py +0 -373
- plexora-0.0.22/plexora/server/models/layer_sources.py +0 -753
- plexora-0.0.22/plexora/server/models/manifest.py +0 -350
- plexora-0.0.22/plexora/server/models/project.py +0 -2300
- plexora-0.0.22/plexora/server/models/recipes.py +0 -1139
- plexora-0.0.22/plexora/server/models/remote_sessions.py +0 -1248
- plexora-0.0.22/plexora/server/models/transcript_tiles.py +0 -1260
- plexora-0.0.22/plexora/server/node/api.py +0 -1544
- plexora-0.0.22/plexora/server/node/app.py +0 -675
- plexora-0.0.22/plexora/server/node/resources.py +0 -838
- plexora-0.0.22/plexora/server/plugins.py +0 -253
- plexora-0.0.22/plexora/server/providers/__init__.py +0 -223
- plexora-0.0.22/plexora/server/providers/base.py +0 -340
- plexora-0.0.22/plexora/server/providers/http.py +0 -460
- plexora-0.0.22/plexora/server/providers/local.py +0 -594
- plexora-0.0.22/plexora/server/providers/node.py +0 -575
- plexora-0.0.22/plexora/server/providers/operations.py +0 -143
- plexora-0.0.22/plexora/server/routes/browse_routes.py +0 -366
- plexora-0.0.22/plexora/server/routes/data_routes.py +0 -1116
- plexora-0.0.22/plexora/server/routes/gcloud_routes.py +0 -362
- plexora-0.0.22/plexora/server/routes/import_routes.py +0 -975
- plexora-0.0.22/plexora/server/routes/page_routes.py +0 -359
- plexora-0.0.22/plexora/server/routes/project_routes.py +0 -881
- plexora-0.0.22/plexora/server/routes/settings_routes.py +0 -1244
- plexora-0.0.22/plexora/server/routes/system_routes.py +0 -39
- plexora-0.0.22/plexora/server/routes/tool_routes.py +0 -523
- plexora-0.0.22/plexora/server/utils/boundary_mask.py +0 -547
- plexora-0.0.22/plexora/server/utils/brightfield.py +0 -1232
- plexora-0.0.22/plexora/server/utils/dicom_wsi.py +0 -1304
- plexora-0.0.22/plexora/server/utils/fast_png.py +0 -97
- plexora-0.0.22/plexora/server/utils/native_dialog.py +0 -368
- plexora-0.0.22/plexora/server/utils/ome_zarr.py +0 -805
- plexora-0.0.22/plexora/server/utils/segmentation_pyramid.py +0 -874
- plexora-0.0.22/plexora/server/utils/tenx_matrix.py +0 -640
- plexora-0.0.22/plexora/server/utils/xenium_focus.py +0 -301
- plexora-0.0.22/plexora/server_cli.py +0 -58
- plexora-0.0.22/plexora.egg-info/PKG-INFO +0 -550
- plexora-0.0.22/plexora.egg-info/SOURCES.txt +0 -570
- plexora-0.0.22/plexora.egg-info/entry_points.txt +0 -12
- plexora-0.0.22/plexora.egg-info/requires.txt +0 -45
- plexora-0.0.22/pyproject.toml +0 -186
- plexora-0.0.22/tests/test_app_shell.py +0 -245
- plexora-0.0.22/tests/test_bin_tiles.py +0 -278
- plexora-0.0.22/tests/test_boundary_mask.py +0 -327
- plexora-0.0.22/tests/test_cell_mode_control.py +0 -437
- plexora-0.0.22/tests/test_channel_auto_revert.py +0 -135
- plexora-0.0.22/tests/test_cli.py +0 -1507
- plexora-0.0.22/tests/test_connect.py +0 -2349
- plexora-0.0.22/tests/test_connection_modal.py +0 -650
- plexora-0.0.22/tests/test_dataset_nav.py +0 -74
- plexora-0.0.22/tests/test_gcloud.py +0 -1416
- plexora-0.0.22/tests/test_import_dialog.py +0 -188
- plexora-0.0.22/tests/test_import_entry_points.py +0 -190
- plexora-0.0.22/tests/test_layer_manager.py +0 -40
- plexora-0.0.22/tests/test_layer_sources.py +0 -490
- plexora-0.0.22/tests/test_mini_map.py +0 -305
- plexora-0.0.22/tests/test_node_image.py +0 -781
- plexora-0.0.22/tests/test_open_project.py +0 -207
- plexora-0.0.22/tests/test_paths.py +0 -495
- plexora-0.0.22/tests/test_plugin_boundary.py +0 -520
- plexora-0.0.22/tests/test_plugins.py +0 -610
- plexora-0.0.22/tests/test_popover_menu.py +0 -55
- plexora-0.0.22/tests/test_remote_connect.py +0 -2047
- plexora-0.0.22/tests/test_resource_status_banner.py +0 -94
- plexora-0.0.22/tests/test_segmentation_wait.py +0 -158
- plexora-0.0.22/tests/test_session_expiry.py +0 -169
- plexora-0.0.22/tests/test_slider.py +0 -259
- plexora-0.0.22/tests/test_slider_css.py +0 -231
- plexora-0.0.22/tests/test_tile_colorize.py +0 -66
- plexora-0.0.22/tests/test_toast.py +0 -70
- plexora-0.0.22/tests/test_tool_cards.py +0 -214
- plexora-0.0.22/tests/test_view_menu.py +0 -155
- plexora-0.0.22/tests/test_visium_hd_import.py +0 -293
- {plexora-0.0.22 → plexora-0.0.26}/LICENSE +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/__main__.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/_transient_locks.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/_url.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/askpass.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/354_bundle.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/354_bundle.js.LICENSE.txt +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/418_bundle.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/418_bundle.js.LICENSE.txt +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/693b935cb1f907814be9c6199a68c217.svg +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/713c134ff47cd328a5b711526f151082.svg +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/770_bundle.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/ff743f408972e0e96ca9153ed5ae4c83.svg +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/vendor_bundle.js.LICENSE.txt +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/vendors-node_modules_canvg_lib_index_es_js_bundle.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/vendors-node_modules_dompurify_dist_purify_es_mjs_bundle.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/dist/vendors-node_modules_html2canvas_dist_html2canvas_js_bundle.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/LICENSE.txt +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/changelog.txt +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/.gitattributes +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-scalebar.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/css/import.css +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/css/openProject.css +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/css/tokens.css +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/apple-touch-icon.png +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/favicon.ico +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/logo.ai +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/logo.svg +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/logo_with_text.ai +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/img/logo_with_text.svg +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/appRouter.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/carryOver.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/dataLocation.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/datasetContext.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/failureMessage.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/glRenderer.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/keyboardShortcuts.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/logTerminal.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/pageBoot.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/passVariablesToFrontend.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/pathPicker.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/placePicker.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/remoteGlobe.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/remoteState.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/renderClipboard.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/simpleEventHandler.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/services/viewerLoader.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/vendor.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/brightfieldAdjust.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/channelList.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/channelNamesUpload.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/colorSwatchPicker.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/coordinateField.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/dataSourceField.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/datasetPicker.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/fileSourceRow.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/jobProgress.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/layerSections.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/layerStack.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/panCursor.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/popoverPortal.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/rainbow.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/requirementsModal.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/scaleCalibration.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/tableProgress.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/views/viewerControls.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/js/workers/tileDecoder.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/shaders/frag.glsl +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/src/shaders/vert.glsl +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/templates/_fragment.html +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/templates/_scale_calibration.html +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/client/templates/_scale_calibration_float.html +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/notebook_env.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/__init__.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/server/__init__.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/server/routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/server/state.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/server/values.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/server/variables.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerApi.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerColors.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerContinuous.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerFigureBridge.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerLegend.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerRoiBridge.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cellExplorerState.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/static/cell_explorer.css +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/cell_explorer/templates/cell_explorer/panel.html +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/__init__.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/captures.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/export.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/operations.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/pixels.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/repository.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/shapegeom.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/sources.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/strokegeom.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/server/textmetrics.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureActions.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureBuilderApi.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureCaptureBin.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureCaptureBinGrid.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureChoiceField.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureColorField.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureConfirm.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureContextMenu.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureDestinationPicker.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureDocumentState.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureLineDefs.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureLinePanel.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figurePointEditor.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureRichText.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureShapeDefs.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureShapeDrawing.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureShapeGeometry.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureShapePanel.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureStrokeGeometry.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureTextEditor.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureTextPanel.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureThumbnail.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/static/figureViewOptions.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/templates/figure_builder/captures.html +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/templates/figure_builder/library.html +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/figure_builder/templates/figure_builder/workspace_body.html +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/gating/server/__init__.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/gating/server/database.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/gating/templates/gating/legacy.html +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/__init__.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/adapters.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/geojson.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/geometry.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/mapping.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/operations.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/repository.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/schema.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/server/tableops.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/static/roi.css +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/static/roiFigureBridge.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/static/roiGeometry.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/static/roiRenderer.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/static/roiTree.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/roi/templates/roi/panel.html +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/transcripts/server/__init__.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/transcripts/server/xenium.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/transcripts/static/transcriptsApi.js +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/visium_hd/server/__init__.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/plugins/visium_hd/server/tenx.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/proxy.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/adapters/classify.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/adapters/flat_table.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/adapters/memory_adapter.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/consistency.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/datasets.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/nodes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/remotes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/models/secret_store.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/providers/memory.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/providers/wire.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/routes/dataset_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/routes/transfer_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/addHEColumns.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/channel_file.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/colormaps.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/dir_listing.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/file_transfer.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/fullConversion.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/memory_pyramid.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/ngff_transform.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/pre_normalization.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/smallestenclosingcircle.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/spatial_scene.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/tiff_series.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/tiffsurgeon.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/server/utils/xenium_cells.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora/test.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora.egg-info/dependency_links.txt +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/plexora.egg-info/top_level.txt +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/setup.cfg +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_anndata_adapter.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_api_dataset.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_api_store.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_app_router.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_auth_token.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_blank_frame.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_brightfield_detection.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_brightfield_pipeline.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_brightfield_reader.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_brightfield_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_browse_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_carry_over.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_cell_color_layer.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_centroid_tiles.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_channel_names_modal.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_channel_names_sidecar.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_channel_names_upload.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_channel_overview.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_channel_rename_state.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_classify_columns.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_colormaps.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_column_classifier_css.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_config_store.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_consistency.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_csv_adapter.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_data_location.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_database_model.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_datalayer_requests.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_dataset_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_datasets_api.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_datasets_api_on_a_node.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_datasets_registry.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_derive_anndata_channel_names.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_detect_data_type.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_dicom_assembly.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_dicom_detection.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_dicom_pyramid.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_dicom_registration.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_dicom_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_file_location.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_file_transfer_node.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_hd_slider_domain.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_home_landing.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_icon_names.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_image_status.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_import_costs_nothing.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_import_from_a_node.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_import_help.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_import_proposal.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_import_sample_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_jupyter_viewer.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_label_outlines.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_label_region.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_label_tile_lifecycle.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_launch_state.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_channel_panel.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_draw.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_jobs.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_spec.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_state.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_transform.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_layer_visibility.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_manifest.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_marker_split.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_mask_without_table.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_memory_adapter.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_memory_datasource.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_memory_pyramid.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_metadata_columns.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_nav_shortcuts.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_direct_routing.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_disconnect.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_dynamic.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_image_type.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_mask_status.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_reconnect.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_table.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_node_warm_and_cache.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_notebook_env.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_notebook_mode.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_ome_zarr_reader.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_optional_segmentation.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_page_assets.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_page_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_parquet_tables.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_path_picker.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_pixel_size.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_plugin_css_boundary.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_plugin_layers.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_popover_portal.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_prime_hot_code.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_project_edit_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_project_layer_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_project_record.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_recipes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_reconnect.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_refresh_dataset.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_register_anndata_datasource.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_register_image_datasource.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_register_zarr_image_datasource.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_remote_globe.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_remote_health.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_remote_state.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_rename_channels.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_rename_channels_json.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_render_clipboard.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_requirements_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_segmentation_mapping.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_segmentation_mode_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_segmentation_pyramid.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_session_walltime.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_settings_page.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_settings_remotes_page.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_shared_roots.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_sidebar_scoping.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_single_image_import.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_spatial_scene.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_spatialdata_adapter.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_spatialdata_image_import.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_staged_progress.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_table_progress.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_tenx_matrix.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_tiff_hyperstack.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_tile_url.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_tool_assets.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_tool_coexistence.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_tool_switching.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_transcript_tiles.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_transfer_routes.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_unreachable_node.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_url_helpers.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_viewer_error_state.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_viewer_loader.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_wide_features.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_xenium_cells.py +0 -0
- {plexora-0.0.22 → plexora-0.0.26}/tests/test_xenium_focus.py +0 -0
- {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
|
plexora-0.0.26/PKG-INFO
ADDED
|
@@ -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
|
+

|
|
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
|
+

|
|
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).
|
plexora-0.0.26/README.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Plexora
|
|
2
|
+
|
|
3
|
+

|
|
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
|
+

|
|
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).
|