tensorbored 2.21.0rc1769983804__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. tensorbored/__init__.py +112 -0
  2. tensorbored/_vendor/__init__.py +0 -0
  3. tensorbored/_vendor/bleach/__init__.py +125 -0
  4. tensorbored/_vendor/bleach/_vendor/__init__.py +0 -0
  5. tensorbored/_vendor/bleach/_vendor/html5lib/__init__.py +35 -0
  6. tensorbored/_vendor/bleach/_vendor/html5lib/_ihatexml.py +289 -0
  7. tensorbored/_vendor/bleach/_vendor/html5lib/_inputstream.py +918 -0
  8. tensorbored/_vendor/bleach/_vendor/html5lib/_tokenizer.py +1735 -0
  9. tensorbored/_vendor/bleach/_vendor/html5lib/_trie/__init__.py +5 -0
  10. tensorbored/_vendor/bleach/_vendor/html5lib/_trie/_base.py +40 -0
  11. tensorbored/_vendor/bleach/_vendor/html5lib/_trie/py.py +67 -0
  12. tensorbored/_vendor/bleach/_vendor/html5lib/_utils.py +159 -0
  13. tensorbored/_vendor/bleach/_vendor/html5lib/constants.py +2946 -0
  14. tensorbored/_vendor/bleach/_vendor/html5lib/filters/__init__.py +0 -0
  15. tensorbored/_vendor/bleach/_vendor/html5lib/filters/alphabeticalattributes.py +29 -0
  16. tensorbored/_vendor/bleach/_vendor/html5lib/filters/base.py +12 -0
  17. tensorbored/_vendor/bleach/_vendor/html5lib/filters/inject_meta_charset.py +73 -0
  18. tensorbored/_vendor/bleach/_vendor/html5lib/filters/lint.py +93 -0
  19. tensorbored/_vendor/bleach/_vendor/html5lib/filters/optionaltags.py +207 -0
  20. tensorbored/_vendor/bleach/_vendor/html5lib/filters/sanitizer.py +916 -0
  21. tensorbored/_vendor/bleach/_vendor/html5lib/filters/whitespace.py +38 -0
  22. tensorbored/_vendor/bleach/_vendor/html5lib/html5parser.py +2795 -0
  23. tensorbored/_vendor/bleach/_vendor/html5lib/serializer.py +409 -0
  24. tensorbored/_vendor/bleach/_vendor/html5lib/treeadapters/__init__.py +30 -0
  25. tensorbored/_vendor/bleach/_vendor/html5lib/treeadapters/genshi.py +54 -0
  26. tensorbored/_vendor/bleach/_vendor/html5lib/treeadapters/sax.py +50 -0
  27. tensorbored/_vendor/bleach/_vendor/html5lib/treebuilders/__init__.py +88 -0
  28. tensorbored/_vendor/bleach/_vendor/html5lib/treebuilders/base.py +417 -0
  29. tensorbored/_vendor/bleach/_vendor/html5lib/treebuilders/dom.py +239 -0
  30. tensorbored/_vendor/bleach/_vendor/html5lib/treebuilders/etree.py +343 -0
  31. tensorbored/_vendor/bleach/_vendor/html5lib/treebuilders/etree_lxml.py +392 -0
  32. tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/__init__.py +154 -0
  33. tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/base.py +252 -0
  34. tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/dom.py +43 -0
  35. tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/etree.py +131 -0
  36. tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/etree_lxml.py +215 -0
  37. tensorbored/_vendor/bleach/_vendor/html5lib/treewalkers/genshi.py +69 -0
  38. tensorbored/_vendor/bleach/_vendor/parse.py +1078 -0
  39. tensorbored/_vendor/bleach/callbacks.py +32 -0
  40. tensorbored/_vendor/bleach/html5lib_shim.py +757 -0
  41. tensorbored/_vendor/bleach/linkifier.py +633 -0
  42. tensorbored/_vendor/bleach/parse_shim.py +1 -0
  43. tensorbored/_vendor/bleach/sanitizer.py +638 -0
  44. tensorbored/_vendor/bleach/six_shim.py +19 -0
  45. tensorbored/_vendor/webencodings/__init__.py +342 -0
  46. tensorbored/_vendor/webencodings/labels.py +231 -0
  47. tensorbored/_vendor/webencodings/mklabels.py +59 -0
  48. tensorbored/_vendor/webencodings/x_user_defined.py +325 -0
  49. tensorbored/assets.py +36 -0
  50. tensorbored/auth.py +102 -0
  51. tensorbored/backend/__init__.py +0 -0
  52. tensorbored/backend/application.py +604 -0
  53. tensorbored/backend/auth_context_middleware.py +38 -0
  54. tensorbored/backend/client_feature_flags.py +113 -0
  55. tensorbored/backend/empty_path_redirect.py +46 -0
  56. tensorbored/backend/event_processing/__init__.py +0 -0
  57. tensorbored/backend/event_processing/data_ingester.py +276 -0
  58. tensorbored/backend/event_processing/data_provider.py +535 -0
  59. tensorbored/backend/event_processing/directory_loader.py +142 -0
  60. tensorbored/backend/event_processing/directory_watcher.py +272 -0
  61. tensorbored/backend/event_processing/event_accumulator.py +950 -0
  62. tensorbored/backend/event_processing/event_file_inspector.py +463 -0
  63. tensorbored/backend/event_processing/event_file_loader.py +292 -0
  64. tensorbored/backend/event_processing/event_multiplexer.py +521 -0
  65. tensorbored/backend/event_processing/event_util.py +68 -0
  66. tensorbored/backend/event_processing/io_wrapper.py +223 -0
  67. tensorbored/backend/event_processing/plugin_asset_util.py +104 -0
  68. tensorbored/backend/event_processing/plugin_event_accumulator.py +721 -0
  69. tensorbored/backend/event_processing/plugin_event_multiplexer.py +522 -0
  70. tensorbored/backend/event_processing/reservoir.py +266 -0
  71. tensorbored/backend/event_processing/tag_types.py +29 -0
  72. tensorbored/backend/experiment_id.py +71 -0
  73. tensorbored/backend/experimental_plugin.py +51 -0
  74. tensorbored/backend/http_util.py +263 -0
  75. tensorbored/backend/json_util.py +70 -0
  76. tensorbored/backend/path_prefix.py +67 -0
  77. tensorbored/backend/process_graph.py +74 -0
  78. tensorbored/backend/security_validator.py +202 -0
  79. tensorbored/compat/__init__.py +69 -0
  80. tensorbored/compat/proto/__init__.py +0 -0
  81. tensorbored/compat/proto/allocation_description_pb2.py +35 -0
  82. tensorbored/compat/proto/api_def_pb2.py +82 -0
  83. tensorbored/compat/proto/attr_value_pb2.py +80 -0
  84. tensorbored/compat/proto/cluster_pb2.py +58 -0
  85. tensorbored/compat/proto/config_pb2.py +271 -0
  86. tensorbored/compat/proto/coordination_config_pb2.py +45 -0
  87. tensorbored/compat/proto/cost_graph_pb2.py +87 -0
  88. tensorbored/compat/proto/cpp_shape_inference_pb2.py +70 -0
  89. tensorbored/compat/proto/debug_pb2.py +65 -0
  90. tensorbored/compat/proto/event_pb2.py +149 -0
  91. tensorbored/compat/proto/full_type_pb2.py +74 -0
  92. tensorbored/compat/proto/function_pb2.py +157 -0
  93. tensorbored/compat/proto/graph_debug_info_pb2.py +111 -0
  94. tensorbored/compat/proto/graph_pb2.py +41 -0
  95. tensorbored/compat/proto/histogram_pb2.py +39 -0
  96. tensorbored/compat/proto/meta_graph_pb2.py +254 -0
  97. tensorbored/compat/proto/node_def_pb2.py +61 -0
  98. tensorbored/compat/proto/op_def_pb2.py +81 -0
  99. tensorbored/compat/proto/resource_handle_pb2.py +48 -0
  100. tensorbored/compat/proto/rewriter_config_pb2.py +93 -0
  101. tensorbored/compat/proto/rpc_options_pb2.py +35 -0
  102. tensorbored/compat/proto/saved_object_graph_pb2.py +193 -0
  103. tensorbored/compat/proto/saver_pb2.py +38 -0
  104. tensorbored/compat/proto/step_stats_pb2.py +116 -0
  105. tensorbored/compat/proto/struct_pb2.py +144 -0
  106. tensorbored/compat/proto/summary_pb2.py +111 -0
  107. tensorbored/compat/proto/tensor_description_pb2.py +38 -0
  108. tensorbored/compat/proto/tensor_pb2.py +68 -0
  109. tensorbored/compat/proto/tensor_shape_pb2.py +46 -0
  110. tensorbored/compat/proto/tfprof_log_pb2.py +307 -0
  111. tensorbored/compat/proto/trackable_object_graph_pb2.py +90 -0
  112. tensorbored/compat/proto/types_pb2.py +105 -0
  113. tensorbored/compat/proto/variable_pb2.py +62 -0
  114. tensorbored/compat/proto/verifier_config_pb2.py +38 -0
  115. tensorbored/compat/proto/versions_pb2.py +35 -0
  116. tensorbored/compat/tensorflow_stub/__init__.py +38 -0
  117. tensorbored/compat/tensorflow_stub/app.py +124 -0
  118. tensorbored/compat/tensorflow_stub/compat/__init__.py +131 -0
  119. tensorbored/compat/tensorflow_stub/compat/v1/__init__.py +20 -0
  120. tensorbored/compat/tensorflow_stub/dtypes.py +692 -0
  121. tensorbored/compat/tensorflow_stub/error_codes.py +169 -0
  122. tensorbored/compat/tensorflow_stub/errors.py +507 -0
  123. tensorbored/compat/tensorflow_stub/flags.py +124 -0
  124. tensorbored/compat/tensorflow_stub/io/__init__.py +17 -0
  125. tensorbored/compat/tensorflow_stub/io/gfile.py +1011 -0
  126. tensorbored/compat/tensorflow_stub/pywrap_tensorflow.py +285 -0
  127. tensorbored/compat/tensorflow_stub/tensor_shape.py +1035 -0
  128. tensorbored/context.py +129 -0
  129. tensorbored/data/__init__.py +0 -0
  130. tensorbored/data/grpc_provider.py +365 -0
  131. tensorbored/data/ingester.py +46 -0
  132. tensorbored/data/proto/__init__.py +0 -0
  133. tensorbored/data/proto/data_provider_pb2.py +517 -0
  134. tensorbored/data/proto/data_provider_pb2_grpc.py +374 -0
  135. tensorbored/data/provider.py +1365 -0
  136. tensorbored/data/server_ingester.py +301 -0
  137. tensorbored/data_compat.py +159 -0
  138. tensorbored/dataclass_compat.py +224 -0
  139. tensorbored/default.py +124 -0
  140. tensorbored/errors.py +130 -0
  141. tensorbored/lazy.py +99 -0
  142. tensorbored/main.py +48 -0
  143. tensorbored/main_lib.py +62 -0
  144. tensorbored/manager.py +487 -0
  145. tensorbored/notebook.py +441 -0
  146. tensorbored/plugin_util.py +266 -0
  147. tensorbored/plugins/__init__.py +0 -0
  148. tensorbored/plugins/audio/__init__.py +0 -0
  149. tensorbored/plugins/audio/audio_plugin.py +229 -0
  150. tensorbored/plugins/audio/metadata.py +69 -0
  151. tensorbored/plugins/audio/plugin_data_pb2.py +37 -0
  152. tensorbored/plugins/audio/summary.py +230 -0
  153. tensorbored/plugins/audio/summary_v2.py +124 -0
  154. tensorbored/plugins/base_plugin.py +367 -0
  155. tensorbored/plugins/core/__init__.py +0 -0
  156. tensorbored/plugins/core/core_plugin.py +981 -0
  157. tensorbored/plugins/custom_scalar/__init__.py +0 -0
  158. tensorbored/plugins/custom_scalar/custom_scalars_plugin.py +320 -0
  159. tensorbored/plugins/custom_scalar/layout_pb2.py +85 -0
  160. tensorbored/plugins/custom_scalar/metadata.py +35 -0
  161. tensorbored/plugins/custom_scalar/summary.py +79 -0
  162. tensorbored/plugins/debugger_v2/__init__.py +0 -0
  163. tensorbored/plugins/debugger_v2/debug_data_multiplexer.py +631 -0
  164. tensorbored/plugins/debugger_v2/debug_data_provider.py +634 -0
  165. tensorbored/plugins/debugger_v2/debugger_v2_plugin.py +504 -0
  166. tensorbored/plugins/distribution/__init__.py +0 -0
  167. tensorbored/plugins/distribution/compressor.py +158 -0
  168. tensorbored/plugins/distribution/distributions_plugin.py +116 -0
  169. tensorbored/plugins/distribution/metadata.py +19 -0
  170. tensorbored/plugins/graph/__init__.py +0 -0
  171. tensorbored/plugins/graph/graph_util.py +129 -0
  172. tensorbored/plugins/graph/graphs_plugin.py +336 -0
  173. tensorbored/plugins/graph/keras_util.py +328 -0
  174. tensorbored/plugins/graph/metadata.py +42 -0
  175. tensorbored/plugins/histogram/__init__.py +0 -0
  176. tensorbored/plugins/histogram/histograms_plugin.py +144 -0
  177. tensorbored/plugins/histogram/metadata.py +63 -0
  178. tensorbored/plugins/histogram/plugin_data_pb2.py +34 -0
  179. tensorbored/plugins/histogram/summary.py +234 -0
  180. tensorbored/plugins/histogram/summary_v2.py +292 -0
  181. tensorbored/plugins/hparams/__init__.py +14 -0
  182. tensorbored/plugins/hparams/_keras.py +93 -0
  183. tensorbored/plugins/hparams/api.py +130 -0
  184. tensorbored/plugins/hparams/api_pb2.py +208 -0
  185. tensorbored/plugins/hparams/backend_context.py +606 -0
  186. tensorbored/plugins/hparams/download_data.py +158 -0
  187. tensorbored/plugins/hparams/error.py +26 -0
  188. tensorbored/plugins/hparams/get_experiment.py +71 -0
  189. tensorbored/plugins/hparams/hparams_plugin.py +206 -0
  190. tensorbored/plugins/hparams/hparams_util_pb2.py +69 -0
  191. tensorbored/plugins/hparams/json_format_compat.py +38 -0
  192. tensorbored/plugins/hparams/list_metric_evals.py +57 -0
  193. tensorbored/plugins/hparams/list_session_groups.py +1040 -0
  194. tensorbored/plugins/hparams/metadata.py +125 -0
  195. tensorbored/plugins/hparams/metrics.py +41 -0
  196. tensorbored/plugins/hparams/plugin_data_pb2.py +69 -0
  197. tensorbored/plugins/hparams/summary.py +205 -0
  198. tensorbored/plugins/hparams/summary_v2.py +597 -0
  199. tensorbored/plugins/image/__init__.py +0 -0
  200. tensorbored/plugins/image/images_plugin.py +232 -0
  201. tensorbored/plugins/image/metadata.py +65 -0
  202. tensorbored/plugins/image/plugin_data_pb2.py +34 -0
  203. tensorbored/plugins/image/summary.py +159 -0
  204. tensorbored/plugins/image/summary_v2.py +130 -0
  205. tensorbored/plugins/mesh/__init__.py +14 -0
  206. tensorbored/plugins/mesh/mesh_plugin.py +292 -0
  207. tensorbored/plugins/mesh/metadata.py +152 -0
  208. tensorbored/plugins/mesh/plugin_data_pb2.py +37 -0
  209. tensorbored/plugins/mesh/summary.py +251 -0
  210. tensorbored/plugins/mesh/summary_v2.py +214 -0
  211. tensorbored/plugins/metrics/__init__.py +0 -0
  212. tensorbored/plugins/metrics/metadata.py +17 -0
  213. tensorbored/plugins/metrics/metrics_plugin.py +623 -0
  214. tensorbored/plugins/pr_curve/__init__.py +0 -0
  215. tensorbored/plugins/pr_curve/metadata.py +75 -0
  216. tensorbored/plugins/pr_curve/plugin_data_pb2.py +34 -0
  217. tensorbored/plugins/pr_curve/pr_curves_plugin.py +241 -0
  218. tensorbored/plugins/pr_curve/summary.py +574 -0
  219. tensorbored/plugins/profile_redirect/__init__.py +0 -0
  220. tensorbored/plugins/profile_redirect/profile_redirect_plugin.py +49 -0
  221. tensorbored/plugins/projector/__init__.py +67 -0
  222. tensorbored/plugins/projector/metadata.py +26 -0
  223. tensorbored/plugins/projector/projector_config_pb2.py +54 -0
  224. tensorbored/plugins/projector/projector_plugin.py +795 -0
  225. tensorbored/plugins/projector/tf_projector_plugin/index.js +32 -0
  226. tensorbored/plugins/projector/tf_projector_plugin/projector_binary.html +524 -0
  227. tensorbored/plugins/projector/tf_projector_plugin/projector_binary.js +15536 -0
  228. tensorbored/plugins/scalar/__init__.py +0 -0
  229. tensorbored/plugins/scalar/metadata.py +60 -0
  230. tensorbored/plugins/scalar/plugin_data_pb2.py +34 -0
  231. tensorbored/plugins/scalar/scalars_plugin.py +181 -0
  232. tensorbored/plugins/scalar/summary.py +109 -0
  233. tensorbored/plugins/scalar/summary_v2.py +124 -0
  234. tensorbored/plugins/text/__init__.py +0 -0
  235. tensorbored/plugins/text/metadata.py +62 -0
  236. tensorbored/plugins/text/plugin_data_pb2.py +34 -0
  237. tensorbored/plugins/text/summary.py +114 -0
  238. tensorbored/plugins/text/summary_v2.py +124 -0
  239. tensorbored/plugins/text/text_plugin.py +288 -0
  240. tensorbored/plugins/wit_redirect/__init__.py +0 -0
  241. tensorbored/plugins/wit_redirect/wit_redirect_plugin.py +49 -0
  242. tensorbored/program.py +910 -0
  243. tensorbored/summary/__init__.py +35 -0
  244. tensorbored/summary/_output.py +124 -0
  245. tensorbored/summary/_tf/__init__.py +14 -0
  246. tensorbored/summary/_tf/summary/__init__.py +178 -0
  247. tensorbored/summary/_writer.py +105 -0
  248. tensorbored/summary/v1.py +51 -0
  249. tensorbored/summary/v2.py +25 -0
  250. tensorbored/summary/writer/__init__.py +13 -0
  251. tensorbored/summary/writer/event_file_writer.py +291 -0
  252. tensorbored/summary/writer/record_writer.py +50 -0
  253. tensorbored/util/__init__.py +0 -0
  254. tensorbored/util/encoder.py +116 -0
  255. tensorbored/util/grpc_util.py +311 -0
  256. tensorbored/util/img_mime_type_detector.py +40 -0
  257. tensorbored/util/io_util.py +20 -0
  258. tensorbored/util/lazy_tensor_creator.py +110 -0
  259. tensorbored/util/op_evaluator.py +104 -0
  260. tensorbored/util/platform_util.py +20 -0
  261. tensorbored/util/tb_logging.py +24 -0
  262. tensorbored/util/tensor_util.py +617 -0
  263. tensorbored/util/timing.py +122 -0
  264. tensorbored/version.py +21 -0
  265. tensorbored/webfiles.zip +0 -0
  266. tensorbored-2.21.0rc1769983804.dist-info/METADATA +49 -0
  267. tensorbored-2.21.0rc1769983804.dist-info/RECORD +271 -0
  268. tensorbored-2.21.0rc1769983804.dist-info/WHEEL +5 -0
  269. tensorbored-2.21.0rc1769983804.dist-info/entry_points.txt +6 -0
  270. tensorbored-2.21.0rc1769983804.dist-info/licenses/LICENSE +739 -0
  271. tensorbored-2.21.0rc1769983804.dist-info/top_level.txt +1 -0
@@ -0,0 +1,367 @@
1
+ # Copyright 2016 The TensorFlow Authors. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """TensorBoard Plugin abstract base class.
16
+
17
+ Every plugin in TensorBoard must extend and implement the abstract
18
+ methods of this base class.
19
+ """
20
+
21
+ from abc import ABCMeta
22
+ from abc import abstractmethod
23
+
24
+
25
+ class TBPlugin(metaclass=ABCMeta):
26
+ """TensorBoard plugin interface.
27
+
28
+ Every plugin must extend from this class.
29
+
30
+ Subclasses should have a trivial constructor that takes a TBContext
31
+ argument. Any operation that might throw an exception should either be
32
+ done lazily or made safe with a TBLoader subclass, so the plugin won't
33
+ negatively impact the rest of TensorBoard.
34
+
35
+ Fields:
36
+ plugin_name: The plugin_name will also be a prefix in the http
37
+ handlers, e.g. `data/plugins/$PLUGIN_NAME/$HANDLER` The plugin
38
+ name must be unique for each registered plugin, or a ValueError
39
+ will be thrown when the application is constructed. The plugin
40
+ name must only contain characters among [A-Za-z0-9_.-], and must
41
+ be nonempty, or a ValueError will similarly be thrown.
42
+ """
43
+
44
+ plugin_name = None
45
+
46
+ def __init__(self, context):
47
+ """Initializes this plugin.
48
+
49
+ The default implementation does nothing. Subclasses are encouraged
50
+ to override this and save any necessary fields from the `context`.
51
+
52
+ Args:
53
+ context: A `base_plugin.TBContext` object.
54
+ """
55
+ pass
56
+
57
+ @abstractmethod
58
+ def get_plugin_apps(self):
59
+ """Returns a set of WSGI applications that the plugin implements.
60
+
61
+ Each application gets registered with the tensorboard app and is served
62
+ under a prefix path that includes the name of the plugin.
63
+
64
+ Returns:
65
+ A dict mapping route paths to WSGI applications. Each route path
66
+ should include a leading slash.
67
+ """
68
+ raise NotImplementedError()
69
+
70
+ @abstractmethod
71
+ def is_active(self):
72
+ """Determines whether this plugin is active.
73
+
74
+ A plugin may not be active for instance if it lacks relevant data. If a
75
+ plugin is inactive, the frontend may avoid issuing requests to its routes.
76
+
77
+ Returns:
78
+ A boolean value. Whether this plugin is active.
79
+ """
80
+ raise NotImplementedError()
81
+
82
+ def frontend_metadata(self):
83
+ """Defines how the plugin will be displayed on the frontend.
84
+
85
+ The base implementation returns a default value. Subclasses
86
+ should override this and specify either an `es_module_path` or
87
+ (for legacy plugins) an `element_name`, and are encouraged to
88
+ set any other relevant attributes.
89
+ """
90
+ return FrontendMetadata()
91
+
92
+ def data_plugin_names(self):
93
+ """Experimental. Lists plugins whose summary data this plugin reads.
94
+
95
+ Returns:
96
+ A collection of strings representing plugin names (as read
97
+ from `SummaryMetadata.plugin_data.plugin_name`) from which
98
+ this plugin may read data. Defaults to `(self.plugin_name,)`.
99
+ """
100
+ return (self.plugin_name,)
101
+
102
+
103
+ class FrontendMetadata:
104
+ """Metadata required to render a plugin on the frontend.
105
+
106
+ Each argument to the constructor is publicly accessible under a
107
+ field of the same name. See constructor docs for further details.
108
+ """
109
+
110
+ def __init__(
111
+ self,
112
+ *,
113
+ disable_reload=None,
114
+ element_name=None,
115
+ es_module_path=None,
116
+ remove_dom=None,
117
+ tab_name=None,
118
+ is_ng_component=None,
119
+ ):
120
+ """Creates a `FrontendMetadata` value.
121
+
122
+ The argument list is sorted and may be extended in the future;
123
+ therefore, callers must pass only named arguments to this
124
+ constructor.
125
+
126
+ Args:
127
+ disable_reload: Whether to disable the reload button and
128
+ auto-reload timer. A `bool`; defaults to `False`.
129
+ element_name: For legacy plugins, name of the custom element
130
+ defining the plugin frontend: e.g., `"tf-scalar-dashboard"`.
131
+ A `str` or `None` (for iframed plugins). Mutually exclusive
132
+ with `es_module_path`.
133
+ es_module_path: ES module to use as an entry point to this plugin.
134
+ A `str` that is a key in the result of `get_plugin_apps()`, or
135
+ `None` for legacy plugins bundled with TensorBoard as part of
136
+ `webfiles.zip`. Mutually exclusive with legacy `element_name`
137
+ remove_dom: Whether to remove the plugin DOM when switching to a
138
+ different plugin, to trigger the Polymer 'detached' event.
139
+ A `bool`; defaults to `False`.
140
+ tab_name: Name to show in the menu item for this dashboard within
141
+ the navigation bar. May differ from the plugin name: for
142
+ instance, the tab name should not use underscores to separate
143
+ words. Should be a `str` or `None` (the default; indicates to
144
+ use the plugin name as the tab name).
145
+ is_ng_component: Set to `True` only for built-in Angular plugins.
146
+ In this case, the `plugin_name` property of the Plugin, which is
147
+ mapped to the `id` property in JavaScript's `UiPluginMetadata` type,
148
+ is used to select the Angular component. A `True` value is mutually
149
+ exclusive with `element_name` and `es_module_path`.
150
+ """
151
+ self._disable_reload = (
152
+ False if disable_reload is None else disable_reload
153
+ )
154
+ self._element_name = element_name
155
+ self._es_module_path = es_module_path
156
+ self._remove_dom = False if remove_dom is None else remove_dom
157
+ self._tab_name = tab_name
158
+ self._is_ng_component = (
159
+ False if is_ng_component is None else is_ng_component
160
+ )
161
+
162
+ @property
163
+ def disable_reload(self):
164
+ return self._disable_reload
165
+
166
+ @property
167
+ def element_name(self):
168
+ return self._element_name
169
+
170
+ @property
171
+ def is_ng_component(self):
172
+ return self._is_ng_component
173
+
174
+ @property
175
+ def es_module_path(self):
176
+ return self._es_module_path
177
+
178
+ @property
179
+ def remove_dom(self):
180
+ return self._remove_dom
181
+
182
+ @property
183
+ def tab_name(self):
184
+ return self._tab_name
185
+
186
+ def __eq__(self, other):
187
+ if not isinstance(other, FrontendMetadata):
188
+ return False
189
+ if self._disable_reload != other._disable_reload:
190
+ return False
191
+ if self._disable_reload != other._disable_reload:
192
+ return False
193
+ if self._element_name != other._element_name:
194
+ return False
195
+ if self._es_module_path != other._es_module_path:
196
+ return False
197
+ if self._remove_dom != other._remove_dom:
198
+ return False
199
+ if self._tab_name != other._tab_name:
200
+ return False
201
+ return True
202
+
203
+ def __hash__(self):
204
+ return hash(
205
+ (
206
+ self._disable_reload,
207
+ self._element_name,
208
+ self._es_module_path,
209
+ self._remove_dom,
210
+ self._tab_name,
211
+ self._is_ng_component,
212
+ )
213
+ )
214
+
215
+ def __repr__(self):
216
+ return "FrontendMetadata(%s)" % ", ".join(
217
+ (
218
+ "disable_reload=%r" % self._disable_reload,
219
+ "element_name=%r" % self._element_name,
220
+ "es_module_path=%r" % self._es_module_path,
221
+ "remove_dom=%r" % self._remove_dom,
222
+ "tab_name=%r" % self._tab_name,
223
+ "is_ng_component=%r" % self._is_ng_component,
224
+ )
225
+ )
226
+
227
+
228
+ class TBContext:
229
+ """Magic container of information passed from TensorBoard core to plugins.
230
+
231
+ A TBContext instance is passed to the constructor of a TBPlugin class. Plugins
232
+ are strongly encouraged to assume that any of these fields can be None. In
233
+ cases when a field is considered mandatory by a plugin, it can either crash
234
+ with ValueError, or silently choose to disable itself by returning False from
235
+ its is_active method.
236
+
237
+ All fields in this object are thread safe.
238
+ """
239
+
240
+ def __init__(
241
+ self,
242
+ *,
243
+ assets_zip_provider=None,
244
+ data_provider=None,
245
+ flags=None,
246
+ logdir=None,
247
+ multiplexer=None,
248
+ plugin_name_to_instance=None,
249
+ sampling_hints=None,
250
+ window_title=None,
251
+ ):
252
+ """Instantiates magic container.
253
+
254
+ The argument list is sorted and may be extended in the future; therefore,
255
+ callers must pass only named arguments to this constructor.
256
+
257
+ Args:
258
+ assets_zip_provider: A function that returns a newly opened file handle
259
+ for a zip file containing all static assets. The file names inside the
260
+ zip file are considered absolute paths on the web server. The file
261
+ handle this function returns must be closed. It is assumed that you
262
+ will pass this file handle to zipfile.ZipFile. This zip file should
263
+ also have been created by the tensorboard_zip_file build rule.
264
+ data_provider: Instance of `tensorboard.data.provider.DataProvider`. May
265
+ be `None` if `flags.generic_data` is set to `"false"`.
266
+ flags: An object of the runtime flags provided to TensorBoard to their
267
+ values.
268
+ logdir: The string logging directory TensorBoard was started with.
269
+ multiplexer: An EventMultiplexer with underlying TB data. Plugins should
270
+ copy this data over to the database when the db fields are set.
271
+ plugin_name_to_instance: A mapping between plugin name to instance.
272
+ Plugins may use this property to access other plugins. The context
273
+ object is passed to plugins during their construction, so a given
274
+ plugin may be absent from this mapping until it is registered. Plugin
275
+ logic should handle cases in which a plugin is absent from this
276
+ mapping, lest a KeyError is raised.
277
+ sampling_hints: Map from plugin name to `int` or `NoneType`, where
278
+ the value represents the user-specified downsampling limit as
279
+ given to the `--samples_per_plugin` flag, or `None` if none was
280
+ explicitly given for this plugin.
281
+ window_title: A string specifying the window title.
282
+ """
283
+ self.assets_zip_provider = assets_zip_provider
284
+ self.data_provider = data_provider
285
+ self.flags = flags
286
+ self.logdir = logdir
287
+ self.multiplexer = multiplexer
288
+ self.plugin_name_to_instance = plugin_name_to_instance
289
+ self.sampling_hints = sampling_hints
290
+ self.window_title = window_title
291
+
292
+
293
+ class TBLoader:
294
+ """TBPlugin factory base class.
295
+
296
+ Plugins can override this class to customize how a plugin is loaded at
297
+ startup. This might entail adding command-line arguments, checking if
298
+ optional dependencies are installed, and potentially also specializing
299
+ the plugin class at runtime.
300
+
301
+ When plugins use optional dependencies, the loader needs to be
302
+ specified in its own module. That way it's guaranteed to be
303
+ importable, even if the `TBPlugin` itself can't be imported.
304
+
305
+ Subclasses must have trivial constructors.
306
+ """
307
+
308
+ def define_flags(self, parser):
309
+ """Adds plugin-specific CLI flags to parser.
310
+
311
+ The default behavior is to do nothing.
312
+
313
+ When overriding this method, it's recommended that plugins call the
314
+ `parser.add_argument_group(plugin_name)` method for readability. No
315
+ flags should be specified that would cause `parse_args([])` to fail.
316
+
317
+ Args:
318
+ parser: The argument parsing object, which may be mutated.
319
+ """
320
+ pass
321
+
322
+ def fix_flags(self, flags):
323
+ """Allows flag values to be corrected or validated after parsing.
324
+
325
+ Args:
326
+ flags: The parsed argparse.Namespace object.
327
+
328
+ Raises:
329
+ base_plugin.FlagsError: If a flag is invalid or a required
330
+ flag is not passed.
331
+ """
332
+ pass
333
+
334
+ def load(self, context):
335
+ """Loads a TBPlugin instance during the setup phase.
336
+
337
+ Args:
338
+ context: The TBContext instance.
339
+
340
+ Returns:
341
+ A plugin instance or None if it could not be loaded. Loaders that return
342
+ None are skipped.
343
+
344
+ :type context: TBContext
345
+ :rtype: TBPlugin | None
346
+ """
347
+ return None
348
+
349
+
350
+ class BasicLoader(TBLoader):
351
+ """Simple TBLoader that's sufficient for most plugins."""
352
+
353
+ def __init__(self, plugin_class):
354
+ """Creates simple plugin instance maker.
355
+
356
+ :param plugin_class: :class:`TBPlugin`
357
+ """
358
+ self.plugin_class = plugin_class
359
+
360
+ def load(self, context):
361
+ return self.plugin_class(context)
362
+
363
+
364
+ class FlagsError(ValueError):
365
+ """Raised when a command line flag is not specified or is invalid."""
366
+
367
+ pass
File without changes