From 38968f9633392ec7964b9533a63d75442e9d1571 Mon Sep 17 00:00:00 2001 From: Andy Barrett Date: Fri, 2 Feb 2024 17:21:25 -0700 Subject: [PATCH 01/13] add path_list kwarg to append --- icepyx/core/variables.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/icepyx/core/variables.py b/icepyx/core/variables.py index 15d5268e5..12a51a851 100644 --- a/icepyx/core/variables.py +++ b/icepyx/core/variables.py @@ -429,7 +429,8 @@ def _iter_paths(self, sum_varlist, req_vars, vgrp, beam_list, keyword_list): return req_vars # DevGoal: we can ultimately add an "interactive" trigger that will open the not-yet-made widget. Otherwise, it will use the var_list passed by the user/defaults - def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=None): + def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=None, + path_list=None): """ Add to the list of desired variables using user specified beams and variable list. A pregenerated default variable list can be used by setting defaults to True. @@ -457,6 +458,17 @@ def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=Non the product that include that keyword in their path. A list of availble keywords can be obtained by entering `keyword_list=['']` into the function. + path_list : list of strings, default None + A list of variable path names given as a the full path from the H5 root path. + For example: + + path_list = ['gt1l/heights/delta_time', + 'gt1l/heights/dist_ph_across', + 'gt1l/heights/dist_ph_along', + 'gt1l/heights/h_ph', + 'gt1l/heights/lat_ph', + 'gt1l/heights/lon_ph'] + Notes ----- See also the `IS2_data_access2-subsetting @@ -489,6 +501,7 @@ def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=Non and var_list == None and beam_list == None and keyword_list == None + and path_list is None ), "You must enter parameters to add to a variable subset list. If you do not want to subset by variable, ensure your is2.subsetparams dictionary does not contain the key 'Coverage'." final_vars = {} From a40f104a1288246eca505b841262cc258382d922 Mon Sep 17 00:00:00 2001 From: Andy Barrett Date: Wed, 7 Feb 2024 14:58:19 -0700 Subject: [PATCH 02/13] parse path_list in var_list, beam_list and keyword_list --- icepyx/core/variables.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/icepyx/core/variables.py b/icepyx/core/variables.py index 12a51a851..8d11fa988 100644 --- a/icepyx/core/variables.py +++ b/icepyx/core/variables.py @@ -506,18 +506,24 @@ def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=Non final_vars = {} + if path_list: + _, (beams, keywords, variables) = self.parse_var_list(path_list, tiered_vars=True) + var_list = list(set(variables)) + beam_list = list(set(beams)) + keyword_list = list(set(keywords)) + vgrp, allpaths = self.avail(options=True, internal=True) self._check_valid_lists(vgrp, allpaths, var_list, beam_list, keyword_list) - # Instantiate self.wanted to an empty dictionary if it doesn't exist + # Instantiate self.wanted to an empty dictionaryto an if it doesn't exist if not hasattr(self, "wanted") or self.wanted == None: self.wanted = {} - # DEVGOAL: add a secondary var list to include uncertainty/error information for lower level data if specific data variables have been specified... + # DEVGOAL: add a secondary var list to include uncertainty/error information for lower level data if specific data variables have been specified... # generate a list of variable names to include, depending on user input sum_varlist = self._get_sum_varlist(var_list, vgrp.keys(), defaults) - + # Case only variables (but not keywords or beams) are specified if beam_list == None and keyword_list == None: final_vars.update(self._iter_vars(sum_varlist, final_vars, vgrp)) From 00ca183c7b6d554abf5dccf7a0c7b433549457fd Mon Sep 17 00:00:00 2001 From: Andy Barrett Date: Wed, 7 Feb 2024 18:37:54 -0700 Subject: [PATCH 03/13] Replace assertion with if statement. Add extra kwarg check --- icepyx/core/variables.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/icepyx/core/variables.py b/icepyx/core/variables.py index 8d11fa988..07e8b1b9d 100644 --- a/icepyx/core/variables.py +++ b/icepyx/core/variables.py @@ -496,13 +496,21 @@ def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=Non >>> reg_a.order_vars.append(keyword_list=['ancillary_data']) # doctest: +SKIP """ - assert not ( - defaults == False - and var_list == None - and beam_list == None - and keyword_list == None - and path_list is None - ), "You must enter parameters to add to a variable subset list. If you do not want to subset by variable, ensure your is2.subsetparams dictionary does not contain the key 'Coverage'." + # Check that at least one allowable combination of keywords are set + if (not defaults and + not (var_list or beam_list or keyword_list) and + not path_list): + raise ValueError("Either default or path_list, or at least one of var_list, " + "beam_list or keyword_list must be set\n" + "If you do not want to subset by variable, " + "ensure your is2.subsetparams dictionary does " + "not contain the key 'Coverage'.") + + # Check that only path_list, or only var_list, beam_list or keyword_list + # are set. + if (var_list or beam_list or keyword_list) and path_list: + raise ValueError("path_list cannot be set if var_list or " + "beam_list or keyword_list are set") final_vars = {} From 0f9f5798375fadf0c780c9f497658bdb4c9c5ac1 Mon Sep 17 00:00:00 2001 From: Andy Barrett Date: Fri, 9 Feb 2024 14:44:19 -0700 Subject: [PATCH 04/13] add example to docstring --- icepyx/core/variables.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/icepyx/core/variables.py b/icepyx/core/variables.py index 07e8b1b9d..d8200e708 100644 --- a/icepyx/core/variables.py +++ b/icepyx/core/variables.py @@ -460,14 +460,6 @@ def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=Non path_list : list of strings, default None A list of variable path names given as a the full path from the H5 root path. - For example: - - path_list = ['gt1l/heights/delta_time', - 'gt1l/heights/dist_ph_across', - 'gt1l/heights/dist_ph_along', - 'gt1l/heights/h_ph', - 'gt1l/heights/lat_ph', - 'gt1l/heights/lon_ph'] Notes ----- @@ -494,6 +486,17 @@ def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=Non To add all variables and paths in ancillary_data >>> reg_a.order_vars.append(keyword_list=['ancillary_data']) # doctest: +SKIP + + To add variables as a list of explicit paths + + >>> path_list = ['gt1l/heights/delta_time', + 'gt1l/heights/dist_ph_across', + 'gt1l/heights/dist_ph_along', + 'gt1l/heights/h_ph', + 'gt1l/heights/lat_ph', + 'gt1l/heights/lon_ph'] + >>> region_a.order_vars.append(path_list=path_list) # doctest: +SKIP + """ # Check that at least one allowable combination of keywords are set From 1342525464cb5ef785c8cd49b8c166b29a4bc9fc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 9 Feb 2024 22:17:37 +0000 Subject: [PATCH 05/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- icepyx/core/variables.py | 42 ++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/icepyx/core/variables.py b/icepyx/core/variables.py index d8200e708..26b9fe6db 100644 --- a/icepyx/core/variables.py +++ b/icepyx/core/variables.py @@ -429,8 +429,14 @@ def _iter_paths(self, sum_varlist, req_vars, vgrp, beam_list, keyword_list): return req_vars # DevGoal: we can ultimately add an "interactive" trigger that will open the not-yet-made widget. Otherwise, it will use the var_list passed by the user/defaults - def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=None, - path_list=None): + def append( + self, + defaults=False, + var_list=None, + beam_list=None, + keyword_list=None, + path_list=None, + ): """ Add to the list of desired variables using user specified beams and variable list. A pregenerated default variable list can be used by setting defaults to True. @@ -500,25 +506,33 @@ def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=Non """ # Check that at least one allowable combination of keywords are set - if (not defaults and - not (var_list or beam_list or keyword_list) and - not path_list): - raise ValueError("Either default or path_list, or at least one of var_list, " - "beam_list or keyword_list must be set\n" - "If you do not want to subset by variable, " - "ensure your is2.subsetparams dictionary does " - "not contain the key 'Coverage'.") + if ( + not defaults + and not (var_list or beam_list or keyword_list) + and not path_list + ): + raise ValueError( + "Either default or path_list, or at least one of var_list, " + "beam_list or keyword_list must be set\n" + "If you do not want to subset by variable, " + "ensure your is2.subsetparams dictionary does " + "not contain the key 'Coverage'." + ) # Check that only path_list, or only var_list, beam_list or keyword_list # are set. if (var_list or beam_list or keyword_list) and path_list: - raise ValueError("path_list cannot be set if var_list or " - "beam_list or keyword_list are set") + raise ValueError( + "path_list cannot be set if var_list or " + "beam_list or keyword_list are set" + ) final_vars = {} if path_list: - _, (beams, keywords, variables) = self.parse_var_list(path_list, tiered_vars=True) + _, (beams, keywords, variables) = self.parse_var_list( + path_list, tiered_vars=True + ) var_list = list(set(variables)) beam_list = list(set(beams)) keyword_list = list(set(keywords)) @@ -534,7 +548,7 @@ def append(self, defaults=False, var_list=None, beam_list=None, keyword_list=Non # generate a list of variable names to include, depending on user input sum_varlist = self._get_sum_varlist(var_list, vgrp.keys(), defaults) - + # Case only variables (but not keywords or beams) are specified if beam_list == None and keyword_list == None: final_vars.update(self._iter_vars(sum_varlist, final_vars, vgrp)) From 456bb3018e3d4f939f59acb42bde8a8c2bffd6ca Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 12 Feb 2024 15:52:26 +0000 Subject: [PATCH 06/13] GitHub action UML generation auto-update --- .../documentation/classes_dev_uml.svg | 2 +- .../documentation/classes_user_uml.svg | 90 +++++++++---------- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/doc/source/user_guide/documentation/classes_dev_uml.svg b/doc/source/user_guide/documentation/classes_dev_uml.svg index 09c112f5c..e468f1657 100644 --- a/doc/source/user_guide/documentation/classes_dev_uml.svg +++ b/doc/source/user_guide/documentation/classes_dev_uml.svg @@ -335,7 +335,7 @@ _get_sum_varlist(var_list, all_vars, defaults) _iter_paths(sum_varlist, req_vars, vgrp, beam_list, keyword_list) _iter_vars(sum_varlist, req_vars, vgrp) -append(defaults, var_list, beam_list, keyword_list) +append(defaults, var_list, beam_list, keyword_list, path_list) avail(options, internal) parse_var_list(varlist, tiered, tiered_vars) remove(all, var_list, beam_list, keyword_list) diff --git a/doc/source/user_guide/documentation/classes_user_uml.svg b/doc/source/user_guide/documentation/classes_user_uml.svg index 256cc1794..09d0d5702 100644 --- a/doc/source/user_guide/documentation/classes_user_uml.svg +++ b/doc/source/user_guide/documentation/classes_user_uml.svg @@ -4,11 +4,11 @@ - + classes_user_uml - + icepyx.core.auth.AuthenticationError @@ -111,37 +111,37 @@ icepyx.core.icesat2data.Icesat2Data - -Icesat2Data - - - + +Icesat2Data + + + icepyx.core.exceptions.NsidcQueryError - -NsidcQueryError - -errmsg -msgtxt : str - - + +NsidcQueryError + +errmsg +msgtxt : str + + icepyx.core.exceptions.QueryError - -QueryError - - - + +QueryError + + + icepyx.core.exceptions.NsidcQueryError->icepyx.core.exceptions.QueryError - - + + @@ -265,18 +265,18 @@ icepyx.core.variables.Variables - + Variables - + path product version wanted : NoneType, dict - -append(defaults, var_list, beam_list, keyword_list) -avail(options, internal) -parse_var_list(varlist, tiered, tiered_vars) -remove(all, var_list, beam_list, keyword_list) + +append(defaults, var_list, beam_list, keyword_list, path_list) +avail(options, internal) +parse_var_list(varlist, tiered, tiered_vars) +remove(all, var_list, beam_list, keyword_list) @@ -308,22 +308,22 @@ icepyx.core.visualization.Visualize - -Visualize - -bbox : list -cycles : NoneType -date_range : NoneType -product : NoneType, str -tracks : NoneType - -generate_OA_parameters(): list -grid_bbox(binsize): list -make_request(base_url, payload) -parallel_request_OA(): da.array -query_icesat2_filelist(): tuple -request_OA_data(paras): da.array -viz_elevation(): (hv.DynamicMap, hv.Layout) + +Visualize + +bbox : list +cycles : NoneType +date_range : NoneType +product : NoneType, str +tracks : NoneType + +generate_OA_parameters(): list +grid_bbox(binsize): list +make_request(base_url, payload) +parallel_request_OA(): da.array +query_icesat2_filelist(): tuple +request_OA_data(paras): da.array +viz_elevation(): (hv.DynamicMap, hv.Layout) From f5bac724d12abf4f4af148692d7799a763a97d4e Mon Sep 17 00:00:00 2001 From: Andy Barrett Date: Thu, 15 Feb 2024 16:42:16 -0700 Subject: [PATCH 07/13] Update icepyx/core/variables.py Co-authored-by: Jessica Scheick --- icepyx/core/variables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icepyx/core/variables.py b/icepyx/core/variables.py index 26b9fe6db..3b3353498 100644 --- a/icepyx/core/variables.py +++ b/icepyx/core/variables.py @@ -465,7 +465,7 @@ def append( entering `keyword_list=['']` into the function. path_list : list of strings, default None - A list of variable path names given as a the full path from the H5 root path. + A list of variable path names given as the full path from the H5 root path. Notes ----- From acb5a520ae8932bef76f0de1b2661852492a4ade Mon Sep 17 00:00:00 2001 From: Andy Barrett Date: Thu, 15 Feb 2024 16:51:48 -0700 Subject: [PATCH 08/13] Update icepyx/core/variables.py Co-authored-by: Jessica Scheick --- icepyx/core/variables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icepyx/core/variables.py b/icepyx/core/variables.py index 3b3353498..13d3f6b9a 100644 --- a/icepyx/core/variables.py +++ b/icepyx/core/variables.py @@ -540,7 +540,7 @@ def append( vgrp, allpaths = self.avail(options=True, internal=True) self._check_valid_lists(vgrp, allpaths, var_list, beam_list, keyword_list) - # Instantiate self.wanted to an empty dictionaryto an if it doesn't exist + # Instantiate self.wanted to an empty dictionary if it doesn't exist if not hasattr(self, "wanted") or self.wanted == None: self.wanted = {} From 4dd740b70a2b764c4932212bac0a0a28086bfe60 Mon Sep 17 00:00:00 2001 From: Andy Barrett Date: Thu, 15 Feb 2024 16:52:25 -0700 Subject: [PATCH 09/13] Apply suggestions from code review Co-authored-by: Jessica Scheick --- icepyx/core/variables.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/icepyx/core/variables.py b/icepyx/core/variables.py index 13d3f6b9a..3d13ceb24 100644 --- a/icepyx/core/variables.py +++ b/icepyx/core/variables.py @@ -496,11 +496,11 @@ def append( To add variables as a list of explicit paths >>> path_list = ['gt1l/heights/delta_time', - 'gt1l/heights/dist_ph_across', - 'gt1l/heights/dist_ph_along', - 'gt1l/heights/h_ph', - 'gt1l/heights/lat_ph', - 'gt1l/heights/lon_ph'] + ... 'gt1l/heights/dist_ph_across', + ... 'gt1l/heights/dist_ph_along', + ... 'gt1l/heights/h_ph', + ... 'gt1l/heights/lat_ph', + ... 'gt1l/heights/lon_ph'] >>> region_a.order_vars.append(path_list=path_list) # doctest: +SKIP """ From 74fac11b28575a69333eee3106bb18eba7a4d705 Mon Sep 17 00:00:00 2001 From: Andy Barrett Date: Tue, 20 Feb 2024 16:54:36 -0700 Subject: [PATCH 10/13] remove non-module warning for append --- icepyx/core/variables.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/icepyx/core/variables.py b/icepyx/core/variables.py index 3d13ceb24..0edbbe2fb 100644 --- a/icepyx/core/variables.py +++ b/icepyx/core/variables.py @@ -507,17 +507,12 @@ def append( # Check that at least one allowable combination of keywords are set if ( - not defaults - and not (var_list or beam_list or keyword_list) - and not path_list + not defaults + and not (var_list or beam_list or keyword_list) + and not path_list ): - raise ValueError( - "Either default or path_list, or at least one of var_list, " - "beam_list or keyword_list must be set\n" - "If you do not want to subset by variable, " - "ensure your is2.subsetparams dictionary does " - "not contain the key 'Coverage'." - ) + raise ValueError("Either default or path_list, or at least one of var_list, " + "beam_list or keyword_list must be set.") # Check that only path_list, or only var_list, beam_list or keyword_list # are set. From 4054e1f85d64b4a2798185ca6c9539e580f2c180 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 00:12:50 +0000 Subject: [PATCH 11/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- icepyx/core/variables.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/icepyx/core/variables.py b/icepyx/core/variables.py index 0edbbe2fb..4d5d1e4b7 100644 --- a/icepyx/core/variables.py +++ b/icepyx/core/variables.py @@ -507,12 +507,14 @@ def append( # Check that at least one allowable combination of keywords are set if ( - not defaults - and not (var_list or beam_list or keyword_list) - and not path_list + not defaults + and not (var_list or beam_list or keyword_list) + and not path_list ): - raise ValueError("Either default or path_list, or at least one of var_list, " - "beam_list or keyword_list must be set.") + raise ValueError( + "Either default or path_list, or at least one of var_list, " + "beam_list or keyword_list must be set." + ) # Check that only path_list, or only var_list, beam_list or keyword_list # are set. From 1d868bd8a5f9f4a8408bb4b155719075c593daaa Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Thu, 22 Feb 2024 15:34:29 -0500 Subject: [PATCH 12/13] add path_list examples to notebook --- .../IS2_data_variables.ipynb | 1053 ++++++++++++++++- 1 file changed, 1039 insertions(+), 14 deletions(-) diff --git a/doc/source/example_notebooks/IS2_data_variables.ipynb b/doc/source/example_notebooks/IS2_data_variables.ipynb index 90fa8500c..f846c2262 100644 --- a/doc/source/example_notebooks/IS2_data_variables.ipynb +++ b/doc/source/example_notebooks/IS2_data_variables.ipynb @@ -49,9 +49,737 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function now() {\n", + " return new Date();\n", + " }\n", + "\n", + " var force = true;\n", + " var py_version = '3.3.4'.replace('rc', '-rc.').replace('.dev', '-dev.');\n", + " var reloading = false;\n", + " var Bokeh = root.Bokeh;\n", + "\n", + " if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n", + " root._bokeh_timeout = Date.now() + 5000;\n", + " root._bokeh_failed_load = false;\n", + " }\n", + "\n", + " function run_callbacks() {\n", + " try {\n", + " root._bokeh_onload_callbacks.forEach(function(callback) {\n", + " if (callback != null)\n", + " callback();\n", + " });\n", + " } finally {\n", + " delete root._bokeh_onload_callbacks;\n", + " }\n", + " console.debug(\"Bokeh: all callbacks have finished\");\n", + " }\n", + "\n", + " function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n", + " if (css_urls == null) css_urls = [];\n", + " if (js_urls == null) js_urls = [];\n", + " if (js_modules == null) js_modules = [];\n", + " if (js_exports == null) js_exports = {};\n", + "\n", + " root._bokeh_onload_callbacks.push(callback);\n", + "\n", + " if (root._bokeh_is_loading > 0) {\n", + " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", + " return null;\n", + " }\n", + " if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n", + " run_callbacks();\n", + " return null;\n", + " }\n", + " if (!reloading) {\n", + " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", + " }\n", + "\n", + " function on_load() {\n", + " root._bokeh_is_loading--;\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", + " run_callbacks()\n", + " }\n", + " }\n", + " window._bokeh_on_load = on_load\n", + "\n", + " function on_error() {\n", + " console.error(\"failed to load \" + url);\n", + " }\n", + "\n", + " var skip = [];\n", + " if (window.requirejs) {\n", + " window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n", + " require([\"jspanel\"], function(jsPanel) {\n", + "\twindow.jsPanel = jsPanel\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-modal\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-tooltip\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-hint\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-layout\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-contextmenu\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"jspanel-dock\"], function() {\n", + "\ton_load()\n", + " })\n", + " require([\"gridstack\"], function(GridStack) {\n", + "\twindow.GridStack = GridStack\n", + "\ton_load()\n", + " })\n", + " require([\"notyf\"], function() {\n", + "\ton_load()\n", + " })\n", + " root._bokeh_is_loading = css_urls.length + 9;\n", + " } else {\n", + " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n", + " }\n", + "\n", + " var existing_stylesheets = []\n", + " var links = document.getElementsByTagName('link')\n", + " for (var i = 0; i < links.length; i++) {\n", + " var link = links[i]\n", + " if (link.href != null) {\n", + "\texisting_stylesheets.push(link.href)\n", + " }\n", + " }\n", + " for (var i = 0; i < css_urls.length; i++) {\n", + " var url = css_urls[i];\n", + " if (existing_stylesheets.indexOf(url) !== -1) {\n", + "\ton_load()\n", + "\tcontinue;\n", + " }\n", + " const element = document.createElement(\"link\");\n", + " element.onload = on_load;\n", + " element.onerror = on_error;\n", + " element.rel = \"stylesheet\";\n", + " element.type = \"text/css\";\n", + " element.href = url;\n", + " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", + " document.body.appendChild(element);\n", + " } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n", + " var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n", + " for (var i = 0; i < urls.length; i++) {\n", + " skip.push(urls[i])\n", + " }\n", + " } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n", + " var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n", + " for (var i = 0; i < urls.length; i++) {\n", + " skip.push(urls[i])\n", + " }\n", + " } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n", + " var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n", + " for (var i = 0; i < urls.length; i++) {\n", + " skip.push(urls[i])\n", + " }\n", + " } var existing_scripts = []\n", + " var scripts = document.getElementsByTagName('script')\n", + " for (var i = 0; i < scripts.length; i++) {\n", + " var script = scripts[i]\n", + " if (script.src != null) {\n", + "\texisting_scripts.push(script.src)\n", + " }\n", + " }\n", + " for (var i = 0; i < js_urls.length; i++) {\n", + " var url = js_urls[i];\n", + " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", + "\tif (!window.requirejs) {\n", + "\t on_load();\n", + "\t}\n", + "\tcontinue;\n", + " }\n", + " var element = document.createElement('script');\n", + " element.onload = on_load;\n", + " element.onerror = on_error;\n", + " element.async = false;\n", + " element.src = url;\n", + " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " document.head.appendChild(element);\n", + " }\n", + " for (var i = 0; i < js_modules.length; i++) {\n", + " var url = js_modules[i];\n", + " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", + "\tif (!window.requirejs) {\n", + "\t on_load();\n", + "\t}\n", + "\tcontinue;\n", + " }\n", + " var element = document.createElement('script');\n", + " element.onload = on_load;\n", + " element.onerror = on_error;\n", + " element.async = false;\n", + " element.src = url;\n", + " element.type = \"module\";\n", + " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " document.head.appendChild(element);\n", + " }\n", + " for (const name in js_exports) {\n", + " var url = js_exports[name];\n", + " if (skip.indexOf(url) >= 0 || root[name] != null) {\n", + "\tif (!window.requirejs) {\n", + "\t on_load();\n", + "\t}\n", + "\tcontinue;\n", + " }\n", + " var element = document.createElement('script');\n", + " element.onerror = on_error;\n", + " element.async = false;\n", + " element.type = \"module\";\n", + " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " element.textContent = `\n", + " import ${name} from \"${url}\"\n", + " window.${name} = ${name}\n", + " window._bokeh_on_load()\n", + " `\n", + " document.head.appendChild(element);\n", + " }\n", + " if (!js_urls.length && !js_modules.length) {\n", + " on_load()\n", + " }\n", + " };\n", + "\n", + " function inject_raw_css(css) {\n", + " const element = document.createElement(\"style\");\n", + " element.appendChild(document.createTextNode(css));\n", + " document.body.appendChild(element);\n", + " }\n", + "\n", + " var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.4.min.js\", \"https://cdn.holoviz.org/panel/1.3.8/dist/panel.min.js\"];\n", + " var js_modules = [];\n", + " var js_exports = {};\n", + " var css_urls = [];\n", + " var inline_js = [ function(Bokeh) {\n", + " Bokeh.set_log_level(\"info\");\n", + " },\n", + "function(Bokeh) {} // ensure no trailing comma for IE\n", + " ];\n", + "\n", + " function run_inline_js() {\n", + " if ((root.Bokeh !== undefined) || (force === true)) {\n", + " for (var i = 0; i < inline_js.length; i++) {\n", + "\ttry {\n", + " inline_js[i].call(root, root.Bokeh);\n", + "\t} catch(e) {\n", + "\t if (!reloading) {\n", + "\t throw e;\n", + "\t }\n", + "\t}\n", + " }\n", + " // Cache old bokeh versions\n", + " if (Bokeh != undefined && !reloading) {\n", + "\tvar NewBokeh = root.Bokeh;\n", + "\tif (Bokeh.versions === undefined) {\n", + "\t Bokeh.versions = new Map();\n", + "\t}\n", + "\tif (NewBokeh.version !== Bokeh.version) {\n", + "\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n", + "\t}\n", + "\troot.Bokeh = Bokeh;\n", + " }} else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(run_inline_js, 100);\n", + " } else if (!root._bokeh_failed_load) {\n", + " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", + " root._bokeh_failed_load = true;\n", + " }\n", + " root._bokeh_is_initializing = false\n", + " }\n", + "\n", + " function load_or_wait() {\n", + " // Implement a backoff loop that tries to ensure we do not load multiple\n", + " // versions of Bokeh and its dependencies at the same time.\n", + " // In recent versions we use the root._bokeh_is_initializing flag\n", + " // to determine whether there is an ongoing attempt to initialize\n", + " // bokeh, however for backward compatibility we also try to ensure\n", + " // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n", + " // before older versions are fully initialized.\n", + " if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n", + " root._bokeh_is_initializing = false;\n", + " root._bokeh_onload_callbacks = undefined;\n", + " console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n", + " load_or_wait();\n", + " } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n", + " setTimeout(load_or_wait, 100);\n", + " } else {\n", + " root._bokeh_is_initializing = true\n", + " root._bokeh_onload_callbacks = []\n", + " var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", + " if (!reloading && !bokeh_loaded) {\n", + "\troot.Bokeh = undefined;\n", + " }\n", + " load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n", + "\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", + "\trun_inline_js();\n", + " });\n", + " }\n", + " }\n", + " // Give older versions of the autoload script a head-start to ensure\n", + " // they initialize before we start loading newer version.\n", + " setTimeout(load_or_wait, 100)\n", + "}(window));" + ], + "application/vnd.holoviews_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n var py_version = '3.3.4'.replace('rc', '-rc.').replace('.dev', '-dev.');\n var reloading = false;\n var Bokeh = root.Bokeh;\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n run_callbacks();\n return null;\n }\n if (!reloading) {\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n var skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n require([\"jspanel\"], function(jsPanel) {\n\twindow.jsPanel = jsPanel\n\ton_load()\n })\n require([\"jspanel-modal\"], function() {\n\ton_load()\n })\n require([\"jspanel-tooltip\"], function() {\n\ton_load()\n })\n require([\"jspanel-hint\"], function() {\n\ton_load()\n })\n require([\"jspanel-layout\"], function() {\n\ton_load()\n })\n require([\"jspanel-contextmenu\"], function() {\n\ton_load()\n })\n require([\"jspanel-dock\"], function() {\n\ton_load()\n })\n require([\"gridstack\"], function(GridStack) {\n\twindow.GridStack = GridStack\n\ton_load()\n })\n require([\"notyf\"], function() {\n\ton_load()\n })\n root._bokeh_is_loading = css_urls.length + 9;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n var existing_stylesheets = []\n var links = document.getElementsByTagName('link')\n for (var i = 0; i < links.length; i++) {\n var link = links[i]\n if (link.href != null) {\n\texisting_stylesheets.push(link.href)\n }\n }\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n if (existing_stylesheets.indexOf(url) !== -1) {\n\ton_load()\n\tcontinue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } var existing_scripts = []\n var scripts = document.getElementsByTagName('script')\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n\texisting_scripts.push(script.src)\n }\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (var i = 0; i < js_modules.length; i++) {\n var url = js_modules[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n var url = js_exports[name];\n if (skip.indexOf(url) >= 0 || root[name] != null) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.4.min.js\", \"https://cdn.holoviz.org/panel/1.3.8/dist/panel.min.js\"];\n var js_modules = [];\n var js_exports = {};\n var css_urls = [];\n var inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n\ttry {\n inline_js[i].call(root, root.Bokeh);\n\t} catch(e) {\n\t if (!reloading) {\n\t throw e;\n\t }\n\t}\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n\tvar NewBokeh = root.Bokeh;\n\tif (Bokeh.versions === undefined) {\n\t Bokeh.versions = new Map();\n\t}\n\tif (NewBokeh.version !== Bokeh.version) {\n\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n\t}\n\troot.Bokeh = Bokeh;\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n if (!reloading && !bokeh_loaded) {\n\troot.Bokeh = undefined;\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n\trun_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "\n", + "if ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n", + " window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n", + "}\n", + "\n", + "\n", + " function JupyterCommManager() {\n", + " }\n", + "\n", + " JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n", + " if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", + " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", + " comm_manager.register_target(comm_id, function(comm) {\n", + " comm.on_msg(msg_handler);\n", + " });\n", + " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", + " window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n", + " comm.onMsg = msg_handler;\n", + " });\n", + " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", + " google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n", + " var messages = comm.messages[Symbol.asyncIterator]();\n", + " function processIteratorResult(result) {\n", + " var message = result.value;\n", + " console.log(message)\n", + " var content = {data: message.data, comm_id};\n", + " var buffers = []\n", + " for (var buffer of message.buffers || []) {\n", + " buffers.push(new DataView(buffer))\n", + " }\n", + " var metadata = message.metadata || {};\n", + " var msg = {content, buffers, metadata}\n", + " msg_handler(msg);\n", + " return messages.next().then(processIteratorResult);\n", + " }\n", + " return messages.next().then(processIteratorResult);\n", + " })\n", + " }\n", + " }\n", + "\n", + " JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n", + " if (comm_id in window.PyViz.comms) {\n", + " return window.PyViz.comms[comm_id];\n", + " } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", + " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", + " var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n", + " if (msg_handler) {\n", + " comm.on_msg(msg_handler);\n", + " }\n", + " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", + " var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n", + " comm.open();\n", + " if (msg_handler) {\n", + " comm.onMsg = msg_handler;\n", + " }\n", + " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", + " var comm_promise = google.colab.kernel.comms.open(comm_id)\n", + " comm_promise.then((comm) => {\n", + " window.PyViz.comms[comm_id] = comm;\n", + " if (msg_handler) {\n", + " var messages = comm.messages[Symbol.asyncIterator]();\n", + " function processIteratorResult(result) {\n", + " var message = result.value;\n", + " var content = {data: message.data};\n", + " var metadata = message.metadata || {comm_id};\n", + " var msg = {content, metadata}\n", + " msg_handler(msg);\n", + " return messages.next().then(processIteratorResult);\n", + " }\n", + " return messages.next().then(processIteratorResult);\n", + " }\n", + " }) \n", + " var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n", + " return comm_promise.then((comm) => {\n", + " comm.send(data, metadata, buffers, disposeOnDone);\n", + " });\n", + " };\n", + " var comm = {\n", + " send: sendClosure\n", + " };\n", + " }\n", + " window.PyViz.comms[comm_id] = comm;\n", + " return comm;\n", + " }\n", + " window.PyViz.comm_manager = new JupyterCommManager();\n", + " \n", + "\n", + "\n", + "var JS_MIME_TYPE = 'application/javascript';\n", + "var HTML_MIME_TYPE = 'text/html';\n", + "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n", + "var CLASS_NAME = 'output';\n", + "\n", + "/**\n", + " * Render data to the DOM node\n", + " */\n", + "function render(props, node) {\n", + " var div = document.createElement(\"div\");\n", + " var script = document.createElement(\"script\");\n", + " node.appendChild(div);\n", + " node.appendChild(script);\n", + "}\n", + "\n", + "/**\n", + " * Handle when a new output is added\n", + " */\n", + "function handle_add_output(event, handle) {\n", + " var output_area = handle.output_area;\n", + " var output = handle.output;\n", + " if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", + " return\n", + " }\n", + " var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", + " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", + " if (id !== undefined) {\n", + " var nchildren = toinsert.length;\n", + " var html_node = toinsert[nchildren-1].children[0];\n", + " html_node.innerHTML = output.data[HTML_MIME_TYPE];\n", + " var scripts = [];\n", + " var nodelist = html_node.querySelectorAll(\"script\");\n", + " for (var i in nodelist) {\n", + " if (nodelist.hasOwnProperty(i)) {\n", + " scripts.push(nodelist[i])\n", + " }\n", + " }\n", + "\n", + " scripts.forEach( function (oldScript) {\n", + " var newScript = document.createElement(\"script\");\n", + " var attrs = [];\n", + " var nodemap = oldScript.attributes;\n", + " for (var j in nodemap) {\n", + " if (nodemap.hasOwnProperty(j)) {\n", + " attrs.push(nodemap[j])\n", + " }\n", + " }\n", + " attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n", + " newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n", + " oldScript.parentNode.replaceChild(newScript, oldScript);\n", + " });\n", + " if (JS_MIME_TYPE in output.data) {\n", + " toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n", + " }\n", + " output_area._hv_plot_id = id;\n", + " if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n", + " window.PyViz.plot_index[id] = Bokeh.index[id];\n", + " } else {\n", + " window.PyViz.plot_index[id] = null;\n", + " }\n", + " } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", + " var bk_div = document.createElement(\"div\");\n", + " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", + " var script_attrs = bk_div.children[0].attributes;\n", + " for (var i = 0; i < script_attrs.length; i++) {\n", + " toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n", + " }\n", + " // store reference to server id on output_area\n", + " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", + " }\n", + "}\n", + "\n", + "/**\n", + " * Handle when an output is cleared or removed\n", + " */\n", + "function handle_clear_output(event, handle) {\n", + " var id = handle.cell.output_area._hv_plot_id;\n", + " var server_id = handle.cell.output_area._bokeh_server_id;\n", + " if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n", + " var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n", + " if (server_id !== null) {\n", + " comm.send({event_type: 'server_delete', 'id': server_id});\n", + " return;\n", + " } else if (comm !== null) {\n", + " comm.send({event_type: 'delete', 'id': id});\n", + " }\n", + " delete PyViz.plot_index[id];\n", + " if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n", + " var doc = window.Bokeh.index[id].model.document\n", + " doc.clear();\n", + " const i = window.Bokeh.documents.indexOf(doc);\n", + " if (i > -1) {\n", + " window.Bokeh.documents.splice(i, 1);\n", + " }\n", + " }\n", + "}\n", + "\n", + "/**\n", + " * Handle kernel restart event\n", + " */\n", + "function handle_kernel_cleanup(event, handle) {\n", + " delete PyViz.comms[\"hv-extension-comm\"];\n", + " window.PyViz.plot_index = {}\n", + "}\n", + "\n", + "/**\n", + " * Handle update_display_data messages\n", + " */\n", + "function handle_update_output(event, handle) {\n", + " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n", + " handle_add_output(event, handle)\n", + "}\n", + "\n", + "function register_renderer(events, OutputArea) {\n", + " function append_mime(data, metadata, element) {\n", + " // create a DOM node to render to\n", + " var toinsert = this.create_output_subarea(\n", + " metadata,\n", + " CLASS_NAME,\n", + " EXEC_MIME_TYPE\n", + " );\n", + " this.keyboard_manager.register_events(toinsert);\n", + " // Render to node\n", + " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", + " render(props, toinsert[0]);\n", + " element.append(toinsert);\n", + " return toinsert\n", + " }\n", + "\n", + " events.on('output_added.OutputArea', handle_add_output);\n", + " events.on('output_updated.OutputArea', handle_update_output);\n", + " events.on('clear_output.CodeCell', handle_clear_output);\n", + " events.on('delete.Cell', handle_clear_output);\n", + " events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n", + "\n", + " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", + " safe: true,\n", + " index: 0\n", + " });\n", + "}\n", + "\n", + "if (window.Jupyter !== undefined) {\n", + " try {\n", + " var events = require('base/js/events');\n", + " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", + " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", + " register_renderer(events, OutputArea);\n", + " }\n", + " } catch(err) {\n", + " }\n", + "}\n" + ], + "application/vnd.holoviews_load.v0+json": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.holoviews_exec.v0+json": "", + "text/html": [ + "
\n", + "
\n", + "
\n", + "" + ] + }, + "metadata": { + "application/vnd.holoviews_exec.v0+json": { + "id": "p1002" + } + }, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + "\n", + "\n", + "\n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import icepyx as ipx\n", "from pprint import pprint" @@ -319,7 +1047,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -329,15 +1057,15 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Uncomment and run the code in this cell to use the second variable subsetting suite of examples,\n", "# with the beam specifier containing \"profile\" instead of \"gt#l\"\n", "\n", - "# region_a = ipx.Query('ATL09',[-55, 68, -48, 71],['2019-02-22','2019-02-28'], \\\n", - "# start_time='00:00:00', end_time='23:59:59')" + "region_a = ipx.Query('ATL09',[-55, 68, -48, 71],['2019-02-22','2019-02-28'], \\\n", + " start_time='00:00:00', end_time='23:59:59')" ] }, { @@ -450,6 +1178,7 @@ "1. Use a default list for the product (not yet fully implemented across all products. Have a default variable list for your field/product? Submit a pull request or post it as an issue on [GitHub](https://github.com/icesat2py/icepyx)!)\n", "2. Provide a list of variable names\n", "3. Provide a list of profiles/beams or other path keywords, where \"keywords\" are simply the unique subdirectory names contained in the full variable paths of the product. A full list of available keywords for the product is displayed in the error message upon entering `keyword_list=['']` into the `append` function (see below for an example) or by running `region_a.order_vars.avail(options=True)`, as above.\n", + "4. Providing a list of full variable path names from the H5 root path. icepyx will ensure that you are submitting valid variable paths.\n", "\n", "**Note: all products have a short list of \"mandatory\" variables/paths (containing spacecraft orientation and time information needed to convert the data's `delta_time` to a readable datetime) that are automatically added to any built list. If you have any recommendations for other variables that should always be included (e.g. uncertainty information), please let us know!**\n", "\n", @@ -724,7 +1453,45 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Example 1.10: generate a default list for the rest of the tutorial\n", + "#### Example 1.10: `path_list`\n", + "Add a specific list of variable paths." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "too many values to unpack (expected 3)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[10], line 8\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# region_a.order_vars.remove(all=True)\u001b[39;00m\n\u001b[1;32m 2\u001b[0m path_list \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mgt1l/land_ice_segments/delta_time\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 3\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mgt1l/land_ice_segments/geophysical/bsnow_h\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 4\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mgt1l/land_ice_segments/geophysical/bsnow_conf\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 5\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mgt1l/land_ice_segments/fit_statistics/h_mean\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 6\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mgt1l/land_ice_segments/latitude\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 7\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mgt1l/land_ice_segments/longitude\u001b[39m\u001b[38;5;124m'\u001b[39m,]\n\u001b[0;32m----> 8\u001b[0m \u001b[43mregion_a\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43morder_vars\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mappend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath_list\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpath_list\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m pprint(region_a\u001b[38;5;241m.\u001b[39morder_vars\u001b[38;5;241m.\u001b[39mwanted)\n", + "File \u001b[0;32m~/computing/icepyx/github_repo/icepyx/icepyx/core/variables.py:530\u001b[0m, in \u001b[0;36mVariables.append\u001b[0;34m(self, defaults, var_list, beam_list, keyword_list, path_list)\u001b[0m\n\u001b[1;32m 527\u001b[0m final_vars \u001b[38;5;241m=\u001b[39m {}\n\u001b[1;32m 529\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m path_list:\n\u001b[0;32m--> 530\u001b[0m _, (beams, keywords, variables) \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparse_var_list(\n\u001b[1;32m 531\u001b[0m path_list, tiered_vars\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 532\u001b[0m )\n\u001b[1;32m 533\u001b[0m var_list \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(\u001b[38;5;28mset\u001b[39m(variables))\n\u001b[1;32m 534\u001b[0m beam_list \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(\u001b[38;5;28mset\u001b[39m(beams))\n", + "\u001b[0;31mValueError\u001b[0m: too many values to unpack (expected 3)" + ] + } + ], + "source": [ + "# region_a.order_vars.remove(all=True)\n", + "path_list = ['gt1l/land_ice_segments/delta_time',\n", + " 'gt1l/land_ice_segments/geophysical/bsnow_h',\n", + " 'gt1l/land_ice_segments/geophysical/bsnow_conf',\n", + " 'gt1l/land_ice_segments/fit_statistics/h_mean',\n", + " 'gt1l/land_ice_segments/latitude',\n", + " 'gt1l/land_ice_segments/longitude',]\n", + "region_a.order_vars.append(path_list=path_list)\n", + "pprint(region_a.order_vars.wanted)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Example 1.11: generate a default list for the rest of the tutorial\n", "Generate a reasonable variable list prior to download" ] }, @@ -892,9 +1659,241 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'aclr_true': ['profile_1/high_rate/aclr_true',\n", + " 'profile_2/high_rate/aclr_true',\n", + " 'profile_3/high_rate/aclr_true'],\n", + " 'apparent_surf_reflec': ['profile_1/high_rate/apparent_surf_reflec',\n", + " 'profile_2/high_rate/apparent_surf_reflec',\n", + " 'profile_3/high_rate/apparent_surf_reflec'],\n", + " 'asr_cloud_probability': ['profile_1/high_rate/asr_cloud_probability',\n", + " 'profile_2/high_rate/asr_cloud_probability',\n", + " 'profile_3/high_rate/asr_cloud_probability'],\n", + " 'backg_c': ['profile_1/high_rate/backg_c',\n", + " 'profile_2/high_rate/backg_c',\n", + " 'profile_3/high_rate/backg_c'],\n", + " 'backg_theoret': ['profile_1/high_rate/backg_theoret',\n", + " 'profile_2/high_rate/backg_theoret',\n", + " 'profile_3/high_rate/backg_theoret'],\n", + " 'beam_azimuth': ['profile_1/high_rate/beam_azimuth',\n", + " 'profile_2/high_rate/beam_azimuth',\n", + " 'profile_3/high_rate/beam_azimuth'],\n", + " 'beam_elevation': ['profile_1/high_rate/beam_elevation',\n", + " 'profile_2/high_rate/beam_elevation',\n", + " 'profile_3/high_rate/beam_elevation'],\n", + " 'bsnow_con': ['profile_1/high_rate/bsnow_con',\n", + " 'profile_2/high_rate/bsnow_con',\n", + " 'profile_3/high_rate/bsnow_con'],\n", + " 'bsnow_dens': ['profile_1/high_rate/bsnow_dens',\n", + " 'profile_2/high_rate/bsnow_dens',\n", + " 'profile_3/high_rate/bsnow_dens'],\n", + " 'bsnow_dens_flag': ['profile_1/high_rate/bsnow_dens_flag',\n", + " 'profile_2/high_rate/bsnow_dens_flag',\n", + " 'profile_3/high_rate/bsnow_dens_flag'],\n", + " 'bsnow_h': ['profile_1/high_rate/bsnow_h',\n", + " 'profile_2/high_rate/bsnow_h',\n", + " 'profile_3/high_rate/bsnow_h'],\n", + " 'bsnow_h_dens': ['profile_1/high_rate/bsnow_h_dens',\n", + " 'profile_2/high_rate/bsnow_h_dens',\n", + " 'profile_3/high_rate/bsnow_h_dens'],\n", + " 'bsnow_intensity': ['profile_1/high_rate/bsnow_intensity',\n", + " 'profile_2/high_rate/bsnow_intensity',\n", + " 'profile_3/high_rate/bsnow_intensity'],\n", + " 'bsnow_od': ['profile_1/high_rate/bsnow_od',\n", + " 'profile_2/high_rate/bsnow_od',\n", + " 'profile_3/high_rate/bsnow_od'],\n", + " 'bsnow_psc': ['profile_1/high_rate/bsnow_psc',\n", + " 'profile_2/high_rate/bsnow_psc',\n", + " 'profile_3/high_rate/bsnow_psc'],\n", + " 'cab_prof': ['profile_1/high_rate/cab_prof',\n", + " 'profile_2/high_rate/cab_prof',\n", + " 'profile_3/high_rate/cab_prof'],\n", + " 'cap_h': ['profile_1/high_rate/cap_h',\n", + " 'profile_2/high_rate/cap_h',\n", + " 'profile_3/high_rate/cap_h'],\n", + " 'cloud_flag_asr': ['profile_1/high_rate/cloud_flag_asr',\n", + " 'profile_2/high_rate/cloud_flag_asr',\n", + " 'profile_3/high_rate/cloud_flag_asr'],\n", + " 'cloud_flag_atm': ['profile_1/high_rate/cloud_flag_atm',\n", + " 'profile_2/high_rate/cloud_flag_atm',\n", + " 'profile_3/high_rate/cloud_flag_atm'],\n", + " 'cloud_fold_flag': ['profile_1/high_rate/cloud_fold_flag',\n", + " 'profile_2/high_rate/cloud_fold_flag',\n", + " 'profile_3/high_rate/cloud_fold_flag'],\n", + " 'column_od_asr': ['profile_1/high_rate/column_od_asr',\n", + " 'profile_2/high_rate/column_od_asr',\n", + " 'profile_3/high_rate/column_od_asr'],\n", + " 'column_od_asr_qf': ['profile_1/high_rate/column_od_asr_qf',\n", + " 'profile_2/high_rate/column_od_asr_qf',\n", + " 'profile_3/high_rate/column_od_asr_qf'],\n", + " 'ddust_hbot_dens': ['profile_1/high_rate/ddust_hbot_dens',\n", + " 'profile_2/high_rate/ddust_hbot_dens',\n", + " 'profile_3/high_rate/ddust_hbot_dens'],\n", + " 'ddust_htop_dens': ['profile_1/high_rate/ddust_htop_dens',\n", + " 'profile_2/high_rate/ddust_htop_dens',\n", + " 'profile_3/high_rate/ddust_htop_dens'],\n", + " 'delta_time': ['profile_1/high_rate/delta_time',\n", + " 'profile_2/high_rate/delta_time',\n", + " 'profile_3/high_rate/delta_time'],\n", + " 'dem_flag': ['profile_1/high_rate/dem_flag',\n", + " 'profile_2/high_rate/dem_flag',\n", + " 'profile_3/high_rate/dem_flag'],\n", + " 'dem_h': ['profile_1/high_rate/dem_h',\n", + " 'profile_2/high_rate/dem_h',\n", + " 'profile_3/high_rate/dem_h'],\n", + " 'density_pass1': ['profile_1/high_rate/density_pass1',\n", + " 'profile_2/high_rate/density_pass1',\n", + " 'profile_3/high_rate/density_pass1'],\n", + " 'density_pass2': ['profile_1/high_rate/density_pass2',\n", + " 'profile_2/high_rate/density_pass2',\n", + " 'profile_3/high_rate/density_pass2'],\n", + " 'ds_layers': ['profile_1/high_rate/ds_layers',\n", + " 'profile_2/high_rate/ds_layers',\n", + " 'profile_3/high_rate/ds_layers'],\n", + " 'ds_va_bin_h': ['profile_1/high_rate/ds_va_bin_h',\n", + " 'profile_2/high_rate/ds_va_bin_h',\n", + " 'profile_3/high_rate/ds_va_bin_h'],\n", + " 'dtime_fac1': ['profile_1/high_rate/dtime_fac1',\n", + " 'profile_2/high_rate/dtime_fac1',\n", + " 'profile_3/high_rate/dtime_fac1'],\n", + " 'dtime_fac2': ['profile_1/high_rate/dtime_fac2',\n", + " 'profile_2/high_rate/dtime_fac2',\n", + " 'profile_3/high_rate/dtime_fac2'],\n", + " 'latitude': ['profile_1/high_rate/latitude',\n", + " 'profile_2/high_rate/latitude',\n", + " 'profile_3/high_rate/latitude'],\n", + " 'layer_attr': ['profile_1/high_rate/layer_attr',\n", + " 'profile_2/high_rate/layer_attr',\n", + " 'profile_3/high_rate/layer_attr'],\n", + " 'layer_bot': ['profile_1/high_rate/layer_bot',\n", + " 'profile_2/high_rate/layer_bot',\n", + " 'profile_3/high_rate/layer_bot'],\n", + " 'layer_con': ['profile_1/high_rate/layer_con',\n", + " 'profile_2/high_rate/layer_con',\n", + " 'profile_3/high_rate/layer_con'],\n", + " 'layer_conf_dens': ['profile_1/high_rate/layer_conf_dens',\n", + " 'profile_2/high_rate/layer_conf_dens',\n", + " 'profile_3/high_rate/layer_conf_dens'],\n", + " 'layer_dens': ['profile_1/high_rate/layer_dens',\n", + " 'profile_2/high_rate/layer_dens',\n", + " 'profile_3/high_rate/layer_dens'],\n", + " 'layer_flag': ['profile_1/high_rate/layer_flag',\n", + " 'profile_2/high_rate/layer_flag',\n", + " 'profile_3/high_rate/layer_flag'],\n", + " 'layer_ib': ['profile_1/high_rate/layer_ib',\n", + " 'profile_2/high_rate/layer_ib',\n", + " 'profile_3/high_rate/layer_ib'],\n", + " 'layer_top': ['profile_1/high_rate/layer_top',\n", + " 'profile_2/high_rate/layer_top',\n", + " 'profile_3/high_rate/layer_top'],\n", + " 'longitude': ['profile_1/high_rate/longitude',\n", + " 'profile_1/low_rate/longitude',\n", + " 'profile_2/high_rate/longitude',\n", + " 'profile_2/low_rate/longitude',\n", + " 'profile_3/high_rate/longitude',\n", + " 'profile_3/low_rate/longitude'],\n", + " 'msw_flag': ['profile_1/high_rate/msw_flag',\n", + " 'profile_2/high_rate/msw_flag',\n", + " 'profile_3/high_rate/msw_flag'],\n", + " 'ocean_surf_reflec': ['profile_1/high_rate/ocean_surf_reflec',\n", + " 'profile_2/high_rate/ocean_surf_reflec',\n", + " 'profile_3/high_rate/ocean_surf_reflec'],\n", + " 'pce_mframe_cnt': ['profile_1/high_rate/pce_mframe_cnt',\n", + " 'profile_2/high_rate/pce_mframe_cnt',\n", + " 'profile_3/high_rate/pce_mframe_cnt'],\n", + " 'podppd_flag': ['profile_1/high_rate/podppd_flag',\n", + " 'profile_2/high_rate/podppd_flag',\n", + " 'profile_3/high_rate/podppd_flag'],\n", + " 'prof_dist_x': ['profile_1/high_rate/prof_dist_x',\n", + " 'profile_2/high_rate/prof_dist_x',\n", + " 'profile_3/high_rate/prof_dist_x'],\n", + " 'prof_dist_y': ['profile_1/high_rate/prof_dist_y',\n", + " 'profile_2/high_rate/prof_dist_y',\n", + " 'profile_3/high_rate/prof_dist_y'],\n", + " 'range_to_top': ['profile_1/high_rate/range_to_top',\n", + " 'profile_2/high_rate/range_to_top',\n", + " 'profile_3/high_rate/range_to_top'],\n", + " 'segment_id': ['profile_1/high_rate/segment_id',\n", + " 'profile_2/high_rate/segment_id',\n", + " 'profile_3/high_rate/segment_id'],\n", + " 'sig_count_hi': ['profile_1/high_rate/sig_count_hi',\n", + " 'profile_2/high_rate/sig_count_hi',\n", + " 'profile_3/high_rate/sig_count_hi'],\n", + " 'sig_count_low': ['profile_1/high_rate/sig_count_low',\n", + " 'profile_2/high_rate/sig_count_low',\n", + " 'profile_3/high_rate/sig_count_low'],\n", + " 'sig_count_med': ['profile_1/high_rate/sig_count_med',\n", + " 'profile_2/high_rate/sig_count_med',\n", + " 'profile_3/high_rate/sig_count_med'],\n", + " 'sig_h_mean_hi': ['profile_1/high_rate/sig_h_mean_hi',\n", + " 'profile_2/high_rate/sig_h_mean_hi',\n", + " 'profile_3/high_rate/sig_h_mean_hi'],\n", + " 'sig_h_mean_low': ['profile_1/high_rate/sig_h_mean_low',\n", + " 'profile_2/high_rate/sig_h_mean_low',\n", + " 'profile_3/high_rate/sig_h_mean_low'],\n", + " 'sig_h_mean_med': ['profile_1/high_rate/sig_h_mean_med',\n", + " 'profile_2/high_rate/sig_h_mean_med',\n", + " 'profile_3/high_rate/sig_h_mean_med'],\n", + " 'sig_h_sdev_hi': ['profile_1/high_rate/sig_h_sdev_hi',\n", + " 'profile_2/high_rate/sig_h_sdev_hi',\n", + " 'profile_3/high_rate/sig_h_sdev_hi'],\n", + " 'sig_h_sdev_low': ['profile_1/high_rate/sig_h_sdev_low',\n", + " 'profile_2/high_rate/sig_h_sdev_low',\n", + " 'profile_3/high_rate/sig_h_sdev_low'],\n", + " 'sig_h_sdev_med': ['profile_1/high_rate/sig_h_sdev_med',\n", + " 'profile_2/high_rate/sig_h_sdev_med',\n", + " 'profile_3/high_rate/sig_h_sdev_med'],\n", + " 'snow_ice': ['profile_1/high_rate/snow_ice',\n", + " 'profile_2/high_rate/snow_ice',\n", + " 'profile_3/high_rate/snow_ice'],\n", + " 'solar_azimuth': ['profile_1/high_rate/solar_azimuth',\n", + " 'profile_2/high_rate/solar_azimuth',\n", + " 'profile_3/high_rate/solar_azimuth'],\n", + " 'solar_elevation': ['profile_1/high_rate/solar_elevation',\n", + " 'profile_2/high_rate/solar_elevation',\n", + " 'profile_3/high_rate/solar_elevation'],\n", + " 'surf_refl_true': ['profile_1/high_rate/surf_refl_true',\n", + " 'profile_2/high_rate/surf_refl_true',\n", + " 'profile_3/high_rate/surf_refl_true'],\n", + " 'surf_type': ['profile_1/high_rate/surf_type',\n", + " 'profile_2/high_rate/surf_type',\n", + " 'profile_3/high_rate/surf_type'],\n", + " 'surf_type_igbp': ['profile_1/high_rate/surf_type_igbp',\n", + " 'profile_2/high_rate/surf_type_igbp',\n", + " 'profile_3/high_rate/surf_type_igbp'],\n", + " 'surface_bin': ['profile_1/high_rate/surface_bin',\n", + " 'profile_2/high_rate/surface_bin',\n", + " 'profile_3/high_rate/surface_bin'],\n", + " 'surface_conf': ['profile_1/high_rate/surface_conf',\n", + " 'profile_2/high_rate/surface_conf',\n", + " 'profile_3/high_rate/surface_conf'],\n", + " 'surface_h_dens': ['profile_1/high_rate/surface_h_dens',\n", + " 'profile_2/high_rate/surface_h_dens',\n", + " 'profile_3/high_rate/surface_h_dens'],\n", + " 'surface_height': ['profile_1/high_rate/surface_height',\n", + " 'profile_2/high_rate/surface_height',\n", + " 'profile_3/high_rate/surface_height'],\n", + " 'surface_sig': ['profile_1/high_rate/surface_sig',\n", + " 'profile_2/high_rate/surface_sig',\n", + " 'profile_3/high_rate/surface_sig'],\n", + " 'surface_thresh': ['profile_1/high_rate/surface_thresh',\n", + " 'profile_2/high_rate/surface_thresh',\n", + " 'profile_3/high_rate/surface_thresh'],\n", + " 'surface_width': ['profile_1/high_rate/surface_width',\n", + " 'profile_2/high_rate/surface_width',\n", + " 'profile_3/high_rate/surface_width'],\n", + " 'tx_pulse_energy': ['profile_1/high_rate/tx_pulse_energy',\n", + " 'profile_2/high_rate/tx_pulse_energy',\n", + " 'profile_3/high_rate/tx_pulse_energy']}\n" + ] + } + ], "source": [ "region_a.order_vars.append(var_list=['longitude'])\n", "region_a.order_vars.append(keyword_list=['high_rate'])\n", @@ -912,7 +1911,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [], "source": [ "region_a.order_vars.remove(beam_list=['profile_1','profile_3'])\n", @@ -923,7 +1924,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Example 2.10: generate a default list for the rest of the tutorial\n", + "#### Example 2.10: `path_list`\n", + "Add a specific list of variable paths." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "region_a.order_vars.remove(all=True)\n", + "path_list = ['profile_2/high_rate/beam_elevation',\n", + " 'profile_2/high_rate/solar_elevation',\n", + " 'profile_2/high_rate/surface_conf',\n", + " 'profile_2/high_rate/surface_height'\n", + " ]\n", + "region_a.order_vars.append(path_list=path_list)\n", + "pprint(region_a.order_vars.wanted)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Example 2.11: generate a default list for the rest of the tutorial\n", "Generate a reasonable variable list prior to download" ] }, @@ -1063,9 +2088,9 @@ ], "metadata": { "kernelspec": { - "display_name": "icepyx-dev", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "icepyx-dev" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -1077,7 +2102,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.12.1" } }, "nbformat": 4, From e294e31fa2f7e39ccdb2d75e5efef1d73d87bb50 Mon Sep 17 00:00:00 2001 From: Jessica Scheick Date: Thu, 22 Feb 2024 15:36:22 -0500 Subject: [PATCH 13/13] clear some cell outputs --- .../IS2_data_variables.ipynb | 972 +----------------- 1 file changed, 7 insertions(+), 965 deletions(-) diff --git a/doc/source/example_notebooks/IS2_data_variables.ipynb b/doc/source/example_notebooks/IS2_data_variables.ipynb index f846c2262..760657080 100644 --- a/doc/source/example_notebooks/IS2_data_variables.ipynb +++ b/doc/source/example_notebooks/IS2_data_variables.ipynb @@ -49,737 +49,11 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "(function(root) {\n", - " function now() {\n", - " return new Date();\n", - " }\n", - "\n", - " var force = true;\n", - " var py_version = '3.3.4'.replace('rc', '-rc.').replace('.dev', '-dev.');\n", - " var reloading = false;\n", - " var Bokeh = root.Bokeh;\n", - "\n", - " if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n", - " root._bokeh_timeout = Date.now() + 5000;\n", - " root._bokeh_failed_load = false;\n", - " }\n", - "\n", - " function run_callbacks() {\n", - " try {\n", - " root._bokeh_onload_callbacks.forEach(function(callback) {\n", - " if (callback != null)\n", - " callback();\n", - " });\n", - " } finally {\n", - " delete root._bokeh_onload_callbacks;\n", - " }\n", - " console.debug(\"Bokeh: all callbacks have finished\");\n", - " }\n", - "\n", - " function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n", - " if (css_urls == null) css_urls = [];\n", - " if (js_urls == null) js_urls = [];\n", - " if (js_modules == null) js_modules = [];\n", - " if (js_exports == null) js_exports = {};\n", - "\n", - " root._bokeh_onload_callbacks.push(callback);\n", - "\n", - " if (root._bokeh_is_loading > 0) {\n", - " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", - " return null;\n", - " }\n", - " if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n", - " run_callbacks();\n", - " return null;\n", - " }\n", - " if (!reloading) {\n", - " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", - " }\n", - "\n", - " function on_load() {\n", - " root._bokeh_is_loading--;\n", - " if (root._bokeh_is_loading === 0) {\n", - " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", - " run_callbacks()\n", - " }\n", - " }\n", - " window._bokeh_on_load = on_load\n", - "\n", - " function on_error() {\n", - " console.error(\"failed to load \" + url);\n", - " }\n", - "\n", - " var skip = [];\n", - " if (window.requirejs) {\n", - " window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n", - " require([\"jspanel\"], function(jsPanel) {\n", - "\twindow.jsPanel = jsPanel\n", - "\ton_load()\n", - " })\n", - " require([\"jspanel-modal\"], function() {\n", - "\ton_load()\n", - " })\n", - " require([\"jspanel-tooltip\"], function() {\n", - "\ton_load()\n", - " })\n", - " require([\"jspanel-hint\"], function() {\n", - "\ton_load()\n", - " })\n", - " require([\"jspanel-layout\"], function() {\n", - "\ton_load()\n", - " })\n", - " require([\"jspanel-contextmenu\"], function() {\n", - "\ton_load()\n", - " })\n", - " require([\"jspanel-dock\"], function() {\n", - "\ton_load()\n", - " })\n", - " require([\"gridstack\"], function(GridStack) {\n", - "\twindow.GridStack = GridStack\n", - "\ton_load()\n", - " })\n", - " require([\"notyf\"], function() {\n", - "\ton_load()\n", - " })\n", - " root._bokeh_is_loading = css_urls.length + 9;\n", - " } else {\n", - " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n", - " }\n", - "\n", - " var existing_stylesheets = []\n", - " var links = document.getElementsByTagName('link')\n", - " for (var i = 0; i < links.length; i++) {\n", - " var link = links[i]\n", - " if (link.href != null) {\n", - "\texisting_stylesheets.push(link.href)\n", - " }\n", - " }\n", - " for (var i = 0; i < css_urls.length; i++) {\n", - " var url = css_urls[i];\n", - " if (existing_stylesheets.indexOf(url) !== -1) {\n", - "\ton_load()\n", - "\tcontinue;\n", - " }\n", - " const element = document.createElement(\"link\");\n", - " element.onload = on_load;\n", - " element.onerror = on_error;\n", - " element.rel = \"stylesheet\";\n", - " element.type = \"text/css\";\n", - " element.href = url;\n", - " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", - " document.body.appendChild(element);\n", - " } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n", - " var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n", - " for (var i = 0; i < urls.length; i++) {\n", - " skip.push(urls[i])\n", - " }\n", - " } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n", - " var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n", - " for (var i = 0; i < urls.length; i++) {\n", - " skip.push(urls[i])\n", - " }\n", - " } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n", - " var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n", - " for (var i = 0; i < urls.length; i++) {\n", - " skip.push(urls[i])\n", - " }\n", - " } var existing_scripts = []\n", - " var scripts = document.getElementsByTagName('script')\n", - " for (var i = 0; i < scripts.length; i++) {\n", - " var script = scripts[i]\n", - " if (script.src != null) {\n", - "\texisting_scripts.push(script.src)\n", - " }\n", - " }\n", - " for (var i = 0; i < js_urls.length; i++) {\n", - " var url = js_urls[i];\n", - " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", - "\tif (!window.requirejs) {\n", - "\t on_load();\n", - "\t}\n", - "\tcontinue;\n", - " }\n", - " var element = document.createElement('script');\n", - " element.onload = on_load;\n", - " element.onerror = on_error;\n", - " element.async = false;\n", - " element.src = url;\n", - " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", - " document.head.appendChild(element);\n", - " }\n", - " for (var i = 0; i < js_modules.length; i++) {\n", - " var url = js_modules[i];\n", - " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", - "\tif (!window.requirejs) {\n", - "\t on_load();\n", - "\t}\n", - "\tcontinue;\n", - " }\n", - " var element = document.createElement('script');\n", - " element.onload = on_load;\n", - " element.onerror = on_error;\n", - " element.async = false;\n", - " element.src = url;\n", - " element.type = \"module\";\n", - " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", - " document.head.appendChild(element);\n", - " }\n", - " for (const name in js_exports) {\n", - " var url = js_exports[name];\n", - " if (skip.indexOf(url) >= 0 || root[name] != null) {\n", - "\tif (!window.requirejs) {\n", - "\t on_load();\n", - "\t}\n", - "\tcontinue;\n", - " }\n", - " var element = document.createElement('script');\n", - " element.onerror = on_error;\n", - " element.async = false;\n", - " element.type = \"module\";\n", - " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", - " element.textContent = `\n", - " import ${name} from \"${url}\"\n", - " window.${name} = ${name}\n", - " window._bokeh_on_load()\n", - " `\n", - " document.head.appendChild(element);\n", - " }\n", - " if (!js_urls.length && !js_modules.length) {\n", - " on_load()\n", - " }\n", - " };\n", - "\n", - " function inject_raw_css(css) {\n", - " const element = document.createElement(\"style\");\n", - " element.appendChild(document.createTextNode(css));\n", - " document.body.appendChild(element);\n", - " }\n", - "\n", - " var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.4.min.js\", \"https://cdn.holoviz.org/panel/1.3.8/dist/panel.min.js\"];\n", - " var js_modules = [];\n", - " var js_exports = {};\n", - " var css_urls = [];\n", - " var inline_js = [ function(Bokeh) {\n", - " Bokeh.set_log_level(\"info\");\n", - " },\n", - "function(Bokeh) {} // ensure no trailing comma for IE\n", - " ];\n", - "\n", - " function run_inline_js() {\n", - " if ((root.Bokeh !== undefined) || (force === true)) {\n", - " for (var i = 0; i < inline_js.length; i++) {\n", - "\ttry {\n", - " inline_js[i].call(root, root.Bokeh);\n", - "\t} catch(e) {\n", - "\t if (!reloading) {\n", - "\t throw e;\n", - "\t }\n", - "\t}\n", - " }\n", - " // Cache old bokeh versions\n", - " if (Bokeh != undefined && !reloading) {\n", - "\tvar NewBokeh = root.Bokeh;\n", - "\tif (Bokeh.versions === undefined) {\n", - "\t Bokeh.versions = new Map();\n", - "\t}\n", - "\tif (NewBokeh.version !== Bokeh.version) {\n", - "\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n", - "\t}\n", - "\troot.Bokeh = Bokeh;\n", - " }} else if (Date.now() < root._bokeh_timeout) {\n", - " setTimeout(run_inline_js, 100);\n", - " } else if (!root._bokeh_failed_load) {\n", - " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", - " root._bokeh_failed_load = true;\n", - " }\n", - " root._bokeh_is_initializing = false\n", - " }\n", - "\n", - " function load_or_wait() {\n", - " // Implement a backoff loop that tries to ensure we do not load multiple\n", - " // versions of Bokeh and its dependencies at the same time.\n", - " // In recent versions we use the root._bokeh_is_initializing flag\n", - " // to determine whether there is an ongoing attempt to initialize\n", - " // bokeh, however for backward compatibility we also try to ensure\n", - " // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n", - " // before older versions are fully initialized.\n", - " if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n", - " root._bokeh_is_initializing = false;\n", - " root._bokeh_onload_callbacks = undefined;\n", - " console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n", - " load_or_wait();\n", - " } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n", - " setTimeout(load_or_wait, 100);\n", - " } else {\n", - " root._bokeh_is_initializing = true\n", - " root._bokeh_onload_callbacks = []\n", - " var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", - " if (!reloading && !bokeh_loaded) {\n", - "\troot.Bokeh = undefined;\n", - " }\n", - " load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n", - "\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", - "\trun_inline_js();\n", - " });\n", - " }\n", - " }\n", - " // Give older versions of the autoload script a head-start to ensure\n", - " // they initialize before we start loading newer version.\n", - " setTimeout(load_or_wait, 100)\n", - "}(window));" - ], - "application/vnd.holoviews_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n var py_version = '3.3.4'.replace('rc', '-rc.').replace('.dev', '-dev.');\n var reloading = false;\n var Bokeh = root.Bokeh;\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n run_callbacks();\n return null;\n }\n if (!reloading) {\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n var skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n require([\"jspanel\"], function(jsPanel) {\n\twindow.jsPanel = jsPanel\n\ton_load()\n })\n require([\"jspanel-modal\"], function() {\n\ton_load()\n })\n require([\"jspanel-tooltip\"], function() {\n\ton_load()\n })\n require([\"jspanel-hint\"], function() {\n\ton_load()\n })\n require([\"jspanel-layout\"], function() {\n\ton_load()\n })\n require([\"jspanel-contextmenu\"], function() {\n\ton_load()\n })\n require([\"jspanel-dock\"], function() {\n\ton_load()\n })\n require([\"gridstack\"], function(GridStack) {\n\twindow.GridStack = GridStack\n\ton_load()\n })\n require([\"notyf\"], function() {\n\ton_load()\n })\n root._bokeh_is_loading = css_urls.length + 9;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n var existing_stylesheets = []\n var links = document.getElementsByTagName('link')\n for (var i = 0; i < links.length; i++) {\n var link = links[i]\n if (link.href != null) {\n\texisting_stylesheets.push(link.href)\n }\n }\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n if (existing_stylesheets.indexOf(url) !== -1) {\n\ton_load()\n\tcontinue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.3.8/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.8/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } var existing_scripts = []\n var scripts = document.getElementsByTagName('script')\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n\texisting_scripts.push(script.src)\n }\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (var i = 0; i < js_modules.length; i++) {\n var url = js_modules[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n var url = js_exports[name];\n if (skip.indexOf(url) >= 0 || root[name] != null) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.4.min.js\", \"https://cdn.holoviz.org/panel/1.3.8/dist/panel.min.js\"];\n var js_modules = [];\n var js_exports = {};\n var css_urls = [];\n var inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n\ttry {\n inline_js[i].call(root, root.Bokeh);\n\t} catch(e) {\n\t if (!reloading) {\n\t throw e;\n\t }\n\t}\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n\tvar NewBokeh = root.Bokeh;\n\tif (Bokeh.versions === undefined) {\n\t Bokeh.versions = new Map();\n\t}\n\tif (NewBokeh.version !== Bokeh.version) {\n\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n\t}\n\troot.Bokeh = Bokeh;\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n if (!reloading && !bokeh_loaded) {\n\troot.Bokeh = undefined;\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n\trun_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "\n", - "if ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n", - " window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n", - "}\n", - "\n", - "\n", - " function JupyterCommManager() {\n", - " }\n", - "\n", - " JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n", - " if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", - " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", - " comm_manager.register_target(comm_id, function(comm) {\n", - " comm.on_msg(msg_handler);\n", - " });\n", - " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", - " window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n", - " comm.onMsg = msg_handler;\n", - " });\n", - " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", - " google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n", - " var messages = comm.messages[Symbol.asyncIterator]();\n", - " function processIteratorResult(result) {\n", - " var message = result.value;\n", - " console.log(message)\n", - " var content = {data: message.data, comm_id};\n", - " var buffers = []\n", - " for (var buffer of message.buffers || []) {\n", - " buffers.push(new DataView(buffer))\n", - " }\n", - " var metadata = message.metadata || {};\n", - " var msg = {content, buffers, metadata}\n", - " msg_handler(msg);\n", - " return messages.next().then(processIteratorResult);\n", - " }\n", - " return messages.next().then(processIteratorResult);\n", - " })\n", - " }\n", - " }\n", - "\n", - " JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n", - " if (comm_id in window.PyViz.comms) {\n", - " return window.PyViz.comms[comm_id];\n", - " } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", - " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", - " var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n", - " if (msg_handler) {\n", - " comm.on_msg(msg_handler);\n", - " }\n", - " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", - " var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n", - " comm.open();\n", - " if (msg_handler) {\n", - " comm.onMsg = msg_handler;\n", - " }\n", - " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", - " var comm_promise = google.colab.kernel.comms.open(comm_id)\n", - " comm_promise.then((comm) => {\n", - " window.PyViz.comms[comm_id] = comm;\n", - " if (msg_handler) {\n", - " var messages = comm.messages[Symbol.asyncIterator]();\n", - " function processIteratorResult(result) {\n", - " var message = result.value;\n", - " var content = {data: message.data};\n", - " var metadata = message.metadata || {comm_id};\n", - " var msg = {content, metadata}\n", - " msg_handler(msg);\n", - " return messages.next().then(processIteratorResult);\n", - " }\n", - " return messages.next().then(processIteratorResult);\n", - " }\n", - " }) \n", - " var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n", - " return comm_promise.then((comm) => {\n", - " comm.send(data, metadata, buffers, disposeOnDone);\n", - " });\n", - " };\n", - " var comm = {\n", - " send: sendClosure\n", - " };\n", - " }\n", - " window.PyViz.comms[comm_id] = comm;\n", - " return comm;\n", - " }\n", - " window.PyViz.comm_manager = new JupyterCommManager();\n", - " \n", - "\n", - "\n", - "var JS_MIME_TYPE = 'application/javascript';\n", - "var HTML_MIME_TYPE = 'text/html';\n", - "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n", - "var CLASS_NAME = 'output';\n", - "\n", - "/**\n", - " * Render data to the DOM node\n", - " */\n", - "function render(props, node) {\n", - " var div = document.createElement(\"div\");\n", - " var script = document.createElement(\"script\");\n", - " node.appendChild(div);\n", - " node.appendChild(script);\n", - "}\n", - "\n", - "/**\n", - " * Handle when a new output is added\n", - " */\n", - "function handle_add_output(event, handle) {\n", - " var output_area = handle.output_area;\n", - " var output = handle.output;\n", - " if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", - " return\n", - " }\n", - " var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", - " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", - " if (id !== undefined) {\n", - " var nchildren = toinsert.length;\n", - " var html_node = toinsert[nchildren-1].children[0];\n", - " html_node.innerHTML = output.data[HTML_MIME_TYPE];\n", - " var scripts = [];\n", - " var nodelist = html_node.querySelectorAll(\"script\");\n", - " for (var i in nodelist) {\n", - " if (nodelist.hasOwnProperty(i)) {\n", - " scripts.push(nodelist[i])\n", - " }\n", - " }\n", - "\n", - " scripts.forEach( function (oldScript) {\n", - " var newScript = document.createElement(\"script\");\n", - " var attrs = [];\n", - " var nodemap = oldScript.attributes;\n", - " for (var j in nodemap) {\n", - " if (nodemap.hasOwnProperty(j)) {\n", - " attrs.push(nodemap[j])\n", - " }\n", - " }\n", - " attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n", - " newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n", - " oldScript.parentNode.replaceChild(newScript, oldScript);\n", - " });\n", - " if (JS_MIME_TYPE in output.data) {\n", - " toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n", - " }\n", - " output_area._hv_plot_id = id;\n", - " if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n", - " window.PyViz.plot_index[id] = Bokeh.index[id];\n", - " } else {\n", - " window.PyViz.plot_index[id] = null;\n", - " }\n", - " } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", - " var bk_div = document.createElement(\"div\");\n", - " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", - " var script_attrs = bk_div.children[0].attributes;\n", - " for (var i = 0; i < script_attrs.length; i++) {\n", - " toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n", - " }\n", - " // store reference to server id on output_area\n", - " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", - " }\n", - "}\n", - "\n", - "/**\n", - " * Handle when an output is cleared or removed\n", - " */\n", - "function handle_clear_output(event, handle) {\n", - " var id = handle.cell.output_area._hv_plot_id;\n", - " var server_id = handle.cell.output_area._bokeh_server_id;\n", - " if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n", - " var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n", - " if (server_id !== null) {\n", - " comm.send({event_type: 'server_delete', 'id': server_id});\n", - " return;\n", - " } else if (comm !== null) {\n", - " comm.send({event_type: 'delete', 'id': id});\n", - " }\n", - " delete PyViz.plot_index[id];\n", - " if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n", - " var doc = window.Bokeh.index[id].model.document\n", - " doc.clear();\n", - " const i = window.Bokeh.documents.indexOf(doc);\n", - " if (i > -1) {\n", - " window.Bokeh.documents.splice(i, 1);\n", - " }\n", - " }\n", - "}\n", - "\n", - "/**\n", - " * Handle kernel restart event\n", - " */\n", - "function handle_kernel_cleanup(event, handle) {\n", - " delete PyViz.comms[\"hv-extension-comm\"];\n", - " window.PyViz.plot_index = {}\n", - "}\n", - "\n", - "/**\n", - " * Handle update_display_data messages\n", - " */\n", - "function handle_update_output(event, handle) {\n", - " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n", - " handle_add_output(event, handle)\n", - "}\n", - "\n", - "function register_renderer(events, OutputArea) {\n", - " function append_mime(data, metadata, element) {\n", - " // create a DOM node to render to\n", - " var toinsert = this.create_output_subarea(\n", - " metadata,\n", - " CLASS_NAME,\n", - " EXEC_MIME_TYPE\n", - " );\n", - " this.keyboard_manager.register_events(toinsert);\n", - " // Render to node\n", - " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", - " render(props, toinsert[0]);\n", - " element.append(toinsert);\n", - " return toinsert\n", - " }\n", - "\n", - " events.on('output_added.OutputArea', handle_add_output);\n", - " events.on('output_updated.OutputArea', handle_update_output);\n", - " events.on('clear_output.CodeCell', handle_clear_output);\n", - " events.on('delete.Cell', handle_clear_output);\n", - " events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n", - "\n", - " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", - " safe: true,\n", - " index: 0\n", - " });\n", - "}\n", - "\n", - "if (window.Jupyter !== undefined) {\n", - " try {\n", - " var events = require('base/js/events');\n", - " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", - " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", - " register_renderer(events, OutputArea);\n", - " }\n", - " } catch(err) {\n", - " }\n", - "}\n" - ], - "application/vnd.holoviews_load.v0+json": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.holoviews_exec.v0+json": "", - "text/html": [ - "
\n", - "
\n", - "
\n", - "" - ] - }, - "metadata": { - "application/vnd.holoviews_exec.v0+json": { - "id": "p1002" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - "\n", - "\n", - "\n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], "source": [ "import icepyx as ipx\n", "from pprint import pprint" @@ -1659,241 +933,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'aclr_true': ['profile_1/high_rate/aclr_true',\n", - " 'profile_2/high_rate/aclr_true',\n", - " 'profile_3/high_rate/aclr_true'],\n", - " 'apparent_surf_reflec': ['profile_1/high_rate/apparent_surf_reflec',\n", - " 'profile_2/high_rate/apparent_surf_reflec',\n", - " 'profile_3/high_rate/apparent_surf_reflec'],\n", - " 'asr_cloud_probability': ['profile_1/high_rate/asr_cloud_probability',\n", - " 'profile_2/high_rate/asr_cloud_probability',\n", - " 'profile_3/high_rate/asr_cloud_probability'],\n", - " 'backg_c': ['profile_1/high_rate/backg_c',\n", - " 'profile_2/high_rate/backg_c',\n", - " 'profile_3/high_rate/backg_c'],\n", - " 'backg_theoret': ['profile_1/high_rate/backg_theoret',\n", - " 'profile_2/high_rate/backg_theoret',\n", - " 'profile_3/high_rate/backg_theoret'],\n", - " 'beam_azimuth': ['profile_1/high_rate/beam_azimuth',\n", - " 'profile_2/high_rate/beam_azimuth',\n", - " 'profile_3/high_rate/beam_azimuth'],\n", - " 'beam_elevation': ['profile_1/high_rate/beam_elevation',\n", - " 'profile_2/high_rate/beam_elevation',\n", - " 'profile_3/high_rate/beam_elevation'],\n", - " 'bsnow_con': ['profile_1/high_rate/bsnow_con',\n", - " 'profile_2/high_rate/bsnow_con',\n", - " 'profile_3/high_rate/bsnow_con'],\n", - " 'bsnow_dens': ['profile_1/high_rate/bsnow_dens',\n", - " 'profile_2/high_rate/bsnow_dens',\n", - " 'profile_3/high_rate/bsnow_dens'],\n", - " 'bsnow_dens_flag': ['profile_1/high_rate/bsnow_dens_flag',\n", - " 'profile_2/high_rate/bsnow_dens_flag',\n", - " 'profile_3/high_rate/bsnow_dens_flag'],\n", - " 'bsnow_h': ['profile_1/high_rate/bsnow_h',\n", - " 'profile_2/high_rate/bsnow_h',\n", - " 'profile_3/high_rate/bsnow_h'],\n", - " 'bsnow_h_dens': ['profile_1/high_rate/bsnow_h_dens',\n", - " 'profile_2/high_rate/bsnow_h_dens',\n", - " 'profile_3/high_rate/bsnow_h_dens'],\n", - " 'bsnow_intensity': ['profile_1/high_rate/bsnow_intensity',\n", - " 'profile_2/high_rate/bsnow_intensity',\n", - " 'profile_3/high_rate/bsnow_intensity'],\n", - " 'bsnow_od': ['profile_1/high_rate/bsnow_od',\n", - " 'profile_2/high_rate/bsnow_od',\n", - " 'profile_3/high_rate/bsnow_od'],\n", - " 'bsnow_psc': ['profile_1/high_rate/bsnow_psc',\n", - " 'profile_2/high_rate/bsnow_psc',\n", - " 'profile_3/high_rate/bsnow_psc'],\n", - " 'cab_prof': ['profile_1/high_rate/cab_prof',\n", - " 'profile_2/high_rate/cab_prof',\n", - " 'profile_3/high_rate/cab_prof'],\n", - " 'cap_h': ['profile_1/high_rate/cap_h',\n", - " 'profile_2/high_rate/cap_h',\n", - " 'profile_3/high_rate/cap_h'],\n", - " 'cloud_flag_asr': ['profile_1/high_rate/cloud_flag_asr',\n", - " 'profile_2/high_rate/cloud_flag_asr',\n", - " 'profile_3/high_rate/cloud_flag_asr'],\n", - " 'cloud_flag_atm': ['profile_1/high_rate/cloud_flag_atm',\n", - " 'profile_2/high_rate/cloud_flag_atm',\n", - " 'profile_3/high_rate/cloud_flag_atm'],\n", - " 'cloud_fold_flag': ['profile_1/high_rate/cloud_fold_flag',\n", - " 'profile_2/high_rate/cloud_fold_flag',\n", - " 'profile_3/high_rate/cloud_fold_flag'],\n", - " 'column_od_asr': ['profile_1/high_rate/column_od_asr',\n", - " 'profile_2/high_rate/column_od_asr',\n", - " 'profile_3/high_rate/column_od_asr'],\n", - " 'column_od_asr_qf': ['profile_1/high_rate/column_od_asr_qf',\n", - " 'profile_2/high_rate/column_od_asr_qf',\n", - " 'profile_3/high_rate/column_od_asr_qf'],\n", - " 'ddust_hbot_dens': ['profile_1/high_rate/ddust_hbot_dens',\n", - " 'profile_2/high_rate/ddust_hbot_dens',\n", - " 'profile_3/high_rate/ddust_hbot_dens'],\n", - " 'ddust_htop_dens': ['profile_1/high_rate/ddust_htop_dens',\n", - " 'profile_2/high_rate/ddust_htop_dens',\n", - " 'profile_3/high_rate/ddust_htop_dens'],\n", - " 'delta_time': ['profile_1/high_rate/delta_time',\n", - " 'profile_2/high_rate/delta_time',\n", - " 'profile_3/high_rate/delta_time'],\n", - " 'dem_flag': ['profile_1/high_rate/dem_flag',\n", - " 'profile_2/high_rate/dem_flag',\n", - " 'profile_3/high_rate/dem_flag'],\n", - " 'dem_h': ['profile_1/high_rate/dem_h',\n", - " 'profile_2/high_rate/dem_h',\n", - " 'profile_3/high_rate/dem_h'],\n", - " 'density_pass1': ['profile_1/high_rate/density_pass1',\n", - " 'profile_2/high_rate/density_pass1',\n", - " 'profile_3/high_rate/density_pass1'],\n", - " 'density_pass2': ['profile_1/high_rate/density_pass2',\n", - " 'profile_2/high_rate/density_pass2',\n", - " 'profile_3/high_rate/density_pass2'],\n", - " 'ds_layers': ['profile_1/high_rate/ds_layers',\n", - " 'profile_2/high_rate/ds_layers',\n", - " 'profile_3/high_rate/ds_layers'],\n", - " 'ds_va_bin_h': ['profile_1/high_rate/ds_va_bin_h',\n", - " 'profile_2/high_rate/ds_va_bin_h',\n", - " 'profile_3/high_rate/ds_va_bin_h'],\n", - " 'dtime_fac1': ['profile_1/high_rate/dtime_fac1',\n", - " 'profile_2/high_rate/dtime_fac1',\n", - " 'profile_3/high_rate/dtime_fac1'],\n", - " 'dtime_fac2': ['profile_1/high_rate/dtime_fac2',\n", - " 'profile_2/high_rate/dtime_fac2',\n", - " 'profile_3/high_rate/dtime_fac2'],\n", - " 'latitude': ['profile_1/high_rate/latitude',\n", - " 'profile_2/high_rate/latitude',\n", - " 'profile_3/high_rate/latitude'],\n", - " 'layer_attr': ['profile_1/high_rate/layer_attr',\n", - " 'profile_2/high_rate/layer_attr',\n", - " 'profile_3/high_rate/layer_attr'],\n", - " 'layer_bot': ['profile_1/high_rate/layer_bot',\n", - " 'profile_2/high_rate/layer_bot',\n", - " 'profile_3/high_rate/layer_bot'],\n", - " 'layer_con': ['profile_1/high_rate/layer_con',\n", - " 'profile_2/high_rate/layer_con',\n", - " 'profile_3/high_rate/layer_con'],\n", - " 'layer_conf_dens': ['profile_1/high_rate/layer_conf_dens',\n", - " 'profile_2/high_rate/layer_conf_dens',\n", - " 'profile_3/high_rate/layer_conf_dens'],\n", - " 'layer_dens': ['profile_1/high_rate/layer_dens',\n", - " 'profile_2/high_rate/layer_dens',\n", - " 'profile_3/high_rate/layer_dens'],\n", - " 'layer_flag': ['profile_1/high_rate/layer_flag',\n", - " 'profile_2/high_rate/layer_flag',\n", - " 'profile_3/high_rate/layer_flag'],\n", - " 'layer_ib': ['profile_1/high_rate/layer_ib',\n", - " 'profile_2/high_rate/layer_ib',\n", - " 'profile_3/high_rate/layer_ib'],\n", - " 'layer_top': ['profile_1/high_rate/layer_top',\n", - " 'profile_2/high_rate/layer_top',\n", - " 'profile_3/high_rate/layer_top'],\n", - " 'longitude': ['profile_1/high_rate/longitude',\n", - " 'profile_1/low_rate/longitude',\n", - " 'profile_2/high_rate/longitude',\n", - " 'profile_2/low_rate/longitude',\n", - " 'profile_3/high_rate/longitude',\n", - " 'profile_3/low_rate/longitude'],\n", - " 'msw_flag': ['profile_1/high_rate/msw_flag',\n", - " 'profile_2/high_rate/msw_flag',\n", - " 'profile_3/high_rate/msw_flag'],\n", - " 'ocean_surf_reflec': ['profile_1/high_rate/ocean_surf_reflec',\n", - " 'profile_2/high_rate/ocean_surf_reflec',\n", - " 'profile_3/high_rate/ocean_surf_reflec'],\n", - " 'pce_mframe_cnt': ['profile_1/high_rate/pce_mframe_cnt',\n", - " 'profile_2/high_rate/pce_mframe_cnt',\n", - " 'profile_3/high_rate/pce_mframe_cnt'],\n", - " 'podppd_flag': ['profile_1/high_rate/podppd_flag',\n", - " 'profile_2/high_rate/podppd_flag',\n", - " 'profile_3/high_rate/podppd_flag'],\n", - " 'prof_dist_x': ['profile_1/high_rate/prof_dist_x',\n", - " 'profile_2/high_rate/prof_dist_x',\n", - " 'profile_3/high_rate/prof_dist_x'],\n", - " 'prof_dist_y': ['profile_1/high_rate/prof_dist_y',\n", - " 'profile_2/high_rate/prof_dist_y',\n", - " 'profile_3/high_rate/prof_dist_y'],\n", - " 'range_to_top': ['profile_1/high_rate/range_to_top',\n", - " 'profile_2/high_rate/range_to_top',\n", - " 'profile_3/high_rate/range_to_top'],\n", - " 'segment_id': ['profile_1/high_rate/segment_id',\n", - " 'profile_2/high_rate/segment_id',\n", - " 'profile_3/high_rate/segment_id'],\n", - " 'sig_count_hi': ['profile_1/high_rate/sig_count_hi',\n", - " 'profile_2/high_rate/sig_count_hi',\n", - " 'profile_3/high_rate/sig_count_hi'],\n", - " 'sig_count_low': ['profile_1/high_rate/sig_count_low',\n", - " 'profile_2/high_rate/sig_count_low',\n", - " 'profile_3/high_rate/sig_count_low'],\n", - " 'sig_count_med': ['profile_1/high_rate/sig_count_med',\n", - " 'profile_2/high_rate/sig_count_med',\n", - " 'profile_3/high_rate/sig_count_med'],\n", - " 'sig_h_mean_hi': ['profile_1/high_rate/sig_h_mean_hi',\n", - " 'profile_2/high_rate/sig_h_mean_hi',\n", - " 'profile_3/high_rate/sig_h_mean_hi'],\n", - " 'sig_h_mean_low': ['profile_1/high_rate/sig_h_mean_low',\n", - " 'profile_2/high_rate/sig_h_mean_low',\n", - " 'profile_3/high_rate/sig_h_mean_low'],\n", - " 'sig_h_mean_med': ['profile_1/high_rate/sig_h_mean_med',\n", - " 'profile_2/high_rate/sig_h_mean_med',\n", - " 'profile_3/high_rate/sig_h_mean_med'],\n", - " 'sig_h_sdev_hi': ['profile_1/high_rate/sig_h_sdev_hi',\n", - " 'profile_2/high_rate/sig_h_sdev_hi',\n", - " 'profile_3/high_rate/sig_h_sdev_hi'],\n", - " 'sig_h_sdev_low': ['profile_1/high_rate/sig_h_sdev_low',\n", - " 'profile_2/high_rate/sig_h_sdev_low',\n", - " 'profile_3/high_rate/sig_h_sdev_low'],\n", - " 'sig_h_sdev_med': ['profile_1/high_rate/sig_h_sdev_med',\n", - " 'profile_2/high_rate/sig_h_sdev_med',\n", - " 'profile_3/high_rate/sig_h_sdev_med'],\n", - " 'snow_ice': ['profile_1/high_rate/snow_ice',\n", - " 'profile_2/high_rate/snow_ice',\n", - " 'profile_3/high_rate/snow_ice'],\n", - " 'solar_azimuth': ['profile_1/high_rate/solar_azimuth',\n", - " 'profile_2/high_rate/solar_azimuth',\n", - " 'profile_3/high_rate/solar_azimuth'],\n", - " 'solar_elevation': ['profile_1/high_rate/solar_elevation',\n", - " 'profile_2/high_rate/solar_elevation',\n", - " 'profile_3/high_rate/solar_elevation'],\n", - " 'surf_refl_true': ['profile_1/high_rate/surf_refl_true',\n", - " 'profile_2/high_rate/surf_refl_true',\n", - " 'profile_3/high_rate/surf_refl_true'],\n", - " 'surf_type': ['profile_1/high_rate/surf_type',\n", - " 'profile_2/high_rate/surf_type',\n", - " 'profile_3/high_rate/surf_type'],\n", - " 'surf_type_igbp': ['profile_1/high_rate/surf_type_igbp',\n", - " 'profile_2/high_rate/surf_type_igbp',\n", - " 'profile_3/high_rate/surf_type_igbp'],\n", - " 'surface_bin': ['profile_1/high_rate/surface_bin',\n", - " 'profile_2/high_rate/surface_bin',\n", - " 'profile_3/high_rate/surface_bin'],\n", - " 'surface_conf': ['profile_1/high_rate/surface_conf',\n", - " 'profile_2/high_rate/surface_conf',\n", - " 'profile_3/high_rate/surface_conf'],\n", - " 'surface_h_dens': ['profile_1/high_rate/surface_h_dens',\n", - " 'profile_2/high_rate/surface_h_dens',\n", - " 'profile_3/high_rate/surface_h_dens'],\n", - " 'surface_height': ['profile_1/high_rate/surface_height',\n", - " 'profile_2/high_rate/surface_height',\n", - " 'profile_3/high_rate/surface_height'],\n", - " 'surface_sig': ['profile_1/high_rate/surface_sig',\n", - " 'profile_2/high_rate/surface_sig',\n", - " 'profile_3/high_rate/surface_sig'],\n", - " 'surface_thresh': ['profile_1/high_rate/surface_thresh',\n", - " 'profile_2/high_rate/surface_thresh',\n", - " 'profile_3/high_rate/surface_thresh'],\n", - " 'surface_width': ['profile_1/high_rate/surface_width',\n", - " 'profile_2/high_rate/surface_width',\n", - " 'profile_3/high_rate/surface_width'],\n", - " 'tx_pulse_energy': ['profile_1/high_rate/tx_pulse_energy',\n", - " 'profile_2/high_rate/tx_pulse_energy',\n", - " 'profile_3/high_rate/tx_pulse_energy']}\n" - ] - } - ], + "outputs": [], "source": [ "region_a.order_vars.append(var_list=['longitude'])\n", "region_a.order_vars.append(keyword_list=['high_rate'])\n",