cubevis 1.0.28__tar.gz → 1.0.35__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.
- {cubevis-1.0.28 → cubevis-1.0.35}/PKG-INFO +1 -1
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__js__/bokeh-3.8/cubevisjs.min.js +6 -6
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/models/_showable.py +4 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/sources/_data_pipe.py +28 -1
- {cubevis-1.0.28 → cubevis-1.0.35}/pyproject.toml +1 -1
- {cubevis-1.0.28 → cubevis-1.0.35}/LICENSE +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/README.rst +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/LICENSE.rst +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/20px/fast-backward.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/20px/fast-forward.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/20px/step-backward.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/20px/step-forward.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/add-chan.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/add-chan.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/add-cube.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/add-cube.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/drag.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/drag.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/mask-selected.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/mask.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/mask.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/new-layer-sm-selected.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/new-layer-sm-selected.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/new-layer-sm.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/new-layer-sm.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/reset.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/reset.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/sub-chan.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/sub-chan.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/sub-cube.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/sub-cube.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/trash.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/trash.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/trash_full.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/trash_full.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/trash_full_raw.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/zoom-to-fit.png +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__icons__/zoom-to-fit.svg +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__js__/bokeh-3.6/cubevisjs.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__js__/bokeh-3.7/cubevisjs.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/__js__/casalib.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/annotations/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/annotations/_ev_poly_annotation.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/components/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/format/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/format/_time_ticks.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/format/_wcs_ticks.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/models/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/models/_bokeh_app_context.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/models/_edit_span.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/models/_ev_text_input.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/models/_shared_dict.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/models/_tip.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/models/_tip_button.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/sources/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/sources/_image_data_source.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/sources/_image_pipe.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/sources/_spectra_data_source.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/sources/_updatable_data_source.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/_current.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/_initialize.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/_javascript.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/_palette.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/_session.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/js/bokeh-2.4.1.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/js/bokeh-gl-2.4.1.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/js/bokeh-tables-2.4.1.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/js/bokeh-widgets-2.4.1.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/js/casaguijs-v0.0.4.0-b2.4.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/js/casaguijs-v0.0.5.0-b2.4.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/js/casaguijs-v0.0.6.0-b2.4.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/state/js/casalib-v0.0.1.min.js +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/tools/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/tools/_cbreset_tool.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/tools/_drag_tool.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/utils/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/utils/_axes_labels.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/bokeh/utils/_svg_icon.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/data/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/data/casaimage/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/exe/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/exe/_context.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/exe/_mode.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/exe/_setting.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/exe/_task.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/_gclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/apps/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/apps/_createmask.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/apps/_createregion.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/apps/_interactiveclean.mustache +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/apps/_interactiveclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/apps/_interactivecleannotebook.mustache +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/apps/_interactivecleannotebook.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/apps/_plotants.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/apps/_plotbandpass.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/casashell/createmask.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/casashell/iclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/casatasks/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/casatasks/createmask.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/casatasks/createregion.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/casatasks/iclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/private/casatasks/iclean_notebook.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/readme.rst +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/remote/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/remote/_gclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/remote/_local.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/remote/_remote_kernel.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/toolbox/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/toolbox/_app_context.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/toolbox/_cube.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/toolbox/_interactive_clean_ui.mustache +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/toolbox/_interactive_clean_ui.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/toolbox/_interactiveclean_wrappers.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/toolbox/_region_list.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_ResourceManager.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/__init__.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_browser.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_contextmgrchain.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_conversion.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_copydoc.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_docenum.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_git.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_import_protected_module.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_jupyter.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_logging.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_mutual_exclusion.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_pkgs.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_regions.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_static.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/cubevis/utils/_tiles.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/alma-many-chan/alma-many-chan.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/basic-websockets-demo/client.html +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/basic-websockets-demo/client.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/basic-websockets-demo/server.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/createmask-demo/run-createmask.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/createregion-demo/run-createregion.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/cubemask-demo/image-slider-spectra-done-stats.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/cubemask-demo/image-slider-spectra-done.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/cubemask-demo/image-slider-spectra.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/cubemask-demo/image-slider.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/cubemask-demo/image.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-demo/iclean-demo.ipynb +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-demo/m100_interactive.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-demo/mask0-iclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-demo/run-gclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-demo/run-iclean-obj.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-demo/run-iclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-demo/vla-sim-jet-iclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-first-look/run-fl-cont.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-first-look/run-fl-line.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-outlier/run-iclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-outlier/test_outlier.txt +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/iclean-remote/iclean_remote_webserver.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/large-cube/run-largecube.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/svg-test.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/updatable-data-source/direct-plot.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/updatable-data-source/simple-update.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/updatable-data-source/updated-plot.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/uranus-demo/uranus-iclean.py +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/websocket-reconnect/client.html +0 -0
- {cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/websocket-reconnect/server.py +0 -0
|
@@ -42,15 +42,15 @@
|
|
|
42
42
|
}
|
|
43
43
|
})
|
|
44
44
|
({
|
|
45
|
-
"07c9fde72b": function _(e,t,
|
|
46
|
-
"
|
|
45
|
+
"07c9fde72b": function _(e,a,t,o,c){o();const i=e("tslib"),n=e("31b6f4b4a1");c("DataPipe",n.DataPipe);c("activeDataPipes",e("5179d11e71").activeDataPipes);const p=e("2889e0dd45");c("ImagePipe",p.ImagePipe);const s=e("de65005924");c("ImageDataSource",s.ImageDataSource);const r=e("02e3c3e46c");c("SpectraDataSource",r.SpectraDataSource);const S=e("64b16deff9");c("UpdatableDataSource",S.UpdatableDataSource);const d=e("b6ae454f0d");c("WcsTicks",d.WcsTicks);const l=e("cb7d28d6b3");c("DragTool",l.DragTool);const D=e("9d3c34ff8e");c("CBResetTool",D.CBResetTool);const T=e("e3901fa9f2");c("serialize",T.serialize),c("deserialize",T.deserialize);const b=e("9f961622ce");c("TipButton",b.TipButton);const u=e("ca4c845905");c("Tip",u.Tip);const f=e("a6e757a69a");c("Showable",f.Showable);const P=e("467d2716b0");c("BokehAppContext",P.BokehAppContext);const g=e("50a1e32f01");c("SharedDict",g.SharedDict);const h=e("b55081402e");c("EditSpan",h.EditSpan);const B=e("9144bfc7a5");c("EvTextInput",B.EvTextInput);const E=e("74e0abef8a");c("EvPolyAnnotation",E.EvPolyAnnotation);const I=i.__importStar(e("484bb85d20"));t.find=I;(0,e("@bokehjs/base").register_models)({DataPipe:n.DataPipe,ImagePipe:p.ImagePipe,ImageDataSource:s.ImageDataSource,SpectraDataSource:r.SpectraDataSource,UpdatableDataSource:S.UpdatableDataSource,WcsTicks:d.WcsTicks,DragTool:l.DragTool,CBResetTool:D.CBResetTool,Tip:u.Tip,TipButton:b.TipButton,SharedDict:g.SharedDict,Showable:f.Showable,BokehAppContext:P.BokehAppContext,EditSpan:h.EditSpan,EvTextInput:B.EvTextInput,EvPolyAnnotation:E.EvPolyAnnotation})},
|
|
46
|
+
"31b6f4b4a1": function _(e,s,t,o,i){var n;o();const c=e("@bokehjs/models/sources/data_source"),a=e("e3901fa9f2"),l=e("@bokehjs/core/util/callbacks"),r=e("5179d11e71");class d extends c.DataSource{constructor(e){super(e),this.send_queue={},this.connection_queue=[],this.pending={},this.incoming_callbacks={},this.session_id=casalib.object_id(this)}isColab(){return void 0!==window.google&&void 0!==window.google.colab&&void 0!==window.google.colab.kernel}async getWebSocketUrl(){const[e,s]=this.address;if(this.isColab())try{const e=window.google,t=(await e.colab.kernel.proxyPort(s,{cache:!0})).replace(/^https:/,"wss:");return console.log(`Colab proxy URL for port ${s}: ${t}`),t}catch(t){return console.error("Error getting Colab proxy URL:",t),`ws://${e}:${s}`}return`ws://${e}:${s}`}checkSessionConflict(){try{if("undefined"==typeof Storage)return console.warn("localStorage not available, skipping session conflict detection"),!0;const e=localStorage.getItem(this.session_storage_key);if(e){const s=JSON.parse(e);if(s.sessionId!==this.session_id&&Date.now()-s.timestamp<12e4){if(this.conflict_check){const e=`CubeVis DataPipe (${this.instance_key}) is already running in another browser window or tab.\n\nPlease close other instances and refresh this page, or\nclose this window to continue using the other instance.`;return alert(e),window.opener||1===window.history.length?window.close():window.location.href="about:blank",!1}console.group(`DataPipe ${this.instance_key} conflict detected in Jupyter context`),console.log("Current session ID:",this.session_id),console.log("Existing session ID:",s.sessionId),console.log("Existing timestamp:",new Date(s.timestamp).toISOString()),console.log("Age of existing session (ms):",Date.now()-s.timestamp),console.log("Address:",this.address),console.log("Instance key:",this.instance_key),console.log("Storage key:",this.session_storage_key),console.log("Existing data:",s),console.log("All localStorage keys:",Object.keys(localStorage).filter((e=>e.startsWith("cubevis_datapipe_")))),console.groupEnd()}}return this.updateSessionHeartbeat(),!0}catch(e){return console.warn("Session conflict detection failed:",e),!0}}updateSessionHeartbeat(){try{"undefined"!=typeof Storage&&localStorage.setItem(this.session_storage_key,JSON.stringify({sessionId:this.session_id,timestamp:Date.now(),instanceKey:this.instance_key}))}catch(e){console.warn("Session heartbeat update failed:",e)}}startHeartbeat(){this.heartbeat_interval=window.setInterval((()=>{this.updateSessionHeartbeat()}),3e4)}stopHeartbeat(){this.heartbeat_interval&&(clearInterval(this.heartbeat_interval),this.heartbeat_interval=void 0)}cleanupSession(){try{if("undefined"!=typeof Storage){const e=localStorage.getItem(this.session_storage_key);if(e){JSON.parse(e).sessionId===this.session_id&&localStorage.removeItem(this.session_storage_key)}}}catch(e){console.warn("Session cleanup failed:",e)}this.stopHeartbeat()}handleSessionConflictMessage(e){console.error("Session conflict detected by server:",e);let s="Session conflict detected by server.";"session_conflict"===e.type?s=e.error||s:"session_corruption"===e.type&&(s=`Session corruption detected.\nExpected: ${e.expected}\nReceived: ${e.received}`),alert(s+"\n\nThis window will be closed to prevent data corruption."),this.cleanupSession();const t=new CustomEvent("cubevis_session_conflict",{detail:{message:e,sessionId:this.session_id}});window.dispatchEvent(t),setTimeout((()=>{window.opener||1===window.history.length?window.close():window.location.href="about:blank"}),2e3)}generateInstanceKey(){const e=`${this.address[0]}_${this.address[1]}`;return`${this.instance_id}_${e}`}async initializeWebSocket(){let e;if(this.isColab()){const[s,t]=this.address;console.log("=== Colab WebSocket Debug ==="),console.log("Port:",t);try{let s=null;const o=document.referrer;console.log("Referrer:",o),window.colab&&window.colab.global&&window.colab.global.config&&console.log("Colab config:",window.colab.global.config);try{window.parent&&window.parent.location&&console.log("Parent location:",window.parent.location.href)}catch(e){console.log("Cannot access parent location (CORS)")}const i=window.location.hostname.match(/([^-]+)-([^-]+)-\d+-colab/);if(i){const e=i[1],s=i[2];console.log("Session ID:",e,"Hash:",s)}const n=window.google;if(n&&n.colab&&n.colab.kernel&&(console.log("Available kernel properties:",Object.keys(n.colab.kernel)),n.colab.kernel.websocketUrl&&(console.log("Kernel WebSocket URL:",n.colab.kernel.websocketUrl),s=n.colab.kernel.websocketUrl)),s){const o=s.match(/wss?:\/\/([^\/]+)/);o?(e=`wss://${o[1]}/_proxy/${t}/`,console.log("Constructed kernel proxy URL:",e)):e=`wss://${s}/_proxy/${t}/`}else{console.log("Could not determine kernel domain, trying message passing..."),window.parent.postMessage({type:"request_kernel_domain"},"*");const s=await n.colab.kernel.proxyPort(t,{cache:!0});e=s.replace(/^https:/,"wss:"),console.log("Using googleusercontent proxy (may not work):",e)}}catch(o){console.error("Error in Colab proxy detection:",o),e=`ws://${s}:${t}`}console.log("=== End Debug ===")}else e=`ws://${this.address[0]}:${this.address[1]}`;console.log("Final datapipe url:",e);var s=void 0;document.shutdown_in_progress_=!1;var t=()=>{void 0!==this.websocket&&this.websocket.close(),this.websocket=new WebSocket(e),this.websocket.binaryType="arraybuffer",this.websocket.addEventListener("error",(e=>{console.log("error encountered:",e)})),this.websocket.onmessage=e=>{if("string"==typeof e.data||e.data instanceof String){let s=(0,a.deserialize)(e.data);if("id"in s&&"direction"in s&&"message"in s){let{id:e,message:t,direction:o}=s;if("error"===o&&("session_conflict"===e||e===this.session_id)&&t&&("session_conflict"===t.type||"session_corruption"===t.type||"close_duplicate"===t.action))return void this.handleSessionConflictMessage(t);if(void 0===t&&console.log("Error, event failure",s),"j2p"==o)if(e in this.pending){let{cb:o}=this.pending[e];if(delete this.pending[e],e in this.send_queue&&this.send_queue[e].length>0){let{cb:s,msg:t}=this.send_queue[e].shift();this.pending[e]={cb:s},this.websocket.send((0,a.serialize)(t))}void 0===t?console.log("DROPPING ERROR FOR NOW (maybe need error callbacks)",s):o(t)}else console.log("message received but could not find id");else if(e in this.incoming_callbacks){let s=this.incoming_callbacks[e](t);this.websocket.send((0,a.serialize)({id:e,direction:o,message:s,session:this.session_id}))}}else console.log(`datapipe received message without one of 'id', 'message' or 'direction': ${s}`)}else console.log("datapipe received binary data",e.data.byteLength,"bytes")},this.websocket.onopen=()=>{for(s?0==s.connected&&console.log(`connection reestablished at ${new Date}`):(this.websocket.send((0,a.serialize)({id:"initialize",direction:"j2p",session:this.session_id})),this.startHeartbeat()),s=new casalib.ReconnectState;this.connection_queue.length>0;){let e=this.connection_queue.shift();this.send.apply(e[0],e[1])}},this.websocket.onclose=()=>{if(s&&1==s.connected&&(console.log(`connection lost at ${new Date}`),s.connected=!1,!document.shutdown_in_progress_)){console.log(`connection lost at ${new Date}`);var e=s;function o(i){0==s.connected&&(console.log(`${i+1}\treconnection attempt ${new Date}`),t(),e.backoff(),e.retries>0?setTimeout(o,e.timeout,i+1):0==s.connected&&console.log(`aborting reconnection after ${i} attempts ${new Date}`))}o(0)}}};window.addEventListener("beforeunload",(()=>{this.cleanupSession()})),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState?this.stopHeartbeat():"visible"===document.visibilityState&&(this.updateSessionHeartbeat(),this.startHeartbeat())})),t()}initialize(){if(super.initialize(),r.activeDataPipes.register(this),this.instance_key=this.generateInstanceKey(),this.session_storage_key=`cubevis_datapipe_${this.instance_key}`,!this.checkSessionConflict())return;this.initializeWebSocket();(()=>{null!=this.init_script&&(0,l.execute)(this.init_script,this)})()}destroy(){r.activeDataPipes.unregister(this),super.destroy()}register(e,s){this.incoming_callbacks[e]=s}send(e,s,t,o=!1){let i={id:e,message:s,direction:"j2p",session:this.session_id};if(!this.websocket||e in this.pending)if(e in this.send_queue)if("boolean"==typeof o&&o&&this.send_queue[e].length>0)this.send_queue[e][0].msg=i,this.send_queue[e][0].cb=t;else if("function"==typeof o&&this.send_queue[e].length>0){let n=!1;for(const c of this.send_queue[e])o(c.msg.message)&&(c.msg=i,c.cb=t,n=!0);n||this.send_queue[e].push({cb:t,msg:i})}else this.send_queue[e].push({cb:t,msg:i});else this.send_queue[e]=[{cb:t,msg:i}];else if(this.websocket.readyState===WebSocket.CONNECTING)this.connection_queue.push([this,[e,s,t]]);else if(e in this.send_queue&&this.send_queue[e].length>0){this.send_queue[e].push({cb:t,msg:i});{let{cb:l,msg:r}=this.send_queue[e].shift();if(this.pending[e]={cb:l},this.websocket.readyState===WebSocket.OPEN)this.websocket.send((0,a.serialize)(r));else{let d=20,h=this;function g(){h.websocket.readyState===WebSocket.OPEN?h.websocket.send((0,a.serialize)(r)):(d-=1,d>0&&setTimeout(g,3e3))}setTimeout(g,3e3)}}}else if(this.websocket.readyState===WebSocket.OPEN)this.pending[e]={cb:t},this.websocket.send((0,a.serialize)(i));else{let u=20,b=this;function p(){b.websocket.readyState===WebSocket.OPEN?(b.pending[e]={cb:t},b.websocket.send((0,a.serialize)(i))):(u-=1,u>0&&setTimeout(p,3e3))}setTimeout(p,3e3)}}}t.DataPipe=d,n=d,d.__name__="DataPipe",d.__module__="cubevis.bokeh.sources._data_pipe",n.define((({Any:e,Tuple:s,String:t,Number:o,Bool:i})=>({init_script:[e,null],address:[s(t,o)],instance_id:[t],conflict_check:[i,!0]})))},
|
|
47
47
|
"e3901fa9f2": function _(e,r,s,i,o){i();const l=e("@bokehjs/base"),a=e("@bokehjs/core/resolvers"),t=e("@bokehjs/core/serialization/deserializer"),n=e("@bokehjs/core/serialization/serializer"),{deserialize:c}=new class{constructor(){this.resolver=new a.ModelResolver(l.default_resolver),this.deserializer=new t.Deserializer(this.resolver),this.deserialize=e=>{try{return this.deserializer.decode(JSON.parse(e))}catch(r){return console.group("deserialize error"),console.log(e),console.log(r),console.groupEnd(),{}}}}};s.deserialize=c;const{serialize:z}=new class{constructor(){this.serializer=new n.Serializer,this.serialize=e=>JSON.stringify(this.serializer.encode(e))}};s.serialize=z},
|
|
48
48
|
"5179d11e71": function _(a,e,n,c,t){c();const i=a("30b45c52a1");n.activeDataPipes=new i.ModelManager},
|
|
49
49
|
"30b45c52a1": function _(e,n,s,t,i){t();class r{constructor(){this.instances=new Map}register(e){this.instances.set(e.id,e),console.log(`registered instance ${e.id}`)}unregister(e){this.instances.delete(e.id),console.log(`unregistered instance ${e.id}`)}getInstances(){return Array.from(this.instances.values())}getInstance(e){return this.instances.get(e)}}s.ModelManager=r,r.__name__="ModelManager"},
|
|
50
|
-
"2889e0dd45": function _(i,e,
|
|
50
|
+
"2889e0dd45": function _(i,s,e,t,n){var a;t();const o=i("@bokehjs/models/sources/column_data_source"),d=i("31b6f4b4a1");class r extends d.DataPipe{constructor(i){super(i),this.position={},this._wcs=null}initialize(){super.initialize(),this.fits_header_json&&(this._wcs=new casalib.coordtxl.WCSTransform(new casalib.coordtxl.MapKeywordProvider(JSON.parse(this.fits_header_json))))}channel(i,s,e){this.position[e]={index:i};let t={action:"channel",index:i,id:e};super.send(this.dataid,t,(i=>{null!=this._histogram_source&&"hist"in i&&"top"in i.hist&&"bottom"in i.hist&&"left"in i.hist&&"right"in i.hist&&(this._histogram_source.data=i.hist),s(i)}))}spectrum(i,s,e,t=!1){let n={action:"spectrum",index:i,id:e};super.send(this.dataid,n,s,t)}adjust_colormap(i,s,e,t,n=!1){const a={action:"adjust-colormap",bounds:i,transfer:s,id:t};super.send(this.dataid,a,e,n)}refresh(i,s,e=[0,0]){let{index:t}=s in this.position?this.position[s]:{index:e};if(2===t.length){let e={action:"channel",index:t,id:s};super.send(this.dataid,e,i)}else if(3===t.length){let e={action:"spectrum",index:t,id:s};super.send(this.dataid,e,i)}}wcs(){return this._wcs}}e.ImagePipe=r,a=r,r.__name__="ImagePipe",r.__module__="cubevis.bokeh.sources._image_pipe",a.define((({Number:i,Nullable:s,String:e,Tuple:t,Ref:n})=>({dataid:[e],shape:[t(i,i,i,i)],fits_header_json:[s(e),null],_histogram_source:[s(n(o.ColumnDataSource)),null]})))},
|
|
51
51
|
"de65005924": function _(s,a,t,c,i){var o;c();const e=s("@bokehjs/models/sources/column_data_source"),n=s("@bokehjs/core/util/string"),u=s("2889e0dd45"),h=s("@bokehjs/core/util/callbacks");class r extends e.ColumnDataSource{constructor(s){super(s),this.imid=(0,n.uuid4)()}_mask_contour(s){const a=casalib.d3.contours().size(this.image_source.shape.slice(0,2)).thresholds([1])(s[0])[0].coordinates.map((s=>s.map((s=>s.reduce(((s,a)=>(s[0].push(a[0]),s[1].push(a[1]),s)),[[],[]])))));return{xs:[a.map((s=>s.map((s=>s[0]))))],ys:[a.map((s=>s.map((s=>s[1]))))]}}initialize(){if(super.initialize(),null!=this._mask_contour_source&&"msk"in this.data&&this.data.msk.length>0&&this.data.msk[0].length>0){const s=this.data.msk;this._mask_contour_source.data=this._mask_contour(s)}void 0===this.last_chan&&(this.last_chan=[this.cur_chan[0].valueOf(),this.cur_chan[1].valueOf()]);(()=>{null!=this.init_script&&(0,h.execute)(this.init_script,this)})()}channel(s,a=0,t){this.image_source.channel([a,s],(c=>{void 0!==c&&void 0!==c.chan||console.log("ImageDataSource ERROR ENCOUNTERED <1>",c),this.last_chan=[this.cur_chan[0].valueOf(),this.cur_chan[1].valueOf()],this.cur_chan=[a,s],null!=this._mask_contour_source&&"chan"in c&&"msk"in c.chan&&(c.msk_contour=this._mask_contour(c.chan.msk),this._mask_contour_source.data=c.msk_contour),t&&t(c),this.data=c.chan}),this.imid)}adjust_colormap(s,a,t){this.image_source.adjust_colormap(s,a,t,this.imid,!0)}signal_change(){this.change.emit()}refresh(s){this.image_source.refresh((a=>{void 0!==a&&void 0!==a.chan||console.log("ImageDataSource ERROR ENCOUNTERED <2>",a),null!=this._mask_contour_source&&"chan"in a&&"msk"in a.chan&&(a.msk_contour=this._mask_contour(a.chan.msk),this._mask_contour_source.data=a.msk_contour),s&&s(a),this.data=a.chan}),this.imid,[0,0])}wcs(){return this.image_source.wcs()}}t.ImageDataSource=r,o=r,r.__name__="ImageDataSource",r.__module__="cubevis.bokeh.sources._image_data_source",o.define((({Tuple:s,Number:a,Ref:t,Nullable:c,Any:i})=>({init_script:[i,null],image_source:[t(u.ImagePipe)],_mask_contour_source:[c(t(e.ColumnDataSource)),null],num_chans:[s(a,a)],cur_chan:[s(a,a)]})))},
|
|
52
52
|
"02e3c3e46c": function _(e,s,i,t,r){var a;t();const c=e("@bokehjs/models/sources/column_data_source"),u=e("@bokehjs/core/util/string"),o=e("2889e0dd45");class _ extends c.ColumnDataSource{constructor(e){super(e),this.imid=(0,u.uuid4)()}initialize(){super.initialize()}spectra(e,s,i=0,t=!1){this.image_source.spectrum([e,s,i],(e=>this.data=e.spectrum),this.imid,t)}refresh(){this.image_source.refresh((e=>this.data=e.spectrum),this.imid,[0,0,0])}}i.SpectraDataSource=_,a=_,_.__name__="SpectraDataSource",_.__module__="cubevis.bokeh.sources._spectra_data_source",a.define((({Ref:e})=>({image_source:[e(o.ImagePipe)]})))},
|
|
53
|
-
"64b16deff9": function _(e,s,i,a
|
|
53
|
+
"64b16deff9": function _(e,s,i,t,a){var n;t();const u=e("@bokehjs/models/sources/column_data_source"),l=e("31b6f4b4a1"),o=e("@bokehjs/core/util/callbacks");class c extends u.ColumnDataSource{constructor(e){super(e)}send(e,s){this.pipe.send(this.session_id.valueOf(),{action:"callback",message:e},(e=>{s("result"in e?e.result:{error:`expected to find a "result" in "${e}"`,msg:e})}))}initialize(){super.initialize();(()=>{null!=this.js_init&&(0,o.execute)(this.js_init,this)})()}}i.UpdatableDataSource=c,n=c,c.__name__="UpdatableDataSource",c.__module__="cubevis.bokeh.sources._updatable_data_source",n.define((({Ref:e,Any:s,String:i})=>({js_init:[s,null],js_update:[s,null],pipe:[e(l.DataPipe)],session_id:[i]})))},
|
|
54
54
|
"b6ae454f0d": function _(s,i,o,t,e){var r;t();const a=s("@bokehjs/models/formatters/tick_formatter"),c=s("de65005924");class l extends a.TickFormatter{constructor(s){super(s),this._axis=null,this._coord="world"}initialize(){super.initialize(),"x"==this.axis||"X"==this.axis||"y"==this.axis||"Y"==this.axis?this._axis="x"==this.axis||"X"==this.axis?"x":"y":console.log("ERROR: WcsTicks formatter created with invalid axis:",this.axis)}doFormat(s){const i=[];if(this._axis&&this.image_source.wcs()&&"world"==this._coord)for(let o=0,t=s.length;o<t;o++)if("x"==this._axis){const t=new casalib.coordtxl.Point2D(Number(s[o]),0);this.image_source.wcs().imageToWorldCoords(t,!1),i.push(new casalib.coordtxl.WorldCoords(t.getX(),t.getY()).format(2e3)[0])}else{const t=new casalib.coordtxl.Point2D(0,Number(s[o]));this.image_source.wcs().imageToWorldCoords(t,!1),i.push(new casalib.coordtxl.WorldCoords(t.getX(),t.getY()).format(2e3)[1])}else for(let o=0,t=s.length;o<t;o++)i.push(""+s[o]);return i}coordinates(s){return s!=this._coord&&("world"!=s&&"pixel"!=s||(this._coord=s)),this._coord}}o.WcsTicks=l,r=l,l.__name__="WcsTicks",l.__module__="cubevis.bokeh.format._wcs_ticks",r.define((({Ref:s,String:i})=>({axis:[i],image_source:[s(c.ImageDataSource)]})))},
|
|
55
55
|
"cb7d28d6b3": function _(i,e,t,o,s){var d;o();const l=i("@bokehjs/models/tools/gestures/gesture_tool"),r=i("8fc7a9e935"),_=i("484bb85d20"),m=i("@bokehjs/core/util/callbacks");class a extends l.GestureToolView{_pan_start(i){var e;null===(e=this.model.document)||void 0===e||e.interactive_start(this.plot_view.model);const t=(0,_.px_from_sx)(this.plot_view,i.sx),o=(0,_.py_from_sy)(this.plot_view,i.sy),s=(0,_.dx_from_px)(this.plot_view,t),d=(0,_.dy_from_py)(this.plot_view,o),{start:l}=this.model;l?(0,m.execute)(l,this.model,{sx:t,sy:o,x:s,y:d,delta_x:i.dx,delta_y:-i.dy,shift:"modifiers"in i?i.modifiers.shift:void 0,ctrl:"modifiers"in i?i.modifiers.ctrl:void 0,alt:"modifiers"in i?i.modifiers.alt:void 0}):this.model.trigger_event(new r.DragStart(t,o,s,d,i.dx,-i.dy,i.modifiers))}_pan(i){var e;null===(e=this.model.document)||void 0===e||e.interactive_start(this.plot_view.model);const t=(0,_.px_from_sx)(this.plot_view,i.sx),o=(0,_.py_from_sy)(this.plot_view,i.sy),s=(0,_.dx_from_px)(this.plot_view,t),d=(0,_.dy_from_py)(this.plot_view,o),{move:l}=this.model;l?(0,m.execute)(l,this.model,{sx:t,sy:o,x:s,y:d,delta_x:i.dx,delta_y:-i.dy,shift:"modifiers"in i?i.modifiers.shift:void 0,ctrl:"modifiers"in i?i.modifiers.ctrl:void 0,alt:"modifiers"in i?i.modifiers.alt:void 0}):this.model.trigger_event(new r.Drag(t,o,s,d,i.dx,-i.dy,i.modifiers))}_pan_end(i){const e=(0,_.px_from_sx)(this.plot_view,i.sx),t=(0,_.py_from_sy)(this.plot_view,i.sy),o=(0,_.dx_from_px)(this.plot_view,e),s=(0,_.dy_from_py)(this.plot_view,t),{end:d}=this.model;d?(0,m.execute)(d,this.model,{sx:e,sy:t,x:o,y:s,delta_x:i.dx,delta_y:-i.dy,shift:"modifiers"in i?i.modifiers.shift:void 0,ctrl:"modifiers"in i?i.modifiers.ctrl:void 0,alt:"modifiers"in i?i.modifiers.alt:void 0}):this.model.trigger_event(new r.DragEnd(e,t,o,s,i.dx,-i.dy,i.modifiers))}}t.DragToolView=a,a.__name__="DragToolView";class n extends l.GestureTool{constructor(i){super(i),this.tool_name="Drag",this.event_type="pan",this.default_order=10}}t.DragTool=n,d=n,n.__name__="DragTool",n.__module__="cubevis.bokeh.tools._drag_tool",d.prototype.default_view=a,d.define((({Any:i,Nullable:e})=>({start:[e(i),null],move:[e(i),null],end:[e(i),null]})))},
|
|
56
56
|
"8fc7a9e935": function _(e,t,a,s,_){s();const n=e("@bokehjs/core/bokeh_events");class r extends n.Pan{}a.Drag=r,r.__name__="Drag";class l extends n.PanStart{constructor(e,t,a,s,_,n,r){super(e,t,a,s,r),this.delta_x=_,this.delta_y=n}get event_values(){const{delta_x:e,delta_y:t}=this;return{...super.event_values,delta_x:e,delta_y:t}}}a.DragStart=l,l.__name__="DragStart";class d extends n.PanEnd{constructor(e,t,a,s,_,n,r){super(e,t,a,s,r),this.delta_x=_,this.delta_y=n}get event_values(){const{delta_x:e,delta_y:t}=this;return{...super.event_values,delta_x:e,delta_y:t}}}a.DragEnd=d,d.__name__="DragEnd"},
|
|
@@ -58,10 +58,10 @@
|
|
|
58
58
|
"9d3c34ff8e": function _(e,o,l,s,t){var c;s();const _=e("@bokehjs/models/tools/actions/reset_tool"),i=e("@bokehjs/styles/icons.css"),a=e("@bokehjs/core/util/callbacks");class n extends _.ResetToolView{doit(){const{precallback:e,postcallback:o}=this.model;null!=e&&(0,a.execute)(e,this.model),this.plot_view.reset(),null!=o&&(0,a.execute)(o,this.model)}}l.CBResetToolView=n,n.__name__="CBResetToolView";class r extends _.ResetTool{constructor(e){super(e),this.tool_name="CBReset",this.tool_icon=i.tool_icon_reset}}l.CBResetTool=r,c=r,r.__name__="CBResetTool",r.__module__="cubevis.bokeh.tools._cbreset_tool",c.prototype.default_view=n,c.define((({Any:e,Nullable:o})=>({precallback:[o(e),null],postcallback:[o(e),null]}))),c.register_alias("cbreset",(()=>new c))},
|
|
59
59
|
"9f961622ce": function _(e,t,i,o,s){var n;o();const l=e("@bokehjs/models/widgets/abstract_button"),c=e("@bokehjs/models/ui/tooltip"),d=e("@bokehjs/models/ui/icons/builtin_icon"),u=e("@bokehjs/core/build_views"),h=e("@bokehjs/core/bokeh_events"),r=e("@bokehjs/core/util/object");class a extends l.AbstractButtonView{constructor(){super(...arguments),this.isMouseInside=!1}click(){this.model.trigger_event(new h.ButtonClick),super.click()}*children(){yield*super.children(),yield this.tooltip}Show(){this.tooltip.model.setv({visible:!0,closable:!1})}unShow(){this.tooltip.model.setv({visible:!1,closable:!1})}async lazy_initialize(){const{hover_wait:e}=this.model;this.debouncedShow=casalib.debounce((()=>{this.isMouseInside&&this.Show()}),1e3*e),await super.lazy_initialize();const{tooltip:t}=this.model;this.tooltip=await(0,u.build_view)(t,{parent:this})}remove(){this.tooltip.remove(),super.remove()}render(){super.render(),this.el.addEventListener("mouseenter",(()=>{this.isMouseInside=!0,this.debouncedShow()})),this.el.addEventListener("mouseleave",(()=>{this.isMouseInside=!1,this.debouncedShow.cancel(),this.unShow()})),document.addEventListener("mousedown",(e=>{if(void 0===(0,r.dict)(this.model.js_event_callbacks).get(h.ButtonClick.prototype.event_name)){if(e.composedPath().includes(this.tooltip.el))return;this.debouncedShow.cancel(),this.unShow()}else this.isMouseInside=!1,this.debouncedShow.cancel(),this.unShow()})),window.addEventListener("blur",(()=>{this.debouncedShow.cancel(),this.unShow()}))}}i.TipButtonView=a,a.__name__="TipButtonView";class b extends l.AbstractButton{constructor(e){super(e)}on_click(e){this.on_event(h.ButtonClick,e)}}i.TipButton=b,n=b,b.__name__="TipButton",b.__module__="cubevis.bokeh.models._tip_button",n.prototype.default_view=a,n.define((({Ref:e,Number:t})=>({tooltip:[e(c.Tooltip)],hover_wait:[t,1.5]}))),n.override({label:"",icon:new d.BuiltinIcon({icon_name:"help",size:18}),button_type:"default"})},
|
|
60
60
|
"ca4c845905": function _(e,i,s,t,o){var l;t();const d=e("@bokehjs/models/layouts/layout_dom"),n=e("@bokehjs/models/ui/ui_element"),h=e("@bokehjs/models/ui/tooltip"),r=e("@bokehjs/core/dom"),a=e("@bokehjs/core/build_views");class c extends d.LayoutDOMView{constructor(){super(...arguments),this.isMouseInside=!1}stylesheets(){return[...super.stylesheets(),"*, *:before, *:after { box-sizing: border-box; } fieldset { border: 0px; margin: 0px; padding: 0px; }"]}Show(){this.tooltip.model.setv({visible:!0,closable:!1})}unShow(){this.tooltip.model.setv({visible:!1,closable:!1})}async lazy_initialize(){const{hover_wait:e}=this.model;this.debouncedShow=casalib.debounce((()=>{this.isMouseInside&&this.Show()}),1e3*e),await super.lazy_initialize(),await this.build_child_views();const{tooltip:i}=this.model;this.tooltip=await(0,a.build_view)(i,{parent:this})}remove(){this.tooltip.remove(),super.remove()}connect_signals(){super.connect_signals();const{child:e}=this.model.properties;this.on_change(e,(()=>this.update_children())),this.el.addEventListener("mouseenter",(e=>{this.mouseenter.emit(e)})),this.el.addEventListener("mouseleave",(e=>{this.mouseleave.emit(e)}))}*children(){yield*super.children(),yield this.tooltip}get child_models(){return[this.model.child]}render(){super.render(),this.el.addEventListener("mouseenter",(()=>{this.isMouseInside=!0,this.debouncedShow()})),this.el.addEventListener("mouseleave",(()=>{this.isMouseInside=!1,this.debouncedShow.cancel(),this.unShow()})),window.addEventListener("blur",(()=>{this.debouncedShow.cancel(),this.unShow()})),this.el.addEventListener("click",(()=>{this.debouncedShow.cancel(),this.unShow()}));const e=this.child_views.map((e=>e.el));this.fieldset_el=(0,r.fieldset)({},...e),this.shadow_el.appendChild(this.fieldset_el)}_update_children(){const e=this.child_views.map((e=>e.el));this.fieldset_el.append(...e)}}s.TipView=c,c.__name__="TipView";class u extends d.LayoutDOM{constructor(e){super(e)}}s.Tip=u,l=u,u.__name__="Tip",u.__module__="cubevis.bokeh.models._tip",l.prototype.default_view=c,l.define((({Ref:e,Number:i})=>({child:[e(n.UIElement)],tooltip:[e(h.Tooltip)],hover_wait:[i,1.5]})))},
|
|
61
|
-
"
|
|
61
|
+
"a6e757a69a": function _(e,t,l,o,s){var i;o();const a=e("@bokehjs/models/layouts/layout_dom"),r=e("@bokehjs/models/ui/ui_element");class n extends a.LayoutDOMView{constructor(){super(...arguments),this._overlay_el=null}get child_models(){return null!=this.model.ui?[this.model.ui]:[]}initialize(){super.initialize(),this.el.setAttribute("data-lm-suppress-shortcuts","true")}async lazy_initialize(){await super.lazy_initialize()}connect_signals(){super.connect_signals(),this.connect(this.model.properties.disabled.change,(()=>{this._update_disabled_state()})),this.connect(this.model.properties.disabled_message.change,(()=>{this.model.disabled&&null!=this._overlay_el&&this._update_overlay_message()}))}_update_layout(){super._update_layout()}render(){super.render(),console.log("Showable render() - disabled:",this.model.disabled,"shadow_el:",null!=this.shadow_el),0===this.child_views.length&&null==this.model.ui&&(this.el.innerHTML='<div style="color: gray; padding: 10px; border: 1px dashed gray;">\n Showable: No UI element set\n </div>'),this._update_disabled_state()}after_layout(){super.after_layout(),console.log("Showable after_layout() - disabled:",this.model.disabled,"shadow_el:",null!=this.shadow_el),this.model.disabled&&this._update_disabled_state()}_intrinsic_display(){return super._intrinsic_display()}_update_disabled_state(){console.log("_update_disabled_state called, disabled:",this.model.disabled),this.model.disabled?(this._show_disabled_overlay(),this.el.style.filter="grayscale(50%)"):(this._hide_disabled_overlay(),this.el.style.filter="")}_disable_interactive_elements(){this.el.querySelectorAll(".bk-toolbar, .bk-toolbar-button").forEach((e=>{e.style.pointerEvents="none",e.style.opacity="0.5"}));this.el.querySelectorAll("canvas").forEach((e=>{e.style.pointerEvents="none"}));this.el.querySelectorAll("button, .bk-btn").forEach((e=>{e.disabled=!0}))}_enable_interactive_elements(){const e=this.shadow_el;if(!e)return;e.querySelectorAll(".bk-toolbar, .bk-toolbar-button").forEach((e=>{e.style.pointerEvents="",e.style.opacity=""}));e.querySelectorAll("canvas").forEach((e=>{e.style.pointerEvents=""}));e.querySelectorAll("button, .bk-btn").forEach((e=>{e.disabled=!1})),console.log("Interactive elements re-enabled")}_show_disabled_overlay(){if(console.log("_show_disabled_overlay called, _overlay_el exists:",null!=this._overlay_el),console.log("disabled_message:",this.model.disabled_message),null==this._overlay_el){console.log("Creating new overlay element");const e=this.shadow_el;if(console.log("Shadow root:",e),!e)return void console.error("No shadow root found!");const t=document.createElement("div");t.className="showable-disabled-message",t.style.cssText="\n background: white;\n padding: 30px 40px;\n border-radius: 10px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n text-align: center;\n border: 2px solid #4CAF50;\n max-width: 90%;\n word-wrap: break-word;\n pointer-events: auto;\n cursor: default;\n ",t.innerHTML=`\n <div style="font-size: 24px; font-weight: bold; color: #4CAF50; margin-bottom: 10px;">\n ${this.model.disabled_message}\n </div>\n `,console.log("Message box created"),this._overlay_el=document.createElement("div"),this._overlay_el.appendChild(t),this._overlay_el.style.setProperty("position","absolute","important"),this._overlay_el.style.setProperty("top","0","important"),this._overlay_el.style.setProperty("left","0","important"),this._overlay_el.style.setProperty("right","0","important"),this._overlay_el.style.setProperty("bottom","0","important"),this._overlay_el.style.setProperty("width","100%","important"),this._overlay_el.style.setProperty("height","100%","important"),this._overlay_el.style.setProperty("background-color","rgba(220, 220, 220, 0.85)","important"),this._overlay_el.style.setProperty("display","flex","important"),this._overlay_el.style.setProperty("justify-content","center","important"),this._overlay_el.style.setProperty("align-items","center","important"),this._overlay_el.style.setProperty("z-index","2147483647","important"),this._overlay_el.style.setProperty("pointer-events","auto","important"),this._overlay_el.style.setProperty("cursor","not-allowed","important"),console.log("Overlay element styles set");const l=e.firstElementChild;l&&(l.style.position="relative",console.log("Set content container to relative positioning")),e.appendChild(this._overlay_el),console.log("Overlay appended to shadow root"),setTimeout((()=>{const e=this._overlay_el.getBoundingClientRect(),l=t.getBoundingClientRect();console.log("Overlay bounding rect:",{width:e.width,height:e.height,top:e.top,left:e.left}),console.log("Message box bounding rect:",{width:l.width,height:l.height})}),100),this._disable_interactive_elements();["mousedown","mouseup","click","dblclick","contextmenu","touchstart","touchmove","touchend","keydown","keyup","keypress","pointerdown","pointerup","pointermove","dragstart","drag","dragend"].forEach((e=>{this._overlay_el.addEventListener(e,(e=>{if(e.target!==t&&!t.contains(e.target))return e.stopPropagation(),e.preventDefault(),e.stopImmediatePropagation(),!1}),{capture:!0,passive:!1})})),this._overlay_el.addEventListener("wheel",(t=>{let l=e.host.parentElement;for(;l;){const e=window.getComputedStyle(l).overflow,t=window.getComputedStyle(l).overflowY;if("auto"===e||"scroll"===e||"auto"===t||"scroll"===t)break;l=l.parentElement}l&&(l.scrollTop+=t.deltaY,l.scrollLeft+=t.deltaX),t.stopPropagation(),t.preventDefault()}),{capture:!0,passive:!1})}else console.log("Overlay already exists, showing it"),this._overlay_el.style.display="flex";console.log("_show_disabled_overlay complete")}_update_overlay_message(){if(null!=this._overlay_el){const e=this._overlay_el.querySelector(".showable-disabled-message");e&&(e.innerHTML=`\n <div style="font-size: 24px; font-weight: bold; color: #4CAF50; margin-bottom: 10px;">\n ${this.model.disabled_message}\n </div>\n <div style="font-size: 14px; color: #666;">\n You can now close this GUI or continue working in your notebook\n </div>\n `)}}_hide_disabled_overlay(){null!=this._overlay_el&&(this._overlay_el.style.display="none",this._enable_interactive_elements())}remove(){null!=this._overlay_el&&(this._overlay_el.remove(),this._overlay_el=null),super.remove()}}l.ShowableView=n,n.__name__="ShowableView";class d extends a.LayoutDOM{constructor(e){super(e)}}l.Showable=d,i=d,d.__name__="Showable",d.__module__="cubevis.bokeh.models._showable",i.prototype.default_view=n,i.define((({Ref:e,String:t})=>({ui:[e(r.UIElement)],disabled_message:[t,"Interaction Complete \u2713"]})))},
|
|
62
62
|
"467d2716b0": function _(e,i,s,t,o){var n;t();const p=e("@bokehjs/models/layouts/layout_dom"),a=e("@bokehjs/models/ui/ui_element");class l extends p.LayoutDOMView{get child_models(){return null!=this.model.ui?[this.model.ui]:[]}initialize(){super.initialize(),this.el&&(this.el.style.padding="0",this.el.style.margin="0",this.el.style.border="none",this.el.style.background="transparent",this.el.style.display="contents"),this.connect(this.model.properties.app_state.change,(()=>{const e=window.cubevisAppSession;(null==e?void 0:e.applications[this.model.app_id])&&(e.applications[this.model.app_id].state=this.model.app_state)}))}}s.BokehAppContextView=l,l.__name__="BokehAppContextView";class d extends p.LayoutDOM{constructor(e){super(e)}initialize(){super.initialize(),window.cubevisAppSession||(window.cubevisAppSession={sessionId:this.session_id,applications:{}},console.log(`Initialized Bokeh session: ${this.session_id}`));const e=window.cubevisAppSession;e.applications[this.app_id]||(e.applications[this.app_id]={appId:this.app_id,state:this.app_state,createdAt:(new Date).toISOString()},console.log(`Registered application: ${this.app_id}`))}}s.BokehAppContext=d,n=d,d.__name__="BokehAppContext",d.__module__="cubevis.bokeh.models._bokeh_app_context",n.prototype.default_view=l,n.define((({Ref:e,Nullable:i,Dict:s,String:t,Unknown:o})=>({ui:[i(e(a.UIElement)),null],app_id:[t,""],session_id:[t,""],app_state:[s(o),{}]})))},
|
|
63
63
|
"50a1e32f01": function _(e,s,i,n,t){var a;n();const c=e("@bokehjs/core/view"),o=e("@bokehjs/model");class _ extends c.View{initialize(){super.initialize()}connect_signals(){super.connect_signals();const{values:e}=this.model.properties;this.on_change(e,(()=>this.values_changed()))}values_changed(){}}i.SharedDictView=_,_.__name__="SharedDictView";class d extends o.Model{constructor(e){super(e)}}i.SharedDict=d,a=d,d.__name__="SharedDict",d.__module__="cubevis.bokeh.models._shared_dict",a.prototype.default_view=_,a.define((({Dict:e,Unknown:s})=>({values:[e(s),{}]})))},
|
|
64
64
|
"b55081402e": function _(e,n,t,_,s){var a;_();const o=e("@bokehjs/models/annotations/span"),p=e("@bokehjs/core/bokeh_events");class r extends o.SpanView{on_pan_start(e){const n=super.on_pan_start(e);return this.model.trigger_event(new p.LODStart),n}on_pan(e){super.on_pan(e)}on_pan_end(e){super.on_pan_end(e),this.model.trigger_event(new p.LODEnd)}}t.EditSpanView=r,r.__name__="EditSpanView";class d extends o.Span{constructor(e){super(e)}}t.EditSpan=d,a=d,d.__name__="EditSpan",d.__module__="cubevis.bokeh.models._edit_span",a.prototype.default_view=r},
|
|
65
65
|
"9144bfc7a5": function _(e,t,s,n,r){var i;n();const l=e("@bokehjs/models/widgets/text_input"),o=e("@bokehjs/core/dom"),u=e("@bokehjs/core/bokeh_events");class _ extends l.TextInputView{stylesheets(){return[...super.stylesheets(),new o.InlineStyleSheet(".bk-input-prefix { padding: 0 var(--padding-vertical); }")]}connect_signals(){super.connect_signals(),this.el.addEventListener("mouseenter",(e=>{this.model.trigger_event(new u.MouseEnter(e.screenX,e.screenY,e.x,e.y,{shift:e.shiftKey,ctrl:e.ctrlKey,alt:e.altKey}))})),this.el.addEventListener("mouseleave",(e=>{this.model.trigger_event(new u.MouseLeave(e.screenX,e.screenY,e.x,e.y,{shift:e.shiftKey,ctrl:e.ctrlKey,alt:e.altKey}))}))}render(){super.render()}}s.EvTextInputView=_,_.__name__="EvTextInputView";class c extends l.TextInput{constructor(e){super(e)}}s.EvTextInput=c,i=c,c.__name__="EvTextInput",c.__module__="cubevis.bokeh.models._ev_text_input",i.prototype.default_view=_},
|
|
66
66
|
"74e0abef8a": function _(e,t,n,s,o){var i;s();const r=e("@bokehjs/models/annotations/poly_annotation"),a=e("@bokehjs/core/bokeh_events");class _ extends r.PolyAnnotationView{on_enter(e){const{x_scale:t,y_scale:n}=this.plot_view.frame,s=new a.MouseEnter(e.sx,e.sy,t.invert(e.sx),n.invert(e.sy),{shift:e.modifiers.shift,ctrl:e.modifiers.ctrl,alt:e.modifiers.alt}),o=super.on_enter(e);return this.model.trigger_event(s),o}on_leave(e){const{x_scale:t,y_scale:n}=this.plot_view.frame,s=new a.MouseLeave(e.sx,e.sy,t.invert(e.sx),n.invert(e.sy),{shift:e.modifiers.shift,ctrl:e.modifiers.ctrl,alt:e.modifiers.alt});super.on_leave(e),this.model.trigger_event(s)}on_pan_start(e){const{x_scale:t,y_scale:n}=this.plot_view.frame,s=new a.PanStart(e.sx,e.sy,t.invert(e.sx),n.invert(e.sy),{shift:e.modifiers.shift,ctrl:e.modifiers.ctrl,alt:e.modifiers.alt}),o=super.on_pan_start(e);return this.model.trigger_event(s),o}on_pan_end(e){const{x_scale:t,y_scale:n}=this.plot_view.frame,s=new a.PanEnd(e.sx,e.sy,t.invert(e.sx),n.invert(e.sy),{shift:e.modifiers.shift,ctrl:e.modifiers.ctrl,alt:e.modifiers.alt});super.on_pan_end(e),this.model.trigger_event(s)}on_pan(e){super.on_pan(e);const t=new a.RangesUpdate(e.sx,e.sx+e.dx,e.sy,e.sy+e.dy);this.model.trigger_event(t)}}n.EvPolyAnnotationView=_,_.__name__="EvPolyAnnotationView";class l extends r.PolyAnnotation{constructor(e){super(e)}}n.EvPolyAnnotation=l,i=l,l.__name__="EvPolyAnnotation",l.__module__="cubevis.bokeh.annotations._ev_poly_annotation",i.prototype.default_view=_},
|
|
67
|
-
}, "07c9fde72b", {"index":"07c9fde72b","src/bokeh/sources/data_pipe":"
|
|
67
|
+
}, "07c9fde72b", {"index":"07c9fde72b","src/bokeh/sources/data_pipe":"31b6f4b4a1","src/bokeh/util/conversions":"e3901fa9f2","src/bokeh/sources/active_data_pipes":"5179d11e71","src/bokeh/util/model_manager":"30b45c52a1","src/bokeh/sources/image_pipe":"2889e0dd45","src/bokeh/sources/image_data_source":"de65005924","src/bokeh/sources/spectra_data_source":"02e3c3e46c","src/bokeh/sources/updatable_data_source":"64b16deff9","src/bokeh/format/wcs_ticks":"b6ae454f0d","src/bokeh/tools/drag_tool":"cb7d28d6b3","src/bokeh/events":"8fc7a9e935","src/bokeh/util/find":"484bb85d20","src/bokeh/tools/cbreset_tool":"9d3c34ff8e","src/bokeh/models/tip_button":"9f961622ce","src/bokeh/models/tip":"ca4c845905","src/bokeh/models/showable":"a6e757a69a","src/bokeh/models/bokeh_app_context":"467d2716b0","src/bokeh/models/shared_dict":"50a1e32f01","src/bokeh/models/edit_span":"b55081402e","src/bokeh/models/ev_text_input":"9144bfc7a5","src/bokeh/annotations/ev_poly_annotation":"74e0abef8a"}, {});});
|
|
@@ -314,6 +314,10 @@ class Showable(LayoutDOM,BokehInit):
|
|
|
314
314
|
for url in js_paths
|
|
315
315
|
])
|
|
316
316
|
|
|
317
|
+
print( "-----scripts-being-used-----------------------------------------------" )
|
|
318
|
+
print( all_scripts )
|
|
319
|
+
print( "----------------------------------------------------------------------" )
|
|
320
|
+
|
|
317
321
|
# Use json_item approach which is more reliable in iframes
|
|
318
322
|
item = json_item(self, target=f"bokeh-{self.id}")
|
|
319
323
|
item_json = json_lib.dumps(item)
|
|
@@ -43,7 +43,7 @@ from bokeh.util.compiler import TypeScript
|
|
|
43
43
|
from bokeh.core.properties import Tuple, String, Int, Instance, Nullable, Bool
|
|
44
44
|
from bokeh.models.callbacks import Callback
|
|
45
45
|
|
|
46
|
-
from ...utils import serialize, deserialize, is_interactive_jupyter
|
|
46
|
+
from ...utils import serialize, deserialize, is_interactive_jupyter, is_colab
|
|
47
47
|
from ..state import casalib_url, cubevisjs_url
|
|
48
48
|
from .. import BokehInit
|
|
49
49
|
|
|
@@ -86,6 +86,27 @@ class DataPipe(DataSource,BokehInit):
|
|
|
86
86
|
###################################################################
|
|
87
87
|
#__javascript__ = [ casalib_url( ), cubevisjs_url( ) ]
|
|
88
88
|
|
|
89
|
+
def _expose_colab_port(self):
|
|
90
|
+
"""Expose the WebSocket port through Colab's proxy"""
|
|
91
|
+
try:
|
|
92
|
+
from google.colab import output
|
|
93
|
+
port = self.address[1]
|
|
94
|
+
|
|
95
|
+
# Use serve_kernel_port_as_iframe for newer Colab
|
|
96
|
+
# This doesn't open a popup, just registers the port
|
|
97
|
+
try:
|
|
98
|
+
output.serve_kernel_port_as_iframe(port)
|
|
99
|
+
print(f"✓ Colab: Exposed WebSocket port {port} via iframe proxy")
|
|
100
|
+
except AttributeError:
|
|
101
|
+
# Fallback to older method
|
|
102
|
+
output.serve_kernel_port_as_window(port)
|
|
103
|
+
print(f"✓ Colab: Exposed WebSocket port {port} via window proxy")
|
|
104
|
+
|
|
105
|
+
except Exception as e:
|
|
106
|
+
print(f"⚠ Warning: Could not expose port {port} in Colab: {e}")
|
|
107
|
+
import traceback
|
|
108
|
+
traceback.print_exc()
|
|
109
|
+
|
|
89
110
|
def __init__( self, *args, abort=None, **kwargs ):
|
|
90
111
|
|
|
91
112
|
if 'conflict_check' not in kwargs:
|
|
@@ -106,6 +127,10 @@ class DataPipe(DataSource,BokehInit):
|
|
|
106
127
|
if self.__abort is not None and not callable(self.__abort):
|
|
107
128
|
raise RuntimeError(f'abort function must be callable ({type(self.__abort)} is not)')
|
|
108
129
|
|
|
130
|
+
# Expose port in Colab
|
|
131
|
+
if is_colab( ):
|
|
132
|
+
self._expose_colab_port()
|
|
133
|
+
|
|
109
134
|
def __enqueue_send( self, ident, msg, callback ):
|
|
110
135
|
### it is assumed that this is called AFTER the lock has been aquired
|
|
111
136
|
if ident in self.__send_queue:
|
|
@@ -266,6 +291,8 @@ class DataPipe(DataSource,BokehInit):
|
|
|
266
291
|
self.__websocket = websocket
|
|
267
292
|
session_established = False
|
|
268
293
|
|
|
294
|
+
print(f"✓ WebSocket server received connection on port {self.address[1]}")
|
|
295
|
+
|
|
269
296
|
async for message in websocket:
|
|
270
297
|
msg = deserialize(message)
|
|
271
298
|
if 'session' not in msg:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cubevis-1.0.28 → cubevis-1.0.35}/tests/manual/cubemask-demo/image-slider-spectra-done-stats.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|